String dstIpAddress, long elanTag) throws UnknownHostException {
long groupid = VpnUtil.getRemoteBCGroup(elanTag);
if (NWUtil.isIpv4Address(dstIpAddress)) {
- LOG.debug("Sending ARP: srcIp={}, srcMac={}, dstIp={}, dpId={}, elan-tag={}", sourceIpAddress, sourceMac,
- dstIpAddress, dpnId, elanTag);
+ LOG.debug("Sending ARP: srcIp={}, srcMac={}, dstIp={}, dpId={}, elan-tag={}, groupid={}", sourceIpAddress,
+ sourceMac, dstIpAddress, dpnId, elanTag, groupid);
vpnManagerCounters.subnetRoutePacketArpSent();
TransmitPacketInput packetInput =
JdkFutures.addErrorLogging(packetService.transmitPacket(packetInput), LOG, "Transmit packet");
} else {
// IPv6 case
- LOG.debug("Sending NS: srcIp={}, srcMac={}, dstIp={}, dpId={}, elan-tag={}", sourceIpAddress, sourceMac,
- dstIpAddress, dpnId, elanTag);
+ LOG.debug("Sending NS: srcIp={}, srcMac={}, dstIp={}, dpId={}, elan-tag={}, groupid={}", sourceIpAddress,
+ sourceMac, dstIpAddress, dpnId, elanTag, groupid);
vpnManagerCounters.subnetRoutePacketNsSent();
VpnUtil.sendNeighborSolicationToOfGroup(this.ipv6NdUtilService, new Ipv6Address(sourceIpAddress),
@Override
public void add(final InstanceIdentifier<VpnInterface> identifier, final VpnInterface vpnInterface) {
- LOG.info("add: intfName {} onto vpnName {}",
- vpnInterface.getName(),
- VpnHelper.getVpnInterfaceVpnInstanceNamesString(vpnInterface.getVpnInstanceNames()));
+ LOG.trace("Received VpnInterface add event: vpnInterface={}", vpnInterface);
+ LOG.info("add: intfName {} onto vpnName {}", vpnInterface.getName(),
+ VpnHelper.getVpnInterfaceVpnInstanceNamesString(vpnInterface.getVpnInstanceNames()));
addVpnInterface(identifier, vpnInterface, null, null);
}
@Override
public void remove(InstanceIdentifier<VpnInterface> identifier, VpnInterface vpnInterface) {
+ LOG.trace("Received VpnInterface remove event: vpnInterface={}", vpnInterface);
final VpnInterfaceKey key = identifier.firstKeyOf(VpnInterface.class, VpnInterfaceKey.class);
final String interfaceName = key.getName();
for (VpnInstanceNames vpnInterfaceVpnInstance : requireNonNullElse(vpnInterface.getVpnInstanceNames(),
@Override
protected void update(final InstanceIdentifier<VpnInterface> identifier, final VpnInterface original,
final VpnInterface update) {
- LOG.info("update: VPN Interface update event - intfName {} on dpn {} oldVpn {} newVpn {}" ,update.getName(),
- update.getDpnId(), original.getVpnInstanceNames(),
- update.getVpnInstanceNames());
+ LOG.trace("Received VpnInterface update event: original={}, update={}", original, update);
+ LOG.info("update: VPN Interface update event - intfName {} on dpn {} oldVpn {} newVpn {}", update.getName(),
+ update.getDpnId(), original.getVpnInstanceNames(), update.getVpnInstanceNames());
final String vpnInterfaceName = update.getName();
final BigInteger dpnId = InterfaceUtils.getDpnForInterface(ifaceMgrRpcService, vpnInterfaceName);
LOG.info("VPN Interface update event - intfName {}", vpnInterfaceName);
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
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.genius.lockmanager.rev160413.LockManagerService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.PortOpData;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.SubnetOpData;
private final DataBroker dataBroker;
private final SubnetOpDpnManager subOpDpnManager;
private final IBgpManager bgpManager;
- private final IdManagerService idManager;
- private final LockManagerService lockManager;
private final VpnOpDataSyncer vpnOpDataSyncer;
private final VpnNodeListener vpnNodeListener;
private final IFibManager fibManager;
@Inject
public VpnSubnetRouteHandler(final DataBroker dataBroker, final SubnetOpDpnManager subnetOpDpnManager,
- final IBgpManager bgpManager, final IdManagerService idManager,
- LockManagerService lockManagerService, final VpnOpDataSyncer vpnOpDataSyncer,
- final VpnNodeListener vpnNodeListener, final IFibManager fibManager, VpnUtil vpnUtil) {
+ final IBgpManager bgpManager, final VpnOpDataSyncer vpnOpDataSyncer, final VpnNodeListener vpnNodeListener,
+ final IFibManager fibManager, VpnUtil vpnUtil) {
this.dataBroker = dataBroker;
this.subOpDpnManager = subnetOpDpnManager;
this.bgpManager = bgpManager;
- this.idManager = idManager;
- this.lockManager = lockManagerService;
this.vpnOpDataSyncer = vpnOpDataSyncer;
this.vpnNodeListener = vpnNodeListener;
this.fibManager = fibManager;
LOGGING_PREFIX + " onSubnetAddedToVpn: SubnetPrefix cannot be null or empty!");
Preconditions.checkNotNull(elanTag, LOGGING_PREFIX + " onSubnetAddedToVpn: ElanTag cannot be null or empty!");
- String vpnName;
- if (subnetmap.getVpnId() != null) {
- vpnName = subnetmap.getVpnId().getValue();
- long vpnId = vpnUtil.getVpnId(vpnName);
- if (vpnId == VpnConstants.INVALID_ID) {
- vpnOpDataSyncer.waitForVpnDataReady(VpnOpDataType.vpnInstanceToId, vpnName,
- VpnConstants.PER_VPN_INSTANCE_MAX_WAIT_TIME_IN_MILLISECONDS);
- vpnId = vpnUtil.getVpnId(vpnName);
- if (vpnId == VpnConstants.INVALID_ID) {
- LOG.error("{} onSubnetAddedToVpn: VpnInstance to VPNId mapping not yet available for VpnName {} "
- + "processing subnet {} with IP {}, bailing out now.", LOGGING_PREFIX, vpnName, subnetId,
- subnetIp);
- return;
- }
- }
- } else {
+ if (subnetmap.getVpnId() == null) {
LOG.error("onSubnetAddedToVpn: VpnId {} for subnet {} not found, bailing out", subnetmap.getVpnId(),
- subnetId);
+ subnetId);
+ return;
+ }
+ String vpnName = subnetmap.getVpnId().getValue();
+ long vpnId = waitAndGetVpnIdIfInvalid(vpnName);
+ if (vpnId == VpnConstants.INVALID_ID) {
+ LOG.error(
+ "{} onSubnetAddedToVpn: VpnInstance to VPNId mapping not yet available for VpnName {} "
+ + "processing subnet {} with IP {}, bailing out now.",
+ LOGGING_PREFIX, vpnName, subnetId, subnetIp);
+ return;
+ }
+
+ String primaryRd = vpnUtil.getPrimaryRd(vpnName);
+ VpnInstanceOpDataEntry vpnInstanceOpData = waitAndGetVpnInstanceOpDataIfNull(vpnName, primaryRd);
+ if (vpnInstanceOpData == null) {
+ LOG.error(
+ "{} onSubnetAddedToVpn: VpnInstanceOpData not yet available for VpnName {} "
+ + "processing subnet {} with IP {}, bailing out now.",
+ LOGGING_PREFIX, vpnName, subnetId, subnetIp);
return;
}
LOG.info("{} onSubnetAddedToVpn: Subnet {} with IP {} being added to vpn {}", LOGGING_PREFIX,
subOpBuilder = new SubnetOpDataEntryBuilder().withKey(new SubnetOpDataEntryKey(subnetId));
subOpBuilder.setSubnetId(subnetId);
subOpBuilder.setSubnetCidr(subnetIp);
- String primaryRd = vpnUtil.getPrimaryRd(vpnName);
if (isBgpVpn && !VpnUtil.isBgpVpn(vpnName, primaryRd)) {
LOG.error("{} onSubnetAddedToVpn: The VPN Instance name {} does not have RD. Bailing out for"
subOpBuilder.setSubnetToDpn(new ArrayList<>());
subOpBuilder.setRouteAdvState(TaskState.Idle);
subOpBuilder.setElanTag(elanTag);
- Long l3Vni = vpnUtil.getVpnInstanceOpData(primaryRd).getL3vni();
+ Long l3Vni = vpnInstanceOpData.getL3vni();
subOpBuilder.setL3vni(l3Vni);
subOpEntry = subOpBuilder.build();
SingleTransactionDataBroker.syncWrite(dataBroker, LogicalDatastoreType.OPERATIONAL, subOpIdentifier,
}
}
+ private long waitAndGetVpnIdIfInvalid(String vpnName) {
+ long vpnId = vpnUtil.getVpnId(vpnName);
+ if (vpnId == VpnConstants.INVALID_ID) {
+ LOG.debug("VpnId is invalid, waiting to fetch again: vpnName={}, vpnId={}", vpnName, vpnId);
+ vpnOpDataSyncer.waitForVpnDataReady(VpnOpDataType.vpnInstanceToId, vpnName,
+ VpnConstants.PER_VPN_INSTANCE_MAX_WAIT_TIME_IN_MILLISECONDS);
+ vpnId = vpnUtil.getVpnId(vpnName);
+ }
+ return vpnId;
+ }
+
+ private VpnInstanceOpDataEntry waitAndGetVpnInstanceOpDataIfNull(String vpnName, String primaryRd) {
+ VpnInstanceOpDataEntry vpnInstanceOpData = vpnUtil.getVpnInstanceOpData(primaryRd);
+ if (vpnInstanceOpData == null) {
+ LOG.debug("vpnInstanceOpData is null, waiting to fetch again: vpnName={}", vpnName);
+ vpnOpDataSyncer.waitForVpnDataReady(VpnOpDataType.vpnOpData, vpnName,
+ VpnConstants.PER_VPN_INSTANCE_OPDATA_MAX_WAIT_TIME_IN_MILLISECONDS);
+ vpnInstanceOpData = vpnUtil.getVpnInstanceOpData(primaryRd);
+ }
+ return vpnInstanceOpData;
+ }
+
// TODO Clean up the exception handling
@SuppressWarnings("checkstyle:IllegalCatch")
public void onSubnetDeletedFromVpn(Subnetmap subnetmap, boolean isBgpVpn) {