this.mdsalManager = mdsalManager;
}
-// @PostConstruct
-// public void init() {
-// LOG.info("{} init", getClass().getSimpleName());
-// }
-//
@Override
public void close() throws Exception {
LOG.info("{} closed", getClass().getSimpleName());
}
}
- void deleteLocalAdjacency(final BigInteger dpId, final long vpnId, final String ipAddress,
+ protected void deleteLocalAdjacency(final BigInteger dpId, final long vpnId, final String ipAddress,
final String ipPrefixAddress) {
LOG.trace("deleteLocalAdjacency called with dpid {}, vpnId{}, ipAddress {}", dpId, vpnId, ipAddress);
try {
FibUtil.getVpnNameFromId(dataBroker, vpnId), usedRds, vrfEntry.getDestPrefix());
if (vpnExtraRoutes.isEmpty()) {
Prefixes prefixInfo = FibUtil.getPrefixToInterface(dataBroker, vpnId, vrfEntry.getDestPrefix());
- // We donot want to provide an adjacencyList for an extra-route-prefix.
+ // We don't want to provide an adjacencyList for an extra-route-prefix.
if (prefixInfo == null) {
LOG.debug("The extra route {} in rd {} for vpn {} has been removed from all the next hops",
vrfEntry.getDestPrefix(), rd, vpnId);
return adjacencyList;
}
- void makeConnectedRoute(BigInteger dpId, long vpnId, VrfEntry vrfEntry, String rd,
+ protected void makeConnectedRoute(BigInteger dpId, long vpnId, VrfEntry vrfEntry, String rd,
List<InstructionInfo> instructions, int addOrRemove, WriteTransaction tx,
List<SubTransaction> subTxns) {
Boolean wrTxPresent = true;
LOG.trace("makeConnectedRoute: vrfEntry {}", vrfEntry);
String[] values = vrfEntry.getDestPrefix().split("/");
String ipAddress = values[0];
- int prefixLength = (values.length == 1) ? 0 : Integer.parseInt(values[1]);
+ int prefixLength = values.length == 1 ? 0 : Integer.parseInt(values[1]);
if (addOrRemove == NwConstants.ADD_FLOW) {
LOG.debug("Adding route to DPN {} for rd {} prefix {} ", dpId, rd, vrfEntry.getDestPrefix());
} else {
}
}
- void addRewriteDstMacAction(long vpnId, VrfEntry vrfEntry, Prefixes prefixInfo,
+ protected void addRewriteDstMacAction(long vpnId, VrfEntry vrfEntry, Prefixes prefixInfo,
List<ActionInfo> actionInfos) {
if (vrfEntry.getMac() != null) {
actionInfos.add(new ActionSetFieldEthernetDestination(actionInfos.size(),
actionInfos.add(new ActionSetFieldEthernetDestination(actionInfos.size(), new MacAddress(macAddress)));
}
- void addTunnelInterfaceActions(AdjacencyResult adjacencyResult, long vpnId, VrfEntry vrfEntry,
+ protected void addTunnelInterfaceActions(AdjacencyResult adjacencyResult, long vpnId, VrfEntry vrfEntry,
List<ActionInfo> actionInfos, String rd) {
Class<? extends TunnelTypeBase> tunnelType =
VpnExtraRouteHelper.getTunnelType(nextHopManager.getInterfaceManager(),
}
}
- static InstanceIdentifier<Routes> getVpnToExtrarouteIdentifier(String vpnName, String vrfId,
+ public static InstanceIdentifier<Routes> getVpnToExtrarouteIdentifier(String vpnName, String vrfId,
String ipPrefix) {
return InstanceIdentifier.builder(VpnToExtraroutes.class)
.child(Vpn.class, new VpnKey(vpnName)).child(ExtraRoutes.class,
List<InstructionInfo> mkInstructions = new ArrayList<>();
mkInstructions.add(new InstructionGotoTable(NwConstants.L3_FIB_TABLE));
String flowId = FibUtil.getL3VpnGatewayFlowRef(NwConstants.L3_GW_MAC_TABLE, dpId, vpnId, gwMacAddress);
- FlowEntity flowEntity = MDSALUtil.buildFlowEntity(dpId, NwConstants.L3_GW_MAC_TABLE,
+ return MDSALUtil.buildFlowEntity(dpId, NwConstants.L3_GW_MAC_TABLE,
flowId, 20, flowId, 0, 0, NwConstants.COOKIE_L3_GW_MAC_TABLE, mkMatches, mkInstructions);
- return flowEntity;
}
public void installPingResponderFlowEntry(BigInteger dpnId, long vpnId, String routerInternalIp,
mdsalManager.removeFlow(flowEntity);
}
}
-
}
@Override
public void update(WriteTransaction tx, LogicalDatastoreType datastoreType, InstanceIdentifier identifier,
Object original, Object update, List<SubTransaction> subTxns) {
- if ((original instanceof VrfEntry) && (update instanceof VrfEntry)) {
+ if (original instanceof VrfEntry && update instanceof VrfEntry) {
createFibEntries(tx, identifier, (VrfEntry) update, subTxns);
}
}
}
}
+ @Override
public void createFlows(InstanceIdentifier<VrfEntry> identifier, VrfEntry vrfEntry, String rd) {
ActionableResource actResource = new ActionableResourceImpl(rd + vrfEntry.getDestPrefix());
actResource.setAction(ActionableResource.CREATE);
vrfEntryBufferQ.add(actResource);
}
+ @Override
public void removeFlows(InstanceIdentifier<VrfEntry> identifier, VrfEntry vrfEntry, String rd) {
ActionableResource actResource = new ActionableResourceImpl(rd + vrfEntry.getDestPrefix());
actResource.setAction(ActionableResource.DELETE);
vrfEntryBufferQ.add(actResource);
}
+ @Override
public void updateFlows(InstanceIdentifier<VrfEntry> identifier, VrfEntry original, VrfEntry update, String rd) {
ActionableResource actResource = new ActionableResourceImpl(rd + update.getDestPrefix());
actResource.setAction(ActionableResource.UPDATE);
}
@Override
- void addTunnelInterfaceActions(NexthopManager.AdjacencyResult adjacencyResult, long vpnId, VrfEntry vrfEntry,
- List<ActionInfo> actionInfos, String rd) {
+ protected void addTunnelInterfaceActions(NexthopManager.AdjacencyResult adjacencyResult, long vpnId,
+ VrfEntry vrfEntry, List<ActionInfo> actionInfos, String rd) {
Class<? extends TunnelTypeBase> tunnelType =
VpnExtraRouteHelper.getTunnelType(nextHopManager.getInterfaceManager(),
adjacencyResult.getInterfaceName());
}
@Override
- void addRewriteDstMacAction(long vpnId, VrfEntry vrfEntry, Prefixes prefixInfo,
+ protected void addRewriteDstMacAction(long vpnId, VrfEntry vrfEntry, Prefixes prefixInfo,
List<ActionInfo> actionInfos) {
if (vrfEntry.getGatewayMacAddress() != null) {
actionInfos.add(new ActionSetFieldEthernetDestination(actionInfos.size(),
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg0;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg1;
-public class FibConstants {
+public final class FibConstants {
static final int DEFAULT_FIB_FLOW_PRIORITY = 10;
static final int DEFAULT_PREFIX_LENGTH = 32;
static final int DEFAULT_IPV6_PREFIX_LENGTH = 128;
static final String SEPARATOR = ".";
static final String DEFAULT_NEXTHOP_IP = "0.0.0.0";
public static final long INVALID_GROUP_ID = -1;
- public static final Map<Integer, Class<? extends NxmNxReg>> NXM_REG_MAPPING = new ConcurrentHashMap<>();
+ public static final Map<Integer, Class<? extends NxmNxReg>> NXM_REG_MAPPING = new ConcurrentHashMap<>();
static {
NXM_REG_MAPPING.put(0, NxmNxReg0.class);
String vpnName = input.getVpnName();
long vpnId = getVpnId(dataBroker, vpnName);
String vpnRd = getVpnRd(dataBroker, vpnName);
- long serviceId = input.getServiceId();
+
String ipAddress = input.getIpAddress();
LOG.info("Delete custom FIB entry - {} on dpn {} for VPN {} ", ipAddress, dpnId, vpnName);
private void removeLocalFibEntry(BigInteger dpnId, long vpnId, String ipPrefix) {
String[] values = ipPrefix.split("/");
String ipAddress = values[0];
- int prefixLength = (values.length == 1) ? 0 : Integer.parseInt(values[1]);
+ int prefixLength = values.length == 1 ? 0 : Integer.parseInt(values[1]);
LOG.debug("Removing route from DPN. ip {} masklen {}", ipAddress, prefixLength);
InetAddress destPrefix = null;
try {
List<Instruction> customInstructions) {
String[] values = ipPrefix.split("/");
String ipAddress = values[0];
- int prefixLength = (values.length == 1) ? 0 : Integer.parseInt(values[1]);
+ int prefixLength = values.length == 1 ? 0 : Integer.parseInt(values[1]);
LOG.debug("Adding route to DPN. ip {} masklen {}", ipAddress, prefixLength);
InetAddress destPrefix = null;
try {
LOG.debug("Updating VPN to DPN list for dpn : {} for VPN: {} with ip: {}",
dpnId, vpnName, ipAddr);
String routeDistinguisher = getVpnRd(dataBroker, vpnName);
- String rd = (routeDistinguisher == null) ? vpnName : routeDistinguisher;
- IpAddresses.IpAddressSource ipAddressSource = (ipAddressSourceEnumValue == 0)
+ String rd = routeDistinguisher == null ? vpnName : routeDistinguisher;
+ IpAddresses.IpAddressSource ipAddressSource = ipAddressSourceEnumValue == 0
? IpAddresses.IpAddressSource.ExternalFixedIP : IpAddresses.IpAddressSource.FloatingIP;
synchronized (vpnName.intern()) {
InstanceIdentifier<VpnToDpnList> id = getVpnToDpnListIdentifier(rd, dpnId);
LOG.debug("Removing association of VPN to DPN list for dpn : {} for VPN: {} with ip: {}",
dpnId, vpnName, ipAddr);
String routeDistinguisher = getVpnRd(dataBroker, vpnName);
- String rd = (routeDistinguisher == null) ? vpnName : routeDistinguisher;
+ String rd = routeDistinguisher == null ? vpnName : routeDistinguisher;
synchronized (vpnName.intern()) {
InstanceIdentifier<VpnToDpnList> id = getVpnToDpnListIdentifier(rd, dpnId);
Optional<VpnToDpnList> dpnInVpn = MDSALUtil.read(dataBroker, LogicalDatastoreType.OPERATIONAL, id);
Optional<VpnInstance> optionalVpnInstance = MDSALUtil.read(broker, LogicalDatastoreType.CONFIGURATION, id);
return optionalVpnInstance.isPresent() ? optionalVpnInstance.get().getVpnId() : -1L;
}
-
-
}
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class FibUtil {
+public final class FibUtil {
private static final Logger LOG = LoggerFactory.getLogger(FibUtil.class);
private static final String FLOWID_PREFIX = "L3.";
+ private FibUtil() {
+ }
+
static InstanceIdentifier<Adjacency> getAdjacencyIdentifier(String vpnInterfaceName, String ipAddress) {
return InstanceIdentifier.builder(org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang
.l3vpn.rev140815.VpnInterfaces.class)
}
static String getNextHopLabelKey(String rd, String prefix) {
- String key = rd + FibConstants.SEPARATOR + prefix;
- return key;
+ return rd + FibConstants.SEPARATOR + prefix;
}
static Prefixes getPrefixToInterface(DataBroker broker, Long vpnId, String ipPrefix) {
builder.setMac(macAddress);
return;
}
- //if (!encapType.equals(VrfEntry.EncapType.Mplsgre)) {
+
// TODO - validate this check
if (l3vni != 0) {
builder.setL3vni(l3vni);
}
static InstanceIdentifier<Group> buildGroupInstanceIdentifier(long groupId, BigInteger dpId) {
- InstanceIdentifier<Group> groupInstanceId = InstanceIdentifier.builder(Nodes.class)
- .child(Node.class, new NodeKey(new NodeId("openflow:" + dpId))).augmentation(FlowCapableNode.class)
- .child(Group.class, new GroupKey(new GroupId(groupId))).build();
- return groupInstanceId;
+ return InstanceIdentifier.builder(Nodes.class).child(Node.class, new NodeKey(new NodeId("openflow:" + dpId)))
+ .augmentation(FlowCapableNode.class).child(Group.class, new GroupKey(new GroupId(groupId))).build();
}
static Buckets buildBuckets(List<BucketInfo> listBucketInfo) {
}
static Node buildDpnNode(BigInteger dpnId) {
- NodeId nodeId = new NodeId("openflow:" + dpnId);
- Node nodeDpn = new NodeBuilder().setId(nodeId).setKey(new NodeKey(nodeId)).build();
-
- return nodeDpn;
+ return new NodeBuilder().setId(new NodeId("openflow:" + dpnId))
+ .setKey(new NodeKey(new NodeId("openflow:" + dpnId))).build();
}
public static String getBroadcastAddressFromCidr(String cidr) {
int cidrPart = Integer.parseInt(ipaddressValues[1]);
int netmask = 0;
for (int j = 0; j < cidrPart; ++j) {
- netmask |= (1 << 31 - j);
+ netmask |= 1 << 31 - j;
}
- int network = (address & netmask);
- int broadcast = network | ~(netmask);
+ int network = address & netmask;
+ int broadcast = network | ~netmask;
return InetAddresses.toAddrString(InetAddresses.fromInteger(broadcast));
}
}
import javax.inject.Inject;
import javax.inject.Singleton;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.genius.mdsalutil.ActionInfo;
import org.opendaylight.genius.mdsalutil.FlowEntity;
import org.opendaylight.genius.mdsalutil.InstructionInfo;
import org.opendaylight.genius.mdsalutil.matches.MatchMetadata;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
@Singleton
public class IPv6Handler {
- private static final Logger LOG = LoggerFactory.getLogger(IPv6Handler.class);
- private final DataBroker dataBroker;
private final IMdsalApiManager mdsalManager;
-
@Inject
- public IPv6Handler(final DataBroker dataBroker,
- final IMdsalApiManager mdsalManager) {
- this.dataBroker = dataBroker;
+ public IPv6Handler(final IMdsalApiManager mdsalManager) {
this.mdsalManager = mdsalManager;
}
public void installPing6ResponderFlowEntry(BigInteger dpnId, long vpnId, String routerInternalIp,
- MacAddress routerMac, long label, int addOrRemove) {
+ MacAddress routerMac, long label, int addOrRemove) {
List<MatchInfo> matches = new ArrayList<>();
matches.add(MatchIpProtocol.ICMPV6);
mdsalManager.removeFlow(flowEntity);
}
}
-
}
}
}
- long setupLoadBalancingNextHop(Long parentVpnId, BigInteger dpnId,
+ protected long setupLoadBalancingNextHop(Long parentVpnId, BigInteger dpnId,
String destPrefix, List<BucketInfo> listBucketInfo, boolean addOrRemove) {
long groupId = createNextHopPointer(getNextHopKey(parentVpnId, destPrefix));
if (groupId == FibConstants.INVALID_GROUP_ID) {
}
GroupEntity groupEntity = MDSALUtil.buildGroupEntity(
dpnId, groupId, destPrefix, GroupTypes.GroupSelect, listBucketInfo);
- if (addOrRemove == true) {
+ if (addOrRemove) {
mdsalApiManager.syncInstallGroup(groupEntity, FIXED_DELAY_IN_MILLISECONDS);
try {
Thread.sleep(WAIT_TIME_FOR_SYNC_INSTALL);
}
private List<Action> getEgressActions(String interfaceName, int actionKey) {
- List<Action> actions = Collections.EMPTY_LIST;
+ List<Action> actions = Collections.emptyList();
try {
GetEgressActionsForInterfaceInputBuilder egressAction =
new GetEgressActionsForInterfaceInputBuilder().setIntfName(interfaceName).setActionKey(actionKey);
mdsalApiManager.removeBucketToTx(dpnId, Long.valueOf(groupId), bucketId, configTx);
} else {
Group group = MDSALUtil.buildGroup(Long.valueOf(groupId), nextHopKey, GroupTypes.GroupSelect,
- MDSALUtil.buildBucketLists(Collections.EMPTY_LIST));
+ MDSALUtil.buildBucketLists(Collections.emptyList()));
LOG.trace("Removed LB group {} on dpn {}", group, dpnId);
mdsalApiManager.removeGroupToTx(dpnId, group, configTx);
removeNextHopPointer(nextHopKey);
listAction.addAll(getEgressActions(tunnelInterfaceName, actionKey++));
} else {
// clear off actions if there is no egress actions.
- listAction = Collections.EMPTY_LIST;
+ listAction = Collections.emptyList();
}
return MDSALUtil.buildBucket(listAction, MDSALUtil.GROUP_WEIGHT, index,
MDSALUtil.WATCH_PORT, MDSALUtil.WATCH_GROUP);
import java.math.BigInteger;
import java.util.Collection;
-import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
@Singleton
public class RouterInterfaceVrfEntryHandler extends BaseVrfEntryHandler implements AutoCloseable, IVrfEntryHandler {
private static final Logger LOG = LoggerFactory.getLogger(RouterInterfaceVrfEntryHandler.class);
private final DataBroker dataBroker;
- private final NexthopManager nexthopManager;
private final IMdsalApiManager mdsalManager;
private final IPv6Handler ipv6Handler;
@Inject
- public RouterInterfaceVrfEntryHandler(final DataBroker dataBroker,
- final NexthopManager nexthopManager,
- final IMdsalApiManager mdsalManager,
- final IPv6Handler ipv6Handler) {
+ public RouterInterfaceVrfEntryHandler(final DataBroker dataBroker, final NexthopManager nexthopManager,
+ final IMdsalApiManager mdsalManager, final IPv6Handler ipv6Handler) {
super(dataBroker, nexthopManager, mdsalManager);
this.dataBroker = dataBroker;
- this.nexthopManager = nexthopManager;
this.mdsalManager = mdsalManager;
this.ipv6Handler = ipv6Handler;
}
- @PostConstruct
- public void init() {
- LOG.info("{} start", getClass().getSimpleName());
- }
-
@Override
public void close() throws Exception {
LOG.info("{} close", getClass().getSimpleName());
}
+ @Override
public void createFlows(InstanceIdentifier<VrfEntry> identifier, VrfEntry vrfEntry, String rd) {
RouterInterface routerInt = vrfEntry.getAugmentation(RouterInterface.class);
installRouterFibEntries(vrfEntry, rd, NwConstants.ADD_FLOW, routerInt);
}
+ @Override
public void updateFlows(InstanceIdentifier<VrfEntry> identifier, VrfEntry original, VrfEntry update, String rd) {
- //Not used
+ // Not used
}
+ @Override
public void removeFlows(InstanceIdentifier<VrfEntry> identifier, VrfEntry vrfEntry, String rd) {
RouterInterface routerInt = vrfEntry.getAugmentation(RouterInterface.class);
installRouterFibEntries(vrfEntry, rd, NwConstants.DEL_FLOW, routerInt);
}
-
- private Boolean installRouterFibEntries(VrfEntry vrfEntry, String rd,
- int addOrRemove, RouterInterface routerInterface) {
+ private Boolean installRouterFibEntries(VrfEntry vrfEntry, String rd, int addOrRemove,
+ RouterInterface routerInterface) {
final VpnInstanceOpDataEntry vpnInstance = FibUtil.getVpnInstance(dataBroker, rd);
Preconditions.checkNotNull(vpnInstance, "Vpn Instance not available " + rd);
- Preconditions.checkNotNull(vpnInstance.getVpnId(), "Vpn Instance with rd " + vpnInstance.getVrfId()
- + " has null vpnId!");
+ Preconditions.checkNotNull(vpnInstance.getVpnId(),
+ "Vpn Instance with rd " + vpnInstance.getVrfId() + " has null vpnId!");
final Collection<VpnToDpnList> vpnToDpnList;
if (vrfEntry.getParentVpnRd() != null
&& FibHelper.isControllerManagedNonSelfImportedRoute(RouteOrigin.value(vrfEntry.getOrigin()))) {
VpnInstanceOpDataEntry parentVpnInstance = FibUtil.getVpnInstance(dataBroker, vrfEntry.getParentVpnRd());
- vpnToDpnList = parentVpnInstance != null ? parentVpnInstance.getVpnToDpnList() :
- vpnInstance.getVpnToDpnList();
+ vpnToDpnList = parentVpnInstance != null ? parentVpnInstance.getVpnToDpnList()
+ : vpnInstance.getVpnToDpnList();
} else {
vpnToDpnList = vpnInstance.getVpnToDpnList();
}
routerId, ipValue, macAddress);
for (VpnToDpnList vpnDpn : vpnToDpnList) {
if (vpnDpn.getDpnState() == VpnToDpnList.DpnState.Active) {
- installRouterFibEntry(vrfEntry, vpnDpn.getDpnId(), vpnId, ipValue,
- new MacAddress(macAddress), addOrRemove);
+ installRouterFibEntry(vrfEntry, vpnDpn.getDpnId(), vpnId, ipValue, new MacAddress(macAddress),
+ addOrRemove);
}
}
}
return true;
}
- public void installRouterFibEntry(final VrfEntry vrfEntry, BigInteger dpnId, long vpnId,
- String routerInternalIp, MacAddress routerMac, int addOrRemove) {
+ public void installRouterFibEntry(final VrfEntry vrfEntry, BigInteger dpnId, long vpnId, String routerInternalIp,
+ MacAddress routerMac, int addOrRemove) {
- // First install L3_GW_MAC_TABLE flows as it's common for both IPv4 and IPv6 address families
+ // First install L3_GW_MAC_TABLE flows as it's common for both IPv4 and IPv6
+ // address families
FlowEntity l3GwMacFlowEntity = buildL3vpnGatewayFlow(dpnId, routerMac.getValue(), vpnId);
if (addOrRemove == NwConstants.ADD_FLOW) {
mdsalManager.installFlow(l3GwMacFlowEntity);
}
String[] subSplit = routerInternalIp.split("/");
- String addRemoveStr = (addOrRemove == NwConstants.ADD_FLOW) ? "ADD_FLOW" : "DELETE_FLOW";
+ String addRemoveStr = addOrRemove == NwConstants.ADD_FLOW ? "ADD_FLOW" : "DELETE_FLOW";
LOG.trace("{}: Building Echo Flow entity for dpid:{}, router_ip:{}, vpnId:{}, subSplit:{} ", addRemoveStr,
dpnId, routerInternalIp, vpnId, subSplit[0]);
if (isIpv4Address(subSplit[0])) {
installPingResponderFlowEntry(dpnId, vpnId, subSplit[0], routerMac, optionalLabel.get(), addOrRemove);
} else {
- ipv6Handler.installPing6ResponderFlowEntry(dpnId, vpnId, routerInternalIp, routerMac,
- optionalLabel.get(), addOrRemove);
+ ipv6Handler.installPing6ResponderFlowEntry(dpnId, vpnId, routerInternalIp, routerMac, optionalLabel.get(),
+ addOrRemove);
}
return;
}
private static final int LFIB_INTERVPN_PRIORITY = 15;
public static final BigInteger COOKIE_TUNNEL = new BigInteger("9000000", 16);
private static final int DJC_MAX_RETRIES = 3;
- private static BigInteger COOKIE_TABLE_MISS = new BigInteger("8000004", 16);
+ private static final BigInteger COOKIE_TABLE_MISS = new BigInteger("8000004", 16);
private final DataBroker dataBroker;
private final IMdsalApiManager mdsalManager;
}
final List<BigInteger> localDpnIdList = createLocalFibEntry(vpnInstance.getVpnId(), rd, vrfEntry);
- if (!localDpnIdList.isEmpty()) {
- if (vpnToDpnList != null) {
- DataStoreJobCoordinator dataStoreCoordinator = DataStoreJobCoordinator.getInstance();
- dataStoreCoordinator.enqueueJob(FibUtil.getJobKeyForRdPrefix(rd, vrfEntry.getDestPrefix()), () -> {
- WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
- for (VpnToDpnList vpnDpn : vpnToDpnList) {
- if (!localDpnIdList.contains(vpnDpn.getDpnId())) {
- if (vpnDpn.getDpnState() == VpnToDpnList.DpnState.Active) {
- try {
- if (RouteOrigin.BGP.getValue().equals(vrfEntry.getOrigin())) {
- bgpRouteVrfEntryHandler.createRemoteFibEntry(vpnDpn.getDpnId(),
- vpnId, vrfTableKey.getRouteDistinguisher(), vrfEntry, tx, txnObjects);
- } else {
- createRemoteFibEntry(vpnDpn.getDpnId(), vpnInstance.getVpnId(),
- vrfTableKey.getRouteDistinguisher(), vrfEntry, tx);
- }
- } catch (NullPointerException e) {
- LOG.error("Failed to get create remote fib flows for prefix {} ",
- vrfEntry.getDestPrefix(), e);
+ if (!localDpnIdList.isEmpty() && vpnToDpnList != null) {
+ DataStoreJobCoordinator dataStoreCoordinator = DataStoreJobCoordinator.getInstance();
+ dataStoreCoordinator.enqueueJob(FibUtil.getJobKeyForRdPrefix(rd, vrfEntry.getDestPrefix()), () -> {
+ WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
+ for (VpnToDpnList vpnDpn : vpnToDpnList) {
+ if (!localDpnIdList.contains(vpnDpn.getDpnId())) {
+ if (vpnDpn.getDpnState() == VpnToDpnList.DpnState.Active) {
+ try {
+ if (RouteOrigin.BGP.getValue().equals(vrfEntry.getOrigin())) {
+ bgpRouteVrfEntryHandler.createRemoteFibEntry(vpnDpn.getDpnId(),
+ vpnId, vrfTableKey.getRouteDistinguisher(), vrfEntry, tx, txnObjects);
+ } else {
+ createRemoteFibEntry(vpnDpn.getDpnId(), vpnInstance.getVpnId(),
+ vrfTableKey.getRouteDistinguisher(), vrfEntry, tx);
}
+ } catch (NullPointerException e) {
+ LOG.error("Failed to get create remote fib flows for prefix {} ",
+ vrfEntry.getDestPrefix(), e);
}
}
}
- List<ListenableFuture<Void>> futures = new ArrayList<>();
- futures.add(tx.submit());
- return futures;
- }, DJC_MAX_RETRIES);
- }
+ }
+ List<ListenableFuture<Void>> futures = new ArrayList<>();
+ futures.add(tx.submit());
+ return futures;
+ }, DJC_MAX_RETRIES);
}
Optional<String> optVpnUuid = FibUtil.getVpnNameFromRd(dataBroker, rd);
vrfEntry.getDestPrefix(), rd, vpnId, dpnId);
String[] ipAddress = vrfEntry.getDestPrefix().split("/");
String subnetBroadcastAddr = FibUtil.getBroadcastAddressFromCidr(vrfEntry.getDestPrefix());
- final int prefixLength = (ipAddress.length == 1) ? 0 : Integer.parseInt(ipAddress[1]);
+ final int prefixLength = ipAddress.length == 1 ? 0 : Integer.parseInt(ipAddress[1]);
InetAddress destPrefix;
try {
returnLocalDpnId.add(dpnId);
}
}
- if (!localNextHopSeen) {
- /* imported routes case */
- if (RouteOrigin.value(vrfEntry.getOrigin()) == RouteOrigin.SELF_IMPORTED) {
- java.util.Optional<Long> optionalLabel = FibUtil.getLabelFromRoutePaths(vrfEntry);
- if (optionalLabel.isPresent()) {
- Long label = optionalLabel.get();
- List<String> nextHopAddressList = FibHelper.getNextHopListFromRoutePaths(vrfEntry);
- synchronized (label.toString().intern()) {
- LabelRouteInfo lri = getLabelRouteInfo(label);
- if (isPrefixAndNextHopPresentInLri(localNextHopIP, nextHopAddressList, lri)) {
- Optional<VpnInstanceOpDataEntry> vpnInstanceOpDataEntryOptional =
- FibUtil.getVpnInstanceOpData(dataBroker, rd);
- if (vpnInstanceOpDataEntryOptional.isPresent()) {
- String vpnInstanceName = vpnInstanceOpDataEntryOptional.get().getVpnInstanceName();
- if (lri.getVpnInstanceList().contains(vpnInstanceName)) {
- localNextHopInfo = updateVpnReferencesInLri(lri, vpnInstanceName, true);
- localNextHopIP = lri.getPrefix();
- } else {
- localNextHopInfo = updateVpnReferencesInLri(lri, vpnInstanceName, false);
- localNextHopIP = lri.getPrefix();
- }
+ if (!localNextHopSeen && RouteOrigin.value(vrfEntry.getOrigin()) == RouteOrigin.SELF_IMPORTED) {
+ java.util.Optional<Long> optionalLabel = FibUtil.getLabelFromRoutePaths(vrfEntry);
+ if (optionalLabel.isPresent()) {
+ Long label = optionalLabel.get();
+ List<String> nextHopAddressList = FibHelper.getNextHopListFromRoutePaths(vrfEntry);
+ synchronized (label.toString().intern()) {
+ LabelRouteInfo lri = getLabelRouteInfo(label);
+ if (isPrefixAndNextHopPresentInLri(localNextHopIP, nextHopAddressList, lri)) {
+ Optional<VpnInstanceOpDataEntry> vpnInstanceOpDataEntryOptional =
+ FibUtil.getVpnInstanceOpData(dataBroker, rd);
+ if (vpnInstanceOpDataEntryOptional.isPresent()) {
+ String vpnInstanceName = vpnInstanceOpDataEntryOptional.get().getVpnInstanceName();
+ if (lri.getVpnInstanceList().contains(vpnInstanceName)) {
+ localNextHopInfo = updateVpnReferencesInLri(lri, vpnInstanceName, true);
+ localNextHopIP = lri.getPrefix();
+ } else {
+ localNextHopInfo = updateVpnReferencesInLri(lri, vpnInstanceName, false);
+ localNextHopIP = lri.getPrefix();
}
- if (localNextHopInfo != null) {
- LOG.debug("Fetched labelRouteInfo for label {} interface {} and got dpn {}",
- label, localNextHopInfo.getVpnInterfaceName(), lri.getDpnId());
- if (vpnExtraRoutes.isEmpty()) {
- BigInteger dpnId = checkCreateLocalFibEntry(localNextHopInfo, localNextHopIP,
- vpnId, rd, vrfEntry, lri.getParentVpnid(), null, vpnExtraRoutes);
+ }
+ if (localNextHopInfo != null) {
+ LOG.debug("Fetched labelRouteInfo for label {} interface {} and got dpn {}",
+ label, localNextHopInfo.getVpnInterfaceName(), lri.getDpnId());
+ if (vpnExtraRoutes.isEmpty()) {
+ BigInteger dpnId = checkCreateLocalFibEntry(localNextHopInfo, localNextHopIP,
+ vpnId, rd, vrfEntry, lri.getParentVpnid(), null, vpnExtraRoutes);
+ returnLocalDpnId.add(dpnId);
+ } else {
+ for (Routes extraRoutes : vpnExtraRoutes) {
+ BigInteger dpnId = checkCreateLocalFibEntry(localNextHopInfo,
+ localNextHopIP,
+ vpnId, rd, vrfEntry, lri.getParentVpnid(),
+ extraRoutes, vpnExtraRoutes);
returnLocalDpnId.add(dpnId);
- } else {
- for (Routes extraRoutes : vpnExtraRoutes) {
- BigInteger dpnId = checkCreateLocalFibEntry(localNextHopInfo,
- localNextHopIP,
- vpnId, rd, vrfEntry, lri.getParentVpnid(),
- extraRoutes, vpnExtraRoutes);
- returnLocalDpnId.add(dpnId);
- }
}
}
}
LOG.debug("Successfully added FIB entry for prefix {} in vpnId {}", vrfEntry.getDestPrefix(), vpnId);
}
- void cleanUpOpDataForFib(Long vpnId, String primaryRd, final VrfEntry vrfEntry) {
+ protected void cleanUpOpDataForFib(Long vpnId, String primaryRd, final VrfEntry vrfEntry) {
/* Get interface info from prefix to interface mapping;
Use the interface info to get the corresponding vpn interface op DS entry,
remove the adjacency corresponding to this fib entry.
} else {
vpnToDpnList = vpnInstance.getVpnToDpnList();
}
- long elanTag = 0L;
+
SubnetRoute subnetRoute = vrfEntry.getAugmentation(SubnetRoute.class);
final java.util.Optional<Long> optionalLabel = FibUtil.getLabelFromRoutePaths(vrfEntry);
List<String> nextHopAddressList = FibHelper.getNextHopListFromRoutePaths(vrfEntry);
String vpnName = FibUtil.getVpnNameFromId(dataBroker, vpnInstance.getVpnId());
if (subnetRoute != null) {
- elanTag = subnetRoute.getElantag();
+ long elanTag = subnetRoute.getElantag();
LOG.trace("SUBNETROUTE: deleteFibEntries: SubnetRoute augmented vrfentry found for rd {} prefix {}"
+ " with elantag {}", rd, vrfEntry.getDestPrefix(), elanTag);
if (vpnToDpnList != null) {
public static InstanceIdentifier<VrfTables> buildVrfId(String rd) {
InstanceIdentifierBuilder<VrfTables> idBuilder =
InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd));
- InstanceIdentifier<VrfTables> id = idBuilder.build();
- return id;
+ return idBuilder.build();
}
private String getInterVpnFibFlowRef(String interVpnLinkName, String prefix, String nextHop) {
return false;
}
}
-
return true;
}
}