From 540135ce15606dfb63bd4a9c7c11112b6c1b4917 Mon Sep 17 00:00:00 2001 From: Alistair King Date: Wed, 1 Jul 2026 15:31:39 -0700 Subject: [PATCH 1/3] Add support for new end-of-RIB elem Pairs with https://github.com/CAIDA/libbgpstream/pull/258 --- docs/api__pybgpstream.rst | 2 +- src/_pybgpstream_bgpelem.c | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/api__pybgpstream.rst b/docs/api__pybgpstream.rst index 959e8fd..bd59172 100644 --- a/docs/api__pybgpstream.rst +++ b/docs/api__pybgpstream.rst @@ -91,7 +91,7 @@ BGPStream The `elemtype` filter can be used to limit the stream to only certain element types. Possible element types are `ribs`, `withdrawals`, - `announcements` and `peerstates`. + `announcements`, `peerstates` and `endofrib`. The `community` filter is specified as a `asn:value` formatted string, the user can specify the ASn or diff --git a/src/_pybgpstream_bgpelem.c b/src/_pybgpstream_bgpelem.c index 39799ca..2197170 100644 --- a/src/_pybgpstream_bgpelem.c +++ b/src/_pybgpstream_bgpelem.c @@ -184,6 +184,13 @@ static PyObject *BGPElem_get_fields(BGPElemObject *self, void *closure) } break; + case BGPSTREAM_ELEM_TYPE_END_OF_RIB: + if (add_to_dict(dict, "prefix", + get_pfx_pystr((bgpstream_pfx_t *)&self->elem->prefix))) { + return NULL; + } + break; + case BGPSTREAM_ELEM_TYPE_UNKNOWN: default: break; From ef91cc8830d9085948dd0f3f27a584e30196fd88 Mon Sep 17 00:00:00 2001 From: Alistair King Date: Wed, 1 Jul 2026 15:36:04 -0700 Subject: [PATCH 2/3] Backwards compat --- src/_pybgpstream_bgpelem.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/_pybgpstream_bgpelem.c b/src/_pybgpstream_bgpelem.c index 2197170..f2ec585 100644 --- a/src/_pybgpstream_bgpelem.c +++ b/src/_pybgpstream_bgpelem.c @@ -169,6 +169,9 @@ static PyObject *BGPElem_get_fields(BGPElemObject *self, void *closure) /* FALLTHROUGH */ case BGPSTREAM_ELEM_TYPE_WITHDRAWAL: +#ifdef BGPSTREAM_ELEM_TYPE_END_OF_RIB + case BGPSTREAM_ELEM_TYPE_END_OF_RIB: +#endif if (add_to_dict(dict, "prefix", get_pfx_pystr((bgpstream_pfx_t *)&self->elem->prefix))) { return NULL; @@ -184,13 +187,6 @@ static PyObject *BGPElem_get_fields(BGPElemObject *self, void *closure) } break; - case BGPSTREAM_ELEM_TYPE_END_OF_RIB: - if (add_to_dict(dict, "prefix", - get_pfx_pystr((bgpstream_pfx_t *)&self->elem->prefix))) { - return NULL; - } - break; - case BGPSTREAM_ELEM_TYPE_UNKNOWN: default: break; From 3d82706b9549c33385c647fbeadcd1e4180d192c Mon Sep 17 00:00:00 2001 From: Alistair King Date: Wed, 1 Jul 2026 15:56:10 -0700 Subject: [PATCH 3/3] Check version instead --- src/_pybgpstream_bgpelem.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/_pybgpstream_bgpelem.c b/src/_pybgpstream_bgpelem.c index f2ec585..7f261ee 100644 --- a/src/_pybgpstream_bgpelem.c +++ b/src/_pybgpstream_bgpelem.c @@ -169,7 +169,8 @@ static PyObject *BGPElem_get_fields(BGPElemObject *self, void *closure) /* FALLTHROUGH */ case BGPSTREAM_ELEM_TYPE_WITHDRAWAL: -#ifdef BGPSTREAM_ELEM_TYPE_END_OF_RIB +#if BGPSTREAM_MAJOR_VERSION > 2 || \ + (BGPSTREAM_MAJOR_VERSION == 2 && BGPSTREAM_MID_VERSION >= 4) case BGPSTREAM_ELEM_TYPE_END_OF_RIB: #endif if (add_to_dict(dict, "prefix",