def create(cls, src, src_port, dst, dst_port, bandwidth=None, is_isl=True): link = cls(src, src_port, dst, dst_port, bandwidth, is_isl) run_cmd('ip link add {} type veth peer name {}'.format( link.src_name(), link.dst_name())) run_cmd('ip link set up {}'.format(link.src_name())) run_cmd('ip link set up {}'.format(link.dst_name())) return link
def create(cls, topo_def): switches = {} links = [] traffgens = [] a_mappings = [] a_ports = set() for isl_def in topo_def['isls']: src = isl_def['src_switch'] src_port = isl_def['src_port'] dst = isl_def.get('dst_switch', None) dst_port = isl_def.get('dst_port', None) bandwidth = isl_def.get('max_bandwidth', None) a_def = isl_def.get('aswitch', None) if a_def: if a_def.get('in_port', None): a_ports.add(a_def['in_port']) if a_def.get('out_port', None): a_ports.add(a_def['out_port']) links.append( Link.create(src, src_port, A_SW_NAME, a_def['in_port'], bandwidth)) if dst and dst_port: links.append( Link.create(A_SW_NAME, a_def['out_port'], dst, dst_port, bandwidth)) a_mappings.append({ 'in_port': a_def['in_port'], 'out_port': a_def['out_port'] }) a_mappings.append({ 'in_port': a_def['out_port'], 'out_port': a_def['in_port'] }) else: links.append( Link.create(src, src_port, dst, dst_port, bandwidth)) for tgen_def in [ active_tgen for active_tgen in topo_def.get('traff_gens', []) if active_tgen['status'].lower() == "active" ]: tg = Traffgen(tgen_def) traffgens.append(tg) links.append(tg.make_link()) switches[A_SW_NAME] = ASwitch.create(A_SW_DEF) switches[A_SW_NAME].define_ports(a_ports) for sw_def in topo_def['switches']: sw = Switch.create_with_ports(sw_def) switches[sw.name] = sw for link in links: link.setup_switch_ports(switches) vsctl(['set Open_vSwitch . other_config:vlan-limit=0']) cls.batch_switch_cmd(switches) run_cmd('ovs-appctl revalidator/purge') switches[A_SW_NAME].add_route_flows(a_mappings) return cls(switches, links, traffgens)
def run(self): self.proc = run_cmd('kilda-traffexam {} {}'.format( pname(self.name, self.iface), self.endpoint), sync=False)
def destroy(self): run_cmd('ip link delete {}'.format(self.src_name()))