Commit Graph

22622 Commits

Author SHA1 Message Date
Anuradha Karuppiah
ea6d91c86b pimd: re-eval flow activity on kat expiry
When the (S,G) KAT expires we need to poll for activity before dropping the
entry as traffic may have been forwarded by the dataplane since the last
periodic poll cycle.

This only works if traffic is being forwarded by the kernel i.e. if the
entries were HW accelerated via an ASIC we may still miss out on last
minute activity on the mroute in the HW.

Ticket: CM-26871

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-03-06 16:18:44 -05:00
Anuradha Karuppiah
07f4bac3ac pimd: mute termination device on the origination mroute on type mods
An mroute can transition from non-origination to a vxlan origination
mroute. In that case we need to re-evaluate if the interfaces in the
OIL need to be muted; pimreg and termination device need to be muted (if
they were previously un-muted).

Dump in a problem state:
=======================
root@TORC11:~# net show pim state
Codes: J -> Pim Join, I -> IGMP Report, S -> Source, * -> Inherited from (*,G), V -> VxLAN, M -> Muted
Active Source           Group            RPT  IIF               OIL
1      *                239.1.1.100      y    uplink-1          pimreg(I    ), ipmr-lo( J   )
1      36.0.0.11        239.1.1.100      n    peerlink-3.4094   ipmr-lo(   * ), uplink-1( J   ), uplink-2( J   ), peerlink-3.4094(  V  )

PS: ipmr-lo should have M set in (36.0.0.11,239.1.1.100)

Ticket: CM-26747

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-03-06 16:13:40 -05:00
Donald Sharp
4d114ab9f9 pimd: Allow LHR in a AA situation to join upstream
Add a special catch to the test for pim_macro_chisin_pim_include
to allow the LHR to signal interest in joining upstream.
This will allow both the DR and non DR of the ActiveActive
situation to draw traffic to itself.

The non-DR will continue to not forward traffic.

Ticket: CM-26610
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-03-06 16:13:28 -05:00
Anuradha Karuppiah
0f31a82a11 pimd: fix problem with oif being re-added during ifchannel del
Series of events leading to the problem -
1. (S,G) has been pruned on the rp on downlink-1
2. a (*,G) join is rxed on downlink-1 without the source S. This
results in the (S,G,rpt) prune state being cleared on downlink-1.
As a part of the clear the ifchannel associated with downlink-1
is deleted.
3. The ifchannel_delete handling is expected to add downlink-1
as an inherited OIF to the channel OIL (which it does). However
it is also added in as an immediate OIF (accidentally) as the
ifchannel is still present (in the process of being deleted).

To avoid the problem defer pim_upstream_update_join_desired
evaluation until after the channel is deleted.

Relevant debug logs -
PIM: pim_ifchannel_delete: ifchannel entry (27.0.0.15,239.1.1.106)(downlink-1) del start
PIM: pim_channel_add_oif(pim_ifchannel_delete): (S,G)=(27.0.0.15,239.1.1.106): proto_mask=4 OIF=downlink-1 vif_index=7: DONE
PIM: pimd/pim_oil.c pim_channel_del_oif: no existing protocol mask 2(4) for requested OIF downlink-1 (vif_index=7, min_ttl=1) for channel (S,G)=(27.0.0.15,239.1.1.106)
PIM: pim_upstream_switch: PIM_UPSTREAM_(27.0.0.15,239.1.1.106): (S,G) old: NotJoined new: Joined
PIM: pim_channel_add_oif(pim_upstream_inherited_olist_decide): (S,G)=(27.0.0.15,239.1.1.106): proto_mask=2 OIF=downlink-1 vif_index=7 added to 0x6  >>>>>>>>>>>>>>>>>>
PIM: pim_upstream_del(pim_ifchannel_delete): Delete (27.0.0.15,239.1.1.106)[default] ref count: 2 , flags: 81 c_oil ref count 1 (Pre decrement)
PIM: pim_ifchannel_delete: ifchannel entry (27.0.0.15,239.1.1.106)(downlink-1) del end

