]> git.puffer.fish Git - mirror/frr.git/log
mirror/frr.git
4 years agovrf: use wrappers to change VRF_CONFIGURED flag 8048/head
Igor Ryzhov [Tue, 9 Feb 2021 19:39:32 +0000 (22:39 +0300)]
vrf: use wrappers to change VRF_CONFIGURED flag

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
4 years agovrf: mark vrf as configured when entering vrf node
Igor Ryzhov [Tue, 9 Feb 2021 18:38:45 +0000 (21:38 +0300)]
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>
4 years agoMerge pull request #7973 from sworleys/Pbr-More-Fixes
Russ White [Tue, 9 Feb 2021 12:37:09 +0000 (07:37 -0500)]
Merge pull request #7973 from sworleys/Pbr-More-Fixes

zebra,pbrd,doc: PBR more fixes

4 years agoMerge pull request #7980 from gromit1811/fix_ospf6_lsa_str_oob
Russ White [Tue, 9 Feb 2021 12:36:29 +0000 (07:36 -0500)]
Merge pull request #7980 from gromit1811/fix_ospf6_lsa_str_oob

Fix ospf6 LSA formatting out-of-bounds access

4 years agoMerge pull request #8042 from donaldsharp/smaller_timers_blackhole
Donatas Abraitis [Tue, 9 Feb 2021 10:04:33 +0000 (12:04 +0200)]
Merge pull request #8042 from donaldsharp/smaller_timers_blackhole

tests: Modify timers on bgp_blackhole_community

4 years agoMerge pull request #8027 from ton31337/fix/remove_json_aggregatorasmalformed
Donald Sharp [Tue, 9 Feb 2021 01:11:54 +0000 (20:11 -0500)]
Merge pull request #8027 from ton31337/fix/remove_json_aggregatorasmalformed

bgpd: Remove aggregatorAsMalformed related outputs JSON and non-JSON

4 years agotests: Modify timers on bgp_blackhole_community 8042/head
Donald Sharp [Thu, 28 Jan 2021 12:56:57 +0000 (07:56 -0500)]
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>
4 years agoMerge pull request #8028 from ton31337/fix/aggregator_dump_attributes_if_zero
Donald Sharp [Mon, 8 Feb 2021 21:02:17 +0000 (16:02 -0500)]
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

4 years agoMerge pull request #8038 from imzyxwvu/same-attr
Donald Sharp [Mon, 8 Feb 2021 20:31:43 +0000 (15:31 -0500)]
Merge pull request #8038 from imzyxwvu/same-attr

bgpd: Do not compare attr again.

4 years agobgpd: Do not compare attr again. 8038/head
zyxwvu Shi [Mon, 8 Feb 2021 12:09:02 +0000 (20:09 +0800)]
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>
4 years agoMerge pull request #8032 from donaldsharp/dp_uninited
Donatas Abraitis [Mon, 8 Feb 2021 10:03:25 +0000 (12:03 +0200)]
Merge pull request #8032 from donaldsharp/dp_uninited

Some bfd valgrind issues

4 years agoMerge pull request #8031 from donaldsharp/duplicate
Donatas Abraitis [Mon, 8 Feb 2021 08:04:14 +0000 (10:04 +0200)]
Merge pull request #8031 from donaldsharp/duplicate

bgpd: Remove the double decleration of bgp_global_evpn_node_lookup

4 years agoMerge pull request #7946 from ckishimo/ospfv3_json_2
Quentin Young [Mon, 8 Feb 2021 06:23:25 +0000 (01:23 -0500)]
Merge pull request #7946 from ckishimo/ospfv3_json_2

tests: add ospf6 support via json files

4 years agoMerge pull request #8030 from anlancs/fix-pim-debug-double-check
Quentin Young [Mon, 8 Feb 2021 05:43:06 +0000 (00:43 -0500)]
Merge pull request #8030 from anlancs/fix-pim-debug-double-check

Fix double check, remove one

4 years agopimd: check debug flag one time 8030/head
anlancs [Mon, 8 Feb 2021 01:15:22 +0000 (09:15 +0800)]
pimd: check debug flag one time

    debug flag checked twice, just keep one.

Signed-off-by: anlancs <anlan_cs@tom.com>
4 years agobfdd: Prevent use after free ( again ) 8032/head
Donald Sharp [Sun, 7 Feb 2021 20:03:51 +0000 (15:03 -0500)]
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>
4 years ago*: Fix usage of bfd_adj_event
Donald Sharp [Sun, 7 Feb 2021 19:59:53 +0000 (14:59 -0500)]
*: 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>
4 years agobgpd: Remove the double decleration of bgp_global_evpn_node_lookup 8031/head
Donald Sharp [Sun, 7 Feb 2021 12:35:38 +0000 (07:35 -0500)]
bgpd: Remove the double decleration of bgp_global_evpn_node_lookup

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
4 years agobgpd: Dump BGP attrs to check what's the actual prefix with aggr_as 0 8028/head
Donatas Abraitis [Sat, 6 Feb 2021 11:57:42 +0000 (13:57 +0200)]
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>
4 years agobgpd: Remove aggregatorAsMalformed related outputs JSON and non-JSON 8027/head
Donatas Abraitis [Sat, 6 Feb 2021 11:45:30 +0000 (13:45 +0200)]
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>
4 years agoMerge pull request #7937 from pjdruddy/topotest-evpn-svi-advertise
Quentin Young [Fri, 5 Feb 2021 19:30:55 +0000 (14:30 -0500)]
Merge pull request #7937 from pjdruddy/topotest-evpn-svi-advertise

tests: update EVPN VXLAN for SVI behaviour change

4 years agoMerge pull request #7981 from gromit1811/fix_ospf6_lsa_str_retval
Quentin Young [Fri, 5 Feb 2021 19:08:37 +0000 (14:08 -0500)]
Merge pull request #7981 from gromit1811/fix_ospf6_lsa_str_retval

ospf6d: Fix LSA formatting inconsistent retvals

4 years agoMerge pull request #8019 from ton31337/fix/bgpd_aggregator_0
Donald Sharp [Fri, 5 Feb 2021 17:33:29 +0000 (12:33 -0500)]
Merge pull request #8019 from ton31337/fix/bgpd_aggregator_0

