diff options
Diffstat (limited to 'v3po/impl/src/main/java/io/fd/honeycomb/v3po/impl/VppPollOperDataImpl.java')
-rw-r--r-- | v3po/impl/src/main/java/io/fd/honeycomb/v3po/impl/VppPollOperDataImpl.java | 77 |
1 files changed, 39 insertions, 38 deletions
diff --git a/v3po/impl/src/main/java/io/fd/honeycomb/v3po/impl/VppPollOperDataImpl.java b/v3po/impl/src/main/java/io/fd/honeycomb/v3po/impl/VppPollOperDataImpl.java index 71d4bea4b..6e2ba6e52 100644 --- a/v3po/impl/src/main/java/io/fd/honeycomb/v3po/impl/VppPollOperDataImpl.java +++ b/v3po/impl/src/main/java/io/fd/honeycomb/v3po/impl/VppPollOperDataImpl.java @@ -16,11 +16,10 @@ package io.fd.honeycomb.v3po.impl; -import java.util.HashMap; -import java.util.concurrent.Future; - import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.Futures; +import java.util.HashMap; +import java.util.concurrent.Future; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; @@ -32,6 +31,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; +import org.openvpp.vppjapi.vppApi; import org.openvpp.vppjapi.vppBridgeDomainDetails; import org.openvpp.vppjapi.vppBridgeDomainInterfaceDetails; import org.openvpp.vppjapi.vppL2Fib; @@ -42,14 +42,17 @@ import org.slf4j.LoggerFactory; public class VppPollOperDataImpl implements V3poService { private static final Logger LOG = LoggerFactory.getLogger(VppPollOperDataImpl.class); private vppVersion version; - private DataBroker db; + private final DataBroker db; private int[] bdIds; - private HashMap<Integer, vppL2Fib[]> l2fibByBdId = new HashMap<Integer, vppL2Fib[]>(); + private final HashMap<Integer, vppL2Fib[]> l2fibByBdId = new HashMap<Integer, vppL2Fib[]>(); + private final vppApi api; /** * TODO-ADD-JAVADOC. + * @param api */ - public VppPollOperDataImpl(DataBroker dataBroker) { + public VppPollOperDataImpl(final vppApi api, final DataBroker dataBroker) { + this.api = api; db = dataBroker; } @@ -66,79 +69,77 @@ public class VppPollOperDataImpl implements V3poService { * interfaces names */ public String updateOperational() { - V3poApiRequest api = new V3poApiRequest(this); + V3poApiRequest req = new V3poApiRequest(api, this); version = api.getVppVersion(); - + bdIds = api.bridgeDomainDump(-1); - + // TODO: we don't need to cache BDs now that we got rid of callbacks l2fibByBdId.clear(); if (bdIds != null) { - for (int idx = 0; idx < bdIds.length; idx++) { - l2fibByBdId.put(bdIds[idx], api.l2FibTableDump(bdIds[idx])); + for (int bdId : bdIds) { + l2fibByBdId.put(bdId, api.l2FibTableDump(bdId)); } } - api.swInterfaceDumpAll(); - + req.swInterfaceDumpAll(); + // build vpp-state VppStateCustomBuilder stateBuilder = new VppStateCustomBuilder(); - + // bridge domains - for (int i = 0; i < bdIds.length; i++) { - vppBridgeDomainDetails bd = api.getBridgeDomainDetails(bdIds[i]); - VppStateBridgeDomainBuilder bdBuilder = + for (int bdId : bdIds) { + vppBridgeDomainDetails bd = api.getBridgeDomainDetails(bdId); + VppStateBridgeDomainBuilder bdBuilder = new VppStateBridgeDomainBuilder( - bd.name, bd.flood, bd.uuFlood, + bd.name, bd.flood, bd.uuFlood, bd.arpTerm, bd.forward, bd.learn); - - for (int ifIdx = 0; ifIdx < bd.interfaces.length; ifIdx++) { - vppBridgeDomainInterfaceDetails bdIf = bd.interfaces[ifIdx]; - bdBuilder.addInterface(bdIf.interfaceName, - bd.bviInterfaceName == bdIf.interfaceName, + + for (vppBridgeDomainInterfaceDetails bdIf : bd.interfaces) { + bdBuilder.addInterface(bdIf.interfaceName, + bd.bviInterfaceName == bdIf.interfaceName, bdIf.splitHorizonGroup); } - - vppL2Fib[] bdFibs = l2fibByBdId.get(bdIds[i]); - for (int fibIdx = 0; fibIdx < bdFibs.length; fibIdx++) { - vppL2Fib fib = bdFibs[fibIdx]; + vppL2Fib[] bdFibs = l2fibByBdId.get(bdId); + + for (vppL2Fib fib : bdFibs) { bdBuilder.addL2Fib(fib.filter, fib.bridgedVirtualInterface, fib.outgoingInterface, fib.physAddress, fib.staticConfig); } - + stateBuilder.addBridgeDomain(bdBuilder.build()); } - + stateBuilder.setVersion(version); - + // write to oper writeVppState(getVppStateIid(), stateBuilder.build()); - - return api.ifNames; + + return req.ifNames; } - + @Override public Future<RpcResult<VppPollOperDataOutput>> vppPollOperData() { String ifNames = updateOperational(); - + VppPollOperDataOutput output = new VppPollOperDataOutputBuilder() .setStatus(new Long(1)).build(); return RpcResultBuilder.success(output).buildFuture(); } - + private InstanceIdentifier<VppState> getVppStateIid() { return (InstanceIdentifier.create(VppState.class)); } - - private void writeVppState(InstanceIdentifier<VppState> iid, VppState vppState) { + + private void writeVppState(final InstanceIdentifier<VppState> iid, final VppState vppState) { WriteTransaction transaction = db.newWriteOnlyTransaction(); //LOG.info("VPPOPER-INFO: Writing vpp-state to oper DataStore."); transaction.put(LogicalDatastoreType.OPERATIONAL, iid, vppState); - + CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit(); Futures.addCallback(future, new LoggingFuturesCallBack<Void>( "VPPOPER-WARNING: Failed to write vpp-state to oper datastore", LOG)); |