Commit Graph

25024 Commits

Author SHA1 Message Date
Donatas Abraitis
ce40c6279a bgpd: Do not check for NULL values for vni_hash_cmp()
There is no need to test for null values in the hash compare
function as that we are guaranteed to send in data in
the hash compare functions.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-13 08:46:52 +03:00
Donald Sharp
0b04fa0e78 bgpd: XREALLOC handles NULL properly
the realloc man page:

If ptr is NULL, then the call is equivalent to malloc(size)

This should be sufficient for our needs to not have to have
XMALLOC and XREALLOC

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-07-12 19:32:42 -04:00
Igor Ryzhov
93828a9923 ospf6d: fix freebsd mcast group issues
There's a delay in FreeBSD between issuing a command to leave a
multicast group and an actual leave. If we execute "no router ospf6" and
"router ospf6" fast enough, we can end up in a situation when OS
performs the leave later than it performs the join and the interface
remains without a multicast group.

Instead of counting on a one second delay, we must wait until the
interface actually leaves the group.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-07-12 22:56:04 +03:00
Donald Sharp
63245a641a bgpd: hash compare functions never receive null values
There is no need to test for null values in the hash compare
function as that we are guaranteed to send in data in
the hash compare functions.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-07-12 14:23:51 -04:00
Philippe Guibert
3881d05175 bgp_basic_functionality: fix pylint errors
fix pylint errors found.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2021-07-12 13:57:36 +02:00
Philippe Guibert
654a5978f6 bgpd: prevent routes loop through itself
Some BGP updates received by BGP invite local router to
install a route through itself. The system will not do it, and
the route should be considered as not valid at the earliest.

This case is detected on the zebra, and this detection prevents
from trying to install this route to the local system. However,
the nexthop tracking mechanism is called, and acts as if the route
was valid, which is not the case.

By detecting in BGP that use case, we avoid installing the invalid
routes.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2021-07-12 13:57:36 +02:00
Donald Sharp
507559a089
Merge pull request #9027 from ton31337/fix/missing_unlock_bgp_dest
bgpd: Don't forget bgp_dest_unlock_node for bgp_static_set()
2021-07-12 07:27:12 -04:00
Donald Sharp
482467dc6a ospf6d: Correct spelling in debug
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-07-12 07:24:16 -04:00
Philippe Guibert
abe6805421 bgpd: associate correct nexthop when using peer link-local
When setting bgp configuration using peers referencing link local
ipv6 addresses, the bgp should be able to handle incoming bgp
connections, and find out the appropriate interface where the
connection comes from.

ipv6 link local sessions work by using bgp unnumbered interfaces
config, but it does not work if we have a shared media with
multiple potential link local ipv6 addresses on the network.

The fix consists in finding out the appropriate interface, when
the local configuration references a link local ipv6 addresses,
and the source address used references an interface. below
configuration illustrates what can be done then:

neighbor fe80::4113:5bba:2b61:b20c remote-as 55
neighbor fe80::4113:5bba:2b61:b20c update-source eth0

note: this change does not solve the ability for such config to
create an outgoing connection to remote peer (as the link local
ipv6 address config does not indicate which interface to use).

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2021-07-12 09:23:22 +02:00
Donatas Abraitis
70d9b134f6 bgpd: Don't forget bgp_dest_unlock_node for bgp_static_set()
Before returning an error, unlock bgp dest which is locked by
bgp_node_lookup().

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2021-07-11 23:39:53 +03:00
Igor Ryzhov
91b35264c2
Merge pull request #9004 from anlancs/fix-staticd-blackhole 2021-07-10 09:26:58 +03:00
anlan_cs
7ea5c53477 staticd: fix late initialization of blackhole type
If a static route is added to a not-yet-existing VRF, the blackhole type
is not initialized. Initialization must be done before the VRF existence
check.