bgpd: Unset only aggregator flag when AGGREGATOR_AS is 0

4 years agoMerge pull request #7218 from kuldeepkash/multicast_pim_bsm
Donald Sharp [Fri, 5 Feb 2021 15:20:15 +0000 (10:20 -0500)]
Merge pull request #7218 from kuldeepkash/multicast_pim_bsm

tests: Add multicast-pim-bsm-topo1 suite

4 years agobgpd: Unset only aggregator flag when AGGREGATOR_AS is 0 8019/head
Donatas Abraitis [Fri, 5 Feb 2021 14:47:55 +0000 (16:47 +0200)]
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>
4 years agoMerge pull request #7126 from vijaykug/multicast_with_static_rp
Donald Sharp [Fri, 5 Feb 2021 14:37:40 +0000 (09:37 -0500)]
Merge pull request #7126 from vijaykug/multicast_with_static_rp

tests: Add multicast-pim-static-rp-topo1 test suite

4 years agoMerge pull request #7998 from volta-networks/fix_isis_attach_bit
Donald Sharp [Thu, 4 Feb 2021 23:46:19 +0000 (18:46 -0500)]
Merge pull request #7998 from volta-networks/fix_isis_attach_bit

isisd: When adjacencies go up and down add support to modify attached-bit

4 years agoMerge pull request #8010 from ton31337/fix/drop_aggregate_as_attribute_if_malformed
Mark Stapp [Thu, 4 Feb 2021 20:02:42 +0000 (15:02 -0500)]
Merge pull request #8010 from ton31337/fix/drop_aggregate_as_attribute_if_malformed

bgpd: Drop aggregator_as attribute if malformed in case of BGP_AS_ZERO

4 years agoMerge pull request #7709 from donaldsharp/vrf_doc
Mark Stapp [Thu, 4 Feb 2021 18:53:07 +0000 (13:53 -0500)]
Merge pull request #7709 from donaldsharp/vrf_doc

zebra: Slightly touch on the vrf route lookup semantics

4 years agoMerge pull request #8009 from pjdruddy/evpn-cleanup
Donald Sharp [Thu, 4 Feb 2021 18:37:24 +0000 (13:37 -0500)]
Merge pull request #8009 from pjdruddy/evpn-cleanup

zebra: resolve multiple functions for local MAC delete

4 years agoMerge pull request #7961 from mobash-rasool/ospfv3-feature
Mark Stapp [Thu, 4 Feb 2021 18:32:34 +0000 (13:32 -0500)]
Merge pull request #7961 from mobash-rasool/ospfv3-feature

ospf6d: add CLI to control maximum paths for routes.

4 years agoMerge pull request #8007 from wesleycoakley/xcompile-writeup
Mark Stapp [Thu, 4 Feb 2021 18:31:49 +0000 (13:31 -0500)]
Merge pull request #8007 from wesleycoakley/xcompile-writeup

doc: cross compilation guide

4 years agoMerge pull request #7941 from donaldsharp/instance_data
Mark Stapp [Thu, 4 Feb 2021 17:16:15 +0000 (12:16 -0500)]
Merge pull request #7941 from donaldsharp/instance_data

zebra: Display instance id as part of `show zebra client summ`

4 years agodoc: Slightly touch on the vrf route lookup semantics 7709/head
Donald Sharp [Thu, 10 Dec 2020 12:38:52 +0000 (07:38 -0500)]
doc: Slightly touch on the vrf route lookup semantics

People keep asking about the default unreachable route
in the linux vrf table.  Add a bit of color about the
design choices and what is going on.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
4 years agozebra: Display instance id as part of `show zebra client summ` 7941/head
Donald Sharp [Wed, 27 Jan 2021 13:21:14 +0000 (08:21 -0500)]
zebra: Display instance id as part of `show zebra client summ`

When displaying `show zebra client summ` when we have instances
running, display the instance number as well.

New Output:

sharpd@eva ~/frr7 (instance_data)> vtysh -c "show zebra client summ"
Name      Connect Time    Last Read  Last Write  IPv4 Routes       IPv6 Routes
--------------------------------------------------------------------------------
ospf[1]       00:00:02     00:00:02    00:00:02       0/0              0/0
ospf[5]       00:00:02     00:00:02    00:00:02       0/0              0/0
sharp         00:00:02     00:00:02    00:00:02       0/0              0/0
static        00:00:02     00:00:02    00:00:02       0/0              0/0
Routes column shows (added+updated)/deleted

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
4 years agoMerge pull request #6049 from sarav511/ovrdhold
Russ White [Thu, 4 Feb 2021 12:14:31 +0000 (07:14 -0500)]
Merge pull request #6049 from sarav511/ovrdhold

pimd: SGRpt prune received during prune didn't override holdtime

4 years agoMerge pull request #8013 from mjstapp/fix_topo_ospf6_topo1
Donald Sharp [Thu, 4 Feb 2021 00:59:49 +0000 (19:59 -0500)]
Merge pull request #8013 from mjstapp/fix_topo_ospf6_topo1

tests: fix ospf6_topo1 missing ref files

4 years agotests: fix ospf6_topo1 missing ref files 8013/head
Mark Stapp [Wed, 3 Feb 2021 21:28:18 +0000 (16:28 -0500)]
tests: fix ospf6_topo1 missing ref files

Only one of the four reference files was present; add the missing
three. The test just silently passed if a ref file was missing:
change that to a failure.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
4 years agodoc: cross compilation guide 8007/head
Wesley Coakley [Tue, 2 Feb 2021 23:16:51 +0000 (18:16 -0500)]
doc: cross compilation guide

Wrote a little guide for cross-compiling FRR, gleaned from notes I took
while compiling for a RPi 3B+ on a Gentoo x86_64 system.

Care was taken to keep this documentation as generic as possible so
these steps could be applied to any cross-compile targeting a supported
architecture.

Signed-off-by: Wesley Coakley <wcoakley@nvidia.com>
4 years agoMerge pull request #8004 from opensourcerouting/xref-cxx
Donald Sharp [Wed, 3 Feb 2021 16:23:15 +0000 (11:23 -0500)]
Merge pull request #8004 from opensourcerouting/xref-cxx

lib/xref: fix C++ issues

