diff options
Diffstat (limited to 'scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_service.py')
-rwxr-xr-x | scripts/automation/trex_control_plane/stl/services/scapy_server/scapy_service.py | 9 |
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, |