Commit Graph

32667 Commits

Author SHA1 Message Date
Donald Sharp
7cedcf270e
Merge pull request #12889 from LabNConsulting/chopps/fix-nb-context-arg
lib: fix init. use of nb_context to be by value not by reference
2023-02-24 07:37:09 -05:00
Donatas Abraitis
ba995a720b
Merge pull request #12751 from Pdoijode/pdoijode/ospf-vrf-neighbor-detail-1
ospfd: Added missing fields and option to query specific neighbor in VRF
2023-02-24 11:56:28 +02:00
Donatas Abraitis
b44f0900c2
Merge pull request #12885 from donaldsharp/bmp_afi_str
lib, bgpd: bmp was not specifying l2vpn afi
2023-02-24 11:36:12 +02:00
Christian Hopps
b1867d4292
Merge pull request #12884 from donaldsharp/flowspec_overflow
bgpd: Flowspec overflow issue
2023-02-24 02:52:49 -05:00
Christian Hopps
3ef4868715
Merge pull request #12887 from donaldsharp/remove_ospf_unused_function
ospfd: Remove unused function
2023-02-24 02:49:45 -05:00
Philippe Guibert
6a38127745 bgpd: apply clang style changes to bgp_attr
Now that an additional attribute has been added, clang
format has to be applied.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2023-02-24 08:18:18 +01:00
Philippe Guibert
7171949de5 bgpd: attr evpn attributes should be modified before interning attr
As remind, the attr attribute is a structure that contains
the attributes for a given BGP update. In order to avoid too much
memory consumption, the attr structure is stored in a hash table.
As consequence, other BGP updates may reuse the same attr. The
storage in the hash table is done when calling bgp_attr_intern(),
and a key is calculated based on all the attributes values of the
structure.

In BGP EVPN, when modifying the attributes of the attr structure
after having interned it, this means that some BGP updates will
want to use the old reference, whereas a new attr value is used.
Because in BGP EVPN, the modifications are done on a per BGP update
basis, a new attr entry specific to that BGP update should be created.
This is why a local_attr structure is done, modified, then later
interned.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2023-02-24 08:16:36 +01:00
Philippe Guibert
6fafecdc67 rfapi: free useless attr
The attr pointer has been interned during the process of the
function, but has to be uninterned at the end.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2023-02-24 08:16:27 +01:00
Christian Hopps
41ef7327e3 lib: fix init. use of nb_context to be by value not by reference
Pass context argument by value on initialization to be clear that the
value is used/saved but not a pointer to the value. Previously the
northbound code was incorrectly holding a pointer to stack allocated
context structs.

However, the structure definition also had some musings (ifdef'd out
code) and a comment that might be taken to imply that user data could
follow the structure and thus be maintained by the code; it won't; so it
can't; so get rid of the disabled misleading code/text from the
structure definition.

The common use case worked b/c the transaction which cached the pointer
was created and freed inside a single function
call (`nb_condidate_commit`) that executed below the stack allocation.

All other use cases (grpc, confd, sysrepo, and -- coming soon -- mgmtd)
were bugs.

Signed-off-by: Christian Hopps <chopps@labn.net>
2023-02-23 20:59:17 -05:00
Donatas Abraitis
5acfd822be tests: Check if peer->af_flags can be higher than uint32_t
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-02-24 00:24:20 +02:00
Donatas Abraitis
47017b846f bgpd: Renumber peer->af_flags to be without any gaps
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-02-23 23:52:08 +02:00
Donald Sharp
b2a4c02cc9 ospfd: Remove unused function
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-23 16:47:47 -05:00
Donatas Abraitis
d782e3ffa2 bgpd: Convert missing uint32_t to uint64_t for for af_flags/flags
It was hard to catch those unless using higher values than uint32_t, but
already hit, it's time to fix completely.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-02-23 23:02:35 +02:00
Donatas Abraitis
2c722516c3 bgpd: Convert peer_af_flag_check() to bool
Since we increased peer->af_flags from uint32_t to uint64_t,
peer_af_flag_check() was historically returning integer, and not bool
as should be.

The bug was that if we have af_flags higher than uint32_t it will never
returned a right value.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-02-23 22:54:12 +02:00
Donald Sharp
ce8194bcd0
Merge pull request #12876 from opensourcerouting/fix/align_show_bgp_with_confederation
bgpd: Align `show bgp ...` output with the header for wide option
2023-02-23 15:48:06 -05:00
Donald Sharp
0884f1644b lib, bgpd: bmp was not specifying l2vpn afi
The l2vpn afi was not being properly displayed
when a show run was being issued.  Add a
afi2str_lower function and use it.