4 years agobgpd: Drop aggregator_as attribute if malformed in case of BGP_AS_ZERO 8010/head
Donatas Abraitis [Wed, 3 Feb 2021 12:58:23 +0000 (14:58 +0200)]
bgpd: Drop aggregator_as attribute if malformed in case of BGP_AS_ZERO

An UPDATE message that contains the AS number of zero in the AS_PATH
   or AGGREGATOR attribute MUST be considered as malformed and be
   handled by the procedures specified in [RFC7606].

An UPDATE message with a malformed AGGREGATOR attribute SHALL be
   handled using the approach of "attribute discard".

Attribute discard: In this approach, the malformed attribute MUST
      be discarded and the UPDATE message continues to be processed.
      This approach MUST NOT be used except in the case of an attribute
      that has no effect on route selection or installation.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
4 years agozebra: resolve multiple functions for local MAC delete 8009/head
Pat Ruddy [Mon, 1 Jun 2020 13:33:30 +0000 (14:33 +0100)]
zebra: resolve multiple functions for local MAC delete

the old VXLAN function for local MAC deletion was still in
existence and being called from the VXLAN code whilst the new
generic function was not being called at all. Resolve this so
the generic function matches the old function and is called
exclusively.

Signed-off-by: Pat Ruddy <pat@voltanet.io>
4 years agolib/xref: fix initializer order for C++ 8004/head
David Lamparter [Tue, 2 Feb 2021 18:27:41 +0000 (19:27 +0100)]
lib/xref: fix initializer order for C++

[v2: drop designated initializer names]

Signed-off-by: David Lamparter <equinox@diac24.net>
4 years agoMerge pull request #7449 from sudhanshukumar22/bgp-update-connect-timer
Donatas Abraitis [Wed, 3 Feb 2021 10:15:04 +0000 (12:15 +0200)]
Merge pull request #7449 from sudhanshukumar22/bgp-update-connect-timer

bgpd: config connect timer not applied immediately for non-established peers.

4 years agolib/xref: fix frrtrace() calls in thread code
David Lamparter [Tue, 2 Feb 2021 20:05:50 +0000 (21:05 +0100)]
lib/xref: fix frrtrace() calls in thread code

This didn't exist yet when the xref code came around, and since
frrtrace() gets collapsed to nothing by the preprocessor when
tracepoints are disabled, it didn't cause any compiler errors...

Signed-off-by: David Lamparter <equinox@diac24.net>
4 years agolib/xref: work around GCC bug 41091
David Lamparter [Tue, 2 Feb 2021 18:38:38 +0000 (19:38 +0100)]
lib/xref: work around GCC bug 41091

gcc fucks up global variables with section attributes when they're used
in templated C++ code.  The template instantiation "magic" kinda breaks
down (it's implemented through COMDAT in the linker, which clashes with
the section attribute.)

The workaround provides full runtime functionality, but the xref
extraction tool (xrelfo.py) won't work on C++ code compiled by GCC.

FWIW, clang gets this right.

Signed-off-by: David Lamparter <equinox@diac24.net>
4 years agolib/xref: restore lost extern "C" beginning
David Lamparter [Tue, 2 Feb 2021 18:27:41 +0000 (19:27 +0100)]
lib/xref: restore lost extern "C" beginning

The `}` is still there, but the `extern "C" {` got lost somewhere,
probably in a rebase...

Signed-off-by: David Lamparter <equinox@diac24.net>
4 years agoMerge pull request #8002 from idryzhov/fix-all-backets
Mark Stapp [Tue, 2 Feb 2021 20:42:58 +0000 (15:42 -0500)]
Merge pull request #8002 from idryzhov/fix-all-backets

*: fix all backets

4 years agoMerge pull request #8001 from ton31337/fix/bgpd_replace_65535_with_const
Quentin Young [Tue, 2 Feb 2021 18:43:15 +0000 (13:43 -0500)]
Merge pull request #8001 from ton31337/fix/bgpd_replace_65535_with_const

bgpd: Replace 65535 with UINT16_MAX

4 years ago*: fix all backets 8002/head
Igor Ryzhov [Tue, 2 Feb 2021 16:11:25 +0000 (19:11 +0300)]
*: fix all backets

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
4 years agoMerge pull request #7314 from kuldeepkash/multicast-sm-topo1
Donald Sharp [Tue, 2 Feb 2021 15:43:09 +0000 (10:43 -0500)]
Merge pull request #7314 from kuldeepkash/multicast-sm-topo1

Add multicast-pim-sm-topo1 test suite

4 years agobgpd: Replace 65535 with UINT16_MAX 8001/head
Donatas Abraitis [Tue, 2 Feb 2021 08:28:18 +0000 (10:28 +0200)]
bgpd: Replace 65535 with UINT16_MAX

Just consistent.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
4 years agoMerge pull request #6766 from opensourcerouting/xref
Russ White [Tue, 2 Feb 2021 12:44:21 +0000 (07:44 -0500)]
Merge pull request #6766 from opensourcerouting/xref

lib: xrefs - general cross-references & unique IDs

4 years agoMerge pull request #7987 from donaldsharp/eigrp_mtu_correct
Russ White [Tue, 2 Feb 2021 12:31:55 +0000 (07:31 -0500)]
Merge pull request #7987 from donaldsharp/eigrp_mtu_correct

eigrpd: Correctly set the mtu for eigrp packets sent

4 years agoMerge pull request #7991 from donaldsharp/valgrind_cleanups1
Russ White [Tue, 2 Feb 2021 12:30:06 +0000 (07:30 -0500)]
Merge pull request #7991 from donaldsharp/valgrind_cleanups1

Valgrind cleanups

4 years agobgpd: config connect timer is not applied immediately for peers in non-established... 7449/head
sudhanshukumar22 [Wed, 4 Nov 2020 05:21:42 +0000 (21:21 -0800)]
bgpd: config connect timer is not applied immediately for peers in non-established state.

Description:
When user is config connect timer, it doesn't reflect
immediately. It reflect when next time neighbor is tried to reconnect.

Problem Description/Summary :
When user is config connect timer, it doesn't reflect
The network connection was aborted by the local system.d to reconnect.
Fix is to update the connect timer immediately if BGP
    session is not in establish state.

Expected Behavior :
If neighbor is not yet established, we should immediately apply the config connect timer to the peer.

