Bug 2092 - Invalid code in LBaaS handlers that extracts MAC address of member without... 90/11590/1
authorSrini Seetharaman <srini.seetharaman@gmail.com>
Thu, 25 Sep 2014 16:34:04 +0000 (09:34 -0700)
committerSrini Seetharaman <srini.seetharaman@gmail.com>
Thu, 25 Sep 2014 16:35:17 +0000 (09:35 -0700)
This prevent ID address overlap of LBaaS pools and wrong rules written to switch.

Change-Id: I9624a7e503810a5cbc8db0ca00b2cfc9d1dc8191
Signed-off-by: Srini Seetharaman <srini.seetharaman@gmail.com>
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/LBaaSHandler.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/LBaaSPoolHandler.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/LBaaSPoolMemberHandler.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/NeutronCacheUtils.java

index b958113a650d6988e673afe104ee1b91f95c53d6..bc23414680820d35888c17b5a1b13104031b3d1a 100644 (file)
@@ -176,7 +176,7 @@ public class LBaaSHandler extends AbstractHandler
             lbConfig.setProviderNetworkType(providerInfo.getKey());
             lbConfig.setProviderSegmentationId(providerInfo.getValue());
         }
-        lbConfig.setVmac(NeutronCacheUtils.getMacAddress(neutronPortsCache, loadBalancerVip));
+        lbConfig.setVmac(NeutronCacheUtils.getMacAddress(neutronPortsCache, loadBalancerSubnetID, loadBalancerVip));
 
         String memberID, memberIP, memberMAC, memberProtocol, memberSubnetID;
         Integer memberPort;
@@ -205,7 +205,7 @@ public class LBaaSHandler extends AbstractHandler
                         logger.debug("Neutron LB pool member details incomplete: {}", neutronLBPoolMember);
                         continue;
                     }
-                    memberMAC = NeutronCacheUtils.getMacAddress(neutronPortsCache, memberIP);
+                    memberMAC = NeutronCacheUtils.getMacAddress(neutronPortsCache, memberSubnetID, memberIP);
                     if (memberMAC == null)
                         continue;
                     lbConfig.addMember(memberID, memberIP, memberMAC, memberProtocol, memberPort);
index fb86650a51ce737f7097d1a3303b805fa868fb14..0c23a510601b99f7d0dc50ba7b75a54fbb74bddd 100755 (executable)
@@ -219,7 +219,7 @@ public class LBaaSPoolHandler extends AbstractHandler
                 lbConfig.setProviderNetworkType(providerInfo.getKey());
                 lbConfig.setProviderSegmentationId(providerInfo.getValue());
             }
