this.interfaceManager = interfaceManager;
}
- public void installExtNetGroupEntires(Subnetmap subnetMap) {
+ public void installExtNetGroupEntries(Subnetmap subnetMap) {
if (subnetMap == null) {
LOG.trace("Subnetmap is null");
return;
installExtNetGroupEntries(subnetMap, macAddress);
}
- public void removeExtNetGroupEntires(Subnetmap subnetMap) {
- removeExtNetGroupEntries(subnetMap);
- }
-
public void installExtNetGroupEntries(Uuid subnetId, String macAddress) {
Subnetmap subnetMap = NatUtil.getSubnetMap(broker, subnetId);
if (NatUtil.isIPv6Subnet(subnetMap.getSubnetIp())) {
installExtNetGroupEntries(subnetMap, macAddress);
}
+ public void installExtNetGroupEntries(Uuid networkId, BigInteger dpnId) {
+ if (networkId == null) {
+ return;
+ }
+
+ List<Uuid> subnetIds = NatUtil.getSubnetIdsFromNetworkId(broker, networkId);
+ if (subnetIds == null || subnetIds.isEmpty()) {
+ LOG.trace("No subnet ids associated network id {}", networkId.getValue());
+ return;
+ }
+
+ for (Uuid subnetId : subnetIds) {
+ String macAddress = NatUtil.getSubnetGwMac(broker, subnetId, networkId.getValue());
+ installExtNetGroupEntry(networkId, subnetId, dpnId, macAddress);
+ }
+ }
+
private void installExtNetGroupEntries(Subnetmap subnetMap, String macAddress) {
if (subnetMap == null) {
LOG.trace("Subnetmap is null");
LOG.info("Installing ext-net group {} entry for subnet {} with macAddress {} (extInterfaces: {})",
groupId, subnetName, macAddress, Arrays.toString(extInterfaces.toArray()));
for (String extInterface : extInterfaces) {
- GroupEntity groupEntity = buildExtNetGroupEntity(macAddress, subnetName, groupId, extInterface);
- if (groupEntity != null) {
- mdsalManager.syncInstallGroup(groupEntity, FIXED_DELAY_IN_MILLISECONDS);
- }
+ installExtNetGroupEntry(groupId, subnetName, extInterface, macAddress);
+ }
+ }
+
+ private void installExtNetGroupEntry(Uuid networkId, Uuid subnetId, BigInteger dpnId, String macAddress) {
+ String subnetName = subnetId.getValue();
+ String extInterface = elanService.getExternalElanInterface(networkId.getValue(), dpnId);
+ if (extInterface == null) {
+ LOG.trace("No external ELAN interface attached to subnet {} DPN id {}", subnetName, dpnId);
+ return;
+ }
+
+ long groupId = NatUtil.createGroupId(NatUtil.getGroupIdKey(subnetName), idManager);
+ LOG.info("Installing ext-net group {} entry for subnet {} with macAddress {} (extInterface: {})", groupId,
+ subnetName, macAddress, extInterface);
+ installExtNetGroupEntry(groupId, subnetName, extInterface, macAddress);
+ }
+
+ private void installExtNetGroupEntry(long groupId, String subnetName, String extInterface, String macAddress) {
+ GroupEntity groupEntity = buildExtNetGroupEntity(macAddress, subnetName, groupId, extInterface);
+ if (groupEntity != null) {
+ mdsalManager.syncInstallGroup(groupEntity, FIXED_DELAY_IN_MILLISECONDS);
}
}
- private void removeExtNetGroupEntries(Subnetmap subnetMap) {
+ public void removeExtNetGroupEntries(Subnetmap subnetMap) {
if (subnetMap == null) {
return;
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.snatint.ip.port.map.intip.port.map.ip.port.IntIpProtoTypeKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.NeutronRouterDpns;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.VpnIdToVpnInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.NetworkMaps;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.NeutronVpnPortipPortData;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.Subnetmaps;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.VpnMaps;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.networkmaps.NetworkMap;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.networkmaps.NetworkMapKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.neutron.vpn.portip.port.data.VpnPortipToPort;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.neutron.vpn.portip.port.data.VpnPortipToPortKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.neutron.router.dpns.RouterDpnList;
return subnetOpt.isPresent() ? subnetOpt.get() : null;
}
+ public static List<Uuid> getSubnetIdsFromNetworkId(DataBroker broker, Uuid networkId) {
+ InstanceIdentifier<NetworkMap> id = InstanceIdentifier.builder(NetworkMaps.class)
+ .child(NetworkMap.class, new NetworkMapKey(networkId)).build();
+ Optional<NetworkMap> optionalNetworkMap = read(broker, LogicalDatastoreType.CONFIGURATION, id);
+ return optionalNetworkMap.isPresent() ? optionalNetworkMap.get().getSubnetIdList() : null;
+ }
+
public static String getSubnetGwMac(DataBroker broker, Uuid subnetId, String vpnName) {
if (subnetId == null) {
return null;
private final SNATDefaultRouteProgrammer snatDefaultRouteProgrammer;
private final NaptSwitchHA naptSwitchHA;
private final IdManagerService idManager;
+ private final ExternalNetworkGroupInstaller extNetGroupInstaller;
public RouterDpnChangeListener(final DataBroker dataBroker, final IMdsalApiManager mdsalManager,
final SNATDefaultRouteProgrammer snatDefaultRouteProgrammer,
final NaptSwitchHA naptSwitchHA,
- final IdManagerService idManager) {
+ final IdManagerService idManager,
+ final ExternalNetworkGroupInstaller extNetGroupInstaller) {
super(DpnVpninterfacesList.class);
this.dataBroker = dataBroker;
this.mdsalManager = mdsalManager;
this.snatDefaultRouteProgrammer = snatDefaultRouteProgrammer;
this.naptSwitchHA = naptSwitchHA;
this.idManager = idManager;
+ this.extNetGroupInstaller = extNetGroupInstaller;
}
public void init() {
LOG.debug("Installing default route in FIB on dpn {} for routerId {} with vpnId {}...", dpnId,routerId,vpnId);
snatDefaultRouteProgrammer.installDefNATRouteInDPN(dpnId, vpnId, routId);
}
+ extNetGroupInstaller.installExtNetGroupEntries(networkId, dpnId);
if (routerData.get().isEnableSnat()) {
LOG.info("SNAT enabled for router {}", routerId);
protected void remove(InstanceIdentifier<Subnetmap> identifier, Subnetmap subnetmap) {
LOG.trace("SubnetmapListener remove subnetmap method - key: " + identifier + ", value" + subnetmap);
NatServiceCounters.subnetmap_remove.inc();
- externalNetworkGroupInstaller.removeExtNetGroupEntires(subnetmap);
+ externalNetworkGroupInstaller.removeExtNetGroupEntries(subnetmap);
}
@Override
protected void update(InstanceIdentifier<Subnetmap> identifier, Subnetmap subnetmapBefore, Subnetmap subnetmapAfter) {
LOG.trace("SubnetmapListener update subnetmap method - key: " + identifier + ", original=" + subnetmapBefore + ", update=" + subnetmapAfter);
NatServiceCounters.subnetmap_update.inc();
- externalNetworkGroupInstaller.installExtNetGroupEntires(subnetmapAfter);
+ externalNetworkGroupInstaller.installExtNetGroupEntries(subnetmapAfter);
}
@Override
protected void add(InstanceIdentifier<Subnetmap> identifier, Subnetmap subnetmap) {
LOG.trace("SubnetmapListener add subnetmap method - key: " + identifier + ", value=" + subnetmap);
NatServiceCounters.subnetmap_add.inc();
- externalNetworkGroupInstaller.installExtNetGroupEntires(subnetmap);
+ externalNetworkGroupInstaller.installExtNetGroupEntries(subnetmap);
}
@Override
<argument ref="sNATDefaultRouteProgrammer" />
<argument ref="naptSwitchHA" />
<argument ref="idManagerService" />
+ <argument ref="externalNetworkGroupInstaller" />
</bean>
<bean id="routerToVpnListener"