summaryrefslogtreecommitdiffstats
path: root/src/vnet/ip/lookup.h
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2018-06-01 12:22:23 -0700
committerDave Barach <openvpp@barachs.net>2018-06-04 11:09:25 +0000
commit3a0325f9cab7838c21b19698b89cfc65e3236085 (patch)
treeb5addaa466251d1cd771c9772b1810f69e048dd9 /src/vnet/ip/lookup.h
parent61f7912466098773f789bd3ce57431e5dcff8978 (diff)
ip: save fib index for buffer in ip lookup
Avoids recomputing the fib index in ip local for locally delivered packets and should incur no extra cost when forwarding packets. Change-Id: Id826ffa8206392087327f154337eabc8a801b4d7 Signed-off-by: Florin Coras <fcoras@cisco.com>
Diffstat (limited to 'src/vnet/ip/lookup.h')
-rw-r--r--src/vnet/ip/lookup.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/vnet/ip/lookup.h b/src/vnet/ip/lookup.h
index a89546f5d92..ecabd817a00 100644
--- a/src/vnet/ip/lookup.h
+++ b/src/vnet/ip/lookup.h
@@ -211,6 +211,18 @@ do { \
} while (0)
/* *INDENT-ON* */
+always_inline void
+ip_lookup_set_buffer_fib_index (u32 * fib_index_by_sw_if_index,
+ vlib_buffer_t * b)
+{
+ vnet_buffer (b)->ip.fib_index =
+ vec_elt (fib_index_by_sw_if_index, vnet_buffer (b)->sw_if_index[VLIB_RX]);
+ vnet_buffer (b)->ip.fib_index =
+ (vnet_buffer (b)->sw_if_index[VLIB_TX] ==
+ (u32) ~ 0) ? vnet_buffer (b)->ip.
+ fib_index : vnet_buffer (b)->sw_if_index[VLIB_TX];
+}
+
typedef struct _vnet_ip_container_proxy_args
{
fib_prefix_t prefix;