Пример #1
0
 def get_ports(self):
     """
     Return a dict of the ports (port, addr, tag, type) on the bridge, like
     {
         'qvoxxx':{
             'port':'2',
             'addr':'08:91:ff:ff:f3',
             'vlan':'1',
             'type':'internal',
         }
     }
     """
     ports = {}
     cmd = "ovs-ofctl show %s" % self.bridge
     result, error = \
         Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True).communicate()
     if error:
         return {}
     #output('%-8s%-16s%-16s\n' %('PORT','INTF','ADDR'))
     brs = get_all_bridges()
     for l in result.split('\n'):
         if l.startswith(' ') and l.find('(') >= 0 and l.find(')') >= 0:
             l = l.strip()
             port = get_str_before(l, '(')
             intf = get_str_between(l, '(', ')')
             addr = l[l.find('addr:') + len('addr:'):]
             #output('%-8s%-16s%-16s\n' %(port,intf,addr))
             if self.bridge in brs and intf in brs[self.bridge]['Port']:
                 tag = brs[self.bridge]['Port'][intf].get('vlan', '')
                 intf_type = brs[self.bridge]['Port'][intf].get('type', '')
             else:
                 tag, intf_type = '', ''
             ports[intf] = {'port': port, 'addr': addr, 'vlan': tag,
                            'type': intf_type}
     return ports
Пример #2
0
 def get_ports(self):
     """
     Return a dict of the ports (port, addr, tag, type) on the bridge, like
     {
         'qvoxxx':{
             'port':'2',
             'addr':'08:91:ff:ff:f3',
             'vlan':'1',
             'type':'internal',
         }
     }
     """
     ports = {}
     cmd = "ovs-ofctl show %s" % self.bridge
     result, error = \
         Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True).communicate()
     if error:
         return {}
     #output('%-8s%-16s%-16s\n' %('PORT','INTF','ADDR'))
     brs = get_all_bridges()
     for l in result.split('\n'):
         if l.startswith(' ') and l.find('(') >= 0 and l.find(')') >= 0:
             l = l.strip()
             port = get_str_before(l, '(')
             intf = get_str_between(l, '(', ')')
             addr = l[l.find('addr:') + len('addr:'):]
             #output('%-8s%-16s%-16s\n' %(port,intf,addr))
             if self.bridge in brs and intf in brs[self.bridge]['Port']:
                 tag = brs[self.bridge]['Port'][intf].get('vlan', '')
                 intf_type = brs[self.bridge]['Port'][intf].get('type', '')
             else:
                 tag, intf_type = '', ''
             ports[intf] = {'port': port, 'addr': addr, 'vlan': tag,
                            'type': intf_type}
     return ports
Пример #3
0
    def _network_check_bridges(self):
        """
        Check the bridge information
        :return:
        """
        output(b('>>> Checking bridges...\n'))
        bridges = get_all_bridges()
        names = bridges.keys()
        brvlans = [e for e in names
                  if e not in ['br-int', 'br-ex', 'br-tun']]
        if not brvlans:
            warn(r('No vlan bridge is found\n'))
            return False
        brvlan = brvlans[0]
        output(b('# Existing bridges are %s\n' % ', '.join(names)))
        # check br-int
        if 'br-int' not in names:
            warn(r('No integration bridge is found\n'))
            return False
        else:
            br = Bridge('br-int')
            if not br.has_port('int-'+brvlan) and not br.has_port('patch-tun'):
                if not br.has_port('int-'+brvlan):
                    warn(r('port %s not found in br-int\n' % 'int-'+brvlan))
                if not br.has_port('patch-tun'):
                    warn(r('port %s not found in br-int\n' % 'patch-tun'))
                return False

        # check br-ex
        if 'br-ex' not in names:
            warn(r('No external bridge is found\n'))
            return False
        else:
            br = Bridge('br-ex')
            if not br.has_port_start_with('qg-'):
                warn(r('No qg port found in br-ex\n'))

        if 'br-tun' not in names:
            warn(r('No tunnel bridge is found\n'))
            return False
        else:
            br = Bridge('br-tun')
            if not br.has_port('patch-int'):
                warn(r('port %s not found in br-tun\n' % 'patch-int'))
                return False

        br = Bridge(brvlan)
        if not br.has_port('phy-'+brvlan):
            warn(r('port %s not found in %s\n' % ('phy-'+brvlan, brvlan)))

        output(b('# Vlan bridge is at %s\n' % ', '.join(names)))
        output(g('<<< Checking bridges passed\n'))
        return True
Пример #4
0
def find_br_ports(port_id):
    """
    Find a port with given id
    :param port_id: a4111776-bd

    :return: qr-a4111776-bd
    """
    brs = get_all_bridges()
    for br_id in brs:
        if "Port" in brs[br_id]:
            for p in brs[br_id]["Port"]:
                if p.endswith(port_id):
                    return p
    return None
Пример #5
0
def find_br_ports(port_id):
    '''
    Find a port with given id
    :param port_id: a4111776-bd

    :return: qr-a4111776-bd
    '''
    brs = get_all_bridges()
    for br_id in brs:
        if 'Port' in brs[br_id]:
            for p in brs[br_id]['Port']:
                if p.endswith(port_id):
                    return p
    return None
Пример #6
0
def br_list():
    """
    List available bridges.
    """
    bridges = get_all_bridges()
    if not bridges:
        output("None bridge exists. Might try using root privilege?\n")
        return
    br_info = ""
    for br in sorted(bridges.keys()):
        br_info += color_str("%s\n" % br, "r")
        if bridges[br]["Port"]:
            br_info += "\tPort:\t\t%s\n" % (" ".join(sorted(bridges[br]["Port"].keys())))
        if bridges[br]["Controller"]:
            br_info += "\tController:\t%s\n" % (" ".join(bridges[br]["Controller"]))
        if bridges[br]["fail_mode"]:
            br_info += "\tFail_Mode:\t%s\n" % (bridges[br]["fail_mode"])
    output(br_info)
Пример #7
0
def br_list():
    """
    List available bridges.
    """
    bridges = get_all_bridges()
    if not bridges:
        output('None bridge exists. Might try using root privilege?\n')
        return
    br_info = ''
    for br in sorted(bridges.keys()):
        br_info += color_str("%s\n" % br, 'r')
        if bridges[br]['Port']:
            br_info += "\tPort:\t\t%s\n" \
                       % (' '.join(sorted(bridges[br]['Port'].keys())))
        if bridges[br]['Controller']:
            br_info += "\tController:\t%s\n" \
                       % (' '.join(bridges[br]['Controller']))
        if bridges[br]['fail_mode']:
            br_info += "\tFail_Mode:\t%s\n" % (bridges[br]['fail_mode'])
    output(br_info)