-            lbConfig.setVmac(NeutronCacheUtils.getMacAddress(neutronPortsCache, loadBalancerVip));
+            lbConfig.setVmac(NeutronCacheUtils.getMacAddress(neutronPortsCache, loadBalancerSubnetID, loadBalancerVip));
 
             /* Iterate over all the members in this pool and find those in same
              * subnet as the VIP. Those will be included in the lbConfigList
@@ -240,7 +240,7 @@ public class LBaaSPoolHandler extends AbstractHandler
                         logger.debug("Neutron LB pool member details incomplete: {}", neutronLBPoolMember);
                         continue;
                     }
-                    memberMAC = NeutronCacheUtils.getMacAddress(neutronPortsCache, memberIP);
+                    memberMAC = NeutronCacheUtils.getMacAddress(neutronPortsCache, memberSubnetID, memberIP);
                     if (memberMAC == null)
                         continue;
                     lbConfig.addMember(memberID, memberIP, memberMAC, poolProtocol, memberPort);
index bb3d9a0e4fab83648147041e398d08e71496543d..a25594ecab035c894d614aadd6ba2d3958e5a995 100755 (executable)
@@ -186,11 +186,6 @@ public class LBaaSPoolMemberHandler extends AbstractHandler
     public LoadBalancerConfiguration extractLBConfiguration(NeutronLoadBalancerPoolMember neutronLBPoolMember) {
         String memberID = neutronLBPoolMember.getPoolMemberID();
         String memberIP = neutronLBPoolMember.getPoolMemberAddress();
-        String memberMAC = NeutronCacheUtils.getMacAddress(neutronPortsCache, memberIP);
-        if (memberMAC == null) {
-            logger.debug("Neutron LB pool member {} MAC address unavailable", memberID);
-            return null;
-        }
         String memberSubnetID = neutronLBPoolMember.getPoolMemberSubnetID();
         Integer memberPort = neutronLBPoolMember.getPoolMemberProtoPort();
         String memberPoolID = neutronLBPoolMember.getPoolID();
@@ -201,6 +196,11 @@ public class LBaaSPoolMemberHandler extends AbstractHandler
                     memberID, memberPoolID, memberSubnetID);
             return null;
         }
+        String memberMAC = NeutronCacheUtils.getMacAddress(neutronPortsCache, memberSubnetID, memberIP);
+        if (memberMAC == null) {
+            logger.debug("Neutron LB pool member {} MAC address unavailable", memberID);
+            return null;
+        }
         NeutronLoadBalancerPool neutronLBPool = neutronLBPoolCache.getNeutronLoadBalancerPool(memberPoolID);
         memberProtocol = neutronLBPool.getLoadBalancerPoolProtocol();
         if (!(memberProtocol.equalsIgnoreCase(LoadBalancerConfiguration.PROTOCOL_TCP) ||
@@ -208,7 +208,7 @@ public class LBaaSPoolMemberHandler extends AbstractHandler
                 memberProtocol.equalsIgnoreCase(LoadBalancerConfiguration.PROTOCOL_HTTPS)))
             return null;
 
-        String loadBalancerSubnetID, loadBalancerVip=null, loadBalancerName=null;
+        String loadBalancerSubnetID=null, loadBalancerVip=null, loadBalancerName=null;
         for (NeutronLoadBalancer neutronLB: neutronLBCache.getAllNeutronLoadBalancers()) {
             loadBalancerSubnetID = neutronLB.getLoadBalancerVipSubnetID();
             if (memberSubnetID.equals(loadBalancerSubnetID)) {
@@ -228,7 +228,7 @@ public class LBaaSPoolMemberHandler extends AbstractHandler
             lbConfig.setProviderNetworkType(providerInfo.getKey());
             lbConfig.setProviderSegmentationId(providerInfo.getValue());
         }
-        lbConfig.setVmac(NeutronCacheUtils.getMacAddress(neutronPortsCache, loadBalancerVip));
+        lbConfig.setVmac(NeutronCacheUtils.getMacAddress(neutronPortsCache, loadBalancerSubnetID, loadBalancerVip));
 
         /* Extract all other active members and include in LB config
          */
@@ -250,7 +250,7 @@ public class LBaaSPoolMemberHandler extends AbstractHandler
             if (otherMemberIP == null || otherMemberSubnetID == null || otherMemberAdminStateIsUp == null)
                 continue;
             else if (otherMemberAdminStateIsUp.booleanValue()) {
-                otherMemberMAC = NeutronCacheUtils.getMacAddress(neutronPortsCache, otherMemberIP);
+                otherMemberMAC = NeutronCacheUtils.getMacAddress(neutronPortsCache, otherMemberSubnetID, otherMemberIP);
                 if (otherMemberMAC == null)
                     continue;
                 lbConfig.addMember(otherMemberID, otherMemberIP, otherMemberMAC, otherMemberProtocol, otherMemberPort);
index bed81ab6dccc1057c8986dc152810a6df9a01312..7a5bde1b5450b066cb8c90c366354bfd22119bc2 100755 (executable)
@@ -30,8 +30,8 @@ public class NeutronCacheUtils {
      * @param ipAddr IP address of a member or VM
      * @return MAC address registered with that IP address
      */
-    public static String getMacAddress(INeutronPortCRUD neutronPortsCache, String ipAddr) {
-        if (ipAddr == null)
+    public static String getMacAddress(INeutronPortCRUD neutronPortsCache, String subnetID, String ipAddr) {
+        if (ipAddr == null || subnetID == null)
             return null;
 
         List<Neutron_IPs> fixedIPs;
@@ -47,7 +47,7 @@ public class NeutronCacheUtils {
                 fixedIPIterator = fixedIPs.iterator();
                 while (fixedIPIterator.hasNext()) {
                     ip = fixedIPIterator.next();
-                    if (ip.getIpAddress().equals(ipAddr))
+                    if (ip.getIpAddress().equals(ipAddr) && ip.getSubnetUUID().equals(subnetID))
                         return port.getMacAddress();
                 }
             }