Commit Graph

23768 Commits

Author SHA1 Message Date
Donald Sharp
2cbd181ac9 bgpd: When deleting a neighbor from a peer-group the PGNAME is optional
Currently when deleting a neighbor from a peer-group:
no neighbor A.B.C.D peer-group FOO

We must specify FOO, while A.B.C.D is sufficient enough of an
identifier to know what to do.

Make PGNAME optional on this command and just delete the peer.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-02-11 13:35:22 -05:00
Mark Stapp
f43e9ec02f
Merge pull request #8060 from donaldsharp/ospf_vrf_baloney
ospfd:  Prevent duplicate packet read in certain vrf situations
2021-02-11 11:58:15 -05:00
Donatas Abraitis
bcab253c22 bgpd: Replace typo "Cluser length" => "Cluster length"
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-02-11 17:11:12 +02:00
Olivier Dugeon
56981b40e9 ospfd: Debug race condition in Segment Routing
Issue #7926 hilight a race condition in Segment Routing processing.

The problem occurs when Router Information Opaque LSA is received late, in
particular after SPF run and after ospf_sr_nhlfe_update() was called. This
scenario is unfrequent and takes place due to a slow DR election.
In this particular case, SR Prefix are handle but not fully fill. In fact,
SRGB for the nexthop is not yet received and thus, output label could not
be computed.

When Router Information Opaque LSA is received and processed, if the
corresponding SR node is a direct neighbor of the self node, update_out_nhlfe()
is called against all SR nodes to adjust SR prefix if the next hop is the new
SR node. The function wrongly computes output label and configure a bad MPLS
LFIB entries.

Another way to hilight the problem is to change through CLI the SRGB of a node
and look to MPLS LFIB of direct neighbor, in particular those who announce
EXPLICIT NULL Prefix SID.

This patch correct the update_out_nhlfe() function by calling the appropriate
function (sr_prefix_out_label() instead of index2label()) to compute the output
label.

Some log debugs were adjusted and unused prefix route table was removed too.

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
2021-02-11 14:52:40 +01:00
Donald Sharp
555691e96e ospfd: Prevent duplicate packet read in certain vrf situations
Currently if the sysctl net.ipv4.raw_l3mdev_accept is 1, packets
destined to a specific vrf also end up being delivered to the default
vrf.  We will see logs like this in ospf:

2021/02/10 21:17:05.245727 OSPF: ospf_recv_packet: fd 20(default) on interface 1265(swp1s1.26)
2021/02/10 21:17:05.245740 OSPF: Hello received from [9.9.36.12] via [swp1s1.26:200.254.26.13]
2021/02/10 21:17:05.245741 OSPF:  src [200.254.26.14],
2021/02/10 21:17:05.245743 OSPF:  dst [224.0.0.5]
2021/02/10 21:17:05.245769 OSPF: ospf_recv_packet: fd 45(vrf1036) on interface 1265(swp1s1.26)
2021/02/10 21:17:05.245774 OSPF: Hello received from [9.9.36.12] via [swp1s1.26:200.254.26.13]
2021/02/10 21:17:05.245775 OSPF:  src [200.254.26.14],
2021/02/10 21:17:05.245777 OSPF:  dst [224.0.0.5]

This really really makes ospf unhappy in the vrf we are running in.

I am approaching the problem by just dropping the packet if read in the
default vrf because of:

commit 0556fc33c7
Author: Donald Sharp <sharpd@cumulusnetworks.com>
Date:   Fri Feb 1 11:54:59 2019 -0500

    lib: Allow bgp to always create a listen socket for the vrf

Effectively if we have `router ospf vrf BLUE` but no ospf running
in the default vrf, we will not have a listener and that would
require a fundamental change in our approach to handle the ospf->fd
at a global level.  I think this is less than ideal at the moment
but it will get us moving again and allow FRR to work with
a bunch of vrf's and ospf neighbors.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-02-11 07:31:05 -05:00
Donatas Abraitis
6b9265a3f2 bgpd: Print IPv4 nexthop for IPv6 prefixes under bgp_table_map_apply()
With latest kernels that's possible to have IPv6 routes with IPv4 nexthops.

