}
updateQos(uniToCreate);
- for (BigInteger dpId : portToDpn.values()) {
- NetvirtVpnUtils.refreshDpnGw(notificationPublishService, vpnName, dpId);
- }
-
}
private void updateIpvc(DataTreeModification<Ipvc> modifiedDataObject) {
synchronized (vpnName.intern()) {
Long vlan = ipUni.getVlan() != null ? Long.valueOf(ipUni.getVlan().getValue()) : null;
- interfaceName = createElanInterface(vpnName, ipvcId, uniId, elanName, vlan, tx, ipUni.getSegmentationId());
+ interfaceName = createElanInterface(vpnName, ipvcId, uniId, elanName, vlan, ipUni.getSegmentationId());
String portMacAddress = uni.getMacAddress().getValue();
NetvirtVpnUtils.registerDirectSubnetForVpn(dataBroker, vpnName, new Uuid(elanName), ipUni.getIpAddress(),
}
private String createElanInterface(String vpnName, InstanceIdentifier<Ipvc> ipvcId, String uniId, String elanName,
- Long vlan, WriteTransaction tx, Long segmentationId) {
+ Long vlan, Long segmentationId) {
Log.info("Adding elan instance: " + elanName);
+ WriteTransaction tx = MdsalUtils.createTransaction(dataBroker);
NetvirtUtils.updateElanInstance(elanName, tx, segmentationId);
Log.info("Added trunk interface for uni {} vlan: {}", uniId, vlan);
Log.info("Adding elan interface: " + interfaceName);
NetvirtUtils.createElanInterface(elanName, interfaceName, EtreeInterfaceType.Root, false, tx);
+ MdsalUtils.commitTransaction(tx);
return interfaceName;
}
}
synchronized (vpnName.intern()) {
- NetvirtVpnUtils.unregisterDirectSubnetForVpn(dataBroker, vpnName, new Uuid(vpnElans.getElanId()), vpnElans.getElanPort());
+ 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);
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.VpnInstanceOpDataEntryKey;
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.SubnetAddedToVpnBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.SubnetDeletedFromVpnBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.Subnetmaps;
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.NetworkMapBuilder;
logger.info("Finished remove subnet {}", subnetName);
}
- 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);
-
- @SuppressWarnings("resource") // AutoCloseable
- DataWaitListener<ElanInstance> elanTagWaiter = new DataWaitListener<>(dataBroker, elanIdentifierId, 10,
- LogicalDatastoreType.CONFIGURATION, el -> el.getElanTag());
- if (!elanTagWaiter.waitForData()) {
- logger.error("Trying to add invalid elan {} to vpn {}", subnetName, vpnName);
- return;
- }
-
- Uuid subnetId = new Uuid(subnetName);
- String subnetIp = getSubnetFromPrefix(ipPrefixToString(subnetIpPrefix));
-
- Optional<ElanInstance> elanInstance = MdsalUtils.read(dataBroker, LogicalDatastoreType.CONFIGURATION,
- elanIdentifierId);
- Long elanTag = elanInstance.get().getElanTag();
-
- 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 publishRemoveDirectSubnetFromVpn(DataBroker dataBroker,
- final NotificationPublishService notificationPublishService, String vpnName, String subnetName,
- String interfaceName) {
- InstanceIdentifier<ElanInstance> elanIdentifierId = InstanceIdentifier.builder(ElanInstances.class)
- .child(ElanInstance.class, new ElanInstanceKey(subnetName)).build();
- Optional<ElanInstance> elanInstance = MdsalUtils.read(dataBroker, LogicalDatastoreType.CONFIGURATION,
- elanIdentifierId);
- if (!elanInstance.isPresent()) {
- logger.error("Trying to remove invalid elan {} to vpn {}", subnetName, vpnName);
- return;
- }
- Long elanTag = elanInstance.get().getElanTag() != null ? elanInstance.get().getElanTag()
- : elanInstance.get().getSegmentationId();
- Uuid subnetId = new Uuid(subnetName);
-
- logger.info("Publish subnet remove {}", subnetName);
- publishSubnetRemoveNotification(notificationPublishService, subnetId, vpnName, elanTag);
-
- logger.info("Finished publish remove on subnet {}", subnetName);
- }
-
private static void createSubnetToNetworkMapping(DataBroker dataBroker, Uuid subnetId, Uuid networkId) {
InstanceIdentifier<NetworkMap> networkMapIdentifier = getNetworkMapIdentifier(networkId);
Optional<NetworkMap> optionalNetworkMap = MdsalUtils.read(dataBroker, LogicalDatastoreType.CONFIGURATION,
}
protected static void updateSubnetNode(DataBroker dataBroker, Uuid vpnId, Uuid subnetId, String subnetIp,
- String intfMac) {
+ String intfMac) {
+ InstanceIdentifier<ElanInstance> elanIdentifierId = NetvirtUtils.getElanInstanceInstanceIdentifier(subnetId.getValue());
+ @SuppressWarnings("resource") // AutoCloseable
+ DataWaitListener<ElanInstance> elanTagWaiter = new DataWaitListener<>(dataBroker, elanIdentifierId, 10,
+ LogicalDatastoreType.CONFIGURATION, el -> el.getElanTag());
+ if (!elanTagWaiter.waitForData()) {
+ logger.error("Trying to add invalid elan {} to vpn {}", subnetId.getValue(), vpnId.getValue());
+ return;
+ }
+
Subnetmap subnetmap = null;
SubnetmapBuilder builder = null;
InstanceIdentifier<Subnetmap> id = InstanceIdentifier.builder(Subnetmaps.class)
builder.setSubnetIp(subnetIp);
builder.setNetworkId(subnetId);
builder.setVpnId(vpnId);
+ builder.setRouterId(vpnId);
builder.setRouterIntfMacAddress(intfMac);
subnetmap = builder.build();
return InstanceIdentifier.builder(LearntVpnVipToPortData.class).child(LearntVpnVipToPort.class).build();
}
- private static void publishSubnetAddNotification(final NotificationPublishService notificationPublishService,
- Uuid subnetId, String subnetIp, String vpnName, Long elanTag) {
- SubnetAddedToVpnBuilder builder = new SubnetAddedToVpnBuilder();
-
- logger.info("publish notification called for network creation");
-
- builder.setSubnetId(subnetId);
- builder.setSubnetIp(subnetIp);
- builder.setVpnName(vpnName);
- builder.setBgpVpn(true);
- builder.setElanTag(elanTag);
-
- try {
- notificationPublishService.putNotification(builder.build());
- } catch (InterruptedException e) {
- logger.error("Fail to publish notification {}", builder, e);
- throw new RuntimeException(e.getMessage());
- }
- }
-
- private static void publishSubnetRemoveNotification(final NotificationPublishService notificationPublishService,
- Uuid subnetId, String vpnName, Long elanTag) {
- SubnetDeletedFromVpnBuilder builder = new SubnetDeletedFromVpnBuilder();
-
- logger.info("publish notification called for network deletion");
-
- builder.setSubnetId(subnetId);
- builder.setVpnName(vpnName);
- builder.setBgpVpn(true);
- builder.setElanTag(elanTag);
-
- try {
- notificationPublishService.putNotification(builder.build());
- } catch (InterruptedException e) {
- logger.error("Fail to publish notification {}", builder, e);
- throw new RuntimeException(e.getMessage());
- }
- }
-
public static void sendArpRequest(OdlArputilService arpUtilService, IpAddress srcIpAddress, IpAddress dstIpAddress,
String interf) {
try {
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.common.api.data.LogicalDatastoreType;
import org.opendaylight.unimgr.api.UnimgrDataTreeChangeListener;
import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.Subnets;
public class SubnetListener extends UnimgrDataTreeChangeListener<Subnet> implements ISubnetManager {
private static final Logger Log = LoggerFactory.getLogger(SubnetListener.class);
private ListenerRegistration<SubnetListener> subnetListenerRegistration;
- private final NotificationPublishService notificationPublishService;
private final IGwMacListener gwMacListener;
- private final int waitForElanInterval;
- public SubnetListener(final DataBroker dataBroker, final NotificationPublishService notPublishService,
- final IGwMacListener gwMacListener, int sleepInterval) {
+ public SubnetListener(final DataBroker dataBroker, final IGwMacListener gwMacListener) {
super(dataBroker);
- this.notificationPublishService = notPublishService;
this.gwMacListener = gwMacListener;
- this.waitForElanInterval = sleepInterval;
registerListener();
}
return;
}
- String vpnId = ipvcVpn.getVpnId();
if (newSubnet.getGateway() == null) {
- checkCreateDirectNetwork(newSubnet, ipvcVpn, ipvcId, vpnElan);
+ Log.trace("Direct subnet removed {}", newSubnet.getSubnet());
} else {
createNonDirectNetwork(newSubnet, ipvcVpn, ipvcId, vpnElan);
}
subnet);
}
- private void checkCreateDirectNetwork(Subnet newSubnet, IpvcVpn ipvcVpn, InstanceIdentifier<Ipvc> ipvcId,
- VpnElans vpnElan) {
- if (newSubnet.getGateway() != null) {
- return;
- }
-
- org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni operUni = MefInterfaceUtils
- .getUni(dataBroker, newSubnet.getUniId().getValue(), LogicalDatastoreType.OPERATIONAL);
- if (operUni == null) {
- Log.error("Uni {} for network {} is not operational", newSubnet.getUniId(), newSubnet.getSubnet());
- return;
- }
- String portMacAddress = operUni.getMacAddress().getValue();
-
- NetvirtVpnUtils.publishDirectSubnetToVpn(dataBroker, notificationPublishService, ipvcVpn.getVpnId(),
- vpnElan.getElanId(), newSubnet.getSubnet(), vpnElan.getElanPort(), portMacAddress, waitForElanInterval);
-
- }
-
private void removeNetwork(DataTreeModification<Subnet> deletedDataObject) {
Subnet deletedSubnet = deletedDataObject.getRootNode().getDataBefore();
Identifier45 dlUniId = deletedSubnet.getUniId();
return;
}
- String vpnId = ipvcVpn.getVpnId();
if (dlSubnet.getGateway() == null) {
- removeDirectNetwork(dlSubnet, ipvcVpn, ipvcId);
+ Log.trace("Direct subnet removed {}", dlSubnet.getSubnet());
} else {
removeNonDirectNetwork(dlSubnet, ipvcVpn, ipvcId);
}
}
}
- private void removeDirectNetwork(Subnet deletedSubnet, IpvcVpn ipvcVpn, InstanceIdentifier<Ipvc> ipvcId) {
- if (deletedSubnet.getGateway() != null) {
- return;
- }
-
- String subnetStr = NetvirtVpnUtils.ipPrefixToString(deletedSubnet.getSubnet());
- VpnElans vpnElan = MefServicesUtils.findVpnForNetwork(deletedSubnet, ipvcVpn);
- if (vpnElan == null) {
- Log.error("Network {} has not been created as required, nothing to remove", subnetStr);
- return;
- }
-
- NetvirtVpnUtils.publishRemoveDirectSubnetFromVpn(dataBroker, notificationPublishService, ipvcVpn.getVpnId(),
- vpnElan.getElanId(), vpnElan.getElanPort());
-
- }
-
private void removeNonDirectNetwork(Subnet deletedSubnet, IpvcVpn ipvcVpn, InstanceIdentifier<Ipvc> ipvcId) {
if (deletedSubnet.getGateway() == null) {
return;