Ticket: CM-26732

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-03-06 16:13:27 -05:00
Anuradha Karuppiah
b900ad16ee pimd: logs to help debug leaked channel OIF problems
Additional protocols were being set on the OIF proto-mask without
logs. Added logs in that area.

Also added start and end logs to ifchannel_delete to help
identify state machine changes that play out as a part of this
event handling.

Ticket: CM-26732

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-03-06 16:12:25 -05:00
Satheesh Kumar K
83f8a12b8e lib, pimd, zebra: Provide some insurance against reading bad stream data
This patch does two things:

1) Ensure the decoding of stream data between pim <-> zebra is properly
decoded and we don't read beyond the end of the stream.

2) In zebra when we are freeing memory alloced ensure that we
actually have memory to delete before we do so.

Ticket: CM-27055
Signed-off-by: Satheesh Kumar K <sathk@cumulusnetworks.com>
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-03-06 16:03:59 -05:00
Donald Sharp
fa696b3727 zebra: SO_PEERCRED is a getsockopt call
This code is effectively dead code.  SO_PEERCRED is a getsockopt
call not *setsockopt* call.  Additionally we are not doing
anything with the failed setsockopt call at all.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-03-06 16:03:52 -05:00
Satheesh Kumar K
22c35834ea pimd: Use PIM EVPN MLAG Infra for syncing PIM MLAG Entries
Initially, MLAG Sync is happened at pim_ifchannel, this is mainly to
support even config mismatches(missing configuration of dual active).
But this causes more syncs for each entry.

and also it is not In-line with PIM EVPN. to avoid that moving to
pm_upstream based syncing.

Signed-off-by: Satheesh Kumar K <sathk@cumulusnetworks.com>
2020-03-06 16:03:36 -05:00
Anuradha Karuppiah
ec85b101e6 pimd: run DF election only on (*, G) termination mroutes
(S,G) entries that inherit ipmr-lo into the OIL also inherit
the DF role from the parent (*, G) entry.

This change is done primarily to simplify the sync process and
to prevent the MLAG peers from having to track (S, G) activity etc.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-03-06 16:03:28 -05:00
Donald Sharp
aeb672466f pimd: Skip nexthop lookup for register source in some cases
There exists the possibility that a RP exists as a anycast
pair for a lan segment.  As such one side may receive
the register and properly handle the registration mechanics.
The one that does not receive the register packets will still
get S,G state and WRVIFWHOLE upcalls across the lan.  In
this case notice that we have not received the Registration
packets and prevent nexthop lookups.

Ticket: CM-27466
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-03-06 16:03:20 -05:00
Donald Sharp
17823cdd2c pimd: Add accidently missed code during upstreaming process
There was some code missed during the upstreaming process
due to code squash.  Identify and put into a commit
to keep code consistent and correct.

Signed-off-by: Satheesh Kumar K <sathk@cumulusnetworks.com>
Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-03-06 16:02:52 -05:00
Donald Sharp
a054f6d73e pimd: There is nothing to do with a WRVIFWHOLE for iifp of pimreg
When the WRVIFWHOLE callback is made with a iifp of the pimreg
device we *know* that the packet is a PIM Register packet
( see net/ipv4/ipmr.c for kernel behavior ).  As such
we know that we will shortly read the pim register packet
and handle it through those mechanics.  There is nothing
to do here so we can move along.

