diff options
author | qinyang <qiny@yusur.tech> | 2023-06-27 01:11:53 -0700 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2023-07-21 16:27:14 +0000 |
commit | af9b7156c8fd16c671ce9332613faaf864b075b3 (patch) | |
tree | 201f45dacba23771db635c563b34315b6594d4af /src/vnet/session/session.c | |
parent | ae916b39049669bbada12dbcfecbb4e3f9c09c69 (diff) |
vcl: ldp support SO_ORIGINAL_DST
Type: improvement
Support SO_ORIGINAL_DST socket option to get original dst_ip4 and dst_port if nat44 rule enabled.
Change-Id: If00e00d03e48f3b78a23a68f1b078954d79dd0f7
Signed-off-by: qinyang <qiny@yusur.tech>
Diffstat (limited to 'src/vnet/session/session.c')
-rw-r--r-- | src/vnet/session/session.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/vnet/session/session.c b/src/vnet/session/session.c index 5bb57761c90..228234ceefc 100644 --- a/src/vnet/session/session.c +++ b/src/vnet/session/session.c @@ -17,6 +17,7 @@ * @brief Session and session manager */ +#include <vnet/plugin/plugin.h> #include <vnet/session/session.h> #include <vnet/session/application.h> #include <vnet/dpo/load_balance.h> @@ -1762,6 +1763,22 @@ session_segment_handle (session_t * s) f->segment_index); } +void +session_get_original_dst (transport_endpoint_t *i2o_src, + transport_endpoint_t *i2o_dst, + transport_proto_t transport_proto, u32 *original_dst, + u16 *original_dst_port) +{ + session_main_t *smm = vnet_get_session_main (); + ip_protocol_t proto = + (transport_proto == TRANSPORT_PROTO_TCP ? IPPROTO_TCP : IPPROTO_UDP); + if (!smm->original_dst_lookup || !i2o_dst->is_ip4) + return; + smm->original_dst_lookup (&i2o_src->ip.ip4, i2o_src->port, &i2o_dst->ip.ip4, + i2o_dst->port, proto, original_dst, + original_dst_port); +} + /* *INDENT-OFF* */ static session_fifo_rx_fn *session_tx_fns[TRANSPORT_TX_N_FNS] = { session_tx_fifo_peek_and_snd, @@ -2292,6 +2309,11 @@ session_config_fn (vlib_main_t * vm, unformat_input_t * input) smm->no_adaptive = 1; else if (unformat (input, "use-dma")) smm->dma_enabled = 1; + else if (unformat (input, "nat44-original-dst-enable")) + { + smm->original_dst_lookup = vlib_get_plugin_symbol ( + "nat_plugin.so", "nat44_original_dst_lookup"); + } /* * Deprecated but maintained for compatibility */ |