summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonatas Abraitis <donatas@opensourcerouting.org>2024-08-25 19:03:05 +0300
committerDonatas Abraitis <donatas@opensourcerouting.org>2024-08-25 19:03:05 +0300
commitf390253ca758152f2a30a6f8470edb69b209758b (patch)
tree67e0d1c33238c0bf936a81852aed796d4d065cc8
parent05c17eff06536e750d43829ccded5c9e8f0f9ca4 (diff)
bgpd: Allow filtering Prefix-SID attribute
Filtering this attribute via `path-attribute discard/treat-as-widthraw`. Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
-rw-r--r--bgpd/bgp_attr.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
index c178844cc9..9ce15d016b 100644
--- a/bgpd/bgp_attr.c
+++ b/bgpd/bgp_attr.c
@@ -3300,6 +3300,9 @@ enum bgp_attr_parse_ret bgp_attr_prefix_sid(struct bgp_attr_parser_args *args)
size_t headersz = sizeof(type) + sizeof(length);
size_t psid_parsed_length = 0;
+ if (peer->discard_attrs[args->type] || peer->withdraw_attrs[args->type])
+ goto prefix_sid_ignore;
+
while (STREAM_READABLE(peer->curr) > 0
&& psid_parsed_length < args->length) {
@@ -3347,6 +3350,11 @@ enum bgp_attr_parse_ret bgp_attr_prefix_sid(struct bgp_attr_parser_args *args)
SET_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_PREFIX_SID));
return BGP_ATTR_PARSE_PROCEED;
+
+prefix_sid_ignore:
+ stream_forward_getp(peer->curr, args->length);
+
+ return bgp_attr_ignore(peer, args->type);
}
/* PMSI tunnel attribute (RFC 6514)