From: Donatas Abraitis Date: Thu, 3 Aug 2023 19:44:17 +0000 (+0300) Subject: bgpd: Handle cluster attribute the same way as others using setters/getters X-Git-Tag: base_9.1~183^2~4 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=0a0137da85f063336e99a1f5a3aa69f650ddc808;p=mirror%2Ffrr.git bgpd: Handle cluster attribute the same way as others using setters/getters To be consistent and error-safe. Signed-off-by: Donatas Abraitis --- diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c index e6c44a760a..1321ab32c0 100644 --- a/bgpd/bgp_attr.c +++ b/bgpd/bgp_attr.c @@ -167,6 +167,9 @@ static struct cluster_list *cluster_intern(struct cluster_list *cluster) static void cluster_unintern(struct cluster_list **cluster) { + if (!*cluster) + return; + if ((*cluster)->refcnt) (*cluster)->refcnt--; @@ -1205,11 +1208,8 @@ void bgp_attr_unintern_sub(struct attr *attr) bgp_attr_set_lcommunity(attr, NULL); cluster = bgp_attr_get_cluster(attr); - if (cluster) { - cluster_unintern(&cluster); - bgp_attr_set_cluster(attr, cluster); - } - UNSET_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_CLUSTER_LIST)); + cluster_unintern(&cluster); + bgp_attr_set_cluster(attr, NULL); struct transit *transit = bgp_attr_get_transit(attr); @@ -2214,8 +2214,6 @@ bgp_attr_cluster_list(struct bgp_attr_parser_args *args) /* XXX: Fix cluster_parse to use stream API and then remove this */ stream_forward_getp(peer->curr, length); - attr->flag |= ATTR_FLAG_BIT(BGP_ATTR_CLUSTER_LIST); - return BGP_ATTR_PARSE_PROCEED; cluster_list_ignore: diff --git a/bgpd/bgp_attr.h b/bgpd/bgp_attr.h index 415df2ce53..f1296af159 100644 --- a/bgpd/bgp_attr.h +++ b/bgpd/bgp_attr.h @@ -606,6 +606,11 @@ static inline void bgp_attr_set_cluster(struct attr *attr, struct cluster_list *cl) { attr->cluster1 = cl; + + if (cl) + SET_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_CLUSTER_LIST)); + else + UNSET_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_CLUSTER_LIST)); } static inline const struct bgp_route_evpn *