import org.opendaylight.genius.mdsalutil.MatchInfo;
import org.opendaylight.genius.mdsalutil.MatchInfoBase;
import org.opendaylight.genius.mdsalutil.MetaDataUtil;
+import org.opendaylight.genius.mdsalutil.NWUtil;
import org.opendaylight.genius.mdsalutil.NwConstants;
import org.opendaylight.genius.mdsalutil.actions.ActionGroup;
import org.opendaylight.genius.mdsalutil.actions.ActionNxLoadMetadata;
String routerName = routers.getRouterName();
Long routerId = NatUtil.getVpnId(dataBroker, routerName);
installDefaultFibRouteForSNAT(dpnId, routerId, addOrRemove);
- List<ExternalIps> externalIps = routers.getExternalIps();
- if (externalIps.isEmpty()) {
- LOG.error("AbstractSnatService: installSnatCommonEntriesForNaptSwitch no externalIP present"
- + " for routerId {}",
- routerId);
- return;
- }
- //The logic now handle only one external IP per router, others if present will be ignored.
- String externalIp = externalIps.get(0).getIpAddress();
String externalGwMac = routers.getExtGwMacAddress();
- Uuid externalSubnetId = externalIps.get(0).getSubnetId();
- long extSubnetId = NatConstants.INVALID_ID;
- if (addOrRemove == NwConstants.ADD_FLOW) {
- extSubnetId = NatUtil.getExternalSubnetVpnId(dataBroker,externalSubnetId);
+ for (ExternalIps externalIp : routers.getExternalIps()) {
+ if (!NWUtil.isIpv4Address(externalIp.getIpAddress())) {
+ // In this class we handle only IPv4 use-cases.
+ continue;
+ }
+ //The logic now handle only one external IP per router, others if present will be ignored.
+ long extSubnetId = NatConstants.INVALID_ID;
+ if (addOrRemove == NwConstants.ADD_FLOW) {
+ extSubnetId = NatUtil.getExternalSubnetVpnId(dataBroker, externalIp.getSubnetId());
+ }
+ installInboundFibEntry(dpnId, externalIp.getIpAddress(), routerId, extSubnetId,
+ routers.getNetworkId().getValue(), externalIp.getSubnetId().getValue(), externalGwMac, addOrRemove);
+ installInboundTerminatingServiceTblEntry(dpnId, routerId, extSubnetId, addOrRemove);
+ break;
}
- installInboundFibEntry(dpnId, externalIp, routerId, extSubnetId, routers.getNetworkId()
- .getValue(), externalSubnetId.getValue(), externalGwMac, addOrRemove);
- installInboundTerminatingServiceTblEntry(dpnId, routerId, extSubnetId, addOrRemove);
}
protected void installSnatCommonEntriesForNonNaptSwitch(Routers routers, BigInteger primarySwitchId,
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
-
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
import org.opendaylight.genius.mdsalutil.MatchInfo;
import org.opendaylight.genius.mdsalutil.MatchInfoBase;
import org.opendaylight.genius.mdsalutil.MetaDataUtil;
+import org.opendaylight.genius.mdsalutil.NWUtil;
import org.opendaylight.genius.mdsalutil.NwConstants;
import org.opendaylight.genius.mdsalutil.actions.ActionNxConntrack;
import org.opendaylight.genius.mdsalutil.actions.ActionNxConntrack.NxCtAction;
import org.opendaylight.netvirt.fibmanager.api.IFibManager;
import org.opendaylight.netvirt.vpnmanager.api.IVpnFootprintService;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
-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.interfacemanager.rpcs.rev160406.OdlInterfaceRpcService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
String extGwMacAddress = NatUtil.getExtGwMacAddFromRouterName(getDataBroker(), routerName);
createOutboundTblTrackEntry(dpnId, routerId, extGwMacAddress, addOrRemove);
- List<ExternalIps> externalIps = routers.getExternalIps();
- if (externalIps.isEmpty()) {
- LOG.error("AbstractSnatService: installSnatCommonEntriesForNaptSwitch no externalIP present"
- + " for routerId {}",
- routerId);
- return;
- }
- //The logic now handle only one external IP per router, others if present will be ignored.
- String externalIp = externalIps.get(0).getIpAddress();
- Uuid externalSubnetId = externalIps.get(0).getSubnetId();
- long extSubnetId = NatConstants.INVALID_ID;
- if (addOrRemove == NwConstants.ADD_FLOW) {
- extSubnetId = NatUtil.getExternalSubnetVpnId(getDataBroker(),externalSubnetId);
- }
- createOutboundTblEntry(dpnId, routerId, externalIp, elanId, extGwMacAddress, addOrRemove);
- installNaptPfibFlow(routers, dpnId, routerId, extSubnetId, addOrRemove);
+ for (ExternalIps externalIp : routers.getExternalIps()) {
+ if (!NWUtil.isIpv4Address(externalIp.getIpAddress())) {
+ // In this class we handle only IPv4 use-cases.
+ continue;
+ }
+ //The logic now handle only one external IP per router, others if present will be ignored.
+ long extSubnetId = NatConstants.INVALID_ID;
+ if (addOrRemove == NwConstants.ADD_FLOW) {
+ extSubnetId = NatUtil.getExternalSubnetVpnId(getDataBroker(), externalIp.getSubnetId());
+ }
+ createOutboundTblEntry(dpnId, routerId, externalIp.getIpAddress(), elanId, extGwMacAddress, addOrRemove);
+ installNaptPfibFlow(routers, dpnId, routerId, extSubnetId, addOrRemove);
- //Install Inbound NAT entries
- installInboundEntry(dpnId, routerId, externalIp, elanId, extSubnetId, addOrRemove);
- installNaptPfibEntry(dpnId, routerId, addOrRemove);
+ //Install Inbound NAT entries
+ installInboundEntry(dpnId, routerId, externalIp.getIpAddress(), elanId, extSubnetId, addOrRemove);
+ installNaptPfibEntry(dpnId, routerId, addOrRemove);
- String fibExternalIp = NatUtil.validateAndAddNetworkMask(externalIp);
- Optional<Subnets> externalSubnet = NatUtil.getOptionalExternalSubnets(dataBroker, externalSubnetId);
- if (externalSubnet.isPresent()) {
- String externalVpn = externalSubnetId.getValue();
- String vpnRd = NatUtil.getVpnRd(dataBroker, externalVpn);
- vpnFootprintService.updateVpnToDpnMapping(dpnId, externalVpn, vpnRd, null /* interfaceName*/,
- new ImmutablePair<>(IpAddresses.IpAddressSource.ExternalFixedIP, fibExternalIp),
- addOrRemove == NwConstants.ADD_FLOW);
+ String fibExternalIp = NatUtil.validateAndAddNetworkMask(externalIp.getIpAddress());
+ Optional<Subnets> externalSubnet = NatUtil.getOptionalExternalSubnets(dataBroker, externalIp.getSubnetId());
+ if (externalSubnet.isPresent()) {
+ String externalVpn = externalIp.getSubnetId().getValue();
+ String vpnRd = NatUtil.getVpnRd(dataBroker, externalVpn);
+ vpnFootprintService.updateVpnToDpnMapping(dpnId, externalVpn, vpnRd, null /* interfaceName*/,
+ new ImmutablePair<>(IpAddresses.IpAddressSource.ExternalFixedIP, fibExternalIp),
+ addOrRemove == NwConstants.ADD_FLOW);
+ }
+ break;
}
}
return null;
}
+ if (null != gatewayIp.getIpv6Address()) {
+ return null;
+ }
+
InstanceIdentifier<VpnPortipToPort> portIpInst = InstanceIdentifier.builder(NeutronVpnPortipPortData.class)
.child(VpnPortipToPort.class, new VpnPortipToPortKey(gatewayIp.getIpv4Address().getValue(), vpnName))
.build();
List<ExternalFixedIps> origExtFixedIps = origExtGw.getExternalFixedIps();
HashSet<String> origFixedIpSet = new HashSet<>();
for (ExternalFixedIps fixedIps : origExtFixedIps) {
- origFixedIpSet.add(fixedIps.getIpAddress().getIpv4Address().getValue());
+ origFixedIpSet.add(String.valueOf(fixedIps.getIpAddress().getValue()));
}
List<ExternalFixedIps> newExtFixedIps = newExtGw.getExternalFixedIps();
HashSet<String> updFixedIpSet = new HashSet<>();
for (ExternalFixedIps fixedIps : newExtFixedIps) {
- updFixedIpSet.add(fixedIps.getIpAddress().getIpv4Address().getValue());
+ updFixedIpSet.add(String.valueOf(fixedIps.getIpAddress().getValue()));
}
// returns true if external subnets have changed
return !origFixedIpSet.equals(updFixedIpSet) ? true : false;
private void addExternalFixedIpToExternalIpsList(List<ExternalIps> externalIps, ExternalFixedIps fixedIps) {
Uuid subnetId = fixedIps.getSubnetId();
- String ip = fixedIps.getIpAddress().getIpv4Address().getValue();
+ String ip = String.valueOf(fixedIps.getIpAddress().getValue());
ExternalIpsBuilder externalIpsBuilder = new ExternalIpsBuilder();
externalIpsBuilder.withKey(new ExternalIpsKey(ip, subnetId));
externalIpsBuilder.setIpAddress(ip);
LOG.error("CentralizedSwitchChangeListener: setupRouterGwFlows no externalIP present");
return;
}
- Uuid subnetVpnName = externalIps.get(0).getSubnetId();
+
+ for (ExternalIps extIp: router.getExternalIps()) {
+ Uuid subnetVpnName = extIp.getSubnetId();
+ if (addOrRemove == NwConstants.ADD_FLOW) {
+ vpnManager.addRouterGwMacFlow(routerName, extGwMacAddress, primarySwitchId, extNetworkId,
+ subnetVpnName.getValue(), writeTx);
+ externalRouterDataUtil.addtoRouterMap(router);
+ } else {
+ vpnManager.removeRouterGwMacFlow(routerName, extGwMacAddress, primarySwitchId, extNetworkId,
+ subnetVpnName.getValue(), writeTx);
+ externalRouterDataUtil.removeFromRouterMap(router);
+ }
+ }
+
if (addOrRemove == NwConstants.ADD_FLOW) {
- vpnManager.addRouterGwMacFlow(routerName, extGwMacAddress, primarySwitchId, extNetworkId,
- subnetVpnName.getValue(), writeTx);
vpnManager.addArpResponderFlowsToExternalNetworkIps(routerName,
VpnUtil.getIpsListFromExternalIps(router.getExternalIps()),
extGwMacAddress, primarySwitchId, extNetworkId, writeTx);
- externalRouterDataUtil.addtoRouterMap(router);
} else {
- vpnManager.removeRouterGwMacFlow(routerName, extGwMacAddress, primarySwitchId, extNetworkId,
- subnetVpnName.getValue(), writeTx);
vpnManager.removeArpResponderFlowsToExternalNetworkIps(routerName,
VpnUtil.getIpsListFromExternalIps(router.getExternalIps()),
extGwMacAddress, primarySwitchId, extNetworkId);
- externalRouterDataUtil.removeFromRouterMap(router);
}
}
}
import org.opendaylight.netvirt.elanmanager.api.IElanService;
import org.opendaylight.netvirt.fibmanager.api.IFibManager;
import org.opendaylight.netvirt.fibmanager.api.RouteOrigin;
+import org.opendaylight.netvirt.neutronvpn.api.enums.IpVersionChoice;
import org.opendaylight.netvirt.vpnmanager.api.IVpnManager;
import org.opendaylight.netvirt.vpnmanager.api.InterfaceUtils;
import org.opendaylight.netvirt.vpnmanager.api.VpnExtraRouteHelper;
ListenableFuture<Void> future = txRunner.callWithNewWriteOnlyTransactionAndSubmit(
tx -> {
for (String fixedIp : fixedIps) {
+ IpVersionChoice ipVersionChoice = VpnUtil.getIpVersionFromString(fixedIp);
+ if (ipVersionChoice == IpVersionChoice.IPV6) {
+ continue;
+ }
installArpResponderFlowsToExternalNetworkIp(macAddress, dpnId, extInterfaceName, lportTag,
fixedIp);
}
ListenableFutures.addErrorLogging(future, LOG, "Commit transaction");
} else {
for (String fixedIp : fixedIps) {
+ IpVersionChoice ipVersionChoice = VpnUtil.getIpVersionFromString(fixedIp);
+ if (ipVersionChoice == IpVersionChoice.IPV6) {
+ continue;
+ }
installArpResponderFlowsToExternalNetworkIp(macAddress, dpnId, extInterfaceName, lportTag,
fixedIp);
}