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;
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);
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
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);
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();
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) ||
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)) {
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
*/
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);
* @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;
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();
}
}