"neutronvpn:createL3VPN" fails to create L3VPN for IPv6 use case.
[netvirt.git] / vpnmanager / impl / src / main / java / org / opendaylight / netvirt / vpnmanager / VpnOpStatusListener.java
index fc7f7fb0852900ea87cb90a1cc10dc95f9203752..bb8f13ef9ab6f5bee7115eb7e3e0c9436b89eabc 100644 (file)
@@ -125,14 +125,25 @@ public class VpnOpStatusListener extends AsyncDataTreeChangeListenerBase<VpnInst
                                 rds.parallelStream().forEach(rd -> bgpManager.deleteVrf(
                                         rd, false, AddressFamily.L2VPN));
                             }
-                            if (update.isIpv4Configured()) {
+                            if (update.getIpAddressFamilyConfigured()
+                                    == VpnInstanceOpDataEntry.IpAddressFamilyConfigured.Ipv4) {
                                 rds.parallelStream().forEach(rd -> bgpManager.deleteVrf(
                                         rd, false, AddressFamily.IPV4));
                             }
-                            if (update.isIpv6Configured()) {
+                            if (update.getIpAddressFamilyConfigured()
+                                    == VpnInstanceOpDataEntry.IpAddressFamilyConfigured.Ipv6) {
                                 rds.parallelStream().forEach(rd -> bgpManager.deleteVrf(
                                         rd, false, AddressFamily.IPV6));
                             }
+                            if (update.getIpAddressFamilyConfigured()
+                                    == VpnInstanceOpDataEntry.IpAddressFamilyConfigured.Ipv4AndIpv6) {
+                                rds.parallelStream()
+                                        .forEach(rd -> bgpManager.deleteVrf(
+                                                rd, false, AddressFamily.IPV4));
+                                rds.parallelStream()
+                                        .forEach(rd -> bgpManager.deleteVrf(
+                                                rd, false, AddressFamily.IPV6));
+                            }
                         }
                         InstanceIdentifier<Vpn> vpnToExtraroute =
                                 VpnExtraRouteHelper.getVpnToExtrarouteVpnIdentifier(vpnName);
@@ -259,30 +270,41 @@ public class VpnOpStatusListener extends AsyncDataTreeChangeListenerBase<VpnInst
                     try {
                         List<String> importRTList = rd.equals(primaryRd) ? irtList : emptyList();
                         LOG.info("VpnOpStatusListener.update: updating BGPVPN for vpn {} with RD {}"
-                                + " Type is {}, IPv4 is {}, IPv6 is {}, iRT {}", vpnName, primaryRd, update.getType(),
-                                update.isIpv4Configured(), update.isIpv6Configured(), importRTList);
-                        if (update.getType() == VpnInstanceOpDataEntry.Type.L2) {
-                            bgpManager.addVrf(rd, importRTList, ertList, AddressFamily.L2VPN);
-                        }
-                        if (!original.isIpv4Configured() && update.isIpv4Configured()) {
-                            bgpManager.addVrf(rd, importRTList, ertList, AddressFamily.IPV4);
-                        } else if (original.isIpv4Configured() && !update.isIpv4Configured()) {
-                            bgpManager.deleteVrf(rd, false, AddressFamily.IPV4);
-                        }
-                        if (!original.isIpv6Configured() && update.isIpv6Configured()) {
-                            bgpManager.addVrf(rd, importRTList, ertList, AddressFamily.IPV6);
-                        } else if (original.isIpv6Configured() && !update.isIpv6Configured()) {
-                            bgpManager.deleteVrf(rd, false, AddressFamily.IPV6);
+                                + " Type is {}, IPtype is {}, iRT {}", vpnName, primaryRd, update.getType(),
+                                update.getIpAddressFamilyConfigured(), importRTList);
+                        int ipValue = VpnUtil.getIpFamilyValueToRemove(original,update);
+                        switch (ipValue) {
+                            case 4:
+                                bgpManager.deleteVrf(rd, false, AddressFamily.IPV4);
+                                break;
+                            case 6:
+                                bgpManager.deleteVrf(rd, false, AddressFamily.IPV6);
+                                break;
+                            case 10:
+                                bgpManager.deleteVrf(rd, false, AddressFamily.IPV4);
+                                bgpManager.deleteVrf(rd, false, AddressFamily.IPV6);
+                                break;
+                            default:
+                                break;
                         }
                         /* Update vrf entry with newly added RD list. VPN does not support for
                          * deleting existing RDs
                          */
                         if (original.getRd().size() != update.getRd().size()) {
-                            if (update.isIpv4Configured()) {
-                                bgpManager.addVrf(rd, importRTList, ertList, AddressFamily.IPV4);
-                            }
-                            if (update.isIpv6Configured()) {
-                                bgpManager.addVrf(rd, importRTList, ertList, AddressFamily.IPV6);
+                            ipValue = VpnUtil.getIpFamilyValueToAdd(original,update);
+                            switch (ipValue) {
+                                case 4:
+                                    bgpManager.addVrf(rd, importRTList, ertList, AddressFamily.IPV4);
+                                    break;
+                                case 6:
+                                    bgpManager.addVrf(rd, importRTList, ertList, AddressFamily.IPV6);
+                                    break;
+                                case 10:
+                                    bgpManager.addVrf(rd, importRTList, ertList, AddressFamily.IPV4);
+                                    bgpManager.addVrf(rd, importRTList, ertList, AddressFamily.IPV6);
+                                    break;
+                                default:
+                                    break;
                             }
                         }
                     } catch (RuntimeException e) {