X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=neutronvpn%2Fneutronvpn-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fvpnservice%2Fneutronvpn%2FNeutronvpnUtils.java;h=a74a34b62a65303df327f79c57c79bd82a3b2635;hb=c103ce9e5b1e4acfb3320f245503e46332593e43;hp=12bd658358a20ab6417984a63b35da4373257503;hpb=500bb7ab0d5b63f1acfb86328bc93140c31c33a9;p=vpnservice.git diff --git a/neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/vpnservice/neutronvpn/NeutronvpnUtils.java b/neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/vpnservice/neutronvpn/NeutronvpnUtils.java index 12bd6583..a74a34b6 100644 --- a/neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/vpnservice/neutronvpn/NeutronvpnUtils.java +++ b/neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/vpnservice/neutronvpn/NeutronvpnUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 - 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved. + * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, @@ -25,15 +25,21 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712. import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.NetworkKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port; import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.Subnets; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.Subnet; +import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.SubnetKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.lockmanager.rev150819.LockManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.lockmanager.rev150819.TimeUnits; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.lockmanager.rev150819.TryLockInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.lockmanager.rev150819.TryLockInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.lockmanager.rev150819.UnlockInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.lockmanager.rev150819.UnlockInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.neutronvpn.rev150602.NetworkMaps; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.neutronvpn.rev150602.NeutronPortData; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.neutronvpn.rev150602.Subnetmaps; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.neutronvpn.rev150602.VpnMaps; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.neutronvpn.rev150602.networkmaps.NetworkMap; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.neutronvpn.rev150602.networkmaps.NetworkMapKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.neutronvpn.rev150602.neutron.port.data .PortFixedipToPortName; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.neutronvpn.rev150602.neutron.port.data @@ -66,8 +72,7 @@ public class NeutronvpnUtils { private static final Logger logger = LoggerFactory.getLogger(NeutronvpnUtils.class); protected static Subnetmap getSubnetmap(DataBroker broker, Uuid subnetId) { - InstanceIdentifier id = InstanceIdentifier.builder(Subnetmaps.class). - child(Subnetmap.class, new SubnetmapKey(subnetId)).build(); + InstanceIdentifier id = buildSubnetMapIdentifier(subnetId); Optional sn = read(broker, LogicalDatastoreType.CONFIGURATION, id); if (sn.isPresent()) { @@ -77,10 +82,9 @@ public class NeutronvpnUtils { } protected static VpnMap getVpnMap(DataBroker broker, Uuid id) { - InstanceIdentifier vpnMapIdentifier = InstanceIdentifier.builder(VpnMaps.class) - .child(VpnMap.class, new VpnMapKey(id)).build(); - Optional optionalVpnMap = read(broker, LogicalDatastoreType.CONFIGURATION, - vpnMapIdentifier); + InstanceIdentifier vpnMapIdentifier = InstanceIdentifier.builder(VpnMaps.class).child(VpnMap.class, + new VpnMapKey(id)).build(); + Optional optionalVpnMap = read(broker, LogicalDatastoreType.CONFIGURATION, vpnMapIdentifier); if (optionalVpnMap.isPresent()) { return optionalVpnMap.get(); } @@ -90,8 +94,7 @@ public class NeutronvpnUtils { protected static Uuid getVpnForNetwork(DataBroker broker, Uuid network) { InstanceIdentifier vpnMapsIdentifier = InstanceIdentifier.builder(VpnMaps.class).build(); - Optional optionalVpnMaps = read(broker, LogicalDatastoreType.CONFIGURATION, - vpnMapsIdentifier); + Optional optionalVpnMaps = read(broker, LogicalDatastoreType.CONFIGURATION, vpnMapsIdentifier); if (optionalVpnMaps.isPresent()) { VpnMaps vpnMaps = optionalVpnMaps.get(); List allMaps = vpnMaps.getVpnMap(); @@ -104,17 +107,26 @@ public class NeutronvpnUtils { return null; } - protected static Uuid getVpnForRouter(DataBroker broker, Uuid router) { + // true for external vpn, false for internal vpn + protected static Uuid getVpnForRouter(DataBroker broker, Uuid routerId, Boolean externalVpn) { InstanceIdentifier vpnMapsIdentifier = InstanceIdentifier.builder(VpnMaps.class).build(); Optional optionalVpnMaps = read(broker, LogicalDatastoreType.CONFIGURATION, vpnMapsIdentifier); if (optionalVpnMaps.isPresent()) { VpnMaps vpnNets = optionalVpnMaps.get(); List allMaps = vpnNets.getVpnMap(); - if (router != null) { + if (routerId != null) { for (VpnMap vpnMap : allMaps) { - if (router.equals(vpnMap.getRouterId())) { - return vpnMap.getVpnId(); + if (routerId.equals(vpnMap.getRouterId())) { + if (externalVpn == true) { + if (!routerId.equals(vpnMap.getVpnId())) { + return vpnMap.getVpnId(); + } + } else { + if (routerId.equals(vpnMap.getVpnId())) { + return vpnMap.getVpnId(); + } + } } } } @@ -125,8 +137,7 @@ public class NeutronvpnUtils { protected static Uuid getRouterforVpn(DataBroker broker, Uuid vpnId) { InstanceIdentifier vpnMapIdentifier = InstanceIdentifier.builder(VpnMaps.class) .child(VpnMap.class, new VpnMapKey(vpnId)).build(); - Optional optionalVpnMap = read(broker, LogicalDatastoreType.CONFIGURATION, - vpnMapIdentifier); + Optional optionalVpnMap = read(broker, LogicalDatastoreType.CONFIGURATION, vpnMapIdentifier); if (optionalVpnMap.isPresent()) { VpnMap vpnMap = optionalVpnMap.get(); return vpnMap.getRouterId(); @@ -153,6 +164,15 @@ public class NeutronvpnUtils { return null; } + protected static List getSubnetIdsFromNetworkId(DataBroker broker, Uuid networkId) { + InstanceIdentifier id = buildNetworkMapIdentifier(networkId); + Optional optionalNetworkMap = read(broker, LogicalDatastoreType.CONFIGURATION, id); + if (optionalNetworkMap.isPresent()) { + return optionalNetworkMap.get().getSubnetIdList(); + } + return null; + } + //TODO //Will be done once integrated with TrunkPort Extensions protected static int getVlanFromNeutronPort(Port port) { @@ -171,9 +191,8 @@ public class NeutronvpnUtils { protected static Router getNeutronRouter(DataBroker broker, Uuid routerId) { - InstanceIdentifier inst = InstanceIdentifier.create(Neutron.class). - child(Routers.class).child(Router.class, new RouterKey(routerId)); - + InstanceIdentifier inst = InstanceIdentifier.create(Neutron.class).child(Routers.class).child(Router + .class, new RouterKey(routerId)); Optional rtr = read(broker, LogicalDatastoreType.CONFIGURATION, inst); if (rtr.isPresent()) { return rtr.get(); @@ -183,9 +202,8 @@ public class NeutronvpnUtils { protected static Network getNeutronNetwork(DataBroker broker, Uuid networkId) { logger.debug("getNeutronNetwork for {}", networkId.getValue()); - InstanceIdentifier inst = InstanceIdentifier.create(Neutron.class). - child(Networks.class).child(Network.class, new NetworkKey(networkId)); - + InstanceIdentifier inst = InstanceIdentifier.create(Neutron.class).child(Networks.class).child + (Network.class, new NetworkKey(networkId)); Optional net = read(broker, LogicalDatastoreType.CONFIGURATION, inst); if (net.isPresent()) { return net.get(); @@ -193,36 +211,23 @@ public class NeutronvpnUtils { return null; } - protected static List getNeutronNetworkSubnetIds(DataBroker broker, Uuid networkId) { - - logger.debug("getNeutronNetworkSubnetIds for {}", networkId.getValue()); - Network network = getNeutronNetwork(broker, networkId); - if (network != null) { - //TODO - //return network.getSubnets(); - } - logger.debug("returning from getNeutronNetworkSubnetIds for {}", networkId.getValue()); - - return null; - } - protected static List getNeutronRouterSubnetIds(DataBroker broker, Uuid routerId) { logger.info("getNeutronRouterSubnetIds for {}", routerId.getValue()); - List subnetNames = new ArrayList(); + List subnetIdList = new ArrayList(); Router router = getNeutronRouter(broker, routerId); if (router != null) { List ifs = router.getInterfaces(); - if (!ifs.isEmpty()) { + .Interfaces> interfacesList = router.getInterfaces(); + if (!interfacesList.isEmpty()) { for (org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.routers.attributes.routers - .router.Interfaces iff : ifs) { - subnetNames.add(iff.getSubnetId()); + .router.Interfaces interfaces : interfacesList) { + subnetIdList.add(interfaces.getSubnetId()); } } } logger.info("returning from getNeutronRouterSubnetIds for {}", routerId.getValue()); - return subnetNames; + return subnetIdList; } protected static String uuidToTapPortName(Uuid id) { @@ -263,17 +268,58 @@ public class NeutronvpnUtils { } } + protected static Short getIPPrefixFromPort(DataBroker broker, Port port) { + Short prefix = new Short((short) 0); + String cidr = ""; + try { + Uuid subnetUUID = port.getFixedIps().get(0).getSubnetId(); + + SubnetKey subnetkey = new SubnetKey(subnetUUID); + InstanceIdentifier subnetidentifier = InstanceIdentifier.create(Neutron.class).child(Subnets + .class).child(Subnet.class, subnetkey); + Optional subnet = read(broker, LogicalDatastoreType.CONFIGURATION,subnetidentifier); + if (subnet.isPresent()) { + cidr = subnet.get().getCidr(); + // Extract the prefix length from cidr + String[] parts = cidr.split("/"); + if ((parts.length == 2)) { + prefix = Short.valueOf(parts[1]); + return prefix; + } else { + logger.trace("Could not retrieve prefix from subnet CIDR"); + System.out.println("Could not retrieve prefix from subnet CIDR"); + } + } else { + logger.trace("Unable to read on subnet datastore"); + } + } catch (Exception e) { + logger.trace("Failed to retrieve IP prefix from port : ", e); + System.out.println("Failed to retrieve IP prefix from port : " + e.getMessage()); + } + return null; + } + static InstanceIdentifier buildPortNameToPortUuidIdentifier(String portname) { - InstanceIdentifier id = - InstanceIdentifier.builder(NeutronPortData.class).child(PortNameToPortUuid.class, new - PortNameToPortUuidKey(portname)).build(); + InstanceIdentifier id = InstanceIdentifier.builder(NeutronPortData.class).child + (PortNameToPortUuid.class, new PortNameToPortUuidKey(portname)).build(); return id; } static InstanceIdentifier buildFixedIpToPortNameIdentifier(String fixedIp) { - InstanceIdentifier id = - InstanceIdentifier.builder(NeutronPortData.class).child(PortFixedipToPortName.class, new - PortFixedipToPortNameKey(fixedIp)).build(); + InstanceIdentifier id = InstanceIdentifier.builder(NeutronPortData.class).child + (PortFixedipToPortName.class, new PortFixedipToPortNameKey(fixedIp)).build(); + return id; + } + + static InstanceIdentifier buildNetworkMapIdentifier(Uuid networkId) { + InstanceIdentifier id = InstanceIdentifier.builder(NetworkMaps.class).child(NetworkMap.class, new + NetworkMapKey(networkId)).build(); + return id; + } + + static InstanceIdentifier buildSubnetMapIdentifier(Uuid subnetId) { + InstanceIdentifier id = InstanceIdentifier.builder(Subnetmaps.class).child(Subnetmap.class, new + SubnetmapKey(subnetId)).build(); return id; }