From bfa86084af0e4d0cc8ad8ccbeafe999b748a990e Mon Sep 17 00:00:00 2001 From: Nathan Skrzypczak Date: Thu, 9 Sep 2021 18:31:36 +0200 Subject: ip: Add ip46-local node for local swif[rx] Type: improvement This adds a new ip[46]-receive node, sibling of ip[46]-local. Its goal is to set vnet_buffer (b)->ip.rx_sw_if_index to the sw_if_index of the local interface. In dependant nodes further down the line (e.g. hoststack) we then set sw_if_idx[rx] to this value. So that we know which local interface did receive the packet. The TCP issue this fixes is that : On accepts, we were setting tc->sw_if_index to the source sw_if_index. We should use the dest sw_if_index, so that packets coming back on this connection have the right source sw_if_index. And also setting it in the tx-ed packet. Change-Id: I569ed673e15c21e71f365c3ad45439b05bd14a9f Signed-off-by: Nathan Skrzypczak --- src/vnet/tcp/tcp_inlines.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/vnet/tcp') diff --git a/src/vnet/tcp/tcp_inlines.h b/src/vnet/tcp/tcp_inlines.h index dfdf801d0ab..e82f308d9b8 100644 --- a/src/vnet/tcp/tcp_inlines.h +++ b/src/vnet/tcp/tcp_inlines.h @@ -237,6 +237,13 @@ tcp_input_lookup_buffer (vlib_buffer_t * b, u8 thread_index, u32 * error, tcp_header_t *tcp; u8 result = 0; + /* Set the sw_if_index[VLIB_RX] to the interface we received + * the connection on (the local interface) */ + vnet_buffer (b)->sw_if_index[VLIB_RX] = + vnet_buffer (b)->ip.rx_sw_if_index != ~0 ? + vnet_buffer (b)->ip.rx_sw_if_index : + vnet_buffer (b)->sw_if_index[VLIB_RX]; + if (is_ip4) { ip4_header_t *ip4 = vlib_buffer_get_current (b); -- cgit 1.2.3-korg