def batch_switch_cmd(cls, switches): vsctl_len = len('ovs-vsctl') cmds = [] cmds_len = 0 for sw in switches.values(): cmd = sw.get_and_flush_batch_cmd() # Don't exceed ARG_MAX if len(cmd) + cmds_len + vsctl_len >= cls.ARG_MAX: vsctl(cmds) cmds = [] cmds_len = 0 cmds.append(cmd) cmds_len += len(cmd) if cmds: vsctl(cmds)
def add_controller(self, batch=True): if self.controller: cmd = [ 'set-controller {} {}'.format(self.name, self.controller), 'set bridge {} other-config:disable-in-band=true'.format( self.name) ] self.vscmd.extend(cmd) if batch else vsctl(cmd)
def add_controller(self, batch=True): if self.controller: cmd = [ 'set-controller {} {}'.format(self.name, self.controller), 'set controller {} connection-mode=out-of-band'.format( self.name) ] self.vscmd.extend(cmd) if batch else vsctl(cmd)
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 set_controller(self, controller): cnt = " ".join( [resolve_host(controller) for controller in controller.split(" ")]) cmd = ['set-controller {} {}'.format(self.name, cnt)] vsctl(cmd)
def force_update_controller_host(self, controller, batch=True): cmd = [ 'set-controller {} {}'.format(self.name, controller), 'set bridge {} other-config:disable-in-band=true'.format(self.name) ] self.vscmd.extend(cmd) if batch else vsctl(cmd)
def force_update_controller_host(self, controller, batch=True): cmd = [ 'set-controller {} {}'.format(self.name, controller), 'set controller {} connection-mode=out-of-band'.format(self.name) ] self.vscmd.extend(cmd) if batch else vsctl(cmd)