Signed-off-by: anlan_cs <anlan_cs@tom.com>
2021-07-09 19:42:45 -04:00
Igor Ryzhov
cf420d4b48
Merge pull request #9010 from opensourcerouting/ospf-misc
doc,lib,ospfd,ospf6d: trivial improvements
2021-07-09 19:19:13 +03:00
Igor Ryzhov
d0f980f8bb
Merge pull request #9016 from LabNConsulting/chopps/ospf6d-fix-backlink-chk
ospf6d: fix backlink check
2021-07-09 15:46:43 +03:00
Rafael Zalamena
a0fbad5869 ospf6d: rework default-information configuration
Move code to its own function and remove most of the code indentation
(e.g. test for failure and quit as soon as possible).

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2021-07-09 07:55:25 -03:00
Rafael Zalamena
f799c5093c doc: document OSPFv3 debug commands
Let users know all the available debug commands we have.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2021-07-09 07:55:25 -03:00
Rafael Zalamena
1fe59b44fc lib,ospfd,ospf6d: remove duplicated function
Move `is_default_prefix` variations to `lib/prefix.h` and make the code
use the library version instead of implementing it again.

NOTE
----

The function was split into per family versions to cover all types.
Using `union prefixconstptr` is not possible due to static analyzer
warnings which cause CI to fail.

The specific cases that would cause this failure were:
 - Caller used `struct prefix_ipv4` and called the generic function.
 - `is_default_prefix` with signature using `const struct prefix *` or
   `union prefixconstptr`.

The compiler would complain about reading bytes outside of the memory
bounds even though it did not take into account the `prefix->family`
part.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2021-07-09 07:55:25 -03:00
Rafael Zalamena
f45f6a22b0
Merge pull request #8978 from kssoman/ospf_new
ospf6d : Send LSA update immediately when ospf instance is deleted
2021-07-09 07:46:11 -03:00
Christian Hopps
ff2052eefc ospf6d: fix backlink check
This code has been wrong ~ever (according to git history). There are 3
conditional blocks with the added assertion that both the LSA and the
vertex being checked can't both be network LSAs.

The third block is clearly assuming both LSA and vertex are router
LSAs b/c it is accessing the backlink and lsdesc as router lsdesc's also
making sure both are p2p links (which they would have to be to point at
each other).

The programming error here is that (A && B) == False does NOT imply !A,
but the code is written that way.

So we end up in the third block one of LSA or vertex being network LSAs
rather easily (whenever that is the case and the desc isn't the backlink
being sought).

This was caught by ASAN b/c the lsdesc and backlinks are being accessed
(> 4 byte field offsets) as if they were router lsdesc's in the third
block, when in fact one of them is a network lsdesc which is only 4
bytes long -- so ASAN flags the access beyond bounds.

Signed-off-by: Christian Hopps <chopps@labn.net>
2021-07-09 04:15:34 -04:00
prerana
3f98a750c2 bgpd: Inconsistency in Local BGP GR state.
Problem: Sometimes the configured Local GR state is not reflected in
show command and peer node. This is causing failures in few of the
BGP-GR topotests.

RCA: This problem is seen when the configuration of local GR state
happens when the BGP session is in OpenSent state and  moves to
Established after the configuration is complete.
When the session gets established, we move the GR state value from stub peer
to the config peer. This will result in overriding the GR state to
previous value.

Fix: The local GR state is modified only through CLI configuration and
does not change during BGP FSM transition. In this case it is not necessary
to transfer the GR state value from stub peer to config peer. This way we
can ensure that always the most recent config value is present in peer
datastructure.

