fib: set the value of the sw_if_index for DROP route 18/40718/3
authorMohsin Kazmi <[email protected]>
Fri, 19 Apr 2024 09:10:46 +0000 (09:10 +0000)
committerBeno�t Ganne <[email protected]>
Mon, 3 Jun 2024 12:22:10 +0000 (12:22 +0000)
commit5f694322a925200d698db1025e721842e80d4b38
treeccaca75a2ec3df8c7da47d58a7bacb4b4a0163c3
parent05b0307962519bcc61853f3810efddf90cab9217
fib: set the value of the sw_if_index for DROP route

Type: fix

fib_api_path_decode() is utilized by the IP route API call
to translate the path from the API to the fib_route_path_t
structure. The ip_route_add_del_handler_t function initializes
the fib_route_path_t structure to zeros, consequently setting
the sw_if_index value to 0, which is a valid value in VPP.
Typically, the default VRF (Virtual Routing and Forwarding)
has a local interface at index 0, leading to normal functionality.
However, a custom VRF table without any interface will result
in a crash.

The issue arises because the DROP route in fib_api_path_decode()
does not override the sw_if_index value with the one provided
in vl_api_fib_path_t. Subsequently, when this sw_if_index is
attempted to be resolved in the VRF table where the interface
does not exist, it leads to a crash.

This patch addresses the problem by setting the sw_if_index of
fib_route_path_t to the sw_if_index value of the API path.

To reproduce the issue, please remove the fix and run the following command:
make test-debug TEST=test_ip4.TestIPv4RouteLookup.test_exact_match

Change-Id: I5d72e91e5c701e749a92873941bee7b7b5eabd41
Signed-off-by: Mohsin Kazmi <[email protected]>
src/vnet/fib/fib_api.c
test/test_ip4.py