import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
+import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.ovsdb.utils.southbound.utils.SouthboundUtils;
private OdlInterfaceRpcService odlInterfaceRpcService;
private final SouthboundUtils southBoundUtils;
private final org.opendaylight.ovsdb.utils.mdsal.utils.MdsalUtils mdsalUtils;
+ private final NotificationPublishService notificationPublishService;
+
private static final String LOCAL_IP = "local_ip";
+ // TODO: make it as service
+ private ConcurrentHashMap<String, BigInteger> portToDpn;
+
public IpvcListener(final DataBroker dataBroker, final IUniPortManager uniPortManager,
final ISubnetManager subnetManager, final UniQosManager uniQosManager,
- final OdlInterfaceRpcService odlInterfaceRpcService) {
+ final OdlInterfaceRpcService odlInterfaceRpcService, final NotificationPublishService notPublishService) {
super(dataBroker);
this.uniPortManager = uniPortManager;
this.subnetManager = subnetManager;
this.odlInterfaceRpcService = odlInterfaceRpcService;
this.mdsalUtils = new org.opendaylight.ovsdb.utils.mdsal.utils.MdsalUtils(dataBroker);
this.southBoundUtils = new SouthboundUtils(mdsalUtils);
+ this.portToDpn = new ConcurrentHashMap<>();
+ this.notificationPublishService = notPublishService;
registerListener();
}
subnetManager.assignIpUniNetworks(uni.getUniId(), ipUni.getIpUniId(), ipvcId);
}
updateQos(uniToCreate);
+
+ for (BigInteger dpId : portToDpn.values()) {
+ NetvirtVpnUtils.refreshDpnGw(notificationPublishService, vpnName, dpId);
+ }
+
}
private void updateIpvc(DataTreeModification<Ipvc> modifiedDataObject) {
String interfaceName = null;
String elanName = NetvirtVpnUtils.getElanNameForVpnPort(uniId, ipUniId);
- String srcIpAddressStr = NetvirtVpnUtils
- .getIpAddressFromPrefix(NetvirtVpnUtils.ipPrefixToString(ipUni.getIpAddress()));
- IpAddress ipAddress = new IpAddress(srcIpAddressStr.toCharArray());
- NetvirtVpnUtils.registerDirectSubnetForVpn(dataBroker, new Uuid(elanName), ipAddress);
-
synchronized (vpnName.intern()) {
Long vlan = ipUni.getVlan() != null ? Long.valueOf(ipUni.getVlan().getValue()) : null;
- interfaceName = createElanInterface(vpnName, ipvcId, uniId, elanName, vlan, ipAddress, tx,
- ipUni.getSegmentationId());
+ interfaceName = createElanInterface(vpnName, ipvcId, uniId, elanName, vlan, tx, ipUni.getSegmentationId());
+
+ String portMacAddress = uni.getMacAddress().getValue();
+ NetvirtVpnUtils.registerDirectSubnetForVpn(dataBroker, vpnName, new Uuid(elanName), ipUni.getIpAddress(),
+ interfaceName, portMacAddress);
+
uniQosManager.mapUniPortBandwidthLimits(uniId, interfaceName, uniInService.getIngressBwProfile());
createVpnInterface(vpnName, uni, ipUni, interfaceName, elanName, tx);
NetvirtVpnUtils.createVpnPortFixedIp(dataBroker, vpnName, interfaceName, ipUni.getIpAddress(),
}
private String createElanInterface(String vpnName, InstanceIdentifier<Ipvc> ipvcId, String uniId, String elanName,
- Long vlan, IpAddress ipAddress, WriteTransaction tx, Long segmentationId) {
+ Long vlan, WriteTransaction tx, Long segmentationId) {
Log.info("Adding elan instance: " + elanName);
NetvirtUtils.updateElanInstance(elanName, tx, segmentationId);
- NetvirtVpnUtils.registerDirectSubnetForVpn(dataBroker, new Uuid(elanName), ipAddress);
Log.info("Added trunk interface for uni {} vlan: {}", uniId, vlan);
if (vlan != null) {
IpUni ipUni, String interfaceName, String elanName, WriteTransaction tx) {
Log.info("Adding vpn interface: " + interfaceName);
- BigInteger dpId = NetvirtUtils.getDpnForInterface(odlInterfaceRpcService, interfaceName);
+ BigInteger dpId = getPortDpId(interfaceName);
IpAddress nextHop = getNodeIP(dpId);
NetvirtVpnUtils.createUpdateVpnInterface(vpnName, interfaceName, nextHop, ipUni.getIpAddress(),
uni.getMacAddress().getValue(), true, null, elanName, tx);
}
synchronized (vpnName.intern()) {
+ NetvirtVpnUtils.unregisterDirectSubnetForVpn(dataBroker, vpnName, new Uuid(vpnElans.getElanId()), vpnElans.getElanPort());
uniQosManager.unMapUniPortBandwidthLimits(uniId, vpnElans.getElanPort());
NetvirtVpnUtils.removeLearnedVpnVipToPort(dataBroker, vpnName, vpnElans.getElanPort());
removeVpnInterface(vpnName, vpnElans, uniId, ipUni);
String interfaceName = vpnElans.getElanPort();
Log.info("Removing elan instance {} and interface {}: ", elanName, interfaceName);
- NetvirtVpnUtils.unregisterDirectSubnetForVpn(dataBroker, new Uuid(elanName));
NetvirtUtils.deleteElanInterface(interfaceName, tx);
NetvirtUtils.deleteElanInstance(elanName, tx);
MdsalUtils.commitTransaction(tx);
return node;
}
+
+ private BigInteger getPortDpId(String logicalPortId) {
+ BigInteger dpId = BigInteger.ZERO;
+ if (portToDpn.containsKey(logicalPortId)) {
+ dpId = portToDpn.get(logicalPortId);
+ } else {
+ dpId = NetvirtUtils.getDpnForInterface(odlInterfaceRpcService, logicalPortId);
+ portToDpn.put(logicalPortId, dpId);
+ }
+ return dpId;
+ }
}
package org.opendaylight.unimgr.mef.netvirt;
+import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.ElanInstances;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.instances.ElanInstance;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.instances.ElanInstanceKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.AddDpnEventBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.Adjacencies;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.AdjacenciesBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.LearntVpnVipToPortData;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.VpnInstanceOpData;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.VpnInstanceToVpnId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.add.dpn.event.AddEventDataBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.adjacency.list.Adjacency;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.adjacency.list.AdjacencyBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.adjacency.list.AdjacencyKey;
}
public static void createUpdateVpnInterface(String vpnName, String interfaceName, IpAddress primaryNextHop,
- IpPrefix ifPrefix,
- String macAddress, boolean primary, IpPrefix gwIpAddress, String directSubnetId, WriteTransaction tx) {
+ IpPrefix ifPrefix, String macAddress, boolean primary, IpPrefix gwIpAddress, String directSubnetId,
+ WriteTransaction tx) {
synchronized (interfaceName.intern()) {
String ipAddress = null;
String nextHopIp = null;
tx.delete(LogicalDatastoreType.CONFIGURATION, id);
}
- public static void registerDirectSubnetForVpn(DataBroker dataBroker, Uuid subnetName, IpAddress gwIpAddress) {
+ public static void registerDirectSubnetForVpn(DataBroker dataBroker, String vpnName, Uuid subnetName, IpPrefix interfacePrefix, String interfaceName, String portMacAddress) {
final SubnetKey subnetkey = new SubnetKey(subnetName);
final InstanceIdentifier<Subnet> subnetidentifier = InstanceIdentifier.create(Neutron.class)
.child(Subnets.class).child(Subnet.class, subnetkey);
+ String interfaceIp = NetvirtVpnUtils.getIpAddressFromPrefix(NetvirtVpnUtils.ipPrefixToString(interfacePrefix));
+ IpAddress ipAddress = new IpAddress(interfaceIp.toCharArray());
+
+ logger.info("Adding subnet {}", ipAddress);
SubnetBuilder subnetBuilder = new SubnetBuilder();
subnetBuilder.setIpVersion(IpVersionV4.class);
- subnetBuilder.setGatewayIp(gwIpAddress);
+ subnetBuilder.setGatewayIp(ipAddress);
subnetBuilder.setKey(subnetkey);
+ subnetBuilder.setNetworkId(subnetName);
MdsalUtils.syncWrite(dataBroker, LogicalDatastoreType.CONFIGURATION, subnetidentifier, subnetBuilder.build());
+
+ logger.info("Adding subnet {} {} to elan map", subnetName, subnetName);
+ createSubnetToNetworkMapping(dataBroker, subnetName, subnetName);
+
+ String subnetIp = getSubnetFromPrefix(interfacePrefix);
+ logger.info("Adding subnet {} {} to vpn {}", subnetName, subnetIp, vpnName);
+ updateSubnetNode(dataBroker, new Uuid(vpnName), subnetName, subnetIp, portMacAddress);
+
+ logger.info("Adding port {} to subnet {}", interfaceName, subnetName);
+ updateSubnetmapNodeWithPorts(dataBroker, subnetName, new Uuid(interfaceName), null, vpnName);
}
- public static void unregisterDirectSubnetForVpn(DataBroker dataBroker, Uuid subnetName) {
+ public static void unregisterDirectSubnetForVpn(DataBroker dataBroker, String vpnName, Uuid subnetName, String interfaceName) {
final SubnetKey subnetkey = new SubnetKey(subnetName);
final InstanceIdentifier<Subnet> subnetidentifier = InstanceIdentifier.create(Neutron.class)
.child(Subnets.class).child(Subnet.class, subnetkey);
MdsalUtils.syncDelete(dataBroker, LogicalDatastoreType.CONFIGURATION, subnetidentifier);
+
+
+ logger.info("Removing port {} from subnet {}", interfaceName, subnetName);
+ updateSubnetmapNodeWithPorts(dataBroker, subnetName, null, new Uuid(interfaceName), vpnName);
+
+ logger.info("Removing subnet {} from vpn {}", subnetName, vpnName);
+ removeSubnetNode(dataBroker, subnetName);
+
+ logger.info("Removing subnet {} to elan map", subnetName);
+ removeSubnetToNetworkMapping(dataBroker, subnetName);
+
+ logger.info("Finished remove subnet {}", subnetName);
}
- public static void addDirectSubnetToVpn(DataBroker dataBroker,
+ public static void publishDirectSubnetToVpn(DataBroker dataBroker,
final NotificationPublishService notificationPublishService, String vpnName, String subnetName,
IpPrefix subnetIpPrefix, String interfaceName, String intfMac, int waitForElan) {
InstanceIdentifier<ElanInstance> elanIdentifierId = NetvirtUtils.getElanInstanceInstanceIdentifier(subnetName);
}
Uuid subnetId = new Uuid(subnetName);
- logger.info("Adding subnet {} {} to elan map", subnetId, subnetId);
- createSubnetToNetworkMapping(dataBroker, subnetId, subnetId);
-
String subnetIp = getSubnetFromPrefix(ipPrefixToString(subnetIpPrefix));
- logger.info("Adding subnet {} {} to vpn {}", subnetName, subnetIp, vpnName);
- updateSubnetNode(dataBroker, new Uuid(vpnName), subnetId, subnetIp, intfMac);
-
- logger.info("Adding port {} to subnet {}", interfaceName, subnetName);
- updateSubnetmapNodeWithPorts(dataBroker, subnetId, new Uuid(interfaceName), null, vpnName);
Optional<ElanInstance> elanInstance = MdsalUtils.read(dataBroker, LogicalDatastoreType.CONFIGURATION,
elanIdentifierId);
logger.info("Publish subnet {}", subnetName);
publishSubnetAddNotification(notificationPublishService, subnetId, subnetIp, vpnName, elanTag);
logger.info("Finished Working on subnet {}", subnetName);
+
+ }
+
+ public static void refreshDpnGw(final NotificationPublishService notificationPublishService, String vpnName, BigInteger dpId) {
+
+ AddDpnEventBuilder addDpnEventBuilder = new AddDpnEventBuilder();
+ AddEventDataBuilder eventData = new AddEventDataBuilder();
+ eventData.setVpnName(vpnName);
+ eventData.setDpnId(dpId);
+
+ addDpnEventBuilder.setAddEventData(eventData.build());
+ try {
+ logger.info("Refrehein dpId {}", dpId);
+ notificationPublishService.putNotification(addDpnEventBuilder.build());
+ } catch (InterruptedException e) {
+ logger.error("Fail to publish notification {}", addDpnEventBuilder, e);
+ throw new RuntimeException(e.getMessage());
+ }
}
- public static void removeDirectSubnetFromVpn(DataBroker dataBroker,
+ public static void publishRemoveDirectSubnetFromVpn(DataBroker dataBroker,
final NotificationPublishService notificationPublishService, String vpnName, String subnetName,
String interfaceName) {
InstanceIdentifier<ElanInstance> elanIdentifierId = InstanceIdentifier.builder(ElanInstances.class)
logger.info("Publish subnet remove {}", subnetName);
publishSubnetRemoveNotification(notificationPublishService, subnetId, vpnName, elanTag);
- logger.info("Removing port {} from subnet {}", interfaceName, subnetName);
- updateSubnetmapNodeWithPorts(dataBroker, subnetId, null, new Uuid(interfaceName), vpnName);
-
- logger.info("Removing subnet {} from vpn {}", subnetName, vpnName);
- removeSubnetNode(dataBroker, new Uuid(vpnName));
-
- logger.info("Removing subnet {} to elan map", subnetId);
- removeSubnetToNetworkMapping(dataBroker, subnetId);
-
- logger.info("Finished Working on subnet {}", subnetName);
+ logger.info("Finished publish remove on subnet {}", subnetName);
}
private static void createSubnetToNetworkMapping(DataBroker dataBroker, Uuid subnetId, Uuid networkId) {
}
builder.setRouterId(new Uuid(vpnName));
builder.setPortList(portList);
+ } else {
+ builder.setRouterId(new Uuid(vpnName));
+ builder.setPortList(new ArrayList<>());
}
subnetmap = builder.build();
MDSALUtil.syncWrite(dataBroker, LogicalDatastoreType.CONFIGURATION, id, subnetmap);
builder.setSubnetId(subnetId);
builder.setSubnetIp(subnetIp);
builder.setVpnName(vpnName);
- builder.setExternalVpn(true);
+ builder.setBgpVpn(true);
builder.setElanTag(elanTag);
try {
builder.setSubnetId(subnetId);
builder.setVpnName(vpnName);
- builder.setExternalVpn(true);
+ builder.setBgpVpn(true);
builder.setElanTag(elanTag);
try {
private void createNetwork(Subnet newSubnet, Identifier45 nwUniId, Identifier45 nwIpUniId) {
String subnetStr = NetvirtVpnUtils.ipPrefixToString(newSubnet.getSubnet());
- InstanceIdentifier<Ipvc> ipvcId = findService(nwUniId, nwIpUniId, getMefServices());
- if (ipvcId == null) {
- Log.info("Subnet Uni {} IpUNI {} is not assosiated to service", nwUniId, nwIpUniId);
- return;
- }
- IpvcVpn ipvcVpn = MefServicesUtils.getOperIpvcVpn(dataBroker, ipvcId);
- if (ipvcVpn == null || ipvcVpn.getVpnElans() == null) {
- Log.error("Subnet Uni {} IpUNI {} is not operational", nwUniId, nwIpUniId);
- return;
- }
- VpnElans vpnElan = MefServicesUtils.findVpnForNetwork(newSubnet, ipvcVpn);
- if (vpnElan == null) {
- Log.error("Subnet Uni {} IpUNI {} for network {} is not operational", nwUniId, nwIpUniId, subnetStr);
- return;
- }
- if (MefServicesUtils.findNetwork(newSubnet, vpnElan) != null) {
- Log.info("Network {} exists already", subnetStr);
- return;
- }
+ synchronized (subnetStr.intern()) {
+ InstanceIdentifier<Ipvc> ipvcId = findService(nwUniId, nwIpUniId, getMefServices());
+ if (ipvcId == null) {
+ Log.info("Subnet Uni {} IpUNI {} is not assosiated to service", nwUniId, nwIpUniId);
+ return;
+ }
+ IpvcVpn ipvcVpn = MefServicesUtils.getOperIpvcVpn(dataBroker, ipvcId);
+ if (ipvcVpn == null || ipvcVpn.getVpnElans() == null) {
+ Log.error("Subnet Uni {} IpUNI {} is not operational", nwUniId, nwIpUniId);
+ return;
+ }
+ VpnElans vpnElan = MefServicesUtils.findVpnForNetwork(newSubnet, ipvcVpn);
+ if (vpnElan == null) {
+ Log.error("Subnet Uni {} IpUNI {} for network {} is not operational", nwUniId, nwIpUniId, subnetStr);
+ return;
+ }
+ if (MefServicesUtils.findNetwork(newSubnet, vpnElan) != null) {
+ Log.info("Network {} exists already", subnetStr);
+ return;
+ }
- String vpnId = ipvcVpn.getVpnId();
- synchronized (vpnId.intern()) {
+ String vpnId = ipvcVpn.getVpnId();
if (newSubnet.getGateway() == null) {
checkCreateDirectNetwork(newSubnet, ipvcVpn, ipvcId, vpnElan);
} else {
createNonDirectNetwork(newSubnet, ipvcVpn, ipvcId, vpnElan);
}
+
+ MefServicesUtils.addOperIpvcVpnElan(dataBroker, ipvcId, ipvcVpn.getVpnId(), nwUniId, nwIpUniId,
+ vpnElan.getElanId(), vpnElan.getElanPort(), Collections.singletonList(subnetStr));
}
- MefServicesUtils.addOperIpvcVpnElan(dataBroker, ipvcId, ipvcVpn.getVpnId(), nwUniId, nwIpUniId,
- vpnElan.getElanId(), vpnElan.getElanPort(), Collections.singletonList(subnetStr));
}
}
String portMacAddress = operUni.getMacAddress().getValue();
- NetvirtVpnUtils.addDirectSubnetToVpn(dataBroker, notificationPublishService, ipvcVpn.getVpnId(),
+ NetvirtVpnUtils.publishDirectSubnetToVpn(dataBroker, notificationPublishService, ipvcVpn.getVpnId(),
vpnElan.getElanId(), newSubnet.getSubnet(), vpnElan.getElanPort(), portMacAddress, waitForElanInterval);
}
Subnet deletedSubnet = deletedDataObject.getRootNode().getDataBefore();
Identifier45 dlUniId = deletedSubnet.getUniId();
Identifier45 dlIpUniId = deletedSubnet.getIpUniId();
- InstanceIdentifier<Ipvc> ipvcId = findService(dlUniId, dlIpUniId, getMefServicesOper());
+ InstanceIdentifier<Ipvc> ipvcId = findServiceOper(dlUniId, dlIpUniId, getMefServicesOper());
if (ipvcId == null) {
Log.info("Subnet Uni {} IpUNI {} for deleted network is not assosiated to service", dlUniId, dlIpUniId);
return;
private void removeNetwork(Subnet dlSubnet, Identifier45 dlUniId, Identifier45 dlIpUniId,
InstanceIdentifier<Ipvc> ipvcId) {
String subnetStr = NetvirtVpnUtils.ipPrefixToString(dlSubnet.getSubnet());
- IpvcVpn ipvcVpn = MefServicesUtils.getOperIpvcVpn(dataBroker, ipvcId);
- if (ipvcVpn == null || ipvcVpn.getVpnElans() == null) {
- Log.error("Subnet Uni {} IpUNI {} is not operational", dlUniId, dlIpUniId);
- return;
- }
- VpnElans vpnElan = MefServicesUtils.findVpnForNetwork(dlSubnet, ipvcVpn);
- if (vpnElan == null) {
- Log.error("Trying to remove non-operational network {}", subnetStr);
- return;
- }
- if (MefServicesUtils.findNetwork(dlSubnet, vpnElan) == null) {
- Log.error("Trying to remove non-operational network {}", subnetStr);
- return;
- }
+ synchronized (subnetStr.intern()) {
+
+ IpvcVpn ipvcVpn = MefServicesUtils.getOperIpvcVpn(dataBroker, ipvcId);
+ if (ipvcVpn == null || ipvcVpn.getVpnElans() == null) {
+ Log.error("Subnet Uni {} IpUNI {} is not operational", dlUniId, dlIpUniId);
+ return;
+ }
+ VpnElans vpnElan = MefServicesUtils.findVpnForNetwork(dlSubnet, ipvcVpn);
+ if (vpnElan == null) {
+ Log.error("Trying to remove non-operational network {}", subnetStr);
+ return;
+ }
+ if (MefServicesUtils.findNetwork(dlSubnet, vpnElan) == null) {
+ Log.error("Trying to remove non-operational network {}", subnetStr);
+ return;
+ }
- String vpnId = ipvcVpn.getVpnId();
- synchronized (vpnId.intern()) {
+ String vpnId = ipvcVpn.getVpnId();
if (dlSubnet.getGateway() == null) {
removeDirectNetwork(dlSubnet, ipvcVpn, ipvcId);
} else {
removeNonDirectNetwork(dlSubnet, ipvcVpn, ipvcId);
}
+
+ MefServicesUtils.removeOperIpvcSubnet(dataBroker, ipvcId, ipvcVpn.getVpnId(), dlUniId, dlIpUniId,
+ vpnElan.getElanId(), vpnElan.getElanPort(), subnetStr);
}
- MefServicesUtils.removeOperIpvcSubnet(dataBroker, ipvcId, ipvcVpn.getVpnId(), dlUniId, dlIpUniId,
- vpnElan.getElanId(), vpnElan.getElanPort(), subnetStr);
}
private void removeDirectNetwork(Subnet deletedSubnet, IpvcVpn ipvcVpn, InstanceIdentifier<Ipvc> ipvcId) {
return;
}
- NetvirtVpnUtils.removeDirectSubnetFromVpn(dataBroker, notificationPublishService, ipvcVpn.getVpnId(),
+ NetvirtVpnUtils.publishRemoveDirectSubnetFromVpn(dataBroker, notificationPublishService, ipvcVpn.getVpnId(),
vpnElan.getElanId(), vpnElan.getElanPort());
}
Log.info("Uni {} IpUni {} is not assosiated with service", uniId, ipUniId);
return null;
}
+
+ private InstanceIdentifier<Ipvc> findServiceOper(Identifier45 uniId, Identifier45 ipUniId,
+ Optional<MefServices> mefServices) {
+ if (!mefServices.isPresent() || mefServices.get() == null) {
+ Log.info("Uni {} IpUni {} is not assosiated with service", uniId, ipUniId);
+ return null;
+ }
+ for (MefService service : mefServices.get().getMefService()) {
+ if (service.getMefServiceChoice() instanceof IpvcChoice) {
+ Ipvc ipvc = ((IpvcChoice) service.getMefServiceChoice()).getIpvc();
+ IpvcVpn ipvcVpn = ipvc.getAugmentation(IpvcVpn.class);
+ if (ipvcVpn == null || ipvcVpn.getVpnElans() == null) {
+ Log.info("Uni {} IpUni {} is not assosiated with service", uniId, ipUniId);
+ return null;
+ }
+ List<VpnElans> vpnElans = ipvcVpn.getVpnElans();
+ for (VpnElans vpnElan : vpnElans) {
+ if (vpnElan.getUniId().equals(uniId) && vpnElan.getIpUniId().equals(ipUniId)) {
+ Log.info("Find service {} for uni {} ipuni {}", service.getSvcId(), uniId, ipUniId);
+ return MefServicesUtils.getIpvcInstanceIdentifier(service.getSvcId());
+ }
+ }
+ }
+ }
+ Log.info("Uni {} IpUni {} is not assosiated with service", uniId, ipUniId);
+ return null;
+ }
}
<argument ref="uniPortManager" />
<argument ref="subnetListener" />
<argument ref="uniQosManager" />
- <argument ref="odlInterfaceRpcService" />
+ <argument ref="odlInterfaceRpcService" />
+ <argument ref="notificationPublishService" />
</bean>
<bean id="subnetListener" class="org.opendaylight.unimgr.mef.netvirt.SubnetListener">