Signed-off-by: Prerana-GB <prerana@vmware.com>
2021-07-09 00:20:15 -07:00
Donald Sharp
99ed46d964 doc: Add documentation for match ip-protocol [udp|tcp]
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-07-08 11:12:47 -04:00
Donald Sharp
5e732768f4 pbrd: Add match ip-protocol [tcp|udp]
Add the `match ip-protocol [tcp|udp]` command to allow pbr to
match on tcp or udp streams.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-07-08 11:12:47 -04:00
Donald Sharp
f56697eff3 bgpd, pbrd, zebra: Encode/decode the ip proto from daemons to zebra
Ensure that we properly encode/decode the ip protocol from daemons
to zebra.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-07-08 11:12:47 -04:00
Donald Sharp
b94683f0db lib, zebra: add ip_proto to the filter data structure
Add ip_proto to the filter data structure and also account
for it in the hash when stored.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-07-08 11:12:47 -04:00
Donald Sharp
8ccbc778cf zebra: Add ability for dataplane code to understand rule ip protocols
The zebra dplane needs to be taught about the rule ip_proto that can
be installed.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-07-08 11:12:47 -04:00
Donald Sharp
8096bd72aa zebra: Add ability to encode/decode netlink FRA_IP_PROTO for rule changes
Encode/Decode the FRA_IP_PROTO but do nothing with it at the moment.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-07-08 11:12:47 -04:00
Donald Sharp
94d70a6533 zebra: Add nl_attr_put8 so we can put uint8_t in netlink messages
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-07-08 11:12:46 -04:00
Donald Sharp
b7ece6e7fc doc: Add documentation for src and destination port matching commands
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-07-08 11:12:46 -04:00
Donald Sharp
a7f0e5c3e3 pbrd: Add ability to set/unset src and dest ports
Add `match src-port (1-65535)` and `match dst-port (1-65535)`
commands to allow pbr to pass these values down to zebra.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-07-08 11:12:46 -04:00
Donald Sharp
0d7b939fd0 pbrd: Start inclusion of src and dst ports for pbrd
Start the inclusion of src_prt and dst_prt in
the internal data structures.  At this point
we do not do anything with the data other
than pass down what we have stored in pbrd.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-07-08 11:12:46 -04:00
Soman K.S
7359e9ba71 ospf6d : Send LSA update immediately when ospf instance is deleted
Fix: The fix is to call ospf6_write to send the packet immediately to all neighbors

Signed-off-by: kssoman <somanks@gmail.com>
2021-07-08 19:10:29 +05:30
Martin Winter
3f8fcd2caa
Merge pull request #8997 from donaldsharp/opaque_length
lib: Allow ZAPI_MESSAGE_OPAQUE_LENGTH length of data
2021-07-08 03:35:42 +02:00
Donald Sharp
aaba414937
Merge pull request #8991 from opensourcerouting/sd-coverity-fix
lib: fix coverity unused result warning
2021-07-07 21:18:27 -04:00
Donald Sharp
3b1849be32 lib: Allow ZAPI_MESSAGE_OPAQUE_LENGTH length of data
We are sending up to ZAPI_MESSAGE_OPAQUE_LENGTH but checking
for one less.  We know the data will fit in it to that size.
Also we have asserts on the write to ensure we don't go over
it

Fixes: #8995
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-07-07 16:01:32 -04:00
Igor Ryzhov
5ee7655ee9
Merge pull request #8987 from mobash-rasool/ospfv3-bug-fixes
ospf6d: Fix crash in ospf6_asbr_lsa_remove at ospf6d/ospf6_asbr.c:696
2021-07-07 17:28:14 +03:00
David Lamparter
424117e52c doc/workflow: YANG is a hard requirement
The text didn't reflect the YANG requirement decision yet.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-07-07 15:48:39 +02:00
David Lamparter
f49e0be728 lib: fix coverity unused result warning
There's nothing that can be done here with an error.  Try to make
Coverity understand that this is intentional.