Signed-off-by: sudhanshukumar22 <sudhanshu.kumar@broadcom.com>
4 years agoMerge pull request #7985 from donaldsharp/eigrp_uninited
Donatas Abraitis [Tue, 2 Feb 2021 07:14:24 +0000 (09:14 +0200)]
Merge pull request #7985 from donaldsharp/eigrp_uninited

bunch of valgrind issues

4 years agoMerge pull request #7992 from donaldsharp/bgp_locks
Donatas Abraitis [Tue, 2 Feb 2021 07:13:33 +0000 (09:13 +0200)]
Merge pull request #7992 from donaldsharp/bgp_locks

bgpd: Centralize the dest unlocking for adj_out data structure

4 years agoMerge pull request #7402 from ranjanyash54/dev_2
Donald Sharp [Tue, 2 Feb 2021 02:07:57 +0000 (21:07 -0500)]
Merge pull request #7402 from ranjanyash54/dev_2

ospf6d: Json support added for command "show ipv6 ospf6 route [json]"

4 years agoMerge pull request #7994 from opensourcerouting/disable-printf-n
Donald Sharp [Tue, 2 Feb 2021 01:41:27 +0000 (20:41 -0500)]
Merge pull request #7994 from opensourcerouting/disable-printf-n

lib/printf: disable `%n` specifier

4 years agoMerge pull request #7958 from sworleys/Fix-Nexthop-Infinite-Recurse
Mark Stapp [Mon, 1 Feb 2021 21:26:01 +0000 (16:26 -0500)]
Merge pull request #7958 from sworleys/Fix-Nexthop-Infinite-Recurse

zebra: disallow resolution to duplicate nexthops

4 years agotests: restore isis-lsp-bits-topo1 test 7998/head
lynne [Sat, 30 Jan 2021 00:56:44 +0000 (19:56 -0500)]
tests: restore isis-lsp-bits-topo1 test

Signed-off-by: Lynne Morrison <lynne@voltanet.io>
4 years agoisisd: When adjacencies go up and down add support to modify attached-bit
lynne [Sat, 30 Jan 2021 00:36:22 +0000 (19:36 -0500)]
isisd: When adjacencies go up and down add support to modify attached-bit

When adjacencies change state the attached-bits in LSPs in other areas
on the router may need to be modified.

 1. If a router no longer has a L2 adjacency to another area the
    attached-bit must no longer be sent in the LSP
 2. If a new L2 adjacency comes up in a different area then the
    attached-bit should be sent in the LSP

Signed-off-by: Lynne Morrison <lynne@voltanet.io>
4 years agopbrd: remove extraneous break 7973/head
Stephen Worley [Fri, 29 Jan 2021 17:37:17 +0000 (12:37 -0500)]
pbrd: remove extraneous break

Remove extraneous break. Not needed after goto.

Signed-off-by: Stephen Worley <sworley@nvidia.com>
4 years agodoc: add pbr debug command docs
Stephen Worley [Thu, 28 Jan 2021 18:53:34 +0000 (13:53 -0500)]
doc: add pbr debug command docs

Add some docs for debug pbr commands.

Signed-off-by: Stephen Worley <sworley@nvidia.com>
4 years agozebra: move pbr hash create after update release
Stephen Worley [Mon, 11 Jan 2021 22:30:21 +0000 (17:30 -0500)]
zebra: move pbr hash create after update release

Move the pbr hash creation to be after the update release
and dplane install. Now that rules are installed in a separate
dplane pthread, we can have scenarios where we have an interface
flapping and we install/remove rules sufficiently fast enough we
could issue what we think is an update for an identical rule and
end up releasing the rule right after we created it and sent it to
the dplane. This solves the problem of recving duplicate rules
during interface flapping.

Signed-off-by: Stephen Worley <sworley@nvidia.com>
4 years agozebra: add some debugging for PBR events in zebra
Stephen Worley [Mon, 11 Jan 2021 22:28:39 +0000 (17:28 -0500)]
zebra: add some debugging for PBR events in zebra

Add some debugging for PBR events internal to zebra,
specifically ADD/UPDATE/DELETE of pbr rules.

Signed-off-by: Stephen Worley <sworley@nvidia.com>
4 years agopbrd: nht only handle if updates if IPV*_IFINDEX nh
Stephen Worley [Thu, 7 Jan 2021 20:28:28 +0000 (15:28 -0500)]
pbrd: nht only handle if updates if IPV*_IFINDEX nh

Only handle an interface update in the nexthop tracking code
if the nexthop in question was set with an interface to point
out of. If the nexthop is GW only, the interface update could
be unrelated but have overlapping address space. Let that be
handled elsewhere.

Ex)

```
5.5.5.0/30 dev dummyDoof proto kernel scope link src 5.5.5.1
5.5.5.0/24 dev goofDummy proto kernel scope link src 5.5.5.1
[root@alfred frr-2]# ip ro show table 10000
default via 5.5.5.2 dev dummyDoof proto pbr metric 20
[root@alfred frr-2]# ip link set goofDummy down
[root@alfred frr-2]# ip ro show table 10000
[root@alfred frr-2]# ip link set goofDummy up
[root@alfred frr-2]# ip ro show table 10000

```

Signed-off-by: Stephen Worley <sworley@nvidia.com>
4 years agotopotests: add test for infinite recursion 7958/head
Stephen Worley [Fri, 29 Jan 2021 20:58:34 +0000 (15:58 -0500)]
topotests: add test for infinite recursion

Add a test for the infinite recursion case fixed
with 0c4dbb5f8fe8fb188fa0e0aa8ce04764e893b79b

See that commit for details of the problem. This test uses a simpler
version of the repro found there as the test.

Signed-off-by: Stephen Worley <sworley@nvidia.com>
4 years agozebra: disallow resolution to duplicate nexthops
Stephen Worley [Wed, 27 Jan 2021 21:20:22 +0000 (16:20 -0500)]
zebra: disallow resolution to duplicate nexthops

Disallow the resolution to nexthops that are marked duplicate.
When we are resolving to an ecmp group, it's possible this
group has duplicates.

I found this when I hit a bug where we can have groups resolving
to each other and cause the resolved->next->next pointer to increase
exponentially. Sufficiently large ecmp and zebra will grind to a hault.