Fixes: #12867
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-23 14:23:24 -05:00
Donald Sharp
0b999c886e bgpd: Flowspec overflow issue
According to the flowspec RFC 8955 a flowspec nlri is <length, <nlri data>>
Specifying 0 as a length makes BGP get all warm on the inside.  Which
in this case is not a good thing at all.  Prevent warmth, stay cold
on the inside.

Reported-by: Iggy Frankovic <iggyfran@amazon.com>
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-23 13:29:32 -05:00
Donald Sharp
4b0d6b4244
Merge pull request #12879 from opensourcerouting/pim-ssm-no-rp
pimd: don't try to check RPF for incoming SSM data
2023-02-23 10:42:14 -05:00
Donald Sharp
c389069195 bgpd: Another rpki fix
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-23 10:02:59 -05:00
David Lamparter
c86b4ff4ba pimd: don't try to check RPF for incoming SSM data
For incoming no-receiver SSM traffic, there isn't going to be a RP, much
less a RPF.  We should install an MFC entry with empty oif regardless,
so we don't get swamped with further notifications.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2023-02-23 09:51:17 +01:00
David Lamparter
d650b3c79a pimd: try to reinstall MFC when we get NOCACHE
Whether due to a pimd bug, some expiry, or someone just deleting MFC
entries, when we're in NOCACHE we *know* there's no MFC entry.  Add an
install call to make sure pimd's MFC view aligns with the actual kernel
MFC.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2023-02-23 09:42:19 +01:00
Diogo Oliveira
e77a0e27bb tests: Add test for IS-IS advertise-passive-only configuration
Signed-off-by: Diogo Oliveira <14191454+dorDiogo@users.noreply.github.com>
2023-02-22 13:46:53 -08:00
Diogo Oliveira
3f3608d8d7 isisd,doc: Add support for isis advertise-passive-only
Signed-off-by: Diogo Oliveira <14191454+dorDiogo@users.noreply.github.com>
2023-02-22 13:44:48 -08:00
Donatas Abraitis
ee0aaff4bc
Merge pull request #12869 from donaldsharp/cleanup_debug_log
bgpd: Give better debug message when configuration is being read in
2023-02-22 22:30:04 +02:00
Donatas Abraitis
fccd7e53db bgpd: Align show bgp ... output with the header for wide option
Before:

```
r1# sh ip bgp wide
BGP table version is 1, local router ID is 192.168.2.1, vrf id 0
Default local pref 100, local AS 65001
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

   Network                                      Next Hop                                  Metric LocPrf Weight Path
 *  172.16.255.254/32                            192.168.2.2                                    0             0 (65003) i
 *>                                              192.168.1.2                                    0             0 (65002) i

Displayed  1 routes and 2 total paths
r1#
```

After:

```
r1# sh ip bgp wide
BGP table version is 1, local router ID is 192.168.2.1, vrf id 0
Default local pref 100, local AS 65001
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

    Network                                      Next Hop                                  Metric LocPrf Weight Path
 *  172.16.255.254/32                            192.168.2.2                                    0             0 (65003) i
 *>                                              192.168.1.2                                    0             0 (65002) i

Displayed  1 routes and 2 total paths
r1#
```

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-02-22 22:27:18 +02:00
Donatas Abraitis
6357915a68
Merge pull request #12865 from mjstapp/fix_rfapi_timer_wcb
bgpd: free rfapi callback object always
2023-02-22 21:49:42 +02:00
Mark Stapp
8014afb934
Merge pull request #12868 from taspelund/evpn_prefix_guard_debug
lib: add missing debug guards for route-map
2023-02-22 14:01:23 -05:00
Donatas Abraitis
f6bbbeb0b5
Merge pull request #12864 from donaldsharp/fix_warnings
bgpd: Fixup rpki and asn parsing
2023-02-22 19:17:54 +02:00
Donald Sharp
71286b6dcb
Merge pull request #12861 from opensourcerouting/fix/bgp_confederation_with_astype
bgpd: Confederation fixes with remote-as external/internal
2023-02-22 12:17:25 -05:00
Donald Sharp
941778e854
Merge pull request #12863 from sri-mohan1/sri-mohan-ldp
ldpd: changes for code maintainability
2023-02-22 12:14:23 -05:00
Donald Sharp
7c5062fb27 bgpd: Give better debug message when configuration is being read in
Sometimes bgp connections can be rejected for a variety of reasons.  Give
a bit more context about what is going wrong so that the operator can
make better decisions about their network.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-22 11:41:18 -05:00
Trey Aspelund
2336d279e0 lib: add missing debug guards for route-map
Fixes missing debug guards for EVPN prefix conversion for optimized
route-map lookup.