We already handled this in bgp_zebra_announce():

	nexthop = bgp_path_info_to_ipv6_nexthop(mpinfo_cp,
						&ifindex);

	if (!nexthop)
		nh_updated = update_ipv4nh_for_route_install(
			nh_othervrf,
			nh_othervrf ? info->extra->bgp_orig
				    : bgp,
			&mpinfo_cp->attr->nexthop,
			mpinfo_cp->attr, is_evpn, api_nh);
	else
		nh_updated = update_ipv6nh_for_route_install(
			nh_othervrf,
			nh_othervrf ? info->extra->bgp_orig
				    : bgp,
			nexthop, ifindex, mpinfo, info, is_evpn,
			api_nh);

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-02-11 12:25:01 +02:00
Philippe Guibert
a3e520f37b nhrpd: replace nhrp route nexthop with onlink route when prefix=nh
There are cases where nhrp wants to create a nhrp route to gre interface
with the nexthop which is the same the prefix. This is the case with
ipv6:

ipv6 route a:ff::ff:4/128 via a:ff::ff:4:/128 dev gre1

This route entry is false from zebra point of view, and to avoid that,
the nexthop is ignored in nhrp only if the prefix equals the nexthop.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2021-02-11 09:06:32 +01:00
Philippe Guibert
ef91ff0468 nhrpd: shortcut routes installed with nexthop.
Previously, when a shortcut entry was created, its associated route was
created on system, with no nexthop, only gre device. eg:

[..]
N>* 192.168.2.0/24 [10/0] is directly connected, gre1, 00:01:04           <--- can not be resolved

[..]
Type     Prefix                   Via                      Identity
dynamic  192.168.2.0/24           10.255.255.2             				<---- correct

This situation was forcing neighbor resolution on the first outgoing packet matching the route entry. for instance 192.168.2.1 could not be resolved at link layer, and was going to fail. Instead, nhrp nexthop should have been used.
This is what this commit intends to do, that is to say that when a
shortcut is installed by nhrp, the associated nexthop entry is used.

[..]
N>* 192.168.2.0/24 [10/0] via 10.255.255.2, gre1 onlink, 00:00:31

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2021-02-11 09:06:28 +01:00
Quentin Young
51ab4dbaad lib: support mallinfo2()
mallinfo() is deprecated as of glibc 2.33 and emits a warning if used.
Support mallinfo2() if available.

Signed-off-by: Quentin Young <qlyoung@qlyoung.net>
2021-02-10 18:35:15 -05:00
Soman K S
b9b87bfc36 ospf6d : fix issue in ecmp inter area route
Issue: When a path in the inter area ecmp route is deleted, the route is removed

Fix: The fix is to remove the specific path from the inter area route using
     ospf6_abr_old_route_remove() when abr route entry is not found.
     In  the function ospf6_abr_old_route_remove() the path to be removed needs
     to match adv router and link state ID

     Fixed memory leak in ospf6_intra_prefix_update_route_origin() caused by
     route node lock not getting released.

Signed-off-by: kssoman <somanks@gmail.com>
2021-02-10 16:45:22 +05:30
Donatas Abraitis
de6223a98d
Merge pull request #8033 from qlyoung/fix-gnu-readline-bracketed-paste
vtysh: disable bracketed paste in readline
2021-02-10 11:01:18 +02:00
Stephen Worley
3d26211e08
Merge pull request #7508 from sudhanshukumar22/zebra-vrf-delete
zebra: treat vrf add for existing vrf as update
2021-02-10 02:05:10 -05:00
Martin Winter
7a9c641d5c
Merge pull request #7917 from pjdruddy/l3vpn-mpls-snmp-upstream-1
L3vpn mpls snmp upstream 1
2021-02-10 01:37:58 +01:00
lynne
cb978d686b ospf6d: Don't send hellos on loopback interface
When ospf6 passive is turned off on a loopback interface don't start
sending ospf6 hellos.

Signed-off-by: Lynne Morrison <lynne@voltanet.io>
2021-02-09 19:31:18 -05:00
Philippe Guibert
061166ac0c
Merge pull request #8048 from idryzhov/fix-vrf-command
vrf: mark vrf as configured when entering vrf node
2021-02-09 21:43:54 +01:00
Quentin Young
7533cad751 *: remove more sprintf()
Should be just a couple non-development, non-test occurrences of this
function left now.

