summaryrefslogtreecommitdiffstats
path: root/bgpd/bgp_attr_evpn.c
diff options
context:
space:
mode:
Diffstat (limited to 'bgpd/bgp_attr_evpn.c')
-rw-r--r--bgpd/bgp_attr_evpn.c36
1 files changed, 22 insertions, 14 deletions
diff --git a/bgpd/bgp_attr_evpn.c b/bgpd/bgp_attr_evpn.c
index bbc4ba95..a3ffe61e 100644
--- a/bgpd/bgp_attr_evpn.c
+++ b/bgpd/bgp_attr_evpn.c
@@ -24,6 +24,13 @@
bool bgp_route_evpn_same(const struct bgp_route_evpn *e1,
const struct bgp_route_evpn *e2)
{
+ if (!e1 && e2)
+ return false;
+ if (!e2 && e1)
+ return false;
+ if (!e1 && !e2)
+ return true;
+
return (e1->type == e2->type &&
!memcmp(&(e1->eth_s_id), &(e2->eth_s_id), sizeof(esi_t)) &&
!ipaddr_cmp(&(e1->gw_ip), &(e2->gw_ip)));
@@ -115,14 +122,14 @@ bool bgp_attr_rmac(struct attr *attr, struct ethaddr *rmac)
/*
* return true if attr contains default gw extended community
*/
-uint8_t bgp_attr_default_gw(struct attr *attr)
+void bgp_attr_default_gw(struct attr *attr)
{
struct ecommunity *ecom;
uint32_t i;
ecom = bgp_attr_get_ecommunity(attr);
if (!ecom || !ecom->size)
- return 0;
+ return;
/* If there is a default gw extendd community return true otherwise
* return 0 */
@@ -136,10 +143,9 @@ uint8_t bgp_attr_default_gw(struct attr *attr)
if ((type == ECOMMUNITY_ENCODE_OPAQUE
&& sub_type == ECOMMUNITY_EVPN_SUBTYPE_DEF_GW))
- return 1;
+ SET_FLAG(attr->evpn_flags, ATTR_EVPN_FLAG_DEFAULT_GW);
}
-
- return 0;
+ UNSET_FLAG(attr->evpn_flags, ATTR_EVPN_FLAG_DEFAULT_GW);
}
/*
@@ -183,7 +189,7 @@ uint16_t bgp_attr_df_pref_from_ec(struct attr *attr, uint8_t *alg)
* Fetch and return the sequence number from MAC Mobility extended
* community, if present, else 0.
*/
-uint32_t bgp_attr_mac_mobility_seqnum(struct attr *attr, uint8_t *sticky)
+uint32_t bgp_attr_mac_mobility_seqnum(struct attr *attr)
{
struct ecommunity *ecom;
uint32_t i;
@@ -212,10 +218,11 @@ uint32_t bgp_attr_mac_mobility_seqnum(struct attr *attr, uint8_t *sticky)
continue;
flags = *pnt++;
- if (flags & ECOMMUNITY_EVPN_SUBTYPE_MACMOBILITY_FLAG_STICKY)
- *sticky = 1;
+ if (CHECK_FLAG(flags,
+ ECOMMUNITY_EVPN_SUBTYPE_MACMOBILITY_FLAG_STICKY))
+ SET_FLAG(attr->evpn_flags, ATTR_EVPN_FLAG_STICKY);
else
- *sticky = 0;
+ UNSET_FLAG(attr->evpn_flags, ATTR_EVPN_FLAG_STICKY);
pnt++;
pnt = ptr_get_be32(pnt, &seq_num);
@@ -229,8 +236,7 @@ uint32_t bgp_attr_mac_mobility_seqnum(struct attr *attr, uint8_t *sticky)
/*
* return true if attr contains router flag extended community
*/
-void bgp_attr_evpn_na_flag(struct attr *attr,
- uint8_t *router_flag, bool *proxy)
+void bgp_attr_evpn_na_flag(struct attr *attr, bool *proxy)
{
struct ecommunity *ecom;
uint32_t i;
@@ -253,10 +259,12 @@ void bgp_attr_evpn_na_flag(struct attr *attr,
sub_type == ECOMMUNITY_EVPN_SUBTYPE_ND) {
val = *pnt++;
- if (val & ECOMMUNITY_EVPN_SUBTYPE_ND_ROUTER_FLAG)
- *router_flag = 1;
+ if (CHECK_FLAG(val,
+ ECOMMUNITY_EVPN_SUBTYPE_ND_ROUTER_FLAG))
+ SET_FLAG(attr->evpn_flags,
+ ATTR_EVPN_FLAG_ROUTER);
- if (val & ECOMMUNITY_EVPN_SUBTYPE_PROXY_FLAG)
+ if (CHECK_FLAG(val, ECOMMUNITY_EVPN_SUBTYPE_PROXY_FLAG))
*proxy = true;
break;