diff options
| author | Chirag Shah <chirag@cumulusnetworks.com> | 2018-07-06 21:46:46 -0700 | 
|---|---|---|
| committer | Chirag Shah <chirag@cumulusnetworks.com> | 2018-07-17 13:06:41 -0700 | 
| commit | 68e331515e90422ec3c9e8c2ede74e3157460d31 (patch) | |
| tree | 969603513aea3ab3eff49a761e8625da9317bb81 /bgpd/bgp_evpn_private.h | |
| parent | bf032674956aa25983825c3c70c646b82bcf581a (diff) | |
bgpd: support evpn nd ext community
EVPN ND ext community support NA flag R-bit, to have proxy ND.
Set R-bit in EVPN NA if a given router is default gateway or there is a
local
router attached, which can be determine based on local neighbor entry.
Implement BGP ext community attribute to generate and parse  R-bit and
pass along zebra to program neigh entry in kernel.
Upon receiving MAC/IP update with community type 0x06 and sub_type 0x08,
pass the R-bit to zebra to program neigh entry.
Set NTF_ROUTER in neigh entry and inform kernel to do proxy NA for EVPN.
Ref:
https://tools.ietf.org/html/draft-ietf-bess-evpn-na-flags-01
Ticket:CM-21712, CM-21711
Reviewed By:
Testing Done:
Configure Local vni enabled L3 Gateway, which would act as router,
checked
show evpn arp-cache vni x ip <ip of svi> on originated and remote VTEPs.
"Router" flag is set.
Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
Diffstat (limited to 'bgpd/bgp_evpn_private.h')
| -rw-r--r-- | bgpd/bgp_evpn_private.h | 10 | 
1 files changed, 10 insertions, 0 deletions
diff --git a/bgpd/bgp_evpn_private.h b/bgpd/bgp_evpn_private.h index bf6a24dea6..d89716ca39 100644 --- a/bgpd/bgp_evpn_private.h +++ b/bgpd/bgp_evpn_private.h @@ -311,6 +311,16 @@ static inline void encode_mac_mobility_extcomm(int static_mac, uint32_t seq,  	eval->val[7] = seq & 0xff;  } +static inline void encode_na_flag_extcomm(struct ecommunity_val *eval, +					  uint8_t na_flag) +{ +	memset(eval, 0, sizeof(*eval)); +	eval->val[0] = ECOMMUNITY_ENCODE_EVPN; +	eval->val[1] = ECOMMUNITY_EVPN_SUBTYPE_ND; +	if (na_flag) +		eval->val[2] |= ECOMMUNITY_EVPN_SUBTYPE_ND_ROUTER_FLAG; +} +  static inline void ip_prefix_from_type5_prefix(struct prefix_evpn *evp,  					       struct prefix *ip)  {  | 