Signed-off-by: Trey Aspelund <taspelund@nvidia.com>
2023-02-22 16:30:24 +00:00
Mark Stapp
870d3d2cb8 bgpd: free rfapi callback object always
An rfapi timer callback is responsible for the memory in a
context object, even in special-case exit paths. Always
free that object.

Signed-off-by: Mark Stapp <mjs@labn.net>
2023-02-22 11:29:22 -05:00
David Lamparter
dbd596f637 pimd: make logs useful for input drops
This path here is pretty far on top of the list of issues that operators
will run into and have to debug when setting up PIM.  Make the log
messages actually tell what's going on.  Also escalate some from
`debug mroute detail` to `debug mroute`.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2023-02-22 16:08:10 +01:00
Donald Sharp
29bb9deb1e bgpd: Fixup rpki and asn parsing
Commit  6ccfd1030b
did not properly handle asn parsing of the new
asn format.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-22 08:56:55 -05:00
sri-mohan1
575f30cea0 ldpd: changes for code maintainability
these changes are for improving the code maintainability and readability

Signed-off-by: sri-mohan1 <sri.mohan@samsung.com>
2023-02-22 15:08:50 +05:30
Donatas Abraitis
caf65e4a27 tests: Check if BGP confederation works with AS_EXTERNAL (!AS_SPECIFIED)
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-02-22 10:08:40 +02:00
Donatas Abraitis
db5a5ee6e4 bgpd: Pass global ASN for confederation peers if not AS_SPECIFIED
When we specify remote-as as external/internal, we need to set local_as to
bgp->as, instead of bgp->confed_id. Before this patch, (bgp->as != *as) is
always valid for such a case because *as is always 0.

Also, append peer->local_as as CONFED_SEQ to avoid other side withdrawing
the routes due to confederation own AS received and/or malformed as-path.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-02-22 00:00:53 +02:00
Donatas Abraitis
5d94142668
Merge pull request #12839 from taspelund/evpn_prefix
lib: skip route-map optimization if !AF_INET(6)
2023-02-21 21:31:33 +02:00
Isabella de Leon
3b0e97e150 isisd: Fix isisd to generate lsps after config processing is complete
Before:
isisd generates its initial lsp before fully processing the written config. Ex: lsp_generate() is called in isis_instance_area_address_create(), before other configs that may affect the lsp are loaded in, like set-overload-bit.

After:
isisd generates its initial lsp as soon as the config is fully processed. This was done by utilizing the initialization config callbacks, similar to bgp's implementation.

Signed-off-by: Isabella de Leon <ideleon@microsoft.com>
2023-02-21 08:49:34 -08:00
Russ White
12906cb1c8
Merge pull request #12798 from donaldsharp/rib_match_multicast
Rib match multicast
2023-02-21 11:40:36 -05:00
Donald Sharp
64269ccae1
Merge pull request #12818 from imzyxwvu/fix/other-table-inactive
zebra: Fix other table inactive when ip import-table is on
2023-02-21 11:37:31 -05:00
Trey Aspelund
366a19fe38 lib: skip route-map optimization if !AF_INET(6)
Currently we unconditionally send a prefix through the optimized
route-map codepath if the v4 and v6 LPM tables have been allocated and
optimization has not been disabled.
However prefixes from address-families that are not IPv4/IPv6 unicast
always fail the optimized route-map index lookup, because they occur on
an LPM tree that is IPv4 or IPv6 specific.
e.g.
Even if you have an empty permit route-map clause, Type-3 EVPN routes
are always denied:
```
--config
route-map soo-foo permit 10

--logs
2023/02/17 19:38:42 BGP: [KZK58-6T4Y6] No best match sequence for pfx: [3]:[0]:[32]:[2.2.2.2] in route-map: soo-foo, result: no match
2023/02/17 19:38:42 BGP: [H5AW4-JFYQC] Route-map: soo-foo, prefix: [3]:[0]:[32]:[2.2.2.2], result: deny
```