(I don't know if the `(void)` will actually fix the coverity warning,
but I don't really have a better way to figure it out beyond just
getting this merged and waiting for a result...)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-07-07 14:58:14 +02:00
David Lamparter
b6660a6527 doc/workflow: add guidelines for config knobs
This is pretty much common sense ("runtime knobs are easier to adjust
than a compile-time setting"), but maybe it should be said just for
reference.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-07-07 14:57:00 +02:00
github login name
69b2df12bb pimd: zlog_info changed to zlog_notice for neighbor up/down event
Co-authored-by: Sarita Patra <saritap@vmware.com>
Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
2021-07-06 22:51:19 -07:00
github login name
142774530a pimd: make pim interface hold interval range 1-630
Making the interface holdtime range to 3.5 times the hello-time

As per 7761, Section 4.11:
The Holdtime in a Hello message should be set to
   (3.5 * Hello_Period), giving a default value of 105 seconds.

Therefore providing the user also to configure max upto 3.5 times
the hello timer interval.

Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
2021-07-06 22:51:10 -07:00
Donald Sharp
568f6d6c94
Merge pull request #8919 from mobash-rasool/ospfv3-fixes
ospf6d: Max aged LSAs are not getting deleted from DB
2021-07-06 16:13:05 -04:00
Donald Sharp
54ce9feb5a
Merge pull request #8930 from pjdruddy/ospf6_packet_debug
Ospf6 packet debug
2021-07-06 16:09:07 -04:00
Donald Sharp
75e8e36b4d
Merge pull request #8945 from ton31337/fix/check_only_ebgp_peer
bgpd: Parse as withdrawal if AS-PATH contains 0 within the path
2021-07-06 16:06:54 -04:00
Donald Sharp
40eb7a27c1
Merge pull request #8938 from volta-networks/fix_no_path_retries
pathd : Better RFC complain for two cases, no_path answer and srp_id handle
2021-07-06 15:36:46 -04:00
github login name
908f5e616b ospf6d: Fix crash in ospf6_asbr_lsa_remove at ospf6d/ospf6_asbr.c:696
Issue: Crash observed when LSAs are removed from LSDB after max age
when there is no area configured.
(gdb) bt
0  raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
1  0x00007fdb190548bc in core_handler (signo=6, siginfo=0x7ffdd2f5a470, context=<optimized out>) at lib/sigevent.c:262
2  <signal handler called>
3  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
4  0x00007fdb185ad921 in __GI_abort () at abort.c:79
5  0x00007fdb1907f199 in _zlog_assert_failed (xref=xref@entry=0x55f30902aa20 <_xref.21999>, extra=extra@entry=0x0) at lib/zlog.c:581
6  0x000055f308dc4f78 in ospf6_asbr_lsa_remove (lsa=0x55f30a7546d0, asbr_entry=0x0) at ospf6d/ospf6_asbr.c:696
7  0x000055f308dd8f0d in ospf6_lsdb_remove (lsa=0x55f30a7546d0, lsdb=lsdb@entry=0x55f30a73d300) at ospf6d/ospf6_lsdb.c:166
8  0x000055f308dd9701 in ospf6_lsdb_maxage_remover (lsdb=0x55f30a73d300) at ospf6d/ospf6_lsdb.c:376
9  0x000055f308dee724 in ospf6_maxage_remover (thread=<optimized out>) at ospf6d/ospf6_top.c:603
10 0x00007fdb1906520d in thread_call (thread=thread@entry=0x7ffdd2f5ae90) at lib/thread.c:1919
11 0x00007fdb19023e48 in frr_run (master=0x55f30a569b70) at lib/libfrr.c:1155
12 0x000055f308dc09b6 in main (argc=6, argv=0x7ffdd2f5b198, envp=<optimized out>) at ospf6d/ospf6_main.c:235
(gdb)

Steps to reproduce the issue:
1. router ospf6
2. redistribute static
3. ipv6 route 1::1/128 Null0
4. no redistribute static
5. wait for Max aged LSA to flush
6. Check DB, crash occurs.

RCA:
Crash occurred while accessing listgetdata(listhead(ospf6->area_list))
When there is no area attached to any of the interface listhead(ospf6->area_list)
is NULL. Therefore it crashed due to NULL access.

Fix:
Check before accessing null pointer.

Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
2021-07-06 08:32:23 -07:00
Quentin Young
e15106149f
Merge pull request #8508 from opensourcerouting/systemd-no-lib 2021-07-06 14:54:25 +00:00
Donald Sharp
acb4c44ef8
Merge pull request #8942 from ton31337/fix/cleanups_2
Another round of cleanup
2021-07-06 09:47:41 -04:00
Donald Sharp
4afc321825
Merge pull request #8972 from ton31337/fix/bgp_extended_msg_support
bgpd: Extended message support potential fixes
2021-07-06 09:41:45 -04:00
Donald Sharp
af17728126
Merge pull request #8975 from ton31337/fix/show_ip_route_json_prefix_formatting
zebra: Do not escape forward slashes for `show ip route json`
2021-07-06 09:40:19 -04:00
David Lamparter
a2810d3025
pimd: fix PtP address handling
When we have a "192.0.2.1 peer 192.0.2.2/32" address on an interface, we
need to (a) recognize the local address as being on the link for our own
packets, and (b) do the IGMP socket lookup with the proper local address
rather than the peer prefix.

Fixes: efe6f18 ("pimd: fix IGMP receive handling")
Cc: Nathan Bahr <nbahr@atcorp.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2021-07-06 14:24:09 +02:00