summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorDan Klein <danklei@cisco.com>2015-08-30 13:59:07 +0300
committerDan Klein <danklei@cisco.com>2015-08-30 13:59:07 +0300
commit760710869405dbc3b5dadd6ce06015c72ea2ca44 (patch)
treec705b9f528edb932f47dbde7f3df8e1ac39c9523 /scripts
parent68df86e2005dc4693b1270a3e663e2450f81fa93 (diff)
another stateless progress
Diffstat (limited to 'scripts')
-rw-r--r--scripts/automation/trex_control_plane/client_utils/packet_builder.py61
1 files changed, 59 insertions, 2 deletions
diff --git a/scripts/automation/trex_control_plane/client_utils/packet_builder.py b/scripts/automation/trex_control_plane/client_utils/packet_builder.py
index 172dcda2..0d31f28e 100644
--- a/scripts/automation/trex_control_plane/client_utils/packet_builder.py
+++ b/scripts/automation/trex_control_plane/client_utils/packet_builder.py
@@ -79,6 +79,13 @@ class CTRexPktBuilder(object):
def add_vm_variable(self, name):
if name not in self.vm_variables.keys():
self.vm_variables[name] = self.CTRexVMVariable(name)
+ else:
+ raise CTRexPktBuilder.VMVarNameExistsError(name)
+
+ def set_vm_var_field(self, var_name, field_name, val):
+ pass
+ return self.vm_variables[var_name].set_field(field_name, val)
+
def fix_checksum_ipv4(self):
pass
@@ -91,8 +98,7 @@ class CTRexPktBuilder(object):
def dump(self):
return [var.dump()
- for var in self.vm_variables
- if var.is_validty()]
+ for var in self.vm_variables]
class CTRexVMVariable(object):
VALID_SIZE = [1, 2, 4, 8]
@@ -110,6 +116,25 @@ class CTRexPktBuilder(object):
self.min_addr = str(self.init_addr)
self.max_addr = str(self.init_addr)
+ def set_field(self, field_name, val):
+ if field_name == "size":
+ if type(val) != int:
+ raise CTRexPktBuilder.VMVarFieldTypeError("size", int)
+ elif val not in self.VALID_SIZE:
+ raise CTRexPktBuilder.VMVarValueError("size", self.VALID_SIZE)
+ elif field_name == "type":
+ if type(val) != str:
+ raise CTRexPktBuilder.VMVarFieldTypeError("type", str)
+ elif val not in self.VALID_TYPE:
+ raise CTRexPktBuilder.VMVarValueError("type", self.VALID_TYPE)
+ elif field_name == "core_mask":
+ if type(val) != str:
+ raise CTRexPktBuilder.VMVarFieldTypeError("core_mask", str)
+ elif val not in self.VALID_TYPE:
+ raise CTRexPktBuilder.VMVarValueError("core_mask", self.VALID_CORE_MASK)
+ # update field value on success
+ setattr(self, field_name, val)
+
def is_valid(self):
if self.size not in self.VALID_SIZE:
return False
@@ -152,6 +177,38 @@ class CTRexPktBuilder(object):
self.message = message or self._default_message
super(CTRexPktBuilder.IPAddressError, self).__init__(-11, self.message)
+ class VMVarNameExistsError(CPacketBuildException):
+ """
+ This exception is used to indicate an error on the IP addressing part of the packet.
+ """
+ def __init__(self, name, message=''):
+ self._default_message = 'The given VM name ({0})already exists as part of the stream.'.format(name)
+ self.message = message or self._default_message
+ super(CTRexPktBuilder.VMVarNameExistsError, self).__init__(-21, self.message)
+
+ class VMVarFieldTypeError(CPacketBuildException):
+ """
+ This exception is used to indicate an error on the IP addressing part of the packet.
+ """
+ def __init__(self, name, ok_type, message=''):
+ self._default_message = 'The desired value of field {field_name} is of type {field_type}, \
+ and not of the allowed {allowed_type}.'.format(field_name=name,
+ field_type=type(name).__name__,
+ allowed_type=ok_type.__name__)
+ self.message = message or self._default_message
+ super(CTRexPktBuilder.VMVarNameExistsError, self).__init__(-31, self.message)
+
+ class VMVarValueError(CPacketBuildException):
+ """
+ This exception is used to indicate an error on the IP addressing part of the packet.
+ """
+ def __init__(self, name, ok_opts, message=''):
+ self._default_message = 'The desired value of field {field_name} is illegal.\n \
+ The only allowed options are: {allowed_opts}.'.format(field_name=name,
+ allowed_opts=ok_opts)
+ self.message = message or self._default_message
+ super(CTRexPktBuilder.VMVarValueError, self).__init__(-32, self.message)
+
if __name__ == "__main__":
pass