summaryrefslogtreecommitdiffstats
path: root/bgpd/bgp_attr_evpn.h (follow)
Commit message (Collapse)AuthorAgeFilesLines
* bgpd: Move evpn_overlay to a pointerDonatas Abraitis2024-08-111-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | Before this convertion: ``` /* --- cacheline 3 boundary (192 bytes) --- */ struct bgp_attr_encap_subtlv * encap_subtlvs; /* 192 8 */ struct bgp_attr_encap_subtlv * vnc_subtlvs; /* 200 8 */ struct bgp_route_evpn evpn_overlay; /* 208 36 */ ``` After this convertion: ``` /* --- cacheline 3 boundary (192 bytes) --- */ struct bgp_attr_encap_subtlv * encap_subtlvs; /* 192 8 */ struct bgp_attr_encap_subtlv * vnc_subtlvs; /* 200 8 */ struct bgp_route_evpn * evpn_overlay; /* 208 8 */ ``` Saving 28 bytes when EVPN is not used. Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
* bgpd: Move sticky, default_gw, router_flag into a single flags variableDonatas Abraitis2024-07-041-5/+3
| | | | | | | | Instead of using 3 uint8_t variables under struct attr, let's use a single uint8_t as the flags. Saving 2-bytes. Not a big deal, but it's even easier to track EVPN-related flags/variables. Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
* *: auto-convert to SPDX License IDsDavid Lamparter2023-02-091-16/+1
| | | | | | Done with a combination of regex'ing and banging my head against a wall. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* bgpd: Fixing memcmp to avoid coverity issueIqra Siddiqui2022-02-011-0/+3
| | | | | | | | | Description: Replacing memcmp at certain places, to avoid the coverity issues caused by it. Co-authored-by: Kantesh Mundargi <kmundaragi@vmware.com> Signed-off-by: Iqra Siddiqui <imujeebsiddi@vmware.com>
* bgpd: replace custom union gw_addr with struct ipaddrIgor Ryzhov2022-01-191-8/+1
| | | | | | | | BGP EVPN custom `union gw_addr` is basically the same thing as a common `struct ipaddr` but it lacks the address family which is needed in some cases. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
* bgpd: Data structure for gateway IP overlay IndexAmeya Dharkar2021-06-081-0/+14
| | | | | | | "struct bgp_route_evpn" is used to store an overlay index. Add a "type" for overlay index. Signed-off-by: Ameya Dharkar <adharkar@vmware.com>
* bgpd: support for DF election in EVPN-MHAnuradha Karuppiah2020-10-261-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | DF (Designated forwarder) election is used for picking a single BUM-traffic forwarded per-ES. RFC7432 specifies a mechanism called service carving for DF election. However that mechanism has many disadvantages - 1. LBs poorly. 2. Doesn't allow for a controlled failover needed in upgrade scenarios. 3. Not easy to hw accelerate. To fix the poor performance of service carving alternate DF mechanisms have been proposed via the following drafts - draft-ietf-bess-evpn-df-election-framework draft-ietf-bess-evpn-pref-df This commit adds support for the pref-df election mechanism which is used as the default. Other mechanisms including service-carving may be added later. In this mechanism one switch on an ES is elected as DF based on the preference value; higher preference wins with IP address acting as the tie-breaker (lower-IP wins if pref value is the same). Sample output ============= >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> torm-11# sh bgp l2vpn evpn es 03:00:00:00:00:01:11:00:00:01 ESI: 03:00:00:00:00:01:11:00:00:01 Type: LR RD: 27.0.0.15:6 Originator-IP: 27.0.0.15 Local ES DF preference: 100 VNI Count: 10 Remote VNI Count: 10 Inconsistent VNI VTEP Count: 0 Inconsistencies: - VTEPs: 27.0.0.16 flags: EA df_alg: preference df_pref: 32767 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> torm-11# sh bgp l2vpn evpn route esi 03:00:00:00:00:01:11:00:00:01 *> [4]:[03:00:00:00:00:01:11:00:00:01]:[32]:[27.0.0.15] 27.0.0.15 32768 i ET:8 ES-Import-Rt:00:00:00:00:01:11 DF: (alg: 2, pref: 100) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
* bgpd: extended-community and attrs for MAC-IP SYNC route handlingAnuradha Karuppiah2020-08-051-1/+2
| | | | | | | | | | | | | | | A new proxy flag has been added to the already existing NA extended community to allow proxy advertisment of a local host by a VTEP that is yet to indpendently establish local reachability. Reference: draft-rbickhart-evpn-ip-mac-proxy-adv The extendend mac-mobility sequence number needs to be synced across the ES peers. However we cannot let a ES-peer path win over a local path on the same ES. To accomplish that some parameters such as the MM seq number are bubbled up from the non-best path to the local path. This mechanism is explained further in the path-selection patch. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
* bgpd: attr changes for EAD routesAnuradha Karuppiah2020-08-051-20/+1
| | | | | | | | | | | | Add ESI as an inline attribute field along with the other EVPN attributes. This may be re-worked when the rest of the EVPN attributes find a new home. Some cleanup has been done to get rid of stale/unused references to ESI. And also to consolidate duplicate definitions of ES ID types. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
* bgpd: Convert lots of int type functions to bool/voidDonatas Abraitis2020-03-211-1/+1
| | | | | | | Some were converted to bool, where true/false status is needed. Converted to void only those, where the return status was only false or true. Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
* bgpd: remove unused variableRuben Kerkhof2020-03-071-1/+0
| | | | | | | | This fixes a linking issue on Fedora Rawhide: /usr/bin/ld: bgpd/libbgp.a(bgp_flowspec.o):/home/ruben/src/frr/./bgpd/bgp_attr_evpn.h:37: multiple definition of `eth_tag_id'; bgpd/bgp_btoa-bgp_btoa.o:/home/ruben/src/frr/./bgpd/bgp_attr_evpn.h:37: first defined here collect2: error: ld returned 1 exit status Signed-off-by: Ruben Kerkhof <ruben@rubenkerkhof.com>
* bgpd: RFC compliance wrt invalid RMAC, GWIP, ESI and VNIKishore Aramalla2020-02-111-0/+3
| | | | | | | | | | | | | | | | | | A route where ESI, GW IP, MAC and Label are all zero at the same time SHOULD be treat-as-withdraw. Invalid MAC addresses are broadcast or multicast MAC addresses. The route MUST be treat-as-withdraw in case of an invalid MAC address. As FRR support Ethernet NVO Tunnels only. Route will be withdrawn when ESI, GW IP and MAC are zero or Invalid MAC Test cases: 1) ET-5 route with valid RMAC extended community 2) ET-5 route no RMAC extended community 3) ET-5 route with Multicast MAC in RMAC extended community 4) ET-5 route with Broadcast MAC in RMAC extended community Signed-off-by: Kishore Aramalla <karamalla@vmware.com>
* bgpd: parse and comapre rmac attr against self macChirag Shah2019-03-041-1/+1
| | | | | | | | | | | | | | | | | | Any evpn bgp update message comes with router mac extended community, which can potentially contain the madd adddress same as any of the local SVIs (L3VNI) MAC address. Set route mac exist and during route processing in bgp_update() filter the route. Ticket:CM-23674 Reviewed By:CCR-8336 Testing Done: Configure L3vni mac on TORS1 which is similar to TORC11 L3vni MAC. When TORC11 received the EVPN update with Router mac extended community, this check rejected the BGP update message. Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
* bgpd: support evpn nd ext communityChirag Shah2018-07-171-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* bgpd: add basic support for ETI and ESI for BGP EVPNVincent Bernat2018-04-091-0/+1
| | | | | | | | | | | Ethernet Tag ID (ETI) is part of the prefix. It cannot just be ignored as it needs to be used when checking for prefix uniqueness. Moreover, when using Quagga as a route reflector, we need to keep its value. Therefore, we correctly parse and encode it. We also parse ESI. While not part of the prefix, it needs to be reflected correctly by Quagga. Signed-off-by: Vincent Bernat <vincent@bernat.im>
* *: use C99 standard fixed-width integer typesQuentin Young2018-03-271-4/+4
| | | | | | | | | | | | | | | | | | | | | | The following types are nonstandard: - u_char - u_short - u_int - u_long - u_int8_t - u_int16_t - u_int32_t Replace them with the C99 standard types: - uint8_t - unsigned short - unsigned int - unsigned long - uint8_t - uint16_t - uint32_t Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
* bgpd/zebra/lib: Add Default Gateway extended communityMitesh Kanjariya2018-01-241-0/+1
| | | | | | | | | | | | | | 1. Added default gw extended community 2. code modification to handle sticky-mac/default-gw-mac as they go together 3. show command support for newly added extended community 4. State in zebra to reflect if a mac/neigh is default gateway 5. show command enhancement to refelect the same in zebra commands Ticket: CM-17428 Review: CCR-6580 Testing: Manual Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
* bgpd: rmac ext commMitesh Kanjariya2017-12-141-1/+1
| | | | Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
* *: reindentreindent-master-afterwhitespace / reindent2017-07-171-17/+14
| | | | | | indent.py `git ls-files | pcregrep '\.[ch]$' | pcregrep -v '^(ldpd|babeld|nhrpd)/'` Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* bgpd, zebra: Support for sticky MACsvivek2017-07-121-1/+1
| | | | | | | | | | | | | | | Implement support for sticky (static) MACs. This includes the following: - Recognize MAC is static (using NUD_NOARP flag) and inform BGP - Construct MAC mobility extended community for sticky MACs as per RFC 7432 section 15.2 - Inform to zebra that remote MAC is sticky, where appropriate - Install sticky MACs into the kernel with the right flag - Appropriate handling in route selection Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com> Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com> Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
* bgpd: EVPN route handlingvivek2017-07-121-16/+26
| | | | | | | | | | | | | | | | | Core EVPN route handling functionality. This includes support for the following: - interface with zebra to learn about local VNIs and MACIPs as well as to install remote VTEPs (per VNI) and remote MACIPs - create/update/delete EVPN type-2 and type-3 routes - attribute creation, route selection and install - route handling per VNI and for the global routing table - parsing of received EVPN routes and handling by route type - encoding attributes for EVPN routes and EVPN prefix creation (for Updates) Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com> Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com> Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
* *: make consistent & update GPLv2 file headersDavid Lamparter2017-05-151-18/+18
| | | | | | | | | | | The FSF's address changed, and we had a mixture of comment styles for the GPL file header. (The style with * at the beginning won out with 580 to 141 in existing files.) Note: I've intentionally left intact other "variations" of the copyright header, e.g. whether it says "Zebra", "Quagga", "FRR", or nothing. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* *: Clean up some wrong referencesDonald Sharp2017-04-051-4/+4
| | | | Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* bgpd: change str2mac call apiPhilippe Guibert2017-02-141-2/+1
| | | | | | | | | With the changed API, some adaptations are done in rfapi code, and in bgpd evpn code. For evpn code, the internal storage of routermac addr is kept as struct ethaddr structure. Also the evpn add_routermac api has as incoming parameter a struct ethaddr param. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
* bgpd: evpn use string handling functions from mac manipulationPhilippe Guibert2017-02-141-3/+0
| | | | | | | EVPN code adaptation to replace old mac string internal utility with the new one available in lib folder. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
* bgpd: indent new evpn code to the frr standardsPhilippe Guibert2017-02-141-22/+21
| | | | | | Using intent tool, and apply to all bgp_evpn files. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
* bgpd: enhance network command for evpn route type 5Philippe Guibert2017-02-141-1/+1
| | | | | | | | | | | | | | | | | | | | A new vty command available under evpn address family. This command takes following format: (af-evpn)# [no] network <A.B.C.D/M|X:X::X:X/M> rd ASN:nn_or_IP-address:nn ethtag WORD label WORD esi WORD gwip A.B.C.D routermac WORD [route-map WORD] Among new parameters, ethtag stands for the ethernet tag indentifier. ESI stands for the ethernet segment identifier, and must be entered in following format: 00:11:22:33:44:55:66:77:88:99. gwip stands for the gateway IP address contained in RT5 message. A check is done on that value since if gwip is ipv4, then ip prefix must be ipv4. The same for ipv6. RouterMAc is the gateway mac address sent as extended community attribute. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
* bgpd: handling router mac extended communityPhilippe Guibert2017-02-141-0/+3
| | | | | | | | | For each received routermac extended community, the mac address is copied into routermac extended community context. For each emission, a check is done against routermac extended community, if L2VPN is enabled. If enabled, the extended community is appended. Signed-off-by: Philippe Gubiert <philippe.guibert@6wind.com>
* bgpd: handling EVPN Route Type 5 NLRI messagePhilippe Guibert2017-02-141-0/+6
| | | | | | | | | | | | | | This patch introduces code to receive a NLRI message with route type 5, as defined in draft-ietf-bess-evpn-prefix-advertisement-02. It It increases the number of parameters to extract from the NLRI and to store into bgp extra information structure. Those parameters are the ESI (ethernet segment identifier), the gateway IP Address (which acts like nexthop attribute but is contained inside the NLRI itself) and the ethernet tag identifier ( that acts for the VXLan Identifier) This patch updates bgp_update() and bgp_withdraw() api, and then does the necessary adapations for rfapi. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
* bgpd: enhance structures and esi and mac functions to handle EVPNPhilippe Guibert2017-02-141-0/+55
EVPN introduces new objects to be handled: Ethernet Segment Identifier, and MAC Address. For Route type 5 message, it also involves gateway IP field that can be either IPv4 or IPv6 address. This commit introduces those main structures. It also introduces some functions to convert esi and mac address to string, and vice-versa. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>