Commit Graph

33238 Commits

Author SHA1 Message Date
Carmine Scarpitta
71b8756f80 isisd: Add unpack func for SRv6 End SID Sub-TLV
Add a function to unpack an SRv6 End SID Sub-TLV
(RFC 9352 section FRRouting#7.2).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 22:11:22 +02:00
Donald Sharp
53a9571535 bgpd: Ensure that leak_update does not free memory before it is being used
The unlock may cause the bgp_process to use dest.  Ensure that this
does not happen.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
ecb8460482 bgpd: bgp_afi_node_get teach coverity about unlocking
The pdest pointer is locked by the bgp_node_get so
unlocking it should be fine and it should still exist.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
1195c44f4b bgpd: In bgp_clear_route_table ensure dest is still usable.
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
c955a3cbec bgpd: bgp_best_selection ensure dest still exists
When reaping the dest ensure that it still exists as that
it should be locked by the calling function.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
dc01a8ba03 bgpd: Ensure bgp_aggregate_unset does dest good
dest could be freed by the first unlock, but should
not be due to our locking structure.  Ensure coverity
understands this.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
842c5259b6 bgpd: Ensure bgp_redistribute_withdraw dest is usable still
Same story dest is locked during table walk.  ensure coverity
understands this.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
3abbc2340a bgpd: Ensure debug is printed before possible dest freed in install_evpn_route_entry_in_vrf
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
8c9e7835ae bgpd: bgp_static_set ensure dest is still usable.
Again coverity thinks dest may be freed on the first
call but it should not be.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
fce5742122 bgpd: bgp_cleanup_table ensure dest is still usable.
Make coverity happy

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
5486383c85 bgpd: bgp_static_delete ensure rm and dest exist
Ensure that the rm and dest exist since the code
has them locked to loop over them safely.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
aa3755bf4c bgpd: bgp_reg_for_label_callback ensure dest exist
More dest may be freed so let's ensure it is not.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
6c61eba773 bgpd: bgp_show_route_in_table ensure rm exists
The rm exists because it is locked while we are walking it,
so this should be safe.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
271c00074f bgpd: bgp_distance_unset ensure dest exists
Coverity doesn't understand our locking scheme
make sure it does a bit better.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
70f6103afd bgpd: bgp_process_main_one should ensure dest exists
Unsetting a flag after the dest has been possibly been
freed is not a good thing to do.  Ensure that this
is not possible.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
b7dd15242c bgpd: ensure delete_all_vni_routes does not free dest
dest is locked by the table walk.  ensure that coverity
understands this.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
e6458d36b7 bgpd: bgp_adj_in_unset needs to return the dest pointer
This is incase it has been freed ( it wont due to locking )
and then we need to ensure that we can continue to use
the pointer.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
493075d25b bgpd: bgp_connected_delete needs to ensure dest is still there
Again coverity believes that dest could be freed by a call
into bgp_dest_unlock_node, and it can if the lock count
is wrong.  Let's fix that assumption for coverity

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
ed74c8b555 bgpd: bgp_cleanup_routes ensure dest is not freed
The bgp_cleanup_routes function holds the lock for dest
while walking it.  Ensure that coverity understands this
proposition.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
35f352c457 bgpd: bgp_evpn_es_route_del_all should not free dest until after looping
Again the dest pointer should be still locked by the table walk.  Ensure
that coverity is happy that this is not happening.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
dade8dfdd6 bgpd: bgp_evpn_mh_route_delete should ensure dest is still usable
Again coverity believes that dest may be freed but it should not
be because of how locking is done.  Make coverity happy.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
8d39c8c927 bgpd: delete_vin_type2_route may free dest
The dest pointer may be freed( but should not be
due to locking ).  Let's ensure that this assumption
is true and make coverity happy.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
f491b54079 bgpd: delete_evpn_route ensure that dest is not freed before usage
There exist two spots in this function where the dest could be
freed, but is not due to locking, but coverity thinks it might
so let's make the function happy.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Donald Sharp
b45925ad10 bgpd: evpn_cleanup_local_non_best_route could free dest
But never really does due to locking, but since it can
we need to treat it like it does and ensure that FRR
is not making a mistake, by using memory after it
has been freed.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-11 12:45:59 -04:00
Carmine Scarpitta
b38fed40a1 isisd: Add pack function for SRv6 End SID Sub-TLV
Add a function to pack an SRv6 End SID Sub-TLV
(RFC 9352 section #7.2).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:19 +02:00
Carmine Scarpitta
6605ccf09e isisd: Add free function for SRv6 End SID Sub-TLV
Add a function to free an SRv6 End SID Sub-TLV
(RFC 9352 section #7.2).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:19 +02:00
Carmine Scarpitta
2bacddcaec isisd: Add format func for SRv6 End SID Sub-TLV
Add a function to return information about an SRv6 End SID Sub-TLV
(RFC 9352 section #7.2).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:18 +02:00
Carmine Scarpitta
ee47a75047 isisd: Add copy function for SRv6 End SID Sub-TLV
Add a function to copy an SRv6 End SID Sub-TLV (RFC 9352 section #7.2).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:18 +02:00
Carmine Scarpitta
989138b99e isisd: Add context value for SRv6 End SID Sub-TLV
Add a new TLV context value for the SRv6 End SID Sub-TLV. It will be
needed to support unpacking of the Sub-Sub-TLVs of the SRv6 End SID
Sub-TLV in future commits.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:17 +02:00
Carmine Scarpitta
7f3e793619 isisd: Initialize SRv6 End SID Sub-TLVs list
Initialize the SRv6 End SID Sub-TLVs list in `isis_alloc_subtlvs()`.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:17 +02:00
Carmine Scarpitta
0caeda5a38 isisd: Add SRv6 End SID Sub-TLV data structure
Add a data structure to represent an SRv6 End SID Sub-TLV as per
RFC 9352 section #7.2.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:16 +02:00
Carmine Scarpitta
c40ab5f2a8 isisd: Initialize SRv6 Locator TLVs list
Initialize the SRv6 Locator TLVs list in `isis_alloc_tlvs()`.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:16 +02:00
Carmine Scarpitta
c43043e618 isisd: Decode MTID when unpacking SRv6 Locator TLV
The SRv6 Locator TLV (RFC 9352 section #7.1) starts with the MTID field.
Let's expect the MTID as the first field when we are unpacking an SRv6
Locator TLV.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:15 +02:00
Carmine Scarpitta
cb55a1bb9b isisd: Add MTID when packing SRv6 Locator TLV
The SRv6 Locator TLV (RFC 9352 section #7.1) starts with the MTID field.
Let's put the MTID as the first field when we are packing an SRv6
Locator TLV.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:15 +02:00
Carmine Scarpitta
f5466cc8f6 isisd: Add SRv6 Locator TLV to pack_order struct
Add the SRv6 Locator TLV to the `pack_order` data structure.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:15 +02:00
Carmine Scarpitta
12da71d9f8 isisd: Bind SRv6 Locator TLV ops to IS-IS TLV type
General TLV processing functions (i.e., copy, format, free, pack, and
unpack) perform a lookup of the specific handler for a TLV in the
`tlv_table`, and then call the specific handler to process the TLV.
This commit adds the handlers for the SRv6 Locator TLV (stored in
`tlv_srv6_locator_ops`) to the `tlv_table`.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:14 +02:00
Carmine Scarpitta
ed69638745 isisd: Define TLV ops for SRv6 Locator TLV
Use the ITEM_TLV_OPS macro to define the TLV operations for the SRv6
Locator TLV (RFC 9352 section #7.1).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:14 +02:00
Carmine Scarpitta
0225f908e8 isisd: Add unpack function for SRv6 Locator TLV
Add a function to unpack an SRv6 Locator TLV and all its Sub-TLVs
(RFC 9352 section #7.1).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:13 +02:00
Carmine Scarpitta
b2f0b7d0b0 isisd: Add pack function for SRv6 Locator TLV
Add a function to pack an SRv6 Locator TLV and all its Sub-TLVs
(RFC 9352 section #7.1).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:13 +02:00
Carmine Scarpitta
efb113b9ca isisd: Free SRv6 Locator TLV when freeing TLVs
Extend generic TLVs free function to free SRv6 Locator TLVs (RFC 9352
section #7.1).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:12 +02:00
Carmine Scarpitta
5a81a9bd59 isisd: Add free function for SRv6 Locator TLV
Add a function to free an SRv6 Locator TLV and all its Sub-TLVs
(RFC 9352 section #7.1).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:12 +02:00
Carmine Scarpitta
462a242999 isisd: Add SRv6 Locator TLV to TLVs format func
Extend generic TLVs format function to return information about SRv6
Locator TLVs (RFC 9352 section #7.1).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:11 +02:00
Carmine Scarpitta
a48d6a2049 isisd: Add format function for SRv6 Locator TLV
Add a function to return information about an SRv6 Locator TLV and all
its Sub-TLVs (RFC 9352 section #7.1).

Examples:

r1# show isis database detail
Area 1:
IS-IS Level-1 link-state database:
LSP ID                  PduLen  SeqNumber   Chksum  Holdtime  ATT/P/OL
r1.00-00             *    248   0x00000005  0xda6e     824    0/0/0
[...]
  SRv6 Locator: fc00:0:1::/48 (Metric: 0) standard
    Sub-TLVs:
[...]

r1# show isis database detail json
[...]
              "srv6-locator":{
                "mt-id":0,
                "prefix":"fc00:0:1::/48",
                "metric":0,
                "d-flag":"",
                "algorithm":0,
                "mt-name":"standard",
                "subtlvs":{

                }
              }
[...]

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:11 +02:00
Carmine Scarpitta
24c9374da1 isisd: Copy SRv6 Locator TLV when copying TLVs
Extend generic TLVs copy function to copy SRv6 Locator TLVs (RFC 9352
section #7.1).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:10 +02:00
Carmine Scarpitta
a2bd91e5b8 isisd: Add copy function for SRv6 Locator TLV
Add a function to copy an SRv6 Locator TLV (RFC 9352 section #7.1).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:10 +02:00
Carmine Scarpitta
f915c80606 isisd: Add SRv6 SID Struct Sub-Sub-TLV Codepoint
Add the `IS-IS SRv6 SID Structure Sub-Sub-TLV Codepoint` as defined in the
`IS-IS Sub-Sub-TLVs for SRv6 SID Sub-TLVs` IANA registry. This codepoint
will be used as the Sub-Sub-TLV Type to advertise the SRv6 SID Structure
Sub-Sub-TLV in the SRv6 End SID, SRv6 End.X SID, and SRv6 LAN End.X SID
Sub-TLVs.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:10 +02:00
Carmine Scarpitta
f9b476080f isisd: Add IS-IS SRv6 End SID Sub-TLV Codepoint
Add the `IS-IS SRv6 End SID Sub-TLV Codepoint` as defined in the
`IS-IS Sub-TLVs for TLVs Advertising Prefix Reachability` IANA registry.
This codepoint will be used as the Sub-TLV
Type to advertise the SRv6 End SID Sub-TLV in the SRv6 Locator TLV.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:09 +02:00
Carmine Scarpitta
f1152a9005 isisd: Extend SPF algo to process SRv6 locator
Extend SPF algorithm to process SRv6 locator.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:09 +02:00
Carmine Scarpitta
39cf995a82 isisd: Add SRv6 Cap to Router Cap TLV format func
Extend Router Capabilities TLV format function to return information
about SRv6 Capabilities Sub-TLVs (RFC 9352 section #2).

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:08 +02:00
Carmine Scarpitta
ca787a12a4 isisd: Add context value for SRv6 Locator TLV
Add a new TLV context value for the SRv6 Locator TLV. It will be needed
to support unpacking of the Sub-TLVs of the SRv6 Locator TLV in future
commits.

Signed-off-by: Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
2023-09-11 17:35:08 +02:00