aboutsummaryrefslogtreecommitdiffstats
path: root/yardstick/network_services/libs/ixia_libs/ixnet/ixnet_api.py
diff options
context:
space:
mode:
Diffstat (limited to 'yardstick/network_services/libs/ixia_libs/ixnet/ixnet_api.py')
-rw-r--r--yardstick/network_services/libs/ixia_libs/ixnet/ixnet_api.py103
1 files changed, 84 insertions, 19 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 1f465bde5..cc627ef78 100644
--- a/yardstick/network_services/libs/ixia_libs/ixnet/ixnet_api.py
+++ b/yardstick/network_services/libs/ixia_libs/ixnet/ixnet_api.py
@@ -49,6 +49,19 @@ PROTOCOL_STATUS_DOWN = ['down', 'notStarted']
SUPPORTED_PROTO = [PROTO_UDP]
+SUPPORTED_DSCP_CLASSES = [
+ 'defaultPHB',
+ 'classSelectorPHB',
+ 'assuredForwardingPHB',
+ 'expeditedForwardingPHB']
+
+SUPPORTED_TOS_FIELDS = [
+ 'precedence',
+ 'delay',
+ 'throughput',
+ 'reliability'
+]
+
class Vlan(object):
def __init__(self,
@@ -139,6 +152,9 @@ class IxNextgen(object): # pragma: no cover
vports = self.ixnet.getList(self.ixnet.getRoot(), 'vport')
return vports
+ def get_static_interface(self, vport):
+ return self.ixnet.getList(vport, 'interface')
+
def _get_config_element_by_flow_group_name(self, flow_group_name):
"""Get a config element using the flow group name
@@ -198,9 +214,18 @@ class IxNextgen(object): # pragma: no cover
:param proto: IxNet protocol str representation, e.g.:
'::ixNet::OBJ-/topology:2/deviceGroup:1/ethernet:1/ipv4:L14'
- :return: (str) protocol status: 'up', 'down' or 'notStarted'
+ :return: (list) protocol status: list of sessions protocol
+ statuses which include states 'up', 'down' and 'notStarted'
+ """
+ return self.ixnet.getAttribute(proto, '-sessionStatus')
+
+ def get_topology_device_groups(self, topology):
+ """Get list of device groups in topology
+
+ :param topology: (str) topology descriptor
+ :return: (list) list of device groups descriptors
"""
- return self.ixnet.getAttribute(proto, '-sessionStatus')[0]
+ return self.ixnet.getList(topology, 'deviceGroup')
def is_traffic_running(self):
"""Returns true if traffic state == TRAFFIC_STATUS_STARTED"""
@@ -218,8 +243,8 @@ class IxNextgen(object): # pragma: no cover
:return: (bool) True if all protocols status is 'up', False if any
protocol status is 'down' or 'notStarted'
"""
- return all(self._get_protocol_status(proto) == PROTOCOL_STATUS_UP
- for proto in protocols)
+ return all(session_status is PROTOCOL_STATUS_UP for proto in protocols
+ for session_status in self._get_protocol_status(proto))
def is_protocols_stopped(self, protocols):
"""Returns true if all protocols statuses are in PROTOCOL_STATUS_DOWN
@@ -229,8 +254,8 @@ class IxNextgen(object): # pragma: no cover
:return: (bool) True if all protocols status is 'down' or 'notStarted',
False if any protocol status is 'up'
"""
- return all(self._get_protocol_status(proto) in PROTOCOL_STATUS_DOWN
- for proto in protocols)
+ return all(session_status in PROTOCOL_STATUS_DOWN for proto in protocols
+ for session_status in self._get_protocol_status(proto))
@staticmethod
def _parse_framesize(framesize):
@@ -392,7 +417,7 @@ class IxNextgen(object): # pragma: no cover
self._create_flow_groups(uplink_endpoints, downlink_endpoints)
self._setup_config_elements()
- def create_ipv4_traffic_model(self, uplink_topologies, downlink_topologies):
+ def create_ipv4_traffic_model(self, uplink_endpoints, downlink_endpoints):
"""Create a traffic item and the needed flow groups
Each flow group inside the traffic item (only one is present)
@@ -404,7 +429,7 @@ class IxNextgen(object): # pragma: no cover
FlowGroup4: uplink2 <- downlink2
"""
self._create_traffic_item('ipv4')
- self._create_flow_groups(uplink_topologies, downlink_topologies)
+ self._create_flow_groups(uplink_endpoints, downlink_endpoints)
self._setup_config_elements(False)
def _update_frame_mac(self, ethernet_descriptor, field, mac_address):
@@ -597,23 +622,25 @@ class IxNextgen(object): # pragma: no cover
'precedence': [1, 4, 7]
}
"""
- if 'raw' in priority:
+ if priority.get('raw'):
priority_field = self._get_field_in_stack_item(ip_descriptor,
'priority.raw')
self._set_priority_field(priority_field, priority['raw'])
- elif 'dscp' in priority:
+ elif priority.get('dscp'):
for field, value in priority['dscp'].items():
- priority_field = self._get_field_in_stack_item(
- ip_descriptor,
- 'priority.ds.phb.{field}.{field}'.format(field=field))
- self._set_priority_field(priority_field, value)
+ if field in SUPPORTED_DSCP_CLASSES:
+ priority_field = self._get_field_in_stack_item(
+ ip_descriptor,
+ 'priority.ds.phb.{field}.{field}'.format(field=field))
+ self._set_priority_field(priority_field, value)
- elif 'tos' in priority:
+ elif priority.get('tos'):
for field, value in priority['tos'].items():
- priority_field = self._get_field_in_stack_item(
- ip_descriptor, 'priority.tos.' + field)
- self._set_priority_field(priority_field, value)
+ if field in SUPPORTED_TOS_FIELDS:
+ priority_field = self._get_field_in_stack_item(
+ ip_descriptor, 'priority.tos.' + field)
+ self._set_priority_field(priority_field, value)
def _set_priority_field(self, field_descriptor, value):
"""Set the priority field described by field_descriptor
@@ -938,7 +965,7 @@ class IxNextgen(object): # pragma: no cover
self.ixnet.commit()
return obj
- def add_pppox_client(self, xproto, auth, user, pwd):
+ def add_pppox_client(self, xproto, auth, user, pwd, enable_redial=True):
log.debug(
"add_pppox_client: xproto='%s', auth='%s', user='%s', pwd='%s'",
xproto, auth, user, pwd)
@@ -958,6 +985,10 @@ class IxNextgen(object): # pragma: no cover
else:
raise NotImplementedError()
+ if enable_redial:
+ redial = self.ixnet.getAttribute(obj, '-enableRedial')
+ self.ixnet.setAttribute(redial + '/singleValue', '-value', 'true')
+
self.ixnet.commit()
return obj
@@ -986,3 +1017,37 @@ class IxNextgen(object): # pragma: no cover
'-value', bgp_type)
self.ixnet.commit()
return obj
+
+ def add_interface(self, vport, ip, mac=None, gateway=None):
+ """Add protocol interface to the vport"""
+ log.debug("add_interface: mac='%s', ip='%s', gateway='%s'", mac, ip,
+ gateway)
+ obj = self.ixnet.add(vport, 'interface')
+ self.ixnet.commit()
+
+ if mac is not None:
+ self.ixnet.setMultiAttribute(obj + '/ethernet', '-macAddress', mac)
+
+ ipv4 = self.ixnet.add(obj, 'ipv4')
+ self.ixnet.setMultiAttribute(ipv4, '-ip', ip)
+
+ if gateway is not None:
+ self.ixnet.setMultiAttribute(ipv4, '-gateway', gateway)
+
+ self.ixnet.commit()
+
+ self.ixnet.setMultiAttribute(obj, '-enabled', 'true')
+ self.ixnet.commit()
+
+ return obj
+
+ def add_static_ipv4(self, iface, vport, start_ip, count, mask='24'):
+ """Add static IP range to the interface"""
+ log.debug("add_static_ipv4: start_ip:'%s', count:'%s'",
+ start_ip, count)
+ obj = self.ixnet.add(vport + '/protocols/static', 'ip')
+
+ self.ixnet.setMultiAttribute(obj, '-protocolInterface', iface,
+ '-ipStart', start_ip, '-count', count,
+ '-mask', mask, '-enabled', 'true')
+ self.ixnet.commit()