Like so:

```
D>  4.4.4.14/32 [150/0] via 1.1.1.1 (recursive), weight 1, 00:00:02
  *                       via 1.1.1.1, dummy1 onlink, weight 1, 00:00:02
                        via 4.4.4.1 (recursive), weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                        via 4.4.4.2 (recursive), weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                        via 4.4.4.3 (recursive), weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                        via 4.4.4.4 (recursive), weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                        via 4.4.4.5 (recursive), weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                        via 4.4.4.6 (recursive), weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                        via 4.4.4.7 (recursive), weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                        via 4.4.4.8 (recursive), weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                        via 4.4.4.9 (recursive), weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                        via 4.4.4.10 (recursive), weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                        via 4.4.4.11 (recursive), weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                        via 4.4.4.12 (recursive), weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                        via 4.4.4.13 (recursive), weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                        via 4.4.4.15 (recursive), weight 1, 00:00:02
                          via 1.1.1.1, dummy1 onlink, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1 onlink, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                        via 4.4.4.16 (recursive), weight 1, 00:00:02
                          via 1.1.1.1, dummy1 onlink, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
                          via 1.1.1.1, dummy1, weight 1, 00:00:02
D>  4.4.4.15/32 [150/0] via 1.1.1.1 (recursive), weight 1, 00:00:09
  *                       via 1.1.1.1, dummy1 onlink, weight 1, 00:00:09
                        via 4.4.4.1 (recursive), weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                        via 4.4.4.2 (recursive), weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                        via 4.4.4.3 (recursive), weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                        via 4.4.4.4 (recursive), weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                        via 4.4.4.5 (recursive), weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                        via 4.4.4.6 (recursive), weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                        via 4.4.4.7 (recursive), weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                        via 4.4.4.8 (recursive), weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                        via 4.4.4.9 (recursive), weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                        via 4.4.4.10 (recursive), weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                        via 4.4.4.11 (recursive), weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                        via 4.4.4.12 (recursive), weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                        via 4.4.4.13 (recursive), weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                        via 4.4.4.14 (recursive), weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                        via 4.4.4.16 (recursive), weight 1, 00:00:09
                          via 1.1.1.1, dummy1 onlink, weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
                          via 1.1.1.1, dummy1, weight 1, 00:00:09
D>  4.4.4.16/32 [150/0] via 1.1.1.1 (recursive), weight 1, 00:00:19
  *                       via 1.1.1.1, dummy1 onlink, weight 1, 00:00:19
                        via 4.4.4.1 (recursive), weight 1, 00:00:19
                          via 1.1.1.1, dummy1, weight 1, 00:00:19
                        via 4.4.4.2 (recursive), weight 1, 00:00:19

...............
................

and on...

```

You can repro the above via:

```
kernel routes:

1.1.1.1 dev dummy1 scope link

4.4.4.0/24 via 1.1.1.1 dev dummy1

==============================

config:

nexthop-group doof
 nexthop 1.1.1.1
 nexthop 4.4.4.1
 nexthop 4.4.4.10
 nexthop 4.4.4.11
 nexthop 4.4.4.12
 nexthop 4.4.4.13
 nexthop 4.4.4.14
 nexthop 4.4.4.15
 nexthop 4.4.4.16
 nexthop 4.4.4.2
 nexthop 4.4.4.3
 nexthop 4.4.4.4
 nexthop 4.4.4.5
 nexthop 4.4.4.6
 nexthop 4.4.4.7
 nexthop 4.4.4.8
 nexthop 4.4.4.9
!

===========================

Then use sharpd to install 4.4.4.16 -> 4.4.4.1 pointing to that nexthop
group in decending order.
```

With these changes it prevents the growing ecmp above by disallowing
duplicates to be in the resolution decision. These nexthops are not
installed anyways so why should we be resolving to them?

Signed-off-by: Stephen Worley <sworley@nvidia.com>
4 years agolib/printf: disable `%n` specifier 7994/head
David Lamparter [Mon, 1 Feb 2021 16:50:01 +0000 (17:50 +0100)]
lib/printf: disable `%n` specifier

We don't use `%n` anywhere, so the only purpose it serves is enabling
exploits.

(I thought about this initially when adding printfrr, but I wasn't sure
we don't use `%n` anywhere, and thought I'll check later, and then just
forgot it...)

Signed-off-by: David Lamparter <equinox@diac24.net>
4 years agoMerge pull request #7972 from donaldsharp/getrusage_data
Mark Stapp [Mon, 1 Feb 2021 17:18:18 +0000 (12:18 -0500)]
Merge pull request #7972 from donaldsharp/getrusage_data

lib: Line up `show thread cpu` output appropriately

4 years agoMerge pull request #7948 from Jafaral/strongswan
Donald Sharp [Mon, 1 Feb 2021 17:02:30 +0000 (12:02 -0500)]
Merge pull request #7948 from Jafaral/strongswan

doc: update the links to nhrp/strongswan patches

4 years agotools/checkpatch: downgrade string concat warning 6766/head
David Lamparter [Mon, 1 Feb 2021 16:33:03 +0000 (17:33 +0100)]
tools/checkpatch: downgrade string concat warning

