示例#1
0
 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)
示例#2
0
 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)
示例#3
0
 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)
示例#4
0
    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)
示例#5
0
 def set_controller(self, controller):
     cnt = " ".join(
         [resolve_host(controller) for controller in controller.split(" ")])
     cmd = ['set-controller {} {}'.format(self.name, cnt)]
     vsctl(cmd)
示例#6
0
 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)
示例#7
0
 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)