Signed-off-by: Quentin Young <qlyoung@qlyoung.net>
2021-02-09 15:40:40 -05:00
Donald Sharp
ed985dfd9d
Merge pull request #8045 from ton31337/feature/doc_ebgp_multihop_with_nht_resolve
doc: We have to enable nht tracking via default route multihop eBGP
2021-02-09 14:59:26 -05:00
Igor Ryzhov
18e196f6fa vrf: use wrappers to change VRF_CONFIGURED flag
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-02-09 22:39:32 +03:00
Igor Ryzhov
966806294b vrf: mark vrf as configured when entering vrf node
The VRF must be marked as configured when user enters "vrf NAME" command.

Otherwise, the following problem occurs:

`ip link add red type vrf table 1`

  VRF structure is allocated.

`vtysh -c "conf t" -c "vrf red"`

  `lib_vrf_create` is called, and pointer to the VRF structure is stored
  to the nb_config_entry.

`ip link del red`

  VRF structure is freed (because it is not marked as configured), but
  the pointer is still stored in the nb_config_entry.

`vtysh -c "conf t" -c "no vrf red"`

  Nothing happens, because VRF structure doesn't exist. It means that
  `lib_vrf_destroy` is not called, and nb_config_entry still exists in
  the running config with incorrect pointer.

`ip link add red type vrf table 1`

  New VRF structure is allocated.

`vtysh -c "conf t" -c "vrf red"`

  `lib_vrf_create` is NOT called, because the nb_config_entry for that
  VRF name still exists in the running config.

After that all NB commands for this VRF will use incorrect pointer to
the freed VRF structure.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-02-09 21:38:45 +03:00
Mark Stapp
a9318a3287 libs, bgpd: improve task cancellation by argument value
Extend the thread_cancel_event api so that it's more complete:
look in all the lists of events, including io and timers, for
matching tasks. Add a limited version of the api that only
examines tasks in the event and ready queues.

BGP appears to require the old behavior, so change its macro
to use the more limited cancel api.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2021-02-09 12:10:51 -05:00
Mark Stapp
aea25d1ec8 libs: make the task cancellation struct private
No reason for the thread/task cancellation struct to be public:
move it out of the header file. Also add a flags field.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2021-02-09 12:10:51 -05:00
Pat Ruddy
f40594ca77 tests: mplsL3vpn SNMP topotest
Tests to exercise the MPLS-L3VPN-STD MIB

Signed-off-by: Pat Ruddy <pat@voltanet.io>
2021-02-09 17:04:49 +00:00
nsaigomathi
85c8286666 pimd: json support added
Modify code to add JSON format output in show command.
"show ip igmp [vrf NAME] join" and "show ip igmp vrf all join" with proper formatting

Signed-off-by: Sai Gomathi <nsaigomathi@vmware.com>
2021-02-09 05:33:14 -08:00
Russ White
d887c7bf04
Merge pull request #7973 from sworleys/Pbr-More-Fixes
zebra,pbrd,doc: PBR more fixes
2021-02-09 07:37:09 -05:00
Russ White
a384dd69d8
Merge pull request #7980 from gromit1811/fix_ospf6_lsa_str_oob
Fix ospf6 LSA formatting out-of-bounds access
2021-02-09 07:36:29 -05:00
Donatas Abraitis
7e6295a4b0
Merge pull request #8042 from donaldsharp/smaller_timers_blackhole
tests: Modify timers on bgp_blackhole_community
2021-02-09 12:04:33 +02:00
Donatas Abraitis
15e6881e6a doc: We have to enable nht tracking via default route multihop eBGP
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-02-09 11:51:45 +02:00
Donald Sharp
04aabf1b27
Merge pull request #8027 from ton31337/fix/remove_json_aggregatorasmalformed
bgpd: Remove aggregatorAsMalformed related outputs JSON and non-JSON
2021-02-08 20:11:54 -05:00
Donald Sharp
350bdbdd95 tests: Modify timers on bgp_blackhole_community
Modify the timers on the bgp_blackhole_community test to
be more aggressive so our test system will recover faster
when we drop packets.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-02-08 19:37:58 -05:00
Donald Sharp
7a0df480c4
Merge pull request #8028 from ton31337/fix/aggregator_dump_attributes_if_zero
bgpd: Dump BGP attrs to check what's the actual prefix with aggr_as 0
2021-02-08 16:02:17 -05:00
Donald Sharp
8920ec2827
Merge pull request #8038 from imzyxwvu/same-attr
bgpd: Do not compare attr again.
2021-02-08 15:31:43 -05:00
varasteh
b3511a7247 [filter]: change return code for errors
CMD_WARNING is replaced by CMD_WARNING_CONFIG_FAILED

