diff options
Diffstat (limited to 'yardstick/network_services')
-rw-r--r-- | yardstick/network_services/libs/ixia_libs/ixnet/ixnet_api.py | 196 | ||||
-rw-r--r-- | yardstick/network_services/traffic_profile/rfc2544.py | 2 |
2 files changed, 191 insertions, 7 deletions
diff --git a/yardstick/network_services/libs/ixia_libs/ixnet/ixnet_api.py b/yardstick/network_services/libs/ixia_libs/ixnet/ixnet_api.py index 29533808c..12f081dc6 100644 --- a/yardstick/network_services/libs/ixia_libs/ixnet/ixnet_api.py +++ b/yardstick/network_services/libs/ixia_libs/ixnet/ixnet_api.py @@ -50,6 +50,20 @@ TRAFFIC_STATUS_STOPPED = 'stopped' SUPPORTED_PROTO = [PROTO_UDP] +class Vlan(object): + def __init__(self, + vlan_id, vlan_id_step=None, vlan_id_direction='increment', + prio=None, prio_step=None, prio_direction='increment', + tp_id=None): + self.vlan_id = vlan_id + self.vlan_id_step = vlan_id_step + self.vlan_id_direction = vlan_id_direction + self.prio = prio + self.prio_step = prio_step + self.prio_direction = prio_direction + self.tp_id = tp_id + + # NOTE(ralonsoh): this pragma will be removed in the last patch of this series class IxNextgen(object): # pragma: no cover @@ -225,11 +239,16 @@ class IxNextgen(object): # pragma: no cover zip(self._cfg['cards'], self._cfg['ports'])] log.info('Create and assign vports: %s', ports) - for port in ports: - vport = self.ixnet.add(self.ixnet.getRoot(), 'vport') - self.ixnet.commit() - self.ixnet.execute('assignPorts', [port], [], [vport], True) + + vports = [] + for _ in ports: + vports.append(self.ixnet.add(self.ixnet.getRoot(), 'vport')) self.ixnet.commit() + + self.ixnet.execute('assignPorts', ports, [], vports, True) + self.ixnet.commit() + + for vport in vports: if self.ixnet.getAttribute(vport, '-state') != 'up': log.warning('Port %s is down', vport) @@ -372,8 +391,8 @@ class IxNextgen(object): # pragma: no cover tp_base.TrafficProfileConfig.RATE_FPS else 'percentLineRate') weighted_range_pairs = self._parse_framesize( traffic_param['outer_l2']['framesize']) - srcmac = str(traffic_param.get('srcmac', '00:00:00:00:00:01')) - dstmac = str(traffic_param.get('dstmac', '00:00:00:00:00:02')) + srcmac = str(traffic_param['outer_l2'].get('srcmac', '00:00:00:00:00:01')) + dstmac = str(traffic_param['outer_l2'].get('dstmac', '00:00:00:00:00:02')) if traffic_param['outer_l2']['QinQ']: s_vlan = traffic_param['outer_l2']['QinQ']['S-VLAN'] @@ -587,3 +606,168 @@ class IxNextgen(object): # pragma: no cover self.ixnet.execute('start', '/traffic') # pylint: disable=unnecessary-lambda utils.wait_until_true(lambda: self.is_traffic_running()) + + def add_topology(self, name, vports): + log.debug("add_topology: name='%s' ports='%s'", name, vports) + obj = self.ixnet.add(self.ixnet.getRoot(), 'topology') + self.ixnet.setMultiAttribute(obj, '-name', name, '-vports', vports) + self.ixnet.commit() + return obj + + def add_device_group(self, topology, name, multiplier): + log.debug("add_device_group: tpl='%s', name='%s', multiplier='%s'", + topology, name, multiplier) + + obj = self.ixnet.add(topology, 'deviceGroup') + self.ixnet.setMultiAttribute(obj, '-name', name, '-multiplier', + multiplier) + self.ixnet.commit() + return obj + + def add_ethernet(self, dev_group, name): + log.debug( + "add_ethernet: device_group='%s' name='%s'", dev_group, name) + obj = self.ixnet.add(dev_group, 'ethernet') + self.ixnet.setMultiAttribute(obj, '-name', name) + self.ixnet.commit() + return obj + + def _create_vlans(self, ethernet, count): + self.ixnet.setMultiAttribute(ethernet, '-useVlans', 'true') + self.ixnet.setMultiAttribute(ethernet, '-vlanCount', count) + self.ixnet.commit() + + def _configure_vlans(self, ethernet, vlans): + vlans_obj = self.ixnet.getList(ethernet, 'vlan') + for i, vlan_obj in enumerate(vlans_obj): + if vlans[i].vlan_id_step is not None: + vlan_id_obj = self.ixnet.getAttribute(vlan_obj, '-vlanId') + self.ixnet.setMultiAttribute(vlan_id_obj, '-clearOverlays', + 'true', '-pattern', 'counter') + vlan_id_counter = self.ixnet.add(vlan_id_obj, 'counter') + self.ixnet.setMultiAttribute(vlan_id_counter, '-start', + vlans[i].vlan_id, '-step', + vlans[i].vlan_id_step, + '-direction', + vlans[i].vlan_id_direction) + else: + vlan_id_obj = self.ixnet.getAttribute(vlan_obj, '-vlanId') + self.ixnet.setMultiAttribute(vlan_id_obj + '/singleValue', + '-value', vlans[i].vlan_id) + + if vlans[i].prio_step is not None: + prio_obj = self.ixnet.getAttribute(vlan_obj, '-priority') + self.ixnet.setMultiAttribute(prio_obj, '-clearOverlays', 'true', + '-pattern', 'counter') + prio_counter = self.ixnet.add(prio_obj, 'counter') + self.ixnet.setMultiAttribute(prio_counter, + '-start', vlans[i].prio, + '-step', vlans[i].prio_step, + '-direction', vlans[i].prio_direction) + elif vlans[i].prio is not None: + prio_obj = self.ixnet.getAttribute(vlan_obj, '-priority') + self.ixnet.setMultiAttribute(prio_obj + '/singleValue', + '-value', vlans[i].prio) + + if vlans[i].tp_id is not None: + tp_id_obj = self.ixnet.getAttribute(vlan_obj, '-tpid') + self.ixnet.setMultiAttribute(tp_id_obj + '/singleValue', + '-value', vlans[i].tp_id) + + self.ixnet.commit() + + def add_vlans(self, ethernet, vlans): + log.debug("add_vlans: ethernet='%s'", ethernet) + + if vlans is None or len(vlans) == 0: + raise RuntimeError( + "Invalid 'vlans' argument. Expected list of Vlan instances.") + + self._create_vlans(ethernet, len(vlans)) + self._configure_vlans(ethernet, vlans) + + def add_ipv4(self, ethernet, name='', + addr=None, addr_step=None, addr_direction='increment', + prefix=None, prefix_step=None, prefix_direction='increment', + gateway=None, gw_step=None, gw_direction='increment'): + log.debug("add_ipv4: ethernet='%s' name='%s'", ethernet, name) + obj = self.ixnet.add(ethernet, 'ipv4') + if name != '': + self.ixnet.setAttribute(obj, '-name', name) + self.ixnet.commit() + + if addr_step is not None: + # handle counter pattern + _address = self.ixnet.getAttribute(obj, '-address') + self.ixnet.setMultiAttribute(_address, '-clearOverlays', 'true', + '-pattern', 'counter') + + address_counter = self.ixnet.add(_address, 'counter') + self.ixnet.setMultiAttribute(address_counter, + '-start', addr, + '-step', addr_step, + '-direction', addr_direction) + elif addr is not None: + # handle single value + _address = self.ixnet.getAttribute(obj, '-address') + self.ixnet.setMultiAttribute(_address + '/singleValue', '-value', + addr) + + if prefix_step is not None: + # handle counter pattern + _prefix = self.ixnet.getAttribute(obj, '-prefix') + self.ixnet.setMultiAttribute(_prefix, '-clearOverlays', 'true', + '-pattern', 'counter') + prefix_counter = self.ixnet.add(_prefix, 'counter') + self.ixnet.setMultiAttribute(prefix_counter, + '-start', prefix, + '-step', prefix_step, + '-direction', prefix_direction) + elif prefix is not None: + # handle single value + _prefix = self.ixnet.getAttribute(obj, '-prefix') + self.ixnet.setMultiAttribute(_prefix + '/singleValue', '-value', + prefix) + + if gw_step is not None: + # handle counter pattern + _gateway = self.ixnet.getAttribute(obj, '-gatewayIp') + self.ixnet.setMultiAttribute(_gateway, '-clearOverlays', 'true', + '-pattern', 'counter') + + gateway_counter = self.ixnet.add(_gateway, 'counter') + self.ixnet.setMultiAttribute(gateway_counter, + '-start', gateway, + '-step', gw_step, + '-direction', gw_direction) + elif gateway is not None: + # handle single value + _gateway = self.ixnet.getAttribute(obj, '-gatewayIp') + self.ixnet.setMultiAttribute(_gateway + '/singleValue', '-value', + gateway) + + self.ixnet.commit() + return obj + + def add_pppox_client(self, xproto, auth, user, pwd): + log.debug( + "add_pppox_client: xproto='%s', auth='%s', user='%s', pwd='%s'", + xproto, auth, user, pwd) + obj = self.ixnet.add(xproto, 'pppoxclient') + self.ixnet.commit() + + if auth == 'pap': + auth_type = self.ixnet.getAttribute(obj, '-authType') + self.ixnet.setMultiAttribute(auth_type + '/singleValue', '-value', + auth) + pap_user = self.ixnet.getAttribute(obj, '-papUser') + self.ixnet.setMultiAttribute(pap_user + '/singleValue', '-value', + user) + pap_pwd = self.ixnet.getAttribute(obj, '-papPassword') + self.ixnet.setMultiAttribute(pap_pwd + '/singleValue', '-value', + pwd) + else: + raise NotImplementedError() + + self.ixnet.commit() + return obj diff --git a/yardstick/network_services/traffic_profile/rfc2544.py b/yardstick/network_services/traffic_profile/rfc2544.py index 4b339c2ed..e33c437c9 100644 --- a/yardstick/network_services/traffic_profile/rfc2544.py +++ b/yardstick/network_services/traffic_profile/rfc2544.py @@ -197,7 +197,7 @@ class RFC2544Profile(trex_traffic_profile.TrexProfile): byte_total = sum([int(size) * weight for size, weight in imix_dip.items()]) - return {size: (int(size) * weight) / byte_total + return {size: (int(size) * weight * 100) / byte_total for size, weight in imix_dip.items()} def _create_vm(self, packet_definition): |