This is the best I can make the asm blocks in lib/xref.h look, so just
mute the warning.  (It shouldn't come in relevant for other code.)

Signed-off-by: David Lamparter <equinox@diac24.net>
4 years agotests: add unit test for xrefs
David Lamparter [Sat, 18 Jul 2020 09:39:31 +0000 (11:39 +0200)]
tests: add unit test for xrefs

Signed-off-by: David Lamparter <equinox@diac24.net>
4 years agodoc/developer: xrefs
David Lamparter [Sat, 18 Jul 2020 09:12:52 +0000 (11:12 +0200)]
doc/developer: xrefs

Signed-off-by: David Lamparter <equinox@diac24.net>
4 years agolib/xref: add xrefs for install_element()
David Lamparter [Tue, 21 Jul 2020 06:28:04 +0000 (08:28 +0200)]
lib/xref: add xrefs for install_element()

Combined with the DEFUN xrefs, this means we can extract the full CLI
tree from a binary file.

Signed-off-by: David Lamparter <equinox@diac24.net>
4 years agolib/xref: add xrefs for DEFUNs
David Lamparter [Tue, 28 Apr 2020 13:19:24 +0000 (15:19 +0200)]
lib/xref: add xrefs for DEFUNs

This allows grabbing a list of all DEFUNs and their help texts through
the xref extraction mechanics.

Signed-off-by: David Lamparter <equinox@diac24.net>
4 years agolib/xref: add xrefs on zlog_* calls
David Lamparter [Tue, 28 Apr 2020 07:30:59 +0000 (09:30 +0200)]
lib/xref: add xrefs on zlog_* calls

This allows extracting a list of all log messages including their ECs
and autogenerated unique IDs for them.

Signed-off-by: David Lamparter <equinox@diac24.net>
4 years agolib/xref: use to transport thread_* file/line/func
David Lamparter [Tue, 28 Apr 2020 07:30:50 +0000 (09:30 +0200)]
lib/xref: use to transport thread_* file/line/func

Just a better way of doing what was previously the "debugargdef" macro.

Signed-off-by: David Lamparter <equinox@diac24.net>
4 years agolib/xref: put setup calls in libraries
David Lamparter [Thu, 30 Apr 2020 19:33:11 +0000 (21:33 +0200)]
lib/xref: put setup calls in libraries

Our "true" libraries (i.e. not modules) don't invoke neither
FRR_DAEMON_INFO nor FRR_MODULE_SETUP, hence XREF_SETUP isn't invoked
either.  Invoke it directly to get things working.

Signed-off-by: David Lamparter <equinox@diac24.net>
4 years agolib: "xref" identifier infrastructure
David Lamparter [Thu, 9 Aug 2018 20:50:19 +0000 (22:50 +0200)]
lib: "xref" identifier infrastructure

This adds the machinery for cross reference points (hence "xref") for
things to be annotated with source code location or other metadata
and/or to be uniquely identified and found at runtime or by dissecting
executable files.

The extraction tool to walk down an ELF file is done and working but
needs some more cleanup and will be added in a separate commit.

Signed-off-by: David Lamparter <equinox@diac24.net>
4 years agolib: move frr_weak_random to header file
David Lamparter [Fri, 1 May 2020 08:59:53 +0000 (10:59 +0200)]
lib: move frr_weak_random to header file

Makes more sense to have this as a static inline.  Also I don't want to
be forced to link network.o into clippy ;)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
4 years agobgpd: Centralize the dest unlocking for adj_out data structure 7992/head
Donald Sharp [Mon, 1 Feb 2021 15:14:38 +0000 (10:14 -0500)]
bgpd: Centralize the dest unlocking for adj_out data structure

When FRR creates a adj_out data structure we lock the `struct
bgp_dest` node associated with it.  On freeing of this data
structure and removing the lock it was not associated with
the actual free of the adjacency structure.  Let's clean up
the lock/unlock to be centralized to the alloc/free of the adj_out.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
4 years agoMerge pull request #7965 from opensourcerouting/netns-doc
Donald Sharp [Mon, 1 Feb 2021 14:01:25 +0000 (09:01 -0500)]
Merge pull request #7965 from opensourcerouting/netns-doc

doc: add information about network namespaces

4 years agolib: Line up `show thread cpu` output appropriately 7972/head
Donald Sharp [Thu, 28 Jan 2021 16:25:51 +0000 (11:25 -0500)]
lib: Line up `show thread cpu` output appropriately

The output from `show thread cpu` was not lined up appropriately
for the header line.  As well as the function name we were
calling in the output.  Fix it.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
4 years agozebra: Prevent sending of unininted data 7991/head
Donald Sharp [Sun, 31 Jan 2021 13:56:00 +0000 (08:56 -0500)]
zebra: Prevent sending of unininted data

valgrind is reporting:
2448137-==2448137== Thread 5 zebra_apic:
2448137-==2448137== Syscall param writev(vector[...]) points to uninitialised byte(s)
2448137:==2448137==    at 0x4D6FDDD: __writev (writev.c:26)
2448137-==2448137==    by 0x4D6FDDD: writev (writev.c:24)
2448137-==2448137==    by 0x48A35F5: buffer_flush_available (buffer.c:431)
2448137-==2448137==    by 0x48A3504: buffer_flush_all (buffer.c:237)
2448137-==2448137==    by 0x495948: zserv_write (zserv.c:263)
2448137-==2448137==    by 0x4904B7E: thread_call (thread.c:1681)
2448137-==2448137==    by 0x48BD3E5: fpt_run (frr_pthread.c:308)
2448137-==2448137==    by 0x4C61EA6: start_thread (pthread_create.c:477)
2448137-==2448137==    by 0x4D78DEE: clone (clone.S:95)
2448137-==2448137==  Address 0x720c3ce is 62 bytes inside a block of size 4,120 alloc'd
2448137:==2448137==    at 0x483877F: malloc (vg_replace_malloc.c:307)
2448137-==2448137==    by 0x48D2977: qmalloc (memory.c:110)
2448137-==2448137==    by 0x48A30E3: buffer_add (buffer.c:135)
2448137-==2448137==    by 0x48A30E3: buffer_put (buffer.c:161)
2448137-==2448137==    by 0x49591B: zserv_write (zserv.c:256)
2448137-==2448137==    by 0x4904B7E: thread_call (thread.c:1681)
2448137-==2448137==    by 0x48BD3E5: fpt_run (frr_pthread.c:308)
2448137-==2448137==    by 0x4C61EA6: start_thread (pthread_create.c:477)
2448137-==2448137==    by 0x4D78DEE: clone (clone.S:95)
2448137-==2448137==  Uninitialised value was created by a stack allocation
2448137:==2448137==    at 0x43E490: zserv_encode_vrf (zapi_msg.c:103)

Effectively we are sending `struct vrf_data` without ensuring
data has been properly initialized.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
4 years agoospf6d: prevent use after free
Donald Sharp [Sun, 31 Jan 2021 13:52:44 +0000 (08:52 -0500)]
ospf6d: prevent use after free

Valgrind reports:

