summaryrefslogtreecommitdiffstats
path: root/scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_service.py
diff options
context:
space:
mode:
authorAnton Kiselev <anton.kisel@gmail.com>2017-03-13 19:18:50 +0700
committerYaroslav Brustinov <ybrustin@cisco.com>2017-03-14 16:59:07 +0200
commitca4ceb64467f41b2c772c04c3567922960c6b085 (patch)
treeff0ce5f5dd88988c909c36dc89195317c1173e0d /scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_service.py
parentaf25eb9b8463225827fd38223f36a9c361f2d254 (diff)
scapy_server: skip uninitialized/unsupported field_desc._offset
Signed-off-by: Anton Kiselev <anton.kisel@gmail.com>
Diffstat (limited to 'scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_service.py')
-rwxr-xr-xscripts/automation/trex_control_plane/stl/services/scapy_server/scapy_service.py9
1 files changed, 6 insertions, 3 deletions
diff --git a/scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_service.py b/scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_service.py
index c0a753c7..35bcf1fe 100755
--- a/scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_service.py
+++ b/scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_service.py
@@ -644,8 +644,11 @@ class Scapy_service(Scapy_service_api):
for field_desc in pkt.fields_desc:
field_id = field_desc.name
ignored = field_id not in layer_full.fields
- offset = field_desc._offset
- protocol_offset = pkt._offset
+ # scapy offset/length calculation doesn't support dynamic size structures
+ # since PktClass.fields_desc is a singletone,
+ # _offset/size can be missing, uninitialized or contain values from the previous runs
+ offset = getattr(field_desc, '_offset', None)
+ protocol_offset = getattr(pkt, '_offset', None)
field_sz = field_desc.get_size_bytes()
# some values are unavailable in pkt(original model)
# at the same time,
@@ -708,7 +711,7 @@ class Scapy_service(Scapy_service_api):
fields.append(field_data)
layer_data = {
"id": layer_id,
- "offset": pkt._offset,
+ "offset": protocol_offset,
"fields": fields,
"real_id": real_layer_id,
"valid_structure": valid_struct,