summaryrefslogtreecommitdiffstats
path: root/scripts/automation/trex_control_plane/client_utils
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2016-02-03 09:21:10 -0500
committerimarom <imarom@cisco.com>2016-02-03 14:07:14 -0500
commit2887433cb71f43c9bf91226915959f5ebea49869 (patch)
tree70c9e62a9e64a26d71f7dcfabb04e5f22993d353 /scripts/automation/trex_control_plane/client_utils
parent7447c92021d7ce3fc0fe115109b54a2f681f2392 (diff)
integration with scapy
Diffstat (limited to 'scripts/automation/trex_control_plane/client_utils')
-rwxr-xr-xscripts/automation/trex_control_plane/client_utils/packet_builder.py7
-rw-r--r--scripts/automation/trex_control_plane/client_utils/packet_builder_interface.py43
-rw-r--r--scripts/automation/trex_control_plane/client_utils/scapy_packet_builder.py30
3 files changed, 75 insertions, 5 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 5ad6cd7a..f9031436 100755
--- a/scripts/automation/trex_control_plane/client_utils/packet_builder.py
+++ b/scripts/automation/trex_control_plane/client_utils/packet_builder.py
@@ -14,7 +14,9 @@ from abc import ABCMeta, abstractmethod
from collections import namedtuple
import base64
-class CTRexPktBuilder(object):
+from packet_builder_interface import CTrexPktBuilderInterface
+
+class CTRexPktBuilder(CTrexPktBuilderInterface):
"""
This class defines the TRex API of building a packet using dpkt package.
Using this class the user can also define how TRex will handle the packet by specifying the VM setting.
@@ -480,6 +482,9 @@ class CTRexPktBuilder(object):
def get_vm_data(self):
return self.vm.dump()
+ def compile (self):
+ pass
+
def dump_pkt(self, encode = True):
"""
Dumps the packet as a decimal array of bytes (each item x gets value between 0-255)
diff --git a/scripts/automation/trex_control_plane/client_utils/packet_builder_interface.py b/scripts/automation/trex_control_plane/client_utils/packet_builder_interface.py
new file mode 100644
index 00000000..b6e7c026
--- /dev/null
+++ b/scripts/automation/trex_control_plane/client_utils/packet_builder_interface.py
@@ -0,0 +1,43 @@
+
+# base object class for a packet builder
+class CTrexPktBuilderInterface(object):
+
+ def compile (self):
+ """
+ Compiles the packet and VM
+ """
+ raise Exception("implement me")
+
+
+ def dump_pkt(self):
+ """
+ Dumps the packet as a decimal array of bytes (each item x gets value between 0-255)
+
+ :parameters:
+ None
+
+ :return:
+ + packet representation as array of bytes
+
+ :raises:
+ + :exc:`CTRexPktBuilder.EmptyPacketError`, in case packet is empty.
+
+ """
+
+ raise Exception("implement me")
+
+
+ def get_vm_data(self):
+ """
+ Dumps the instructions
+
+ :parameters:
+ None
+
+ :return:
+ + json object of instructions
+
+ """
+
+ raise Exception("implement me")
+
diff --git a/scripts/automation/trex_control_plane/client_utils/scapy_packet_builder.py b/scripts/automation/trex_control_plane/client_utils/scapy_packet_builder.py
index d3a5605b..b48b3d7b 100644
--- a/scripts/automation/trex_control_plane/client_utils/scapy_packet_builder.py
+++ b/scripts/automation/trex_control_plane/client_utils/scapy_packet_builder.py
@@ -8,6 +8,7 @@ import yaml
import binascii
import base64
+from packet_builder_interface import CTrexPktBuilderInterface
from scapy.all import *
@@ -482,7 +483,7 @@ def check_for_int (val):
class CTRexVmDescFlowVar(CTRexVmDescBase):
- def __init__(self, name, init_value=0, min_value=0, max_value=255, size=4, op="inc"):
+ def __init__(self, name, init_value=None, min_value=0, max_value=255, size=4, op="inc"):
super(CTRexVmDescFlowVar, self).__init__()
self.name = name;
assert type(name)==str, 'type of name is not str'
@@ -490,6 +491,11 @@ class CTRexVmDescFlowVar(CTRexVmDescBase):
valid_fv_size(size)
self.op =op
valid_fv_ops (op)
+
+ # choose default value for init val
+ if init_val == None:
+ init_val = max_val if op == "dec" else min_val
+
self.init_value = convert_val (init_value)
self.min_value = convert_val (min_value);
self.max_value = convert_val (max_value)
@@ -581,13 +587,13 @@ class CTRexVmDescTupleGen(CTRexVmDescBase):
################################################################################################
-class CScapyTRexPktBuilder(object):
+class CScapyTRexPktBuilder(CTrexPktBuilderInterface):
"""
This class defines the TRex API of building a packet using dpkt package.
Using this class the user can also define how TRex will handle the packet by specifying the VM setting.
"""
- def __init__(self):
+ def __init__(self, pkt = None, vm = None):
"""
Instantiate a CTRexPktBuilder object
@@ -596,11 +602,27 @@ class CScapyTRexPktBuilder(object):
"""
super(CScapyTRexPktBuilder, self).__init__()
- self.pkt = None # scapy packet
+
+ self.pkt = None
self.vm_scripts = [] # list of high level instructions
self.vm_low_level = None
self.metadata=""
+
+ # process packet
+ if pkt != None:
+ if not isinstance(pkt, Packet):
+ raise CTRexPacketBuildException(-14, "bad value for variable pkt")
+ self.set_packet(pkt)
+
+ # process VM
+ if vm != None:
+ if not isinstance(vm, (CTRexScRaw, list)):
+ raise CTRexPacketBuildException(-14, "bad value for variable pkt")
+
+ self.add_command(vm if isinstance(vm, CTRexScRaw) else CTRexScRaw(vm))
+
+
def dump_vm_data_as_yaml(self):
print yaml.dump(self.get_vm_data(), default_flow_style=False)