2437395-==2437395== Invalid read of size 8
2437395:==2437395==    at 0x40B610: ospf6_asbr_update_route_ecmp_path (ospf6_asbr.c:327)
2437395-==2437395==    by 0x40BC7C: ospf6_asbr_lsa_add (ospf6_asbr.c:544)
2437395-==2437395==    by 0x40C5DF: ospf6_asbr_lsentry_add (ospf6_asbr.c:829)
2437395-==2437395==    by 0x42D88D: ospf6_top_brouter_hook_add (ospf6_top.c:185)
2437395-==2437395==    by 0x4188E3: ospf6_intra_brouter_calculation (ospf6_intra.c:2320)
2437395-==2437395==    by 0x42C624: ospf6_spf_calculation_thread (ospf6_spf.c:638)
2437395-==2437395==    by 0x4904B7E: thread_call (thread.c:1681)
2437395-==2437395==    by 0x48CAA27: frr_run (libfrr.c:1126)
2437395-==2437395==    by 0x40AF43: main (ospf6_main.c:232)
2437395-==2437395==  Address 0x5c668a8 is 24 bytes inside a block of size 256 free'd
2437395:==2437395==    at 0x48399AB: free (vg_replace_malloc.c:538)
2437395-==2437395==    by 0x429027: ospf6_route_delete (ospf6_route.c:419)
2437395-==2437395==    by 0x429027: ospf6_route_unlock (ospf6_route.c:460)
2437395-==2437395==    by 0x429027: ospf6_route_remove (ospf6_route.c:887)
2437395-==2437395==    by 0x40B343: ospf6_asbr_update_route_ecmp_path (ospf6_asbr.c:318)
2437395-==2437395==    by 0x40BC7C: ospf6_asbr_lsa_add (ospf6_asbr.c:544)
2437395-==2437395==    by 0x40C5DF: ospf6_asbr_lsentry_add (ospf6_asbr.c:829)
2437395-==2437395==    by 0x42D88D: ospf6_top_brouter_hook_add (ospf6_top.c:185)
2437395-==2437395==    by 0x4188E3: ospf6_intra_brouter_calculation (ospf6_intra.c:2320)
2437395-==2437395==    by 0x42C624: ospf6_spf_calculation_thread (ospf6_spf.c:638)
2437395-==2437395==    by 0x4904B7E: thread_call (thread.c:1681)
2437395-==2437395==    by 0x48CAA27: frr_run (libfrr.c:1126)
2437395-==2437395==    by 0x40AF43: main (ospf6_main.c:232)
2437395-==2437395==  Block was alloc'd at
2437395:==2437395==    at 0x483AB65: calloc (vg_replace_malloc.c:760)
2437395-==2437395==    by 0x48D2A32: qcalloc (memory.c:115)
2437395-==2437395==    by 0x427CE4: ospf6_route_create (ospf6_route.c:402)
2437395-==2437395==    by 0x40BA8A: ospf6_asbr_lsa_add (ospf6_asbr.c:490)
2437395-==2437395==    by 0x40C5DF: ospf6_asbr_lsentry_add (ospf6_asbr.c:829)
2437395-==2437395==    by 0x42D88D: ospf6_top_brouter_hook_add (ospf6_top.c:185)
2437395-==2437395==    by 0x4188E3: ospf6_intra_brouter_calculation (ospf6_intra.c:2320)
2437395-==2437395==    by 0x42C624: ospf6_spf_calculation_thread (ospf6_spf.c:638)
2437395-==2437395==    by 0x4904B7E: thread_call (thread.c:1681)
2437395-==2437395==    by 0x48CAA27: frr_run (libfrr.c:1126)
2437395-==2437395==    by 0x40AF43: main (ospf6_main.c:232)

ospfv3 loops through the ecmp routes to decide what to clean up.  In some
situations the code free's up an existing route at the head of the list.
Cleaning the pointers in the list but never touching the original pointer.
In that case notice and update the old pointer.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
4 years agoMerge pull request #7988 from ton31337/fix/initialize_raw_data
Donald Sharp [Mon, 1 Feb 2021 12:42:21 +0000 (07:42 -0500)]
Merge pull request #7988 from ton31337/fix/initialize_raw_data

bgpd: Initialize bgp_notify.raw_data before passing to bgp_notify_rec…

4 years agoospf6d: add CLI to control maximum paths for routes. 7961/head
Mobashshera Rasool [Thu, 28 Jan 2021 08:50:39 +0000 (08:50 +0000)]
ospf6d: add CLI to control maximum paths for routes.

CLI added:
maximum-paths (1-64)

Issue: #7961

Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
4 years agoMerge pull request #7969 from donaldsharp/more_flags
Donatas Abraitis [Mon, 1 Feb 2021 07:12:09 +0000 (09:12 +0200)]
Merge pull request #7969 from donaldsharp/more_flags

More flags

4 years agobgpd: Initialize bgp_notify.raw_data before passing to bgp_notify_receive() 7988/head
Donatas Abraitis [Sun, 31 Jan 2021 14:20:36 +0000 (16:20 +0200)]
bgpd: Initialize bgp_notify.raw_data before passing to bgp_notify_receive()

```
2523558-==2523558==
2523558-==2523558== Conditional jump or move depends on uninitialised value(s)
2523558:==2523558==    at 0x47F242: bgp_notify_admin_message (bgp_debug.c:505)
2523558-==2523558==    by 0x47F242: bgp_notify_print (bgp_debug.c:534)
2523558-==2523558==    by 0x4BA9BC: bgp_notify_receive (bgp_packet.c:1905)
2523558-==2523558==    by 0x4BA9BC: bgp_process_packet (bgp_packet.c:2602)
2523558-==2523558==    by 0x4904B7E: thread_call (thread.c:1681)
2523558-==2523558==    by 0x48CAA27: frr_run (libfrr.c:1126)
2523558-==2523558==    by 0x474B1A: main (bgp_main.c:540)
2523558-==2523558==  Uninitialised value was created by a stack allocation
2523558:==2523558==    at 0x4BA33D: bgp_process_packet (bgp_packet.c:2529)
```

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
4 years agoeigrpd: Correctly set the mtu for eigrp packets sent 7987/head
Donald Sharp [Sun, 31 Jan 2021 13:32:15 +0000 (08:32 -0500)]
eigrpd: Correctly set the mtu for eigrp packets sent

This version of eigrp pre-calculated the eigrp metric
to be a default of 1500 bytes, but unfortunately it
had entered the byte order wrong.

