Merge pull request #14145 from opensourcerouting/fix/handling_cluster_transit

bgpd: Some cleanup and consistency "improvements"
This commit is contained in:
Donald Sharp 2023-08-04 07:14:55 -04:00 committed by GitHub
commit b036c510f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 25 deletions

View File

@ -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--;
@ -330,6 +333,10 @@ static void encap_unintern(struct bgp_attr_encap_subtlv **encapp,
encap_subtlv_type type)
{
struct bgp_attr_encap_subtlv *encap = *encapp;
if (!*encapp)
return;
if (encap->refcnt)
encap->refcnt--;
@ -418,6 +425,9 @@ static struct transit *transit_intern(struct transit *transit)
static void transit_unintern(struct transit **transit)
{
if (!*transit)
return;
if ((*transit)->refcnt)
(*transit)->refcnt--;
@ -558,6 +568,9 @@ static void srv6_l3vpn_unintern(struct bgp_attr_srv6_l3vpn **l3vpnp)
{
struct bgp_attr_srv6_l3vpn *l3vpn = *l3vpnp;
if (!*l3vpnp)
return;
if (l3vpn->refcnt)
l3vpn->refcnt--;
@ -593,6 +606,9 @@ static void srv6_vpn_unintern(struct bgp_attr_srv6_vpn **vpnp)
{
struct bgp_attr_srv6_vpn *vpn = *vpnp;
if (!*vpnp)
return;
if (vpn->refcnt)
vpn->refcnt--;
@ -1183,6 +1199,7 @@ void bgp_attr_unintern_sub(struct attr *attr)
struct cluster_list *cluster;
struct lcommunity *lcomm = NULL;
struct community *comm = NULL;
struct transit *transit;
/* aspath refcount shoud be decrement. */
aspath_unintern(&attr->aspath);
@ -1205,37 +1222,25 @@ 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);
transit = bgp_attr_get_transit(attr);
transit_unintern(&transit);
bgp_attr_set_transit(attr, NULL);
if (transit) {
transit_unintern(&transit);
bgp_attr_set_transit(attr, transit);
}
if (attr->encap_subtlvs)
encap_unintern(&attr->encap_subtlvs, ENCAP_SUBTLV_TYPE);
encap_unintern(&attr->encap_subtlvs, ENCAP_SUBTLV_TYPE);
#ifdef ENABLE_BGP_VNC
struct bgp_attr_encap_subtlv *vnc_subtlvs =
bgp_attr_get_vnc_subtlvs(attr);
if (vnc_subtlvs) {
encap_unintern(&vnc_subtlvs, VNC_SUBTLV_TYPE);
bgp_attr_set_vnc_subtlvs(attr, vnc_subtlvs);
}
encap_unintern(&vnc_subtlvs, VNC_SUBTLV_TYPE);
bgp_attr_set_vnc_subtlvs(attr, NULL);
#endif
if (attr->srv6_l3vpn)
srv6_l3vpn_unintern(&attr->srv6_l3vpn);
if (attr->srv6_vpn)
srv6_vpn_unintern(&attr->srv6_vpn);
srv6_l3vpn_unintern(&attr->srv6_l3vpn);
srv6_vpn_unintern(&attr->srv6_vpn);
}
/* Free bgp attribute and aspath. */
@ -2214,8 +2219,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:

View File

@ -594,7 +594,7 @@ static inline void bgp_attr_set_aigp_metric(struct attr *attr, uint64_t aigp)
attr->aigp_metric = aigp;
if (aigp)
attr->flag |= ATTR_FLAG_BIT(BGP_ATTR_AIGP);
SET_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_AIGP));
}
static inline struct cluster_list *bgp_attr_get_cluster(const struct attr *attr)
@ -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 *