Signed-off-by: varasteh <mahdy.varasteh@gmail.com>
2021-02-08 16:02:32 +03:30
zyxwvu Shi
aeadbd9e19 bgpd: Do not compare attr again.
`same_attr` has been computed and `hook_call(bgp_process)` (calling
BMP module) would not change it. We could reuse the value to filter
same attribute updates, avoiding an extra comparison.

Signed-off-by: zyxwvu Shi <i@shiyc.cn>
2021-02-08 20:09:02 +08:00
Donatas Abraitis
d6b92dded3
Merge pull request #8032 from donaldsharp/dp_uninited
Some bfd valgrind issues
2021-02-08 12:03:25 +02:00
Donatas Abraitis
95cf9cb58a
Merge pull request #8031 from donaldsharp/duplicate
bgpd: Remove the double decleration of bgp_global_evpn_node_lookup
2021-02-08 10:04:14 +02:00
Quentin Young
5609ba6ad4
Merge pull request #7946 from ckishimo/ospfv3_json_2
tests: add ospf6 support via json files
2021-02-08 01:23:25 -05:00
Quentin Young
e8b731e86a
Merge pull request #8030 from anlancs/fix-pim-debug-double-check
Fix double check, remove one
2021-02-08 00:43:06 -05:00
Quentin Young
dab6893f15 vtysh: disable bracketed paste in readline
GNU Readline 8.1 enables bracketed paste by default. This results in
newlines not ending the readline() call, which breaks the ability of
users to paste in configs to vtysh's interactive shell.

Disable bracketed paste.

Signed-off-by: Quentin Young <qlyoung@qlyoung.net>
2021-02-07 22:51:07 -05:00
anlancs
3655f3549e pimd: check debug flag one time
debug flag checked twice, just keep one.

Signed-off-by: anlancs <anlan_cs@tom.com>
2021-02-08 09:15:32 +08:00
Donald Sharp
14b3514806 bfdd: Prevent use after free ( again )
Valgrind is still reporting:

466020-==466020==    by 0x11B9F4: main (bfdd.c:403)
466020-==466020==  Address 0x5a7d544 is 84 bytes inside a block of size 272 free'd
466020:==466020==    at 0x48399AB: free (vg_replace_malloc.c:538)
466020-==466020==    by 0x490A947: qfree (memory.c:140)
466020-==466020==    by 0x48F2AE8: if_delete (if.c:322)
466020-==466020==    by 0x48F250D: if_destroy_via_zapi (if.c:195)
466020-==466020==    by 0x497071E: zclient_interface_delete (zclient.c:2040)
466020-==466020==    by 0x49745F6: zclient_read (zclient.c:3687)
466020-==466020==    by 0x4955AEC: thread_call (thread.c:1684)
466020-==466020==    by 0x48FF64E: frr_run (libfrr.c:1126)
466020-==466020==    by 0x11B9F4: main (bfdd.c:403)
466020-==466020==  Block was alloc'd at
466020:==466020==    at 0x483AB65: calloc (vg_replace_malloc.c:760)
466020-==466020==    by 0x490A805: qcalloc (memory.c:115)
466020-==466020==    by 0x48F23D6: if_new (if.c:160)
466020-==466020==    by 0x48F257F: if_create_name (if.c:214)
466020-==466020==    by 0x48F3493: if_get_by_name (if.c:558)
466020-==466020==    by 0x49705F2: zclient_interface_add (zclient.c:1989)
466020-==466020==    by 0x49745E0: zclient_read (zclient.c:3684)
466020-==466020==    by 0x4955AEC: thread_call (thread.c:1684)
466020-==466020==    by 0x48FF64E: frr_run (libfrr.c:1126)
466020-==466020==    by 0x11B9F4: main (bfdd.c:403)

Apparently the bs->ifp pointer is being set even in cases when
the bs->key.ifname is not being set.  So go through and just
match the interface pointer and cut-to-the-chase.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-02-07 15:03:51 -05:00
Donald Sharp
37a74717c7 *: Fix usage of bfd_adj_event
Valgrind reports:

