Esempio n. 1
0
 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
Esempio n. 2
0
 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))
Esempio n. 3
0
    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
Esempio n. 4
0
 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