namespace "urn:opendaylight:netvirt:fibmanager";
prefix odl-fib;
+ import yang-ext {prefix ext; revision-date "2013-07-09";}
+
revision "2015-03-30" {
description "FIB Manager module";
}
}
}
+ augment "/odl-fib:fibEntries/odl-fib:vrfTables/odl-fib:vrfEntry" {
+ ext:augment-identifier "subnetRoute";
+ leaf elantag {type uint32;}
+ }
+
container fibEntries {
config true;
list vrfTables{
import org.opendaylight.genius.mdsalutil.MetaDataUtil;
import org.opendaylight.genius.mdsalutil.NwConstants;
import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.SubnetRoute;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.PrefixToInterface;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.VpnInstanceOpData;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.RdToElanOp;
@Override
protected void update(InstanceIdentifier<VrfEntry> identifier, VrfEntry original, VrfEntry update) {
LOG.trace("Update key: " + identifier + ", original=" + original + ", update=" + update );
+ if (original.getAugmentation(SubnetRoute.class) != null && update.getAugmentation(SubnetRoute.class) == null)
+ return;
createFibEntries(identifier, update);
}
Collection<VpnToDpnList> vpnToDpnList = vpnInstance.getVpnToDpnList();
Long vpnId = vpnInstance.getVpnId();
String rd = vrfTableKey.getRouteDistinguisher();
- RdToElanOpEntry rdToElanOpEntry = getRdToElanOpEntry(broker, rd,
- vrfEntry.getDestPrefix());
- if (rdToElanOpEntry!=null) {
- if (vpnToDpnList!=null) {
- for (VpnToDpnList curDpn : vpnToDpnList) {
- installSubnetRouteInFib(curDpn.getDpnId(), rdToElanOpEntry, vpnId.longValue(), vrfEntry);
+ SubnetRoute subnetRoute = vrfEntry.getAugmentation(SubnetRoute.class);
+ if (subnetRoute != null) {
+ LOG.trace("SubnetRoute augmented vrfentry found for rd {} prefix {} with elantag {}",
+ rd, vrfEntry.getDestPrefix(), subnetRoute.getElantag());
+ long elanTag = subnetRoute.getElantag();
+ if (vpnToDpnList != null) {
+ for (VpnToDpnList curDpn : vpnToDpnList) {
+ installSubnetRouteInFib(curDpn.getDpnId(),elanTag, rd, vpnId.longValue(), vrfEntry);
}
}
return;
}
}
- private void installSubnetRouteInFib(BigInteger dpnId, RdToElanOpEntry rdToElanOpEntry,
+ private void installSubnetRouteInFib(BigInteger dpnId, long elanTag, String rd,
long vpnId, VrfEntry vrfEntry){
List<InstructionInfo> instructions = new ArrayList<>();
- Long elanTag = rdToElanOpEntry.getElanTag();
instructions.add(new InstructionInfo(InstructionType.write_metadata, new BigInteger[] { (BigInteger.valueOf(elanTag)).shiftLeft(24), MetaDataUtil.METADATA_MASK_SERVICE }));
instructions.add(new InstructionInfo(InstructionType.goto_table, new long[] { NwConstants.L3_SUBNET_ROUTE_TABLE }));
- makeConnectedRoute(dpnId,vpnId,vrfEntry,rdToElanOpEntry.getRd(),
- instructions,NwConstants.ADD_FLOW);
+ makeConnectedRoute(dpnId,vpnId,vrfEntry,rd,instructions,NwConstants.ADD_FLOW);
List<ActionInfo> actionsInfos = new ArrayList<>();
// reinitialize instructions list for LFIB Table
// TODO makeTunnelTableEntry();
}
- private RdToElanOpEntry getRdToElanOpEntry(DataBroker broker, String rd, String subnetIp) {
- InstanceIdentifier<RdToElanOpEntry> id = getRdToElanOpEntryDataPath(rd,subnetIp);
- Optional<RdToElanOpEntry> sn = read(broker, LogicalDatastoreType.OPERATIONAL, id);
- if(sn.isPresent()) {
- return sn.get();
- }
- return null;
- }
-
- private InstanceIdentifier<RdToElanOpEntry> getRdToElanOpEntryDataPath(String rd, String subnetIp) {
- return InstanceIdentifier.builder(RdToElanOp.class).child(RdToElanOpEntry.class,
- new RdToElanOpEntryKey(rd,subnetIp)).build();
- }
private <T extends DataObject> Optional<T> read(DataBroker broker, LogicalDatastoreType datastoreType,
InstanceIdentifier<T> path) {
return;
}
Collection<VpnToDpnList> vpnToDpnList = vpnInstance.getVpnToDpnList();
- RdToElanOpEntry rdToElanOpEntry= getRdToElanOpEntry(broker,vrfTableKey.getRouteDistinguisher(),
- vrfEntry.getDestPrefix());
- if (rdToElanOpEntry != null) {
- if (vpnToDpnList!=null) {
- for(VpnToDpnList curDpn : vpnToDpnList) {
- makeConnectedRoute(curDpn.getDpnId(),vpnInstance.getVpnId(),vrfEntry,vrfTableKey
- .getRouteDistinguisher(), null,NwConstants.DEL_FLOW);
- makeLFibTableEntry(curDpn.getDpnId(),vrfEntry.getLabel(),null,
- vrfEntry.getNextHopAddress(),NwConstants.DEL_FLOW);
- // TODO DeleteTunnelTableEntry();
+ SubnetRoute subnetRoute = vrfEntry.getAugmentation(SubnetRoute.class);
+ if (subnetRoute != null) {
+ if (vpnToDpnList != null) {
+ for (VpnToDpnList curDpn : vpnToDpnList) {
+ makeConnectedRoute(curDpn.getDpnId(), vpnInstance.getVpnId(), vrfEntry, vrfTableKey
+ .getRouteDistinguisher(), null, NwConstants.DEL_FLOW);
+ makeLFibTableEntry(curDpn.getDpnId(), vrfEntry.getLabel(), null,
+ vrfEntry.getNextHopAddress(), NwConstants.DEL_FLOW);
}
}
- //Delete rd-to-elan-op-entry
- InstanceIdentifier<RdToElanOpEntry> id = getRdToElanOpEntryDataPath(vrfTableKey.getRouteDistinguisher(),
+ FibUtil.releaseId(idManager, FibConstants.VPN_IDPOOL_NAME,
+ FibUtil.getNextHopLabelKey(rd, vrfEntry.getDestPrefix()));
+ LOG.trace("deleteFibEntries: Released subnetroute label {} for rd {} prefix {}", vrfEntry.getLabel(), rd,
vrfEntry.getDestPrefix());
- MDSALUtil.syncDelete(broker, LogicalDatastoreType.OPERATIONAL,id);
- FibUtil.releaseId(idManager,FibConstants.VPN_IDPOOL_NAME,
- FibUtil.getNextHopLabelKey(rd, vrfEntry.getDestPrefix()));
return;
}
BigInteger localDpnId = deleteLocalFibEntry(vpnInstance.getVpnId(),
Optional<VrfTables> vrfTable = FibUtil.read(broker, LogicalDatastoreType.CONFIGURATION, id);
if (vrfTable.isPresent()) {
for (VrfEntry vrfEntry : vrfTable.get().getVrfEntry()) {
- RdToElanOpEntry rdToElanOpEntry = getRdToElanOpEntry(broker, rd,
- vrfEntry.getDestPrefix());
- if (rdToElanOpEntry!= null) {
- installSubnetRouteInFib(dpnId, rdToElanOpEntry, vpnId, vrfEntry);
- continue;
- }
+ SubnetRoute subnetRoute = vrfEntry.getAugmentation(SubnetRoute.class);
+ if (subnetRoute != null){
+ long elanTag= subnetRoute.getElantag();
+ installSubnetRouteInFib(dpnId, elanTag, rd, vpnId, vrfEntry);
+ continue;
+ }
// Passing null as we don't know the dpn
// to which prefix is attached at this point
createRemoteFibEntry(null, dpnId, vpnId, vrfTable.get().getKey(), vrfEntry);
if (vrfTable.isPresent()) {
for (VrfEntry vrfEntry : vrfTable.get().getVrfEntry()) {
/* Handle subnet routes here */
- RdToElanOpEntry rdToElanOpEntry= getRdToElanOpEntry(broker, rd,
- vrfEntry.getDestPrefix());
- if (rdToElanOpEntry != null) {
+ SubnetRoute subnetRoute = vrfEntry.getAugmentation(SubnetRoute.class);
+ if (subnetRoute != null){
LOG.trace("Cleaning subnetroute {} on dpn {} for vpn {} : cleanUpDpnForVpn", vrfEntry.getDestPrefix(),
dpnId, rd);
makeConnectedRoute(dpnId, vpnId, vrfEntry, rd, null, NwConstants.DEL_FLOW);
makeLFibTableEntry(dpnId, vrfEntry.getLabel(), null,
vrfEntry.getNextHopAddress(),NwConstants.DEL_FLOW);
+ FibUtil.releaseId(idManager, FibConstants.VPN_IDPOOL_NAME,
+ FibUtil.getNextHopLabelKey(rd, vrfEntry.getDestPrefix()));
+ LOG.trace("cleanUpDpnForVpn: Released subnetroute label {} for rd {} prefix {}", vrfEntry.getLabel(), rd,
+ vrfEntry.getDestPrefix());
continue;
}
// Passing null as we don't know the dpn
import org.opendaylight.genius.mdsalutil.*;
import org.opendaylight.genius.mdsalutil.AbstractDataChangeListener;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.SubnetRoute;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.SubnetRouteBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.NeutronRouterDpns;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.NeutronvpnService;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress;
VpnUtil.syncUpdate(broker, LogicalDatastoreType.CONFIGURATION, vrfTableId, vrfTableNew);
}
+ public synchronized void addSubnetRouteFibEntryToDS(String rd, String prefix,
+ String nexthop, int label,long elantag) {
+
+ SubnetRoute route = new SubnetRouteBuilder().setElantag(elantag).build();
+
+ VrfEntry vrfEntry = new VrfEntryBuilder().setDestPrefix(prefix).
+ setNextHopAddress(nexthop).setLabel((long)label).addAugmentation(SubnetRoute.class,route).build();
+ LOG.debug("Created vrfEntry for {} nexthop {} label {} and elantag {}", prefix, nexthop, label, elantag);
+
+ List<VrfEntry> vrfEntryList = new ArrayList<VrfEntry>();
+ vrfEntryList.add(vrfEntry);
+
+ InstanceIdentifierBuilder<VrfTables> idBuilder =
+ InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd));
+ InstanceIdentifier<VrfTables> vrfTableId = idBuilder.build();
+
+ VrfTables vrfTableNew = new VrfTablesBuilder().setRouteDistinguisher(rd).
+ setVrfEntry(vrfEntryList).build();
+
+ VpnUtil.syncUpdate(broker, LogicalDatastoreType.CONFIGURATION, vrfTableId, vrfTableNew);
+ }
+
public synchronized void removeFibEntryFromDS(String rd, String prefix) {
LOG.debug("Removing fib entry with destination prefix {} from vrf table for rd {}", prefix, rd);
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.*;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.port.op.data.PortOpDataEntry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.port.op.data.PortOpDataEntryKey;
Write the subnet route entry to the FIB.
And also advertise the subnet route entry via BGP.
*/
- addSubnetRouteToFib(rd, subnetIp, nhDpnId, vpnName, elanTag);
- advertiseSubnetRouteToBgp(rd, subnetIp, nhDpnId, vpnName, elanTag);
+ int label = getLabel(rd, subnetIp);
+ addSubnetRouteToFib(rd, subnetIp, nhDpnId, vpnName, elanTag, label);
+ advertiseSubnetRouteToBgp(rd, subnetIp, nhDpnId, vpnName, elanTag, label);
subOpBuilder.setRouteAdvState(TaskState.Done);
} catch (Exception ex) {
logger.error("onSubnetAddedToVpn: FIB rules and Advertising nhDpnId " + nhDpnId +
Write the subnet route entry to the FIB.
NOTE: Will not advertise to BGP as NextHopDPN is not available yet.
*/
- addSubnetRouteToFib(rd, subnetIp, null, vpnName, elanTag);
+ int label = getLabel(rd, subnetIp);
+ addSubnetRouteToFib(rd, subnetIp, null, vpnName, elanTag, label);
} catch (Exception ex) {
logger.error("onSubnetAddedToVpn: FIB rules writing for subnet {} with exception {} " +
subnetId.getValue(), ex);
try {
//Withdraw the routes for all the interfaces on this subnet
//Remove subnet route entry from FIB
- withdrawSubnetRoutefromBgp(rd, subnetIp);
deleteSubnetRouteFromFib(rd, subnetIp);
+ withdrawSubnetRoutefromBgp(rd, subnetIp);
} catch (Exception ex) {
logger.error("onSubnetAddedToVpn: Withdrawing routes from BGP for subnet " +
subnetId.getValue() + " failed {}" + ex);
try {
// Write the Subnet Route Entry to FIB
// Advertise BGP Route here and set route_adv_state to DONE
- addSubnetRouteToFib(rd, subnetIp, nhDpnId, vpnName, elanTag);
- advertiseSubnetRouteToBgp(rd, subnetIp, nhDpnId, vpnName, elanTag);
+ int label = 0;
+ VrfEntry vrf = VpnUtil.getVrfEntry(broker, rd, subnetIp);
+ if (vrf != null) {
+ label = (vrf.getLabel()).intValue();
+ } else {
+ label = getLabel(rd, subnetIp);
+ }
+ addSubnetRouteToFib(rd, subnetIp, nhDpnId, vpnName, elanTag, label);
+ advertiseSubnetRouteToBgp(rd, subnetIp, nhDpnId, vpnName, elanTag, label);
subOpBuilder.setRouteAdvState(TaskState.Done);
} catch (Exception ex) {
logger.error("onPortAddedToSubnet: Advertising NextHopDPN "+ nhDpnId +
try {
// Best effort Withdrawal of route from BGP for this subnet
// Advertise the new NexthopIP to BGP for this subnet
- withdrawSubnetRoutefromBgp(rd, subnetIp);
- addSubnetRouteToFib(rd, subnetIp, nhDpnId, vpnName, elanTag);
- advertiseSubnetRouteToBgp(rd, subnetIp, nhDpnId, vpnName, elanTag);
+ //withdrawSubnetRoutefromBgp(rd, subnetIp);
+ int label = 0;
+ VrfEntry vrf = VpnUtil.getVrfEntry(broker, rd, subnetIp);
+ if (vrf != null) {
+ label = (vrf.getLabel()).intValue();
+ } else {
+ label = getLabel(rd, subnetIp);
+ }
+ addSubnetRouteToFib(rd, subnetIp, nhDpnId, vpnName, elanTag, label);
+ advertiseSubnetRouteToBgp(rd, subnetIp, nhDpnId, vpnName, elanTag, label);
subOpBuilder.setRouteAdvState(TaskState.Done);
} catch (Exception ex) {
logger.error("onPortRemovedFromSubnet: Swapping Withdrawing NextHopDPN " + dpnId +
try {
// Write the Subnet Route Entry to FIB
// Advertise BGP Route here and set route_adv_state to DONE
- addSubnetRouteToFib(rd, subnetIp, nhDpnId, vpnName, elanTag);
- advertiseSubnetRouteToBgp(rd, subnetIp, nhDpnId, vpnName, elanTag);
+ int label = 0;
+ VrfEntry vrf = VpnUtil.getVrfEntry(broker, rd, subnetIp);
+ if (vrf != null) {
+ label = (vrf.getLabel()).intValue();
+ } else {
+ label = getLabel(rd, subnetIp);
+ }
+ addSubnetRouteToFib(rd, subnetIp, nhDpnId, vpnName, elanTag, label);
+ advertiseSubnetRouteToBgp(rd, subnetIp, nhDpnId, vpnName, elanTag, label);
subOpBuilder.setRouteAdvState(TaskState.Done);
} catch (Exception ex) {
logger.error("onInterfaceUp: Advertising NextHopDPN " + nhDpnId + " information for subnet " +
logger.debug("onInterfaceDown: Swapping the Designated DPN to " + nhDpnId + " for subnet " + subnetId.getValue());
try {
// Best effort Withdrawal of route from BGP for this subnet
- withdrawSubnetRoutefromBgp(rd, subnetIp);
- addSubnetRouteToFib(rd, subnetIp, nhDpnId, vpnName, elanTag);
- advertiseSubnetRouteToBgp(rd, subnetIp, nhDpnId, vpnName, elanTag);
+ //withdrawSubnetRoutefromBgp(rd, subnetIp);
+ int label = 0;
+ VrfEntry vrf = VpnUtil.getVrfEntry(broker, rd, subnetIp);
+ if (vrf != null) {
+ label = (vrf.getLabel()).intValue();
+ } else {
+ label = getLabel(rd, subnetIp);
+ }
+ addSubnetRouteToFib(rd, subnetIp, nhDpnId, vpnName, elanTag, label);
+ advertiseSubnetRouteToBgp(rd, subnetIp, nhDpnId, vpnName, elanTag, label);
subOpBuilder.setRouteAdvState(TaskState.Done);
} catch (Exception ex) {
logger.error("onInterfaceDown: Swapping Withdrawing NextHopDPN " + dpnId + " information for subnet " +
}
}
- private static void setRdToElanOpEntry(DataBroker broker,
- String rd, String subnetIp, String nextHopIp, String vpnName,
- Long elanTag) {
- RdToElanOpEntryBuilder rdElanBuilder = null;
- RdToElanOpEntry rdElan = null;
-
- try {
- InstanceIdentifier<RdToElanOpEntry> rdIdentifier = InstanceIdentifier.builder(RdToElanOp.class).
- child(RdToElanOpEntry.class, new RdToElanOpEntryKey(rd, subnetIp)).build();
- Optional<RdToElanOpEntry> optionalRd = VpnUtil.read(broker, LogicalDatastoreType.OPERATIONAL, rdIdentifier);
- if (!optionalRd.isPresent()) {
- // Create PortOpDataEntry only if not present
- rdElanBuilder = new RdToElanOpEntryBuilder().setKey(new RdToElanOpEntryKey(rd,subnetIp));
- rdElanBuilder.setRd(rd).setSubnetIp(subnetIp).setNextHopIp(nextHopIp);
- rdElanBuilder.setElanTag(elanTag);
- rdElanBuilder.setVpnName(vpnName);
- rdElan = rdElanBuilder.build();
- } else {
- rdElanBuilder = new RdToElanOpEntryBuilder(optionalRd.get());
- rdElanBuilder.setRd(rd).setSubnetIp(subnetIp).setNextHopIp(nextHopIp);
- rdElanBuilder.setElanTag(elanTag);
- rdElanBuilder.setVpnName(vpnName);
- rdElan = rdElanBuilder.build();
- }
- MDSALUtil.syncWrite(broker, LogicalDatastoreType.OPERATIONAL, rdIdentifier, rdElan);
- logger.info("Creating RdToElan entry Rd {} SubnetIp {} NextHopIp {} Elan {} " ,rd, subnetIp, nextHopIp, elanTag);
- } catch (Exception ex) {
- logger.error("Exception when creating RdToElan entry {}" + ex);
- } finally {
- }
- }
-
private void addSubnetRouteToFib(String rd, String subnetIp, BigInteger nhDpnId, String vpnName,
- Long elanTag) {
+ Long elanTag, int label) {
Preconditions.checkNotNull(rd, "RouteDistinguisher cannot be null or empty!");
Preconditions.checkNotNull(subnetIp, "SubnetRouteIp cannot be null or empty!");
Preconditions.checkNotNull(vpnName, "vpnName cannot be null or empty!");
if (nhDpnId != null) {
nexthopIp = InterfaceUtils.getEndpointIpAddressForDPN(broker, nhDpnId);
}
+ vpnInterfaceManager.addSubnetRouteFibEntryToDS(rd, subnetIp, nexthopIp, label, elanTag);
+ }
+
+ private int getLabel(String rd, String subnetIp) {
int label = VpnUtil.getUniqueId(idManager, VpnConstants.VPN_IDPOOL_NAME,
VpnUtil.getNextHopLabelKey(rd, subnetIp));
- setRdToElanOpEntry(broker, rd, subnetIp, nexthopIp, vpnName, elanTag);
- vpnInterfaceManager.addFibEntryToDS(rd, subnetIp, nexthopIp, label);
+ logger.trace("Allocated subnetroute label {} for rd {} prefix {}", label, rd, subnetIp);
+ return label;
}
private void deleteSubnetRouteFromFib(String rd, String subnetIp) {
}
private void advertiseSubnetRouteToBgp(String rd, String subnetIp, BigInteger nhDpnId, String vpnName,
- Long elanTag) throws Exception {
+ Long elanTag, int label) throws Exception {
Preconditions.checkNotNull(rd, "RouteDistinguisher cannot be null or empty!");
Preconditions.checkNotNull(subnetIp, "SubnetRouteIp cannot be null or empty!");
Preconditions.checkNotNull(elanTag, "elanTag cannot be null or empty!");
logger.error("createSubnetRouteInVpn: Unable to obtain endpointIp address for DPNId " + nhDpnId);
throw new Exception("Unable to obtain endpointIp address for DPNId " + nhDpnId);
}
- int label = VpnUtil.getUniqueId(idManager, VpnConstants.VPN_IDPOOL_NAME,
- VpnUtil.getNextHopLabelKey(rd, subnetIp));
- setRdToElanOpEntry(broker, rd, subnetIp, nexthopIp, vpnName, elanTag);
try {
bgpManager.advertisePrefix(rd, subnetIp, nexthopIp, label);
} catch (Exception e) {
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntryKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.*;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.adjacency.list.Adjacency;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.Adjacencies;
return id;
}
+ static VrfEntry getVrfEntry(DataBroker broker, String rd, String ipPrefix) {
+ InstanceIdentifier.InstanceIdentifierBuilder<VrfTables> idBuilder =
+ InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd));
+ InstanceIdentifier<VrfTables> id = idBuilder.build();
+
+ Optional<VrfTables> vrfTable = read(broker, LogicalDatastoreType.CONFIGURATION, id);
+ if (vrfTable.isPresent()) {
+ InstanceIdentifier<VrfEntry> vrfEntryId =
+ InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd)).
+ child(VrfEntry.class, new VrfEntryKey(ipPrefix)).build();
+ Optional<VrfEntry> vrfEntry = read(broker, LogicalDatastoreType.CONFIGURATION, vrfEntryId);
+ if (vrfEntry.isPresent()) {
+ return ((VrfEntry)vrfEntry.get());
+ }
+ }
+ return null;
+ }
+
static InstanceIdentifier<VpnInterfaces> getVpnInterfacesIdentifier() {
return InstanceIdentifier.builder(VpnInterfaces.class).build();
}
.setSubnetIp(subnetIp).setVpnName(interfaceName).setElanTag(elanTag).build();
subnetOp = new SubnetOpDataEntryBuilder().setElanTag(elanTag).setNhDpnId(dpId).setSubnetCidr(subnetIp)
.setSubnetId(subnetId).setKey(new SubnetOpDataEntryKey(subnetId)).setVpnName(interfaceName)
- .setVrfId(routeDistinguisher).setSubnetToDpn(subToDpn).setRouteAdvState(TaskState.Done).build();
+ .setVrfId(routeDistinguisher).setSubnetToDpn(subToDpn).setRouteAdvState(TaskState.Pending).build();
vpnInstance = new VpnInstanceBuilder().setVpnId(elanTag).setVpnInstanceName(interfaceName).setVrfId
(interfaceName).setKey(new VpnInstanceKey(interfaceName)).build();
subnetmap = new SubnetmapBuilder().setSubnetIp(subnetIp).setId(subnetId).setNetworkId(portId).setKey(new
verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, dpnOpId, subnetToDpn, true);
verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, portOpIdentifier, portOp, true);
- verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, subOpIdentifier, subnetOp, true);
}