diff options
author | Florin Coras <fcoras@cisco.com> | 2017-11-27 03:12:00 -0800 |
---|---|---|
committer | Dave Wallace <dwallacelf@gmail.com> | 2017-11-27 20:35:37 +0000 |
commit | c3ddea8fa9b959956fd8df66c8d3c4dbe99e0a77 (patch) | |
tree | 894853fb1f292e0bb6bb9ace89106392ecdc0620 /src/vnet/session | |
parent | 2d36ed2fac5c8eea5311e0eb8a3aaa7dc75f59ee (diff) |
session: return bound listener for proxy accepts
This, if such a listener exists.
Change-Id: I974cc858c1e2fee50189c3c67e4abb76be32a98a
Signed-off-by: Florin Coras <fcoras@cisco.com>
Diffstat (limited to 'src/vnet/session')
-rw-r--r-- | src/vnet/session/application.c | 4 | ||||
-rw-r--r-- | src/vnet/session/session.h | 1 | ||||
-rwxr-xr-x | src/vnet/session/session_api.c | 10 |
3 files changed, 14 insertions, 1 deletions
diff --git a/src/vnet/session/application.c b/src/vnet/session/application.c index 17770bec2e0..9a540f6b78c 100644 --- a/src/vnet/session/application.c +++ b/src/vnet/session/application.c @@ -523,7 +523,8 @@ application_first_listener (application_t * app, u8 fib_proto, /* *INDENT-OFF* */ hash_foreach (handle, sm_index, app->listeners_table, ({ listener = listen_session_get_from_handle (handle); - if (listener->session_type == sst) + if (listener->session_type == sst + && listener->listener_index != SESSION_PROXY_LISTENER_INDEX) return listener; })); /* *INDENT-ON* */ @@ -550,6 +551,7 @@ application_start_stop_proxy_fib_proto (application_t * app, u8 fib_proto, sep.transport_proto = transport_proto; application_start_listen (app, &sep, &handle); s = listen_session_get_from_handle (handle); + s->listener_index = SESSION_PROXY_LISTENER_INDEX; } else { diff --git a/src/vnet/session/session.h b/src/vnet/session/session.h index bd854d4b4c5..cf1bc9d87fc 100644 --- a/src/vnet/session/session.h +++ b/src/vnet/session/session.h @@ -24,6 +24,7 @@ #define HALF_OPEN_LOOKUP_INVALID_VALUE ((u64)~0) #define INVALID_INDEX ((u32)~0) +#define SESSION_PROXY_LISTENER_INDEX ((u32)~0 - 1) /* TODO decide how much since we have pre-data as well */ #define MAX_HDRS_LEN 100 /* Max number of bytes for headers */ diff --git a/src/vnet/session/session_api.c b/src/vnet/session/session_api.c index f15d2f6e830..c54e635d534 100755 --- a/src/vnet/session/session_api.c +++ b/src/vnet/session/session_api.c @@ -106,6 +106,16 @@ send_session_accept_callback (stream_session_t * s) tp_vft = transport_protocol_get_vft (s->session_type); tc = tp_vft->get_connection (s->connection_index, s->thread_index); mp->listener_handle = listen_session_get_handle (listener); + + if (application_is_proxy (server)) + { + listener = + application_first_listener (server, + transport_connection_fib_proto (tc), + tc->proto); + if (listener) + mp->listener_handle = listen_session_get_handle (listener); + } mp->handle = session_handle (s); mp->server_rx_fifo = pointer_to_uword (s->server_rx_fifo); mp->server_tx_fifo = pointer_to_uword (s->server_tx_fifo); |