Added autocompletion support for offset parameter. 82/5182/1
authorVyacheslav Ogai <[email protected]>
Wed, 30 Nov 2016 22:49:31 +0000 (00:49 +0200)
committerHanoh Haim <[email protected]>
Mon, 19 Dec 2016 14:04:07 +0000 (16:04 +0200)
Signed-off-by: Vyacheslav Ogai <[email protected]>
scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_service.py

index 9598ea9..8212ec8 100755 (executable)
@@ -795,19 +795,27 @@ class Scapy_service(Scapy_service_api):
 
     def load_instruction_parameter_values(self, client_v_handler, pkt_model_descriptor, vm_instructions_model, parameter_id):
 
-        given_protocol_ids = [proto['id'] for proto in pkt_model_descriptor]
+        given_protocol_ids = [str(proto['id']) for proto in pkt_model_descriptor]
 
+        values = {}
         if parameter_id == "name":
-            return self._curent_pkt_protocol_fields(given_protocol_ids, "_")
+            values = self._curent_pkt_protocol_fields(given_protocol_ids, "_")
+
         if parameter_id == "fv_name":
-            return self._existed_flow_var_names(vm_instructions_model['field_engine']['instructions'])
+            values = self._existed_flow_var_names(vm_instructions_model['field_engine']['instructions'])
+
         if parameter_id == "pkt_offset":
-            return self._curent_pkt_protocol_fields(given_protocol_ids, ".")
+            values = self._curent_pkt_protocol_fields(given_protocol_ids, ".")
+
+        if parameter_id == "offset":
+            for ip_idx in range(given_protocol_ids.count("IP")):
+                value = "IP:{0}".format(ip_idx)
+                values[value] = value
 
-        return {}
+        return {"map": values}
 
     def _existed_flow_var_names(self, instructions):
-        return {"map": dict((instruction['parameters']['name'], instruction['parameters']['name']) for instruction in instructions if self._nameParamterExist(instruction))}
+        return dict((instruction['parameters']['name'], instruction['parameters']['name']) for instruction in instructions if self._nameParamterExist(instruction))
 
     def _nameParamterExist(self, instruction):
         try:
@@ -831,7 +839,7 @@ class Scapy_service(Scapy_service_api):
                     formatted_name = "{0}{1}{2}".format(protocol_name, delimiter, field_desc.name)
                 protocol_fields[formatted_name] = formatted_name
 
-        return {"map": protocol_fields}
+        return protocol_fields
 
     def _generate_vm_instructions(self, pkt, field_engine_model_descriptor):
         self.field_engine_instruction_expressions = []