import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceKey;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
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.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.Adjacencies;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.AdjacenciesBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.adjacency.list.Adjacency;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.RouterDisassociatedFromVpn;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.RouterDisassociatedFromVpnBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.RouterInterfacesMap;
-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.SubnetUpdatedInVpnBuilder;
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.createl3vpn.input.L3vpn;
builder = new SubnetmapBuilder().setKey(new SubnetmapKey(subnetId)).setId(subnetId);
LOG.debug("WithRouterFixedIPs: creating new subnetmap node for subnet ID {}", subnetId.getValue());
}
- if (routerId != null) {
- builder.setRouterId(routerId);
- } else {
- builder.setRouterId(null);
- }
- if (routerInterfaceName != null) {
- builder.setRouterInterfaceName(routerInterfaceName);
- } else {
- builder.setRouterInterfaceName(null);
- }
- if (routerIntfMacAddress != null) {
- builder.setRouterIntfMacAddress(routerIntfMacAddress);
- } else {
- builder.setRouterIntfMacAddress(null);
- }
+
+ builder.setRouterId(routerId);
+ builder.setRouterInterfaceName(routerInterfaceName);
+ builder.setRouterIntfMacAddress(routerIntfMacAddress);
+
if (fixedIp != null) {
List<String> fixedIps = builder.getRouterInterfaceFixedIps();
if (fixedIps == null) {
LOG.debug("Adding subnet {} to vpn {}", subnet.getValue(), vpnId.getValue());
Subnetmap sn = updateSubnetNode(subnet, null, null, null, null, vpnId);
final Uuid routerId = NeutronvpnUtils.getVpnMap(dataBroker, vpnId).getRouterId();
- // send subnet added to vpn notification
- isExternalVpn = vpnId.equals(routerId) ? false : true;
- String elanInstanceName = sn.getNetworkId().getValue();
- InstanceIdentifier<ElanInstance> elanIdentifierId = InstanceIdentifier.builder(ElanInstances.class)
- .child(ElanInstance.class, new ElanInstanceKey(elanInstanceName)).build();
- try {
- Optional<ElanInstance> elanInstance = NeutronvpnUtils.read(dataBroker, LogicalDatastoreType
- .CONFIGURATION, elanIdentifierId);
- if (elanInstance.isPresent()) {
- long elanTag = elanInstance.get().getElanTag();
- checkAndPublishSubnetAddNotification(subnet, sn.getSubnetIp(), vpnId.getValue(), isExternalVpn,
- elanTag);
- LOG.debug("Subnet added to VPN notification sent for subnet {} on VPN {}", subnet.getValue(),
- vpnId.getValue());
- } else {
- LOG.error("Subnet added to VPN notification failed for subnet {} on VPN {} because of failure in " +
- "reading ELANInstance {}", subnet.getValue(), vpnId.getValue(), elanInstanceName);
- }
- } catch (Exception e) {
- LOG.error("Subnet added to VPN notification failed for subnet {} on VPN {}", subnet.getValue(), vpnId
- .getValue(), e);
- }
// Check if there are ports on this subnet and add corresponding
// vpn-interfaces
List<Uuid> portList = sn.getPortList();
}
}
sn = updateSubnetNode(subnet, null, null, null, null, vpnId);
- // send vpn updated for subnet notification
- String elanInstanceName = sn.getNetworkId().getValue();
- InstanceIdentifier<ElanInstance> elanIdentifierId = InstanceIdentifier.builder(ElanInstances.class)
- .child(ElanInstance.class, new ElanInstanceKey(elanInstanceName)).build();
- try {
- Optional<ElanInstance> elanInstance = NeutronvpnUtils.read(dataBroker, LogicalDatastoreType
- .CONFIGURATION, elanIdentifierId);
- if (elanInstance.isPresent()) {
- long elanTag = elanInstance.get().getElanTag();
- checkAndPublishSubnetUpdNotification(subnet, sn.getSubnetIp(), vpnId.getValue(), isBeingAssociated,
- elanTag);
- LOG.debug("VPN updated for subnet notification sent for subnet {} on VPN {}", subnet.getValue(),
- vpnId.getValue());
- } else {
- LOG.error("VPN updated for subnet notification failed for subnet {} on VPN {} because of failure " +
- "in reading ELANInstance {}", subnet.getValue(), vpnId.getValue(), elanInstanceName);
- }
- } catch (Exception e) {
- LOG.error("VPN updated for subnet notification failed for subnet {} on VPN {}", subnet.getValue(),
- vpnId.getValue(), e);
- }
// Check for ports on this subnet and update association of
// corresponding vpn-interfaces to external vpn
List<Uuid> portList = sn.getPortList();
LOG.debug("Removing subnet {} from vpn {}", subnet.getValue(), vpnId.getValue());
final Uuid routerId = NeutronvpnUtils.getVpnMap(dataBroker, vpnId).getRouterId();
Subnetmap sn = NeutronvpnUtils.getSubnetmap(dataBroker, subnet);
- // send subnet removed from vpn notification
- isExternalVpn = vpnId.equals(routerId) ? false : true;
- String elanInstanceName = sn.getNetworkId().getValue();
- InstanceIdentifier<ElanInstance> elanIdentifierId = InstanceIdentifier.builder(ElanInstances.class)
- .child(ElanInstance.class, new ElanInstanceKey(elanInstanceName)).build();
- try {
- Optional<ElanInstance> elanInstance = NeutronvpnUtils.read(dataBroker, LogicalDatastoreType
- .CONFIGURATION, elanIdentifierId);
- if (elanInstance.isPresent()) {
- long elanTag = elanInstance.get().getElanTag();
- checkAndPublishSubnetDelNotification(subnet, sn.getSubnetIp(), vpnId.getValue(), isExternalVpn,
- elanTag);
- LOG.debug("Subnet removed from VPN notification sent for subnet {} on VPN {}", subnet.getValue(),
- vpnId.getValue());
- } else {
- LOG.error("Subnet removed from VPN notification failed for subnet {} on VPN {} because of failure " +
- "in reading ELANInstance {}", subnet.getValue(), vpnId.getValue(), elanInstanceName);
- }
- } catch (Exception e) {
- LOG.error("Subnet removed from VPN notification failed for subnet {} on VPN {}", subnet.getValue(),
- vpnId.getValue(), e);
- }
if (sn != null) {
// Check if there are ports on this subnet; remove corresponding vpn-interfaces
List<Uuid> portList = sn.getPortList();
return;
}
+ WriteTransaction wrtConfigTxn = dataBroker.newWriteOnlyTransaction();
for (String elanInterface : extElanInterfaces) {
- createExternalVpnInterface(extNetId, elanInterface);
+ createExternalVpnInterface(extNetId, elanInterface, wrtConfigTxn);
}
+ wrtConfigTxn.submit();
}
protected void removeExternalVpnInterfaces(Uuid extNetId) {
LOG.trace("No external ports attached for external network {}", extNetId);
return;
}
+ try {
- for (String elanInterface : extElanInterfaces) {
- boolean isLockAcquired = false;
- InstanceIdentifier<VpnInterface> vpnIfIdentifier = NeutronvpnUtils
- .buildVpnInterfaceIdentifier(elanInterface);
- try {
- isLockAcquired = NeutronvpnUtils.lock(elanInterface);
- LOG.debug("removing vpn interface {}, vpnIfIdentifier", elanInterface, vpnIfIdentifier);
- MDSALUtil.syncDelete(dataBroker, LogicalDatastoreType.CONFIGURATION, vpnIfIdentifier);
- } catch (Exception ex) {
- LOG.error("Removal of vpninterface {} failed due to {}", elanInterface, ex);
- } finally {
- if (isLockAcquired) {
- NeutronvpnUtils.unlock(elanInterface);
- }
+ WriteTransaction wrtConfigTxn = dataBroker.newWriteOnlyTransaction();
+ for (String elanInterface : extElanInterfaces) {
+ InstanceIdentifier<VpnInterface> vpnIfIdentifier = NeutronvpnUtils
+ .buildVpnInterfaceIdentifier(elanInterface);
+ LOG.info("Removing vpn interface {}", elanInterface);
+ wrtConfigTxn.delete(LogicalDatastoreType.CONFIGURATION, vpnIfIdentifier);
}
+ wrtConfigTxn.submit();
+
+ } catch (Exception ex) {
+ LOG.error("Removal of vpninterfaces {} failed due to {}", extElanInterfaces, ex);
}
}
- private void createExternalVpnInterface(Uuid vpnId, String infName) {
- writeVpnInterfaceToDs(vpnId, infName, null, false /* not a router iface */, null);
+ private void createExternalVpnInterface(Uuid vpnId, String infName, WriteTransaction wrtConfigTxn) {
+ writeVpnInterfaceToDs(vpnId, infName, null, false /* not a router iface */, wrtConfigTxn);
}
private void writeVpnInterfaceToDs(Uuid vpnId, String infName, Adjacencies adjacencies,
return help.toString();
}
- private void checkAndPublishSubnetAddNotification(Uuid subnetId, String subnetIp, String vpnName,
- Boolean isExternalvpn, Long elanTag) throws InterruptedException {
- SubnetAddedToVpnBuilder builder = new SubnetAddedToVpnBuilder();
-
- LOG.info("publish notification called");
-
- builder.setSubnetId(subnetId);
- builder.setSubnetIp(subnetIp);
- builder.setVpnName(vpnName);
- builder.setExternalVpn(isExternalvpn);
- builder.setElanTag(elanTag);
-
- notificationPublishService.putNotification(builder.build());
- }
-
- private void checkAndPublishSubnetDelNotification(Uuid subnetId, String subnetIp, String vpnName,
- Boolean isExternalvpn, Long elanTag) throws InterruptedException {
- SubnetDeletedFromVpnBuilder builder = new SubnetDeletedFromVpnBuilder();
-
- LOG.info("publish notification called");
-
- builder.setSubnetId(subnetId);
- builder.setSubnetIp(subnetIp);
- builder.setVpnName(vpnName);
- builder.setExternalVpn(isExternalvpn);
- builder.setElanTag(elanTag);
-
- notificationPublishService.putNotification(builder.build());
- }
-
- private void checkAndPublishSubnetUpdNotification(Uuid subnetId, String subnetIp, String vpnName,
- Boolean isExternalvpn, Long elanTag) throws InterruptedException {
- SubnetUpdatedInVpnBuilder builder = new SubnetUpdatedInVpnBuilder();
-
- LOG.info("publish notification called");
-
- builder.setSubnetId(subnetId);
- builder.setSubnetIp(subnetIp);
- builder.setVpnName(vpnName);
- builder.setExternalVpn(isExternalvpn);
- builder.setElanTag(elanTag);
-
- notificationPublishService.putNotification(builder.build());
- }
-
private void checkAndPublishRouterAssociatedtoVpnNotification(Uuid routerId, Uuid vpnId) throws
InterruptedException {
RouterAssociatedToVpn routerAssociatedToVpn = new RouterAssociatedToVpnBuilder().setRouterId(routerId)