summaryrefslogtreecommitdiff
path: root/pimd/pim_vxlan.c
AgeCommit message (Collapse)Author
2019-11-15pimd: decide between SPT based and RPT based forwardingAnuradha Karuppiah
An (S,G) mroute can be created as a result of rpt prune. However that entry needs to stay on the parent (*,G)'s tree (IIF) till a decision is made to switch the source to the SPT. The decision to stay on the RPT is made based on the SPTbit setting according to - RFC7761, Section 4.2 “Data Packet Forwarding Rules” However those rules are hard to achieve when hw acceleration i.e. control and data planes are separate. So instead of relying on data we make the decision of using SPT if we have decided to join the SPT - Use_RPT(S,G) { if (Joined(S,G) == TRUE // we have decided to join the SPT OR Directly_Connected(S) == TRUE // source is directly connected OR I_am_RP(G) == TRUE) // RP //use_spt return FALSE; //use_rpt return TRUE; } To make that change some re-org was needed - 1. pim static mroutes and dynamic (upstream mroutes) top level APIs have been separated. This is to limit the state machine to dynamic mroutes. 2. c_oil->oil.mfcc_parent is re-evaluated based on if we decided to use the SPT or stay on the RPT. 3. upstream mroute re-eval is done when any of the criteria involved in Use_RPT changes. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2019-11-15pimd: MUTE flag to suppress traffic forwarding on non-DFAnuradha Karuppiah
If an mroute loses DF election (with the MLAG peer) it has to stop forwarding traffic on active-active devices such as ipmr-lo used for vxlan traffic termination. To acheive that this commit introduces a concept of OIF muting. That way we can let the PIM and IGMP state machines play out and silence OIFs after the fact. Relevant outputs: ================= 1. muted OIFs are displayed with the M flag in "pim state" - >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> root@TORC12:~# net show pim state |grep "27.0.0.13"|grep 100 1 27.0.0.13 239.1.1.100 uplink-1 ipmr-lo( *M) root@TORC12:~# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2. And supressed altogether in the mroute output - >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> root@TORC12:~# net show mroute |grep "27.0.0.13"|grep 100 27.0.0.13 239.1.1.100 none uplink-1 none 0 --:--:-- root@TORC12:~# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2019-11-15pimd: update add_oif and del_oif debugs to print callerAnuradha Karuppiah
These logs were printing file name which has little value (is always pim_oil.c). Instead print the caller. add_oif/del_oif are being called directly from one too many. Instead OIF setup needs to be consolidated via the PIM state machine. These debugs are expected to help in understanding what needs to be cleaned up. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2019-07-01*: s/TRUE/true/, s/FALSE/false/Quentin Young
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2019-06-07pimd: Remove unnecessary boolean to pim_rpf_updateDonald Sharp
We already log whether or not we add nht tracking, having an additional boolean to say to log another line is a bit over the top. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-05-28Merge pull request #4239 from sarav511/rpJafar Al-Gharaibeh
pimd: PIM Bootstrap Message Processing
2019-05-14pimd: PIM nexthop tracking changes for tracking nexthop path of BSR.saravanank
Signed-off-by: Saravanan K <saravanank@vmware.com>
2019-05-14lib: hashing functions should take const argumentsQuentin Young
It doesn't make much sense for a hash function to modify its argument, so const the hash input. BGP does it in a couple places, those cast away the const. Not great but not any worse than it was. Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2019-04-21pim: fix order of vxlan mroutes cleanup when pimd is shutdownAnuradha Karuppiah
1. vxlan instance cleanup needs to be done before the upstream entries are force-flushed. 2. also vxlan callbacks need to be ignored post instance-cleanup. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2019-04-20pimd: cleanup unncessary null pointer checkAnuradha Karuppiah
This was resulting in static analyzer warnings for subsequent usage of the same pointer - pimd/pim_vxlan.c:962:36: warning: Access to field 'info' results in a dereference of a null pointer (loaded from variable 'ifp') pim_ifp = (struct pim_interface *)ifp->info; ^~~~~~~~~ 1 warning generated. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2019-04-20pimd: create pimreg implicity if ipmr-lo is the first pim deviceAnuradha Karuppiah
On the first pim interface creation pimreg needs to be implicitly created. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2019-04-20pimd: hidden command to set MLAG parametersAnuradha Karuppiah
The MLAG component on the switch is expected to provide some properties (such as peerlink-rif) to bootstrap the anycast-VTEP functionality. The final interface for this is being defined as a part of the pim-mlag functionality. This commit provides a hidden command to test the anycast-VTEP functionality independent of the MLAG component. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2019-04-20pimd: VxLAN-AA base APIsAnuradha Karuppiah
1. peerlink-rif as OIF in origination mroutes - Hosts are multi-homed to the anycast-VTEP pair and can send BUM traffic to either switch. But the RP would have only joined one MLAG switch for pulling down the MDT. To make that work we add the peerlink/ISL as an OIF to origination mroutes (TORC11<=>TORC12 is an anycast VTEP pair) - root@TORC11:~# ip mr |grep "(36.0.0.9, 239.1.1.100)" (36.0.0.9, 239.1.1.100) Iif: peerlink-3.4094 Oifs: peerlink-3.4094 uplink-1 root@TORC11:~# root@TORC12:~# ip mr |grep "(36.0.0.9, 239.1.1.100)" (36.0.0.9, 239.1.1.100) Iif: peerlink-3.4094 Oifs: peerlink-3.4094 root@TORC12:~# 2. VTEP-PIP as register source - TORC11 and TORC12 share the same anycast VTEP IP (36.0.0.9 in the above example). And that is the source registered by both VTEPs for all the BUM mcast-groups. However to allow the pim register start machine to close the SIP in the register-pkt's IP header must be set to an unique IP address. This is the VTEP PIP. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2019-04-20pimd: setup multicast vxlan tunnel termination deviceAnuradha Karuppiah
An interface needs to be designated as "termination device" and added to the termination mroute's OIL. This is used by kernel and ASIC backends to vxlan-decaps matching flows. The default termination device is expected to have the prefix (start sub-string) "ipmr-lo". This can be made configurable if needed - root@TORS1:~# ip -d link show ipmr-lo 28: ipmr-lo: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default link/ether 12:5a:ae:74:51:a2 brd ff:ff:ff:ff:ff:ff promiscuity 0 dummy addrgenmode eui64 root@TORS1:~# ip mr This commit includes the changes to enable pim implicitly on the device and set it up as the vxlan-term device per-pim-instance. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2019-04-20pimd: update vxlan mroute entries when the lo or peerlink vif is updatedAnuradha Karuppiah
For vxlan origination mroutes the IIF is pinned to a. lo for single VTEPs b. peerlink-rif for anycast VTEPs This commit includes the changes to react to pim-vifi add/del for these devices. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2019-04-20pimd: add termination mroutes for each vxlan multicast tunnelsAnuradha Karuppiah
To terminate a multicast VxLAN tunnel entry we setup a mroute with ipmr-lo in the OIL - (0.0.0.0, 239.1.1.100) Iif: uplink-1 Oifs: uplink-1 ipmr-lo This is done by the vxlan component that add ipmr-lo as a local member to termination SG entries. In addition termination entries are also subject to MLAG DF election on the anycast VxLAN-AA setup. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2019-04-20pimd: register local VTEP-IP for each BUM MDT via NULL registersAnuradha Karuppiah
For multicast vxlan tunnels we register the local VTEP-IP independent of the prescence of BUM traffic i.e. we prime the pump. This is acheived via NULL registers. VxLAN orig entries with upstream in a PIM_REG_JOIN state are linked to a work list for periodic NULL register transmission. Once the SPT setup is complete the upstream-entry moves to a PIM_REG_PRUNE state and is remved from the VxLAN work list. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2019-04-20pimd: add peerlink-rif to the origination-mroute's OILAnuradha Karuppiah
In a PIM MLAG setup (say L11<->L12 is the anycast VTEP pair) the RP can choose to join either MLAG switch as the anycast VTEP-IP is present on both. Let's say the RP joins L11. Hosts are dual connected to L11<->L12 and can send traffic to either switch. Let's say a host sends broadcast traffic to L12; now L12 must encapsulate and send the traffic toward L11. To do that the origination-mroute on L12 must include the ISL in its OIL - (36.0.0.9, 239.1.1.100) Iif: peerlink-3.4094 Oifs: peerlink-3.4094 L11 has a similar mroute - (36.0.0.9, 239.1.1.100) Iif: peerlink-3.4094 Oifs: peerlink-3.4094 uplink-1 This mroute is used to rx traffic on peerlink-3.4094 and send it out of uplink-1. Note that this mroute also includes the peerlink-rif in its OIL. Explicit removal of IIF from OIL is done by the kernel (and other dataplanes) to prevent traffic looping. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2019-04-20pimd: support for vxlan origination-upstream entriesAnuradha Karuppiah
For every (local-vtep-ip, bum-mcast-grp) registered by evpn an origination mroute is setup by pimd. The purpose of this mroute is to forward vxlan encapsulated BUM - Sample mroute (single VTEP): (27.0.0.7, 239.1.1.100) Iif: lo Oifs: uplink-1 Sample mroute (anycast VTEP): (36.0.0.9, 239.1.1.100) Iif: peerlink-3.4094\ Oifs: peerlink-3.4094 uplink-1 This commit is part-1 of orignation mroute setup and includes setup of upstream entries with vxlan properties. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2019-04-20pimd: header changes for pim-vxlan staggered processingAnuradha Karuppiah
pim-vxlan work is maintained in a lists and processing staggered. One such work is the generation of periodic null registers for the local VTEP-IP. This info is instance agnostic and maintained in a global cache. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2019-04-20pimd: initial infrastructure to maintain VxLAN SG databaseAnuradha Karuppiah
These entries will be used over the subsequent commits for 1. vxlan-tunnel-termination handling - setup MDT to rx VxLAN encapsulated BUM traffic. 2. vxlan-tunnel-origination handling - register local-vtep-ip as a multicast source. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>