Modify the code to properly set the byte order
according to the eigrp rfc as well as actually
read in and transmit the mtu of the interface
instead of hard coding it to 1500 bytes.

Fixes: #7986
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
4 years agoMerge pull request #7984 from donaldsharp/hidden_command
Donatas Abraitis [Sun, 31 Jan 2021 09:05:35 +0000 (11:05 +0200)]
Merge pull request #7984 from donaldsharp/hidden_command

bgpd: Remove hidden `neighbor X route-map Y <in|out>` command

4 years agolib: Prevent unininted usage of data 7985/head
Donald Sharp [Sat, 30 Jan 2021 21:19:08 +0000 (16:19 -0500)]
lib: Prevent unininted usage of data

Valgrind reports that some data being used in the
stack unwind of a crash is being used uninitailized.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
4 years agobfdd: Prevent storage of ifp pointer that has been deleted
Donald Sharp [Sat, 30 Jan 2021 20:41:35 +0000 (15:41 -0500)]
bfdd: Prevent storage of ifp pointer that has been deleted

On shutdown, interfaces are deleted but if the bfd session
is down we retain the interface pointer.  Remove the retained
pointer.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
4 years agoMerge pull request #7970 from volta-networks/fix_snmp_topotest_test_oid_walk
Donatas Abraitis [Sat, 30 Jan 2021 20:24:11 +0000 (22:24 +0200)]
Merge pull request #7970 from volta-networks/fix_snmp_topotest_test_oid_walk

tests: update snmp topotest api test_oid_walk

4 years agobfdd: Prevent unininited data transmittal
Donald Sharp [Sat, 30 Jan 2021 19:31:47 +0000 (14:31 -0500)]
bfdd: Prevent unininited data transmittal

Valgrind reports:

2052866-==2052866==
2052866-==2052866== Syscall param sendmsg(msg.msg_name) points to uninitialised byte(s)
2052866:==2052866==    at 0x49C8E13: sendmsg (sendmsg.c:28)
2052866-==2052866==    by 0x11DC08: bp_udp_send (bfd_packet.c:823)
2052866-==2052866==    by 0x11DD76: ptm_bfd_echo_snd (bfd_packet.c:179)
2052866-==2052866==    by 0x114C2D: ptm_bfd_echo_xmt_TO (bfd.c:469)
2052866-==2052866==    by 0x114C2D: ptm_bfd_echo_start (bfd.c:498)
2052866-==2052866==    by 0x114C2D: bs_echo_timer_handler (bfd.c:1199)
2052866-==2052866==    by 0x11E478: bfd_recv_cb (bfd_packet.c:702)
2052866-==2052866==    by 0x4904846: thread_call (thread.c:1681)
2052866-==2052866==    by 0x48CB4DF: frr_run (libfrr.c:1126)
2052866-==2052866==    by 0x113044: main (bfdd.c:403)
2052866-==2052866==  Address 0x1ffefff3e8 is on thread 1's stack

In ptm_bfd_echo_snd, for the v4 case we were memsetting the v6 memory
then setting the v4 memory.  Just fix it.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
4 years agoisisd: Prevent sending of uninited data to zebra
Donald Sharp [Sat, 30 Jan 2021 19:15:54 +0000 (14:15 -0500)]
isisd: Prevent sending of uninited data to zebra

Valgrind reports:
2172861-==2172861==
2172861-==2172861== Syscall param write(buf) points to uninitialised byte(s)
2172861:==2172861==    at 0x49B4FB3: write (write.c:26)
2172861-==2172861==    by 0x48A4EA0: buffer_write (buffer.c:475)
2172861-==2172861==    by 0x4915AD9: zclient_send_message (zclient.c:298)
2172861-==2172861==    by 0x12AE08: isis_ldp_sync_state_req_msg (isis_ldp_sync.c:152)
2172861-==2172861==    by 0x12B74B: isis_ldp_sync_adj_state_change (isis_ldp_sync.c:305)
2172861-==2172861==    by 0x16DE04: hook_call_isis_adj_state_change_hook.isra.0 (isis_adjacency.c:141)
2172861-==2172861==    by 0x16EE27: isis_adj_state_change (isis_adjacency.c:371)
2172861-==2172861==    by 0x16F1F3: isis_adj_process_threeway (isis_adjacency.c:242)
2172861-==2172861==    by 0x13BCCA: process_p2p_hello (isis_pdu.c:283)
2172861-==2172861==    by 0x13BCCA: process_hello (isis_pdu.c:781)
2172861-==2172861==    by 0x13BCCA: isis_handle_pdu (isis_pdu.c:1700)

Sending of request includes uninited memory at the end of the interface
name string.  Fix

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
4 years agoospfd: Prevent sending of uninited data to zebra
Donald Sharp [Sat, 30 Jan 2021 19:13:34 +0000 (14:13 -0500)]
ospfd: Prevent sending of uninited data to zebra

Valgrind reports:
2174600-==2174600==
2174600-==2174600== Syscall param write(buf) points to uninitialised byte(s)
2174600:==2174600==    at 0x49C7FB3: write (write.c:26)
2174600-==2174600==    by 0x48A4EA0: buffer_write (buffer.c:475)
2174600-==2174600==    by 0x4915AD9: zclient_send_message (zclient.c:298)
2174600-==2174600==    by 0x12DB97: ospf_ldp_sync_state_req_msg (ospf_ldp_sync.c:114)
2174600-==2174600==    by 0x12E4F0: ospf_ldp_sync_if_start (ospf_ldp_sync.c:160)
2174600-==2174600==    by 0x12E4F0: ospf_ldp_sync_ism_change (ospf_ldp_sync.c:339)
2174600-==2174600==    by 0x12E4F0: ospf_ldp_sync_ism_change (ospf_ldp_sync.c:332)
2174600-==2174600==    by 0x12C6A2: hook_call_ospf_ism_change (ospf_ism.c:46)
2174600-==2174600==    by 0x12C6A2: ism_change_state (ospf_ism.c:540)
2174600-==2174600==    by 0x12C6A2: ospf_ism_event (ospf_ism.c:600)
2174600-==2174600==    by 0x4904846: thread_call (thread.c:1681)

When we send the request structure we are sending the whole thing and the
interface name string has junk at the end.  Not a big deal, but cleans
up valgrind going wumple on us.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>