There is some existing code that creates an AF_INET/AF_INET6 prefix
using the IP/prefix information from a Type-2/5 EVPN route, which
allowed only these two route-types to successfully attempt an LPM lookup
in the route-map optimization trees via the converted prefix.

This commit does 3 things:
1) Reverts to non-optimized route-map lookup for prefixes that are not
   AF_INET or AF_INET6.
2) Cleans up the route-map code so that the AF check is part of the
   index lookup + the EVPN RT-2/5 -> AF_INET/6 prefix conversion occurs
   outside the index lookup.
3) Adds "debug route-map detail" logs to indicate when we attempt to
   convert an AF_EVPN prefix into an AF_INET/6 prefix + when we fallback
   to a non-optimized lookup.

Additional functionality for optimized lookups of prefixes from other
address-families can be added prior to the index lookup, similar to how
the existing EVPN conversion works today.

New behavior:
```
2023/02/17 21:44:27 BGP: [WYP1M-NE4SY] Converted EVPN prefix [5]:[0]:[32]:[192.0.2.7] into 192.0.2.7/32 for optimized route-map lookup
2023/02/17 21:44:27 BGP: [MT1SJ-WEJQ1] Best match route-map: soo-foo, sequence: 10 for pfx: 192.0.2.7/32, result: match
2023/02/17 21:44:27 BGP: [H5AW4-JFYQC] Route-map: soo-foo, prefix: 192.0.2.7/32, result: permit

2023/02/17 21:44:27 BGP: [WYP1M-NE4SY] Converted EVPN prefix [2]:[0]:[48]:[aa:bb:cc:00:22:22]:[32]:[20.0.0.2] into 20.0.0.2/32 for optimized route-map lookup
2023/02/17 21:44:27 BGP: [MT1SJ-WEJQ1] Best match route-map: soo-foo, sequence: 10 for pfx: 20.0.0.2/32, result: match
2023/02/17 21:44:27 BGP: [H5AW4-JFYQC] Route-map: soo-foo, prefix: 20.0.0.2/32, result: permit

2023/02/17 21:44:27 BGP: [KHG7H-RH4PN] Unable to convert EVPN prefix [3]:[0]:[32]:[2.2.2.2] into IPv4/IPv6 prefix. Falling back to non-optimized route-map lookup
2023/02/17 21:44:27 BGP: [MT1SJ-WEJQ1] Best match route-map: soo-foo, sequence: 10 for pfx: [3]:[0]:[32]:[2.2.2.2], result: match
2023/02/17 21:44:27 BGP: [H5AW4-JFYQC] Route-map: soo-foo, prefix: [3]:[0]:[32]:[2.2.2.2], result: permit
```

Signed-off-by: Trey Aspelund <taspelund@nvidia.com>
2023-02-21 16:36:20 +00:00
Russ White
d86be4994f
Merge pull request #12832 from opensourcerouting/fix/deprecate_bgp_internet_community
bgpd: Deprecate BGP `internet` community
2023-02-21 11:35:26 -05:00
Trey Aspelund
0c5675b7f3 lib: use MAX_BITLEN instead of magic number
Fixes up evpn_prefix2prefix() to use IPV(4|6)_MAX_BITLEN instead of
32/128 directly.

Signed-off-by: Trey Aspelund <taspelund@nvidia.com>
2023-02-21 16:12:28 +00:00
Russ White
eb9f54b872
Merge pull request #12805 from karlquan/kquan_self_orig
bgpd: BGP troubleshooting - Add a keyword self-originate to display o…
2023-02-21 08:38:07 -05:00
Russ White
3bbf66cf77
Merge pull request #12838 from opensourcerouting/feature/backport_timer_on_shutdown
bgpd: Fix bgp no shutdown
2023-02-21 08:28:37 -05:00
Russ White
ba6db59781
Merge pull request #12851 from sri-mohan1/sri-mohan-ldp
ldpd: changes for code maintainability
2023-02-21 08:28:28 -05:00
Russ White
f48c8a92fb
Merge pull request #12854 from opensourcerouting/fix/bgp_withdraw_attr_not_used
bgpd: Drop struct attr from bgp_withdraw()
2023-02-21 08:18:37 -05:00
Russ White
9a4bb5e469
Merge pull request #12795 from pguibert6WIND/vpnv6_nexthop_encoding
Vpnv6 nexthop encoding
2023-02-21 08:15:43 -05:00