469901-==469901==
469901-==469901== Conditional jump or move depends on uninitialised value(s)
469901:==469901==    at 0x3A090D: bgp_bfd_dest_update (bgp_bfd.c:416)
469901-==469901==    by 0x497469E: zclient_read (zclient.c:3701)
469901-==469901==    by 0x4955AEC: thread_call (thread.c:1684)
469901-==469901==    by 0x48FF64E: frr_run (libfrr.c:1126)
469901-==469901==    by 0x213AB3: main (bgp_main.c:540)
469901-==469901==  Uninitialised value was created by a stack allocation
469901:==469901==    at 0x3A0725: bgp_bfd_dest_update (bgp_bfd.c:376)
469901-==469901==
469901-==469901== Conditional jump or move depends on uninitialised value(s)
469901:==469901==    at 0x3A093C: bgp_bfd_dest_update (bgp_bfd.c:421)
469901-==469901==    by 0x497469E: zclient_read (zclient.c:3701)
469901-==469901==    by 0x4955AEC: thread_call (thread.c:1684)
469901-==469901==    by 0x48FF64E: frr_run (libfrr.c:1126)
469901-==469901==    by 0x213AB3: main (bgp_main.c:540)
469901-==469901==  Uninitialised value was created by a stack allocation
469901:==469901==    at 0x3A0725: bgp_bfd_dest_update (bgp_bfd.c:376)

On looking at bgp_bfd_dest_update the function call into bfd_get_peer_info
when it fails to lookup the ifindex ifp pointer just returns leaving
the dest and src prefix pointers pointing to whatever was passed in.

Let's do two things:

a) The src pointer was sometimes assumed to be passed in and sometimes not.
Forget that.  Make it always be passed in
b) memset the src and dst pointers to be all zeros.  Then when we look
at either of the pointers we are not making decisions based upon random
data in the pointers.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-02-07 14:59:53 -05:00
Donald Sharp
c39b56205a bgpd: Remove the double decleration of bgp_global_evpn_node_lookup
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-02-07 07:35:38 -05:00
Donatas Abraitis
4877b70b53 bgpd: Dump BGP attrs to check what's the actual prefix with aggr_as 0
Just for more debug information regarding malformed aggregator_as.

```
bgpd[5589]: [EC 33554434] 192.168.10.25: AGGREGATOR AS number is 0 for aspath: 65030
bgpd[5589]: bgp_attr_aggregator: attributes: nexthop 192.168.10.25, origin i, path 65030
```

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-02-06 14:01:13 +02:00
Donatas Abraitis
88d495a961 bgpd: Remove aggregatorAsMalformed related outputs JSON and non-JSON
Already not necessary, because if BGP aggregator AS attribute is with
value of 0, then the attribute is already discarded at early processing.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-02-06 13:45:30 +02:00
Quentin Young
658186e8b6
Merge pull request #7937 from pjdruddy/topotest-evpn-svi-advertise
tests: update EVPN VXLAN for SVI behaviour change
2021-02-05 14:30:55 -05:00
Quentin Young
684b9f2447
Merge pull request #7981 from gromit1811/fix_ospf6_lsa_str_retval
ospf6d: Fix LSA formatting inconsistent retvals
2021-02-05 14:08:37 -05:00
Donatas Abraitis
f3e438f21c tests: Test if BGP AGGREGATOR attribute is discarded if ASN comes as 0
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-02-05 20:35:58 +02:00
Donald Sharp
503f20e40e
Merge pull request #8019 from ton31337/fix/bgpd_aggregator_0
bgpd: Unset only aggregator flag when AGGREGATOR_AS is 0
2021-02-05 12:33:29 -05:00
Donald Sharp
6ddbc710cc
Merge pull request #7218 from kuldeepkash/multicast_pim_bsm
tests: Add multicast-pim-bsm-topo1 suite
2021-02-05 10:20:15 -05:00
Donatas Abraitis
e836423849 bgpd: Unset only aggregator flag when AGGREGATOR_AS is 0
Avoid mangling packet size which is expected to be the same as received.

Stream pointer advancing is necessary to avoid changing the packet and
reseting BGP sessions.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-02-05 16:47:55 +02:00