From ca4ceb64467f41b2c772c04c3567922960c6b085 Mon Sep 17 00:00:00 2001 From: Anton Kiselev Date: Mon, 13 Mar 2017 19:18:50 +0700 Subject: scapy_server: skip uninitialized/unsupported field_desc._offset Signed-off-by: Anton Kiselev --- .../stl/services/scapy_server/scapy_service.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_service.py') 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, -- cgit 1.2.3-korg