From 37488b573f5ef19301aa8443d430d5dbddc6102a Mon Sep 17 00:00:00 2001 From: Philippe Guibert Date: Thu, 21 Mar 2024 16:48:52 +0100 Subject: [PATCH] bgpd: fix install BGP route with appropriate colored ext. community When receiving a BGP update that includes a colored extended community, the nexthop is tracked in the bgp nexthop tracking context, but the color is never recorded. Adding to this, the BGP route is not prevented from being installed without hte color. Actually, the srte color is set only when the SRTE_COLOR attribute is set. And that attribute value is only set when an ext. community is locally created, or an srte value is set, but not when a BGP update with a color ext. community is received. Fix this by setting the SRTE_COLOR attribute on this last case. Fixes: 442e2edcfaef ("bgpd: add functions related to srte_color management") Signed-off-by: Philippe Guibert --- bgpd/bgp_attr.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bgpd/bgp_attr.h b/bgpd/bgp_attr.h index 5386f24a0bac..164aa5ae7950 100644 --- a/bgpd/bgp_attr.h +++ b/bgpd/bgp_attr.h @@ -517,9 +517,11 @@ static inline void bgp_attr_set_ecommunity(struct attr *attr, { attr->ecommunity = ecomm; - if (ecomm) + if (ecomm) { SET_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_EXT_COMMUNITIES)); - else + if (ecommunity_select_color(ecomm)) + SET_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_SRTE_COLOR)); + } else UNSET_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_EXT_COMMUNITIES)); }