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
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]
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
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