Ticket: CM-27729
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-03-06 16:02:43 -05:00
Donald Sharp
9dc1cb0424 pimd: Put subdir.am into alphabetical order
The subdir.am had lost alphabetical order.  Put this back
for easy finding in the future.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-03-06 16:02:06 -05:00
Renato Westphal
3c685e64ff
Merge pull request #5924 from donaldsharp/more_func
*: Finish off the __PRETTY_FUNCTION__ to __func__
2020-03-06 16:16:02 -03:00
Donald Sharp
5e81f5dd1a *: Finish off the __PRETTY_FUNCTION__ to __func__
FINISH IT

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-03-06 09:23:22 -05:00
Donatas Abraitis
9c37fcddda
Merge pull request #5920 from qlyoung/fix-srv6-repeated-attr-memleak
Fix srv6 repeated attr memleak + uninitialized refcnt
2020-03-06 15:29:11 +02:00
Philippe Guibert
43c27dd19a Revert "nhrpd: ignore zebra updates about our routes being deleted/added"
This reverts commit d0bfe25dea.
2020-03-06 12:14:59 +01:00
Quentin Young
5d2724ec25
Merge pull request #5916 from mjstapp/fix_gmtime
*: use gmtime_r exclusively
2020-03-05 17:38:13 -05:00
Quentin Young
498897d8d8
Merge pull request #5918 from ton31337/fix/__func__everywhere
__func__ everywhere
2020-03-05 17:37:03 -05:00
Quentin Young
340594a929 bgpd: properly initialize SRv6 attributes
We were using XMALLOC for these, and only initializing the refcount to 0
on one of them. Let's just use XCALLOC instead...

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2020-03-05 16:15:32 -05:00
Quentin Young
b502ca1165 bgpd: correctly handle repeated SRv6 attributes
Repeating SRv6 attributes N times leaks (N-1)*32 bytes of memory.

Fix it!

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2020-03-05 16:15:01 -05:00
Quentin Young
2681134b85 vrrpd: search all vr's for mvl_ifp to null
Previous patch was not sufficient to make sure the pointers get nulled.
Reason being is that vrrp_lookup_by_if_mvl() follows the link_ifindex on
the provided interface to acquire the base ifp, which is then used to
lookup the VR. However, because FRR's interface management is straight
up insane, it's possible that we delete the base interface before its
children. When this happens, link_ifindex is still valid for the macvlan
device but we have no interface corresponding to that ifindex, so our
lookup will fail. Consequently vrrp_lookup_by_if_mvl() can't be used if
we are handling deletion of any sort. Instead we have to loop through
every VR and check the pointers.

