def _network_check_router_ns(self, ns_router): """ Check the local router namespace on compute node :param ns_router: :return: list of the fip ns """ output(b('### Checking router ns = %s\n' % ns_router)) if not ns_router: return False intfs = NameSpace(ns_router).get_intfs() r_ports = [] # list of {'intf':eth0, 'ip':[]} for i in intfs: # check each intf in this ns p = intfs[i]['intf'] if p == 'lo': # ignore the lo port continue elif not p.startswith('qr-'): # no router port? warn(r('Invalid port %s in %s\n' % (p, ns_router))) return False else: output(b('### Checking port %s\n' % p)) r_ports.append(p) if not intfs[i]['ip']: warn(r('No ip with port %s in %s\n' % (p, ns_router))) return False else: for ip_m in intfs[i]['ip']: ip, mask = ip_m.split('/') if ipStrToNum(ip) != networkMask(ip_m) + 1: warn(r('IP %s is not gw on port %s\n' % (ip_m, ns_router))) return False if not r_ports: warn(r('Cannot find router port in ns %s\n' % ns_router)) return False return True
def _check_compute_node_fip_ns(self, rfp_port, ns_fip): """ Check a fip namespace on compute node :param rfp_port: :return: """ q = 'fpr-' + rfp_port['intf'][4:] output(b('### Checking associated fpr port %s\n' % q)) self.nss.show(ns_fip) output(b('### Check related fip_ns=%s\n' % ns_fip)) fpr_port = NameSpace(ns_fip).get_intf_by_name(q) if not fpr_port: warn(r('Cannot find fpr_port in fip ns %s\n' % ns_fip)) return a_ip, a_mask = rfp_port['ip'][0].split('/') b_ip, b_mask = fpr_port['ip'][0].split('/') if networkMask(a_ip, a_mask) != networkMask(b_ip, b_mask): warn( r('Different subnets for %s and %s\n' % (rfp_port['ip'][0], fpr_port['ip'][0]))) return else: output(g('Bridging in the same subnet\n')) fg_port = NameSpace(ns_fip).find_intf('fg-') if not fg_port: warn('Cannot find fg_port in fip ns %s\n' % ns_fip) return if fg_port['intf'] in Bridge('br-ex').get_ports(): output(g('fg port is attached to br-ex\n')) else: warn(g('fg port is NOT attached to br-ex\n')) return for float_ip in rfp_port['ip'][1:]: ip = float_ip.split('/')[0] if ipInNetwork(ip, fg_port['ip'][0]): output(g('floating ip %s match fg subnet\n' % ip)) else: warn(r('floating ip %s No match the fg subnet' % ip))
def _network_check_snat_ns(self, ns_snat, qr_ports_ips): """ Check the local router namespace on compute node :param ns_snat: :return: list of the fip ns """ output(b('### Checking snat ns = %s\n' % ns_snat)) if not ns_snat: return False intfs = NameSpace(ns_snat).get_intfs() sg_ports, qg_ports = [], [] sg_ports_ips = [] for i in intfs: # check each intf in this ns p = intfs[i]['intf'] if p == 'lo': # ignore the lo port continue elif p.startswith('sg-'): # no router port? sg_ports.append(p) sg_ports_ips.extend(intfs[i]['ip']) elif p.startswith('qg-'): # no router port? qg_ports.append(p) if set(map(lambda x: networkMask(x), sg_ports_ips)) != \ set(map(lambda x: networkMask(x), qr_ports_ips)): warn(r('qrouter ports not matched with sg ports\n')) return False if not sg_ports: warn(r('Cannot find sg port in ns %s\n' % ns_snat)) return False if not qg_ports: warn(r('Cannot find qg port in ns %s\n' % ns_snat)) return False if not self._network_check_nat_table(ns_snat): warn(r('Checking snat ns %s nat table failed\n' % ns_snat)) return False return True
def _compute_check_fip_ns(self, rfp_port, ns_fip): """ Check a fip namespace on compute node :param rfp_port: :return: True or False """ q = 'fpr-'+rfp_port['intf'][4:] output(b('### Checking associated fpr port %s\n' % q)) #self.nss.show(ns_fip) output(b('### Check related fip_ns=%s\n' % ns_fip)) fpr_port = NameSpace(ns_fip).get_intf_by_name(q) if not fpr_port: warn(r('Cannot find fpr_port in fip ns %s\n' % ns_fip)) return False if networkMask(rfp_port['ip'][0]) != networkMask(fpr_port['ip'][0]): warn(r('Different subnets for %s and %s\n' % (rfp_port['ip'][0], fpr_port['ip'][0]))) return False else: output(g('Bridging in the same subnet\n')) fg_port = NameSpace(ns_fip).find_intf('fg-') if not fg_port: warn('Cannot find fg_port in fip ns %s\n' % ns_fip) return False if fg_port['intf'] in Bridge('br-ex').get_ports(): output(g('fg port is attached to br-ex\n')) else: warn(g('fg port is NOT attached to br-ex\n')) return False for float_ip in rfp_port['ip'][1:]: ip = float_ip.split('/')[0] if ipInNetwork(ip, fg_port['ip'][0]): output(g('floating ip %s match fg subnet\n' % ip)) else: warn(r('floating ip %s No match the fg subnet' % ip)) return False return True