LOG.info("remove terminatingServiceActions called with DpnId = {} and label = {}", dpId , label);
List<MatchInfo> mkMatches = new ArrayList<MatchInfo>();
// Matching metadata
- mkMatches.add(new MatchInfo(MatchFieldType.tunnel_id, new BigInteger[] {
- MetaDataUtil.getTunnelIdWithValidVniBitAndVniSet((int)label),
- MetaDataUtil.METADA_MASK_TUNNEL_ID }));
+ mkMatches.add(new MatchInfo(MatchFieldType.tunnel_id, new BigInteger[] {BigInteger.valueOf(label)}));
flowEntity = MDSALUtil.buildFlowEntity(dpId,
NwConstants.INTERNAL_TUNNEL_TABLE,
getFlowRef(dpId, NwConstants.INTERNAL_TUNNEL_TABLE, (int)label),
public void processNodeAdd(BigInteger dpnId) {
LOG.debug("Received notification to install TableMiss entries for dpn {} ", dpnId);
makeTableMissFlow(dpnId, NwConstants.ADD_FLOW);
- makeProtocolTableFlow(dpnId, NwConstants.ADD_FLOW);
makeL3IntfTblMissFlow(dpnId, NwConstants.ADD_FLOW);
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.adjacency.list.AdjacencyKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetExternalTunnelInterfaceNameInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetExternalTunnelInterfaceNameOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetInternalOrExternalInterfaceNameInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetInternalOrExternalInterfaceNameOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetTunnelInterfaceNameInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.GetTunnelInterfaceNameOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.itm.rpcs.rev151217.ItmRpcService;
return null;
}
- protected String getExternalTunnelInterfaceName(BigInteger srcDpId, IpAddress dstIp) {
+ protected String getTunnelInterfaceName(BigInteger srcDpId, IpAddress dstIp) {
try {
- Future<RpcResult<GetExternalTunnelInterfaceNameOutput>> result = itmManager.getExternalTunnelInterfaceName(new GetExternalTunnelInterfaceNameInputBuilder()
+ Future<RpcResult<GetInternalOrExternalInterfaceNameOutput>> result = itmManager.getInternalOrExternalInterfaceName(new GetInternalOrExternalInterfaceNameInputBuilder()
.setSourceDpid(srcDpId)
.setDestinationIp(dstIp).build());
- RpcResult<GetExternalTunnelInterfaceNameOutput> rpcResult = result.get();
+ RpcResult<GetInternalOrExternalInterfaceNameOutput> rpcResult = result.get();
if(!rpcResult.isSuccessful()) {
- LOG.warn("RPC Call to getExternalTunnelInterfaceId returned with Errors {}", rpcResult.getErrors());
+ LOG.warn("RPC Call to getTunnelInterfaceName returned with Errors {}", rpcResult.getErrors());
} else {
return rpcResult.getResult().getInterfaceName();
}
} catch (InterruptedException | ExecutionException e) {
- LOG.warn("Exception when getting external tunnel interface Id for tunnel between {} and {}", srcDpId, dstIp, e);
+ LOG.warn("Exception when getting tunnel interface Id for tunnel between {} and {}", srcDpId, dstIp, e);
}
return null;
LOG.trace("getRemoteNextHopPointer: input [localDpnId {} remoteDpnId {}, vpnId {}, prefixIp {}, nextHopIp {} ]",
localDpnId, remoteDpnId, vpnId, prefixIp, nextHopIp);
- // check if the incoming VM is within the same DC. If so, retrieve the local tunnel group pointer.
- // Else retrieve the tunnel to DC gateway group pointer.
-
- if (localDpnId == null || BigInteger.ZERO.equals(localDpnId)) {
- VpnNexthop vpnNexthop = getVpnNexthop(vpnId, prefixIp);
- //If the vrf entry is a static/extra route, the nexthop of the entry would be a adjacency in the vpn
- if(vpnNexthop == null) {
- vpnNexthop = getVpnNexthop(vpnId, nextHopIp + "/32");
- }
- localDpnId = (vpnNexthop == null) ? null : vpnNexthop.getDpnId();
- }
LOG.trace("getRemoteNextHopPointer: Calling ITM with localDpnId {} ", localDpnId);
try{
// here use the config for tunnel type param
- if(localDpnId != null){
- //internal tunnel
- tunnelIfName = getTunnelInterfaceName(remoteDpnId, localDpnId);
- } else {
- //external tunnel
- tunnelIfName = getExternalTunnelInterfaceName(remoteDpnId,
- IpAddressBuilder.getDefaultInstance(nextHopIp));
- }
+ tunnelIfName = getTunnelInterfaceName(remoteDpnId, IpAddressBuilder.getDefaultInstance(nextHopIp));
}catch(Exception ex){
LOG.error("Error while retrieving nexthop pointer for DC Gateway : ", ex.getMessage());
}
}
} else {
if (VpnUtil.isVpnInterfaceConfigured(broker, interfaceName)) {
- vpnInterfaceManager.processVpnInterfaceDown(interfaceName, intrf.getIfIndex());
+ vpnInterfaceManager.processVpnInterfaceDown(interfaceName, intrf.getIfIndex(), true);
}
}
} catch (Exception e) {
InterfaceUtils.getInterfaceStateFromOperDS(broker, interfaceName);
if (existingVpnInterface.isPresent() && interfaceState != null) {
- processVpnInterfaceDown(interfaceName, interfaceState.getIfIndex());
+ processVpnInterfaceDown(interfaceName, interfaceState.getIfIndex(), false);
} else {
LOG.warn("VPN interface {} was unavailable in operational data store to handle remove event", interfaceName);
}
}
- protected synchronized void processVpnInterfaceDown(String interfaceName, int lPortTag) {
+ protected synchronized void processVpnInterfaceDown(String interfaceName, int lPortTag, boolean isInterfaceStateDown) {
VpnInterface vpnInterface = VpnUtil.getOperationalVpnInterface(broker, interfaceName);
if(vpnInterface == null) {
LOG.info("Unable to process delete/down for interface {} as it is not available in operational data store", interfaceName);
removeAdjacenciesFromVpn(identifier, vpnInterface);
LOG.info("Unbinding vpn service from interface {} ", interfaceName);
- unbindService(vpnName, interfaceName, lPortTag);
+ unbindService(vpnName, interfaceName, lPortTag, isInterfaceStateDown);
updateDpnDbs(vpnName, interfaceName, false);
VpnUtil.delete(broker, LogicalDatastoreType.OPERATIONAL, identifier, VpnUtil.DEFAULT_CALLBACK);
}
}
- private void unbindService(String vpnInstanceName, String vpnInterfaceName, int lPortTag) {
- VpnUtil.delete(broker, LogicalDatastoreType.CONFIGURATION,
- InterfaceUtils.buildServiceId(vpnInterfaceName,VpnConstants.L3VPN_SERVICE_IDENTIFIER),
- VpnUtil.DEFAULT_CALLBACK);
+ private void unbindService(String vpnInstanceName, String vpnInterfaceName, int lPortTag, boolean isInterfaceStateDown) {
+ if (!isInterfaceStateDown) {
+ VpnUtil.delete(broker, LogicalDatastoreType.CONFIGURATION,
+ InterfaceUtils.buildServiceId(vpnInterfaceName,
+ VpnConstants.L3VPN_SERVICE_IDENTIFIER),
+ VpnUtil.DEFAULT_CALLBACK);
+ }
long vpnId = VpnUtil.getVpnId(broker, vpnInstanceName);
makeArpFlow(VpnConstants.L3VPN_SERVICE_IDENTIFIER, lPortTag, vpnInterfaceName,
vpnId, ArpReplyOrRequest.REQUEST, NwConstants.DEL_FLOW);