diff options
author | Nathan Skrzypczak <nathan.skrzypczak@gmail.com> | 2021-09-09 18:31:36 +0200 |
---|---|---|
committer | Neale Ranns <neale@graphiant.com> | 2021-10-21 16:39:37 +0000 |
commit | bfa86084af0e4d0cc8ad8ccbeafe999b748a990e (patch) | |
tree | 2b2f072cd1b46dde857188c8f9cd11600d2c8409 /src/vnet/buffer.h | |
parent | 1b6fb40bad69a6582e2a9a7ff8d3bcb65ddfe8ad (diff) |
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 <nathan.skrzypczak@gmail.com>
Diffstat (limited to 'src/vnet/buffer.h')
-rw-r--r-- | src/vnet/buffer.h | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/vnet/buffer.h b/src/vnet/buffer.h index cbaf4d84e42..2b3152fbcd6 100644 --- a/src/vnet/buffer.h +++ b/src/vnet/buffer.h @@ -190,8 +190,17 @@ typedef struct /* Rewrite length */ u8 save_rewrite_length; - /* MFIB RPF ID */ - u32 rpf_id; + union + { + /* sw_if_index of the local interface the buffer was received on + * - if hitting a DPO_RECEIVE - it is set in ip[46]-receive. + * This is ~0 if the dpo is not a receive dpo, or if the + * interface is not specified (e.g. route add via local) */ + u32 rx_sw_if_index; + + /* MFIB RPF ID */ + u32 rpf_id; + }; }; /* ICMP */ |