mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-09 05:13:07 +00:00
topotests: fix bmp_collector handling of empty as-path
When configuring the bgp_bmp test with an additional peer that sends empty AS-PATH, the bmp collector is stopping: > [2024-10-28 17:41:51] Finished dissecting data from ('192.0.2.1', 33922) > [2024-10-28 17:41:52] Data received from ('192.0.2.1', 33922): length 195 > [2024-10-28 17:41:52] Got message type: <class 'bmp.BMPRouteMonitoring'> > [2024-10-28 17:41:52] unpack_from requires a buffer of at least 2 bytes for unpacking 2 bytes at offset 0 (actual buffer size is 0) > [2024-10-28 17:41:52] TCP session closed with ('192.0.2.1', 33922) > [2024-10-28 17:41:52] Server shutting down on 192.0.2.10:1789 The parser attempts to read an empty AS-path and considers the length value as a length in bytes, whereas RFC mentions this value as definining the number of AS-PAths. Fix this in the parser. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
This commit is contained in:
parent
0af653eaf7
commit
2dc693e808
@ -72,6 +72,12 @@ class PathAttribute:
|
|||||||
if path_attr_cls == cls.UNKNOWN_ATTR:
|
if path_attr_cls == cls.UNKNOWN_ATTR:
|
||||||
return data[offset + attr_len :], None
|
return data[offset + attr_len :], None
|
||||||
|
|
||||||
|
# RFC1771, 4.3 UPDATE Message Format
|
||||||
|
# The path segment length is a 1-octet long field containing
|
||||||
|
# the number of ASs in the path segment value field.
|
||||||
|
if type_code == PATH_ATTR_TYPE_AS_PATH and attr_len == 0:
|
||||||
|
return data[offset:], path_attr_cls.dissect(data[offset : offset + 2])
|
||||||
|
|
||||||
return data[offset + attr_len :], path_attr_cls.dissect(
|
return data[offset + attr_len :], path_attr_cls.dissect(
|
||||||
data[offset : offset + attr_len]
|
data[offset : offset + attr_len]
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user