Support in cord-tester for aaa-proxy using sadis app.
And various other changes that moves support for aaa to ONOS 1.10.3 and upwards.
Change-Id: Id911812caf2e1c1bd78107e57175d190241812ff
diff --git a/src/test/utils/OnosCtrl.py b/src/test/utils/OnosCtrl.py
index 15b55d7..1742f43 100644
--- a/src/test/utils/OnosCtrl.py
+++ b/src/test/utils/OnosCtrl.py
@@ -33,7 +33,8 @@
import requests
import os,sys,time
from OltConfig import OltConfig
-from CordTestUtils import get_mac, get_controller
+from CordTestUtils import get_mac, get_controller, log_test
+from EapolAAA import get_radius_macs
class OnosCtrl:
@@ -291,3 +292,141 @@
for driver in driver_apps:
cls(driver).activate()
time.sleep(5)
+
+ @classmethod
+ def device_id_to_mac(cls, device_id):
+ device_mac_raw = device_id[-12:]
+ hwaddrs = []
+ for i in xrange(0, 12, 2):
+ hwaddrs.append(device_mac_raw[i:i+2])
+
+ device_mac = ':'.join(hwaddrs)
+ return device_mac
+
+ @classmethod
+ def aaa_load_config(cls, controller = None, olt_conf_file = ''):
+ ovs_devices = cls.get_devices(controller = controller, mfr = 'Nicira')
+ if not ovs_devices:
+ 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' : {} } } }
+ aaa_cfg = dict(radiusConnectionType = 'port',
+ radiusSecret = 'radius_password',
+ radiusServerPort = '1812',
+ packetCustomizer = 'sample',
+ vlanId = -1)
+ radius_ip = os.getenv('ONOS_AAA_IP') or '11.0.0.3'
+ radius_subnet = '.'.join(radius_ip.split('.')[:-1])
+ for switch, ports in port_map['switch_radius_port_list']:
+ radius_macs = get_radius_macs(len(ports))
+ 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(radius_subnet, radius_port)
+ aaa_cfg['radiusIp'] = radius_ip
+ for dev in ovs_devices:
+ connect_point = '{}/{}'.format(dev['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)
+
+ @classmethod
+ 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
+
+ @classmethod
+ def sadis_load_config(cls, controller = None, olt_switch_map = {}, olt_conf_file = ''):
+ sadis_app = 'org.opencord.sadis'
+ aaa_app = 'org.opencord.aaa'
+ sadis_cfg = {
+ 'apps' : {
+ sadis_app : {
+ 'sadis' : {
+ 'integration' : {
+ 'cache' : {
+ 'enabled' : False,
+ 'maxsize' : 50,
+ 'ttl' : 'PT10m',
+ },
+ },
+ 'entries' : [],
+ },
+ },
+ }
+ }
+ sadis_entries = sadis_cfg['apps'][sadis_app]['sadis']['entries']
+ nasId = '1/1/2'
+ nasPortId = '1/1/2'
+ switch_map = olt_switch_map.copy()
+ ovs_switch_map = cls.get_ovs_switch_map(controller = controller,
+ olt_conf_file = olt_conf_file)
+ #log_test.info('OVS switch map: %s' %ovs_switch_map)
+ switch_map.update(ovs_switch_map)
+ for device, entries in switch_map.iteritems():
+ uni_ports = entries['ports']
+ uni_port_names = entries['names']
+ uni_port_macs = entries['macs']
+ s_tag = entries['uplink_vlan']
+ serial = entries['serial']
+ #add entries for uni ports and device
+ for p in xrange(len(uni_ports)):
+ sadis_entry = dict(nasId = nasId, nasPortId = nasPortId, slot = 1)
+ sadis_entry['id'] = uni_port_names[p]
+ sadis_entry['hardwareIdentifier'] = uni_port_macs[p]
+ sadis_entry['cTag'] = uni_ports[p]
+ sadis_entry['sTag'] = s_tag
+ sadis_entry['port'] = uni_ports[p]
+ sadis_entry['ipAddress'] = controller or cls.controller
+ sadis_entries.append(sadis_entry)
+ #add entry for the device itself
+ sadis_entry = dict(nasId = nasId, nasPortId = nasPortId, slot = 1)
+ sadis_entry['id'] = serial
+ sadis_entry['hardwareIdentifier'] = cls.device_id_to_mac(device)
+ sadis_entry['cTag'] = uni_ports[p]
+ sadis_entry['sTag'] = s_tag
+ sadis_entry['port'] = uni_ports[p]
+ sadis_entry['ipAddress'] = controller or cls.controller
+ sadis_entries.append(sadis_entry)
+
+ #log_test.info('Sadis cfg: %s' %json.dumps(sadis_cfg, indent=4))
+ cls.config(sadis_cfg, controller = controller)
+
+ # cls(sadis_app, controller = controller).deactivate()
+ # time.sleep(2)
+ # cls(sadis_app, controller = controller).activate()
+ # time.sleep(2)
+
+ # cls(aaa_app, controller = controller).deactivate()
+ # time.sleep(2)
+ # cls(aaa_app, controller = controller).activate()
+ # time.sleep(2)