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
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
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
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
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)
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)