import org.opendaylight.genius.mdsalutil.matches.MatchMetadata;
import org.opendaylight.genius.mdsalutil.matches.MatchTunnelId;
import org.opendaylight.netvirt.natservice.api.SnatServiceListener;
+import org.opendaylight.netvirt.vpnmanager.api.IVpnFootprintService;
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.AllocateIdInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdInputBuilder;
protected final ItmRpcService itmManager;
protected final OdlInterfaceRpcService odlInterfaceRpcService;
protected final IInterfaceManager interfaceManager;
+ protected final IVpnFootprintService vpnFootprintService;
protected AbstractSnatService(final DataBroker dataBroker, final IMdsalApiManager mdsalManager,
final ItmRpcService itmManager, final OdlInterfaceRpcService odlInterfaceRpcService,
final IdManagerService idManager, final NAPTSwitchSelector naptSwitchSelector,
- final IInterfaceManager interfaceManager) {
+ final IInterfaceManager interfaceManager,
+ final IVpnFootprintService vpnFootprintService) {
this.dataBroker = dataBroker;
this.mdsalManager = mdsalManager;
this.itmManager = itmManager;
this.idManager = idManager;
this.naptSwitchSelector = naptSwitchSelector;
this.odlInterfaceRpcService = odlInterfaceRpcService;
+ this.vpnFootprintService = vpnFootprintService;
}
protected DataBroker getDataBroker() {
*/
package org.opendaylight.netvirt.natservice.internal;
+import com.google.common.base.Optional;
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.ActionInfo;
import org.opendaylight.genius.mdsalutil.matches.MatchMetadata;
import org.opendaylight.genius.mdsalutil.matches.MatchTunnelId;
import org.opendaylight.genius.mdsalutil.nxmatches.NxMatchCtState;
+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;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.vpn.to.dpn.list.IpAddresses;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.ext.routers.Routers;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.ext.routers.routers.ExternalIps;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.external.subnets.Subnets;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.types.rev160517.IpPrefixOrAddress;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.NxActionNatFlags;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.NxActionNatRangePresent;
public ConntrackBasedSnatService(DataBroker dataBroker, IMdsalApiManager mdsalManager, ItmRpcService itmManager,
IdManagerService idManager, NAPTSwitchSelector naptSwitchSelector,
OdlInterfaceRpcService odlInterfaceRpcService,
- IInterfaceManager interfaceManager) {
+ IInterfaceManager interfaceManager, IVpnFootprintService vpnFootprintService) {
super(dataBroker, mdsalManager, itmManager, odlInterfaceRpcService, idManager, naptSwitchSelector,
- interfaceManager);
+ interfaceManager, vpnFootprintService);
}
@Override
installInboundEntry(dpnId, routerId, externalIp, 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);
+ }
}
@Override
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
+import org.opendaylight.netvirt.vpnmanager.api.IVpnFootprintService;
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;
public FlatVlanConntrackBasedSnatService(DataBroker dataBroker, IMdsalApiManager mdsalManager,
ItmRpcService itmManager, OdlInterfaceRpcService odlInterfaceRpcService,
IdManagerService idManager, NAPTSwitchSelector naptSwitchSelector,
- IInterfaceManager interfaceManager) {
+ IInterfaceManager interfaceManager,
+ IVpnFootprintService vpnFootprintService) {
super(dataBroker, mdsalManager, itmManager, idManager, naptSwitchSelector,
- odlInterfaceRpcService, interfaceManager);
+ odlInterfaceRpcService, interfaceManager, vpnFootprintService);
}
@Override
import org.opendaylight.infrautils.inject.AbstractLifecycle;
import org.opendaylight.netvirt.elanmanager.api.IElanService;
import org.opendaylight.netvirt.neutronvpn.interfaces.INeutronVpnManager;
+import org.opendaylight.netvirt.vpnmanager.api.IVpnFootprintService;
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;
private final ExternalRoutersListener externalRouterListener;
private final IElanService elanManager;
private final IInterfaceManager interfaceManager;
+ private final IVpnFootprintService vpnFootprintService;
@Inject
public SnatServiceImplFactory(final DataBroker dataBroker, final IMdsalApiManager mdsalManager,
final INeutronVpnManager nvpnManager,
final ExternalRoutersListener externalRouterListener,
final IElanService elanManager,
- final IInterfaceManager interfaceManager) {
+ final IInterfaceManager interfaceManager,
+ final IVpnFootprintService vpnFootprintService) {
this.dataBroker = dataBroker;
this.mdsalManager = mdsalManager;
this.itmManager = itmManager;
this.externalRouterListener = externalRouterListener;
this.elanManager = elanManager;
this.interfaceManager = interfaceManager;
+ this.vpnFootprintService = vpnFootprintService;
}
@Override
if (natMode == NatMode.Conntrack) {
return new FlatVlanConntrackBasedSnatService(dataBroker, mdsalManager, itmManager, odlInterfaceRpcService,
- idManager, naptSwitchSelector, interfaceManager);
+ idManager, naptSwitchSelector, interfaceManager, vpnFootprintService);
}
return null;
}
NatOverVxlanUtil.validateAndCreateVxlanVniPool(dataBroker, nvpnManager, idManager,
NatConstants.ODL_VNI_POOL_NAME);
return new VxlanGreConntrackBasedSnatService(dataBroker, mdsalManager, itmManager, odlInterfaceRpcService,
- idManager, naptSwitchSelector, externalRouterListener, elanManager, interfaceManager);
+ idManager, naptSwitchSelector, externalRouterListener, elanManager, interfaceManager,
+ vpnFootprintService);
}
return null;
}
import org.opendaylight.genius.mdsalutil.matches.MatchTunnelId;
import org.opendaylight.genius.mdsalutil.nxmatches.NxMatchCtState;
import org.opendaylight.netvirt.elanmanager.api.IElanService;
+import org.opendaylight.netvirt.vpnmanager.api.IVpnFootprintService;
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;
ItmRpcService itmManager, OdlInterfaceRpcService odlInterfaceRpcService,
IdManagerService idManager, NAPTSwitchSelector naptSwitchSelector,
ExternalRoutersListener externalRouterListener, IElanService elanManager,
- IInterfaceManager interfaceManager) {
+ IInterfaceManager interfaceManager,
+ IVpnFootprintService vpnFootprintService) {
super(dataBroker, mdsalManager, itmManager, idManager, naptSwitchSelector, odlInterfaceRpcService,
- interfaceManager);
+ interfaceManager, vpnFootprintService);
this.externalRouterListener = externalRouterListener;
this.elanManager = elanManager;
}