+
+ public static InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.natservice.rev160111.intext.ip.map.IpMapping> getIpMappingBuilder(Long routerId) {
+ InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.natservice.rev160111.intext.ip.map.IpMapping> idBuilder = InstanceIdentifier.builder(IntextIpMap.class)
+ .child(org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.natservice.rev160111.intext.ip.map.IpMapping.class, new org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.natservice.rev160111.intext.ip.map.IpMappingKey(routerId)).build();
+ return idBuilder;
+ }
+
+ public static List<String> getExternalIpsForRouter(DataBroker dataBroker,Long routerId) {
+ Optional<org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.natservice.rev160111.intext.ip.map.IpMapping> ipMappingOptional = read(dataBroker,
+ LogicalDatastoreType.OPERATIONAL, getIpMappingBuilder(routerId));
+ List<String> externalIps = new ArrayList<>();
+ if (ipMappingOptional.isPresent()) {
+ List<IpMap> ipMaps = ipMappingOptional.get().getIpMap();
+ for (IpMap ipMap : ipMaps) {
+ externalIps.add(ipMap.getExternalIp());
+ }
+ return externalIps;
+ }
+ return null;
+ }
+
+ /*
+ container external-ips-counter {
+ config false;
+ list external-counters{
+ key segment-id;
+ leaf segment-id { type uint32; }
+ list external-ip-counter {
+ key external-ip;
+ leaf external-ip { type string; }
+ leaf counter { type uint8; }
+ }
+ }
+ }
+ */
+
+ public static String getLeastLoadedExternalIp(DataBroker dataBroker, long segmentId){
+ String leastLoadedExternalIp = null;
+ InstanceIdentifier<ExternalCounters> id = InstanceIdentifier.builder(ExternalIpsCounter.class).child(ExternalCounters.class, new ExternalCountersKey(segmentId)).build();
+ Optional <ExternalCounters> externalCountersData = MDSALUtil.read(dataBroker, LogicalDatastoreType.OPERATIONAL, id);
+ if (externalCountersData.isPresent()) {
+ ExternalCounters externalCounter = externalCountersData.get();
+ List<ExternalIpCounter> externalIpCounterList = externalCounter.getExternalIpCounter();
+ short countOfLstLoadExtIp = 32767;
+ for(ExternalIpCounter externalIpCounter : externalIpCounterList){
+ String curExternalIp = externalIpCounter.getExternalIp();
+ short countOfCurExtIp = externalIpCounter.getCounter();
+ if( countOfCurExtIp < countOfLstLoadExtIp ){
+ countOfLstLoadExtIp = countOfCurExtIp;
+ leastLoadedExternalIp = curExternalIp;
+ }
+ }
+ }
+ return leastLoadedExternalIp;
+ }
+
+ public static String[] getSubnetIpAndPrefix(DataBroker dataBroker, Uuid subnetId){
+ String subnetIP = getSubnetIp(dataBroker, subnetId);
+ if(subnetId != null){
+ return getSubnetIpAndPrefix(subnetIP);
+ }
+ return null;
+ }
+
+ public static String getSubnetIp(DataBroker dataBroker, Uuid subnetId){
+ InstanceIdentifier<Subnetmap> subnetmapId = InstanceIdentifier
+ .builder(Subnetmaps.class)
+ .child(Subnetmap.class, new SubnetmapKey(subnetId))
+ .build();
+ Optional<Subnetmap> removedSubnet = read(dataBroker, LogicalDatastoreType.CONFIGURATION, subnetmapId);
+ if(removedSubnet.isPresent()) {
+ Subnetmap subnetMapEntry = removedSubnet.get();
+ return subnetMapEntry.getSubnetIp();
+ }
+ return null;
+
+ }
+ public static String[] getSubnetIpAndPrefix(String subnetString){
+ String[] subnetSplit = subnetString.split("/");
+ String subnetIp = subnetSplit[0];
+ String subnetPrefix = "0";
+ if (subnetSplit.length == 2) {
+ subnetPrefix = subnetSplit[1];
+ }
+ return new String[] {subnetIp, subnetPrefix};
+ }
+
+ public static String[] getExternalIpAndPrefix(String leastLoadedExtIpAddr){
+ String[] leastLoadedExtIpAddrSplit = leastLoadedExtIpAddr.split("/");
+ String leastLoadedExtIp = leastLoadedExtIpAddrSplit[0];
+ String leastLoadedExtIpPrefix = String.valueOf(NatConstants.DEFAULT_PREFIX);
+ if (leastLoadedExtIpAddrSplit.length == 2) {
+ leastLoadedExtIpPrefix = leastLoadedExtIpAddrSplit[1];
+ }
+ return new String[] {leastLoadedExtIp, leastLoadedExtIpPrefix};
+ }
+
+ public static List<BigInteger> getDpnsForRouter(DataBroker dataBroker, String routerUuid){
+ InstanceIdentifier id = InstanceIdentifier.builder(NeutronRouterDpns.class).child(RouterDpnList.class, new RouterDpnListKey(routerUuid)).build();
+ Optional<RouterDpnList> routerDpnListData = read(dataBroker, LogicalDatastoreType.CONFIGURATION, id);
+ List<BigInteger> dpns = new ArrayList<>();
+ if (routerDpnListData.isPresent()) {
+ List<DpnVpninterfacesList> dpnVpninterfacesList = routerDpnListData.get().getDpnVpninterfacesList();
+ for (DpnVpninterfacesList dpnVpnInterface : dpnVpninterfacesList) {
+ dpns.add(dpnVpnInterface.getDpnId());
+ }
+ return dpns;
+ }
+ return null;
+ }
+
+ public static long getBgpVpnId(DataBroker dataBroker, String routerName){
+ long bgpVpnId = NatConstants.INVALID_ID;
+ Uuid bgpVpnUuid = NatUtil.getVpnForRouter(dataBroker, routerName);
+ if(bgpVpnUuid != null){
+ bgpVpnId = NatUtil.getVpnId(dataBroker, bgpVpnUuid.getValue());
+ }
+ return bgpVpnId;
+ }