Also, there's no null check on the mvl_ifp pointer in vrrp_shutdown(),
and even though we log that we're returning early from it, we actually
don't. Do both of these things.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2020-03-05 14:22:49 -05:00
Quentin Young
61980c71c4 vrrpd: always null mvl_ifp ptr when mvl is deleted
When we get a deletion notification for the macvlan device, we need to
do two things. First, down the VRRP session if it's up. Second, since
the mvl device is dynamic (i.e. not explicitly configured by FRR) it
will be deleted upon return from the callback, so we need to drop the
pointer to it. The checks for the first and second one were one check so
the pointer was only nulled when the session was already up, leading to
a later heap UAF on the mvl ifp.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2020-03-05 13:27:01 -05:00
Mark Stapp
a2700b5071 *: use gmtime_r, localtime_r exclusively
Stop using gmtime() or localtime() everywhere.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-03-05 13:26:16 -05:00
Donatas Abraitis
15569c58f8 *: Replace __PRETTY_FUNCTION__/__FUNCTION__ to __func__
Just keep the code cool.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-03-05 20:23:23 +02:00
Mark Stapp
01abb5acde
Merge pull request #5856 from pguibert6WIND/nhrp_override_fix
zebra: when FIB_OVERRIDE flag is set, update nexthop-tracking clients properly
2020-03-05 13:20:53 -05:00
Donatas Abraitis
38e385615a tools: Add Coccinelle script to replace __FUNCTION__ to __func__
Same is for __PRETTY_FUNCTION__

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-03-05 20:16:47 +02:00
Quentin Young
fbb0740683
Merge pull request #5911 from ton31337/fix/no_check_if_assert
bgpd: Remove a test and return statement after assert
2020-03-05 13:16:30 -05:00
Donald Sharp
b80e593220
Merge pull request #5914 from mjstapp/fix_sa_show_all
zebra: clean up an SA warning in show_ip_route_all
2020-03-05 12:38:49 -05:00
Philippe Guibert
34b2ac58c5 zebra: when override flag is set, do not forget to update nht
this flag can be used when one routing daemon wants to force his route
to be injected prioritary with other routes, including selected routes.
for that, do not forget to update the new_selected pointer in the zebra
nexthop tracking algorithm.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2020-03-05 16:06:05 +01:00
Philippe Guibert
d0bfe25dea nhrpd: ignore zebra updates about our routes being deleted/added
nhrp listens for route entries to be deleted, in case some new routes
impact the current routes installed by nhrp. To prevent from
unconfiguring nhrp shortcut route, just prevent nhrp routes to be
processed.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2020-03-05 16:04:53 +01:00
Mark Stapp
c5babc8c60 zebra: clean up an SA warning in show_ip_route_all
SA reports a redundant NULL check; remove it.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-03-05 08:35:55 -05:00
Quentin Young
ca8a844cc5
Merge pull request #5850 from Spantik/gr_fix
Zebra: Zebra gr dynamic client handling
2020-03-04 23:40:26 -05:00
Quentin Young
ea16e19080
Merge pull request #5907 from ton31337/fix/replace_sizeof_coccinelle
Bool related stuff
2020-03-04 19:05:05 -05:00
Quentin Young
cb7f9e90e9
Merge pull request #5912 from mjstapp/fix_doc_slack_link
doc: change slack reference link to main FRR homepage
2020-03-04 19:04:09 -05:00
Mark Stapp
5103b01788
Merge pull request #5910 from donaldsharp/ospf_indentation
ospfd: Fix 4 levels of unnecessary indentation
2020-03-04 15:24:56 -05:00
Mark Stapp
21e78441a9 doc: change slack reference link to main FRR homepage
Change the overview page's link for slack info to point to
the main FRR homepage section - that's where the self-serve
link/info is.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-03-04 14:13:21 -05:00
Donatas Abraitis
ce089777d4 bgpd: Remove a test and return statement after assert
No need to check if the variable is NULL and return after assert.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-03-04 20:19:12 +02:00
Donatas Abraitis
c33b8303a9 tools: Add coccinelle script to remove a test case after assert()
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-03-04 20:17:42 +02:00
Donald Sharp
850dda33ce ospfd: Fix 4 levels of unnecessary indentation
Optimize display of code a tiny bit so that we can actually
have readable code.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-03-04 12:50:57 -05:00
Quentin Young
5a2c6abbc7
Merge pull request #5908 from rubenk/zebra-fix-typo-in-debug-message
zebra: fix typo in debug log message
2020-03-04 11:59:49 -05:00
Donatas Abraitis
08c2d52ae1 *: Use true/false instead of 1/0 when assigning variable for bool type
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-03-04 18:49:36 +02:00
Donatas Abraitis
a5f6e69b14 tools: Coccinelle script to convert 0/1 to false/true if variable type is bool
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-03-04 18:47:09 +02:00
Quentin Young
cca86fd4f0
Merge pull request #5906 from ton31337/feature/documentation_for_rpki
doc: Add documentation for `show rpki prefix` and `show rpki as-number`
2020-03-04 11:39:37 -05:00
Donatas Abraitis
286bbbecb0 pimd: Convert pim_upstream_evaluate_join_desired type to bool
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-03-04 17:13:01 +02:00
Ruben Kerkhof
05267678eb zebra: fix typo in debug log message
Signed-off-by: Ruben Kerkhof <ruben@rubenkerkhof.com>
2020-03-04 16:08:18 +01:00
Donatas Abraitis
d8b01b013b tools: Add coccinelle script to convert int to bool if returning value is bool
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-03-04 17:04:52 +02:00
Donatas Abraitis
f06c4576b7 *: Return bool type for bool functions
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-03-04 15:05:22 +02:00
Donatas Abraitis
a8f58eb6a5 *: Use short version of bool expressions
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-03-04 15:04:23 +02:00
Donatas Abraitis
17fe9bb6e5 tools: Add coccinelle script to check if bool functions return bool type
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-03-04 15:02:23 +02:00