def __init__(self, tests, instance = 0, num_instances = 1, ctlr_ip = None, image = IMAGE, tag = 'latest', env = None, rm = False, update = False): self.tests = tests self.ctlr_ip = ctlr_ip self.rm = rm self.name = self.get_name() super(CordTester, self).__init__(self.name, image = image, tag = tag) host_config = self.create_host_config(host_guest_map = self.host_guest_map, privileged = True) volumes = [] for _, g in self.host_guest_map: volumes.append(g) if update is True or not self.img_exists(): self.build_image(image) ##Remove test container if any self.remove_container(self.name, force=True) if env is not None and env.has_key('OLT_CONFIG'): self.olt = True olt_conf_file = os.path.join(self.tester_base, 'olt_config.json') olt_config = OltConfig(olt_conf_file) self.port_map, _ = olt_config.olt_port_map() else: self.olt = False self.port_map = None if env is not None: env['TEST_HOST'] = self.name env['TEST_INSTANCE'] = instance env['TEST_INSTANCES'] = num_instances print('Starting test container %s, image %s, tag %s' %(self.name, self.image, self.tag)) self.start(rm = False, volumes = volumes, environment = env, host_config = host_config, tty = True)
def __restart_radius(self, olt_conf_file = ''): olt_conf = os.path.join(Onos.setup_dir, os.path.basename(olt_conf_file)) olt = OltConfig(olt_conf_file = olt_conf) port_map, _ = olt.olt_port_map() Radius(prefix = Container.IMAGE_PREFIX, restart = True) radius_macs = get_radius_macs(len(port_map['radius_ports'])) radius_networks = get_radius_networks(len(port_map['switch_radius_port_list'])) radius_intf_index = 0 index = 0 for host_intf, ports in port_map['switch_radius_port_list']: prefix, subnet, _ = radius_networks[index] mask = subnet.split('/')[-1] index += 1 for port in ports: guest_if = 'eth{}'.format(radius_intf_index + 2) port_index = port_map[port] local_if = 'r{}'.format(port_index) guest_ip = '{}.{}/{}'.format(prefix, port_index, mask) mac = radius_macs[radius_intf_index] radius_intf_index += 1 pipework_cmd = 'pipework {0} -i {1} -l {2} {3} {4} {5}'.format(host_intf, guest_if, local_if, Radius.NAME, guest_ip, mac) print('Configuring Radius port %s on OVS bridge %s' %(guest_if, host_intf)) print('Running pipework command: %s' %(pipework_cmd)) res = os.system(pipework_cmd)
def get_ovs_switch_map(cls, controller=None, olt_conf_file=''): port_map = None #build ovs switch map if olt_conf_file: olt = OltConfig(olt_conf_file=olt_conf_file) port_map, _ = olt.olt_port_map() devices = cls.get_devices(controller=controller, mfr='Nicira') switch_map = {} for dev in devices: device_id = dev['id'] serial = dev['serial'] ports = cls.get_ports_device(dev['id'], controller=controller) ports = filter(lambda p: p['isEnabled'] and 'annotations' in p, ports) #just create dummy ctag/uni port numbers onu_ports = [1] * len(ports) onu_names = map(lambda p: p['annotations']['portName'], ports) onu_macs = map(lambda p: p['annotations']['portMac'], ports) switch_map[device_id] = dict(uplink_vlan=1, serial=serial, ports=onu_ports, names=onu_names, macs=onu_macs) return switch_map
def cleanup_intfs(cls): olt_conf_file = os.path.join(cls.tester_base, 'olt_config.json') olt_config = OltConfig(olt_conf_file) port_map, _ = olt_config.olt_port_map() port_num = 0 intf_host = port_map['host'] start_vlan = port_map['start_vlan'] intf_type = 0 if os.path.isdir('/sys/class/net/{}/bridge'.format(intf_host)): intf_type = 1 ##linux bridge else: cmd = 'ovs-vsctl list-br | grep -q "^{0}$"'.format(intf_host) res = os.system(cmd) if res == 0: ##ovs bridge intf_type = 2 cmds = () res = 0 for port in port_map['ports']: local_if = '{0}_{1}'.format(port, port_num+1) if intf_type == 0: if start_vlan != 0: cmds = ('ip link del {}.{}'.format(intf_host, start_vlan + port_num),) else: if intf_type == 1: cmds = ('brctl delif {} {}'.format(intf_host, local_if), 'ip link del {}'.format(local_if)) else: cmds = ('ovs-vsctl del-port {} {}'.format(intf_host, local_if),) for cmd in cmds: res += os.system(cmd) port_num += 1
def aaa_load_config(cls, controller=None, olt_conf_file='', conn_type='socket'): ovs_devices = cls.get_devices(controller=controller, mfr='Nicira') if not ovs_devices and conn_type != 'socket': log_test.info( 'No OVS devices found to configure AAA connect points') return olt = OltConfig(olt_conf_file=olt_conf_file) port_map, _ = olt.olt_port_map() app = 'org.opencord.aaa' cfg = {'apps': {app: {'AAA': {}}}} if conn_type == 'socket': customizer = 'default' else: customizer = 'sample' aaa_cfg = dict(radiusConnectionType=conn_type, radiusSecret='radius_password', radiusServerPort='1812', packetCustomizer=customizer, vlanId=-1) radius_networks = get_radius_networks( len(port_map['switch_radius_port_list'])) index = 0 for switch, ports in port_map['switch_radius_port_list']: radius_macs = get_radius_macs(len(ports)) prefix, _, _ = radius_networks[index] index += 1 aaa_cfg['nasIp'] = controller or cls.controller aaa_cfg['nasMac'] = radius_macs[0] aaa_cfg['radiusMac'] = radius_macs[0] connect_points = [] radius_port = port_map[ports[0]] radius_ip = '{}.{}'.format(prefix, radius_port) if conn_type == 'socket': radius_ip = os.getenv('ONOS_AAA_IP') aaa_cfg['radiusIp'] = radius_ip for dev in ovs_devices: device_id = dev['id'] ports = OnosCtrl.get_ports_device(device_id, controller=controller) radius_ports = filter(lambda p: p['isEnabled'] and 'annotations' in p and \ p['annotations']['portName'].startswith('r'), ports) if not radius_ports: continue radius_port = radius_ports[0]['port'] connect_point = '{}/{}'.format(device_id, radius_port) connect_points.append(connect_point) aaa_cfg['radiusServerConnectPoints'] = connect_points break cfg['apps'][app]['AAA'] = aaa_cfg cls.config(cfg, controller=controller)
def get_device_ids(cls, controller=None, olt_conf_file=''): '''If running under olt, we get the first switch connected to onos''' olt = OltConfig(olt_conf_file=olt_conf_file) did = 'of:' + get_mac() device_ids = [] if olt.on_olt(): devices = cls.get_devices(controller=controller) if devices: device_ids = map(lambda d: d['id'], devices) else: device_ids.append(did) return device_ids
def get_device_id(cls, controller=None, mfr=None, olt_conf_file=''): '''If running under olt, we get the first switch connected to onos''' olt = OltConfig(olt_conf_file=olt_conf_file) did = 'of:' + get_mac() if olt.on_olt(): devices = cls.get_devices(controller=controller, mfr=mfr) if devices: dids = map(lambda d: d['id'], devices) if len(dids) == 1: did = dids[0] else: ###If we have more than 1, then check for env before using first one did = os.getenv('OLT_DEVICE_ID', dids[0]) return did
def get_device_id(cls): '''If running under olt, we get the first switch connected to onos''' olt = OltConfig() did = 'of:' + get_mac() if olt.on_olt(): devices = cls.get_devices() if devices: dids = map(lambda d: d['id'], devices) if len(dids) == 1: did = dids[0] else: ###If we have more than 1, then check for env before using first one did = os.getenv('OLT_DEVICE_ID', dids[0]) return did
def setUpClass(cls): cls.olt = OltConfig() cls.port_map, _ = cls.olt.olt_port_map() if not cls.port_map: cls.port_map = g_subscriber_port_map time.sleep(3) cls.load_device_id()
def setUpClass(cls): ''' Activate the vrouter apps''' cls.olt = OltConfig() cls.port_map, _ = cls.olt.olt_port_map() if not cls.port_map: cls.port_map = g_subscriber_port_map time.sleep(3) cls.load_device_id()
def config_olt_access(cls, uplink_vlan, controller=None, defaultVlan='0', olt_conf_file=''): olt = OltConfig(olt_conf_file=olt_conf_file) port_map, _ = olt.olt_port_map() uplink = str(port_map['uplink']) device_config = {'devices': {}} ovs_devices = cls.get_devices(controller=controller, mfr='Nicira') for dev in ovs_devices: device_id = dev['id'] device_config['devices'][device_id] = {} device_config['devices'][device_id]['basic'] = dict( driver='default') device_config['devices'][device_id]['accessDevice'] = dict( uplink=uplink, vlan=uplink_vlan, defaultVlan=defaultVlan) cls.config(device_config, controller=controller)