X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fsession%2Fsession_lookup.c;h=19aeb0b24e0ea71ef82f427f853c0942a27de5aa;hb=a44d6b133bfb7ee0fb11d6ae8d9f0f00e57f242c;hp=83f95bed0624f715d22810d955866a015834cc7e;hpb=5c9083d52646153bdc917a7ae37da696d864ad1c;p=vpp.git diff --git a/src/vnet/session/session_lookup.c b/src/vnet/session/session_lookup.c index 83f95bed062..19aeb0b24e0 100644 --- a/src/vnet/session/session_lookup.c +++ b/src/vnet/session/session_lookup.c @@ -86,14 +86,8 @@ always_inline void make_v4_ss_kv (session_kv4_t * kv, ip4_address_t * lcl, ip4_address_t * rmt, u16 lcl_port, u16 rmt_port, u8 proto) { - v4_connection_key_t *key = (v4_connection_key_t *) kv->key; - - key->src.as_u32 = lcl->as_u32; - key->dst.as_u32 = rmt->as_u32; - key->src_port = lcl_port; - key->dst_port = rmt_port; - key->proto = proto; - + kv->key[0] = (u64) rmt->as_u32 << 32 | (u64) lcl->as_u32; + kv->key[1] = (u64) proto << 32 | (u64) rmt_port << 16 | (u64) lcl_port; kv->value = ~0ULL; } @@ -101,28 +95,16 @@ always_inline void make_v4_listener_kv (session_kv4_t * kv, ip4_address_t * lcl, u16 lcl_port, u8 proto) { - v4_connection_key_t *key = (v4_connection_key_t *) kv->key; - - key->src.as_u32 = lcl->as_u32; - key->dst.as_u32 = 0; - key->src_port = lcl_port; - key->dst_port = 0; - key->proto = proto; - + kv->key[0] = (u64) lcl->as_u32; + kv->key[1] = (u64) proto << 32 | (u64) lcl_port; kv->value = ~0ULL; } always_inline void make_v4_proxy_kv (session_kv4_t * kv, ip4_address_t * lcl, u8 proto) { - v4_connection_key_t *key = (v4_connection_key_t *) kv->key; - - key->src.as_u32 = lcl->as_u32; - key->dst.as_u32 = 0; - key->src_port = 0; - key->dst_port = 0; - key->proto = proto; - + kv->key[0] = (u64) lcl->as_u32; + kv->key[1] = (u64) proto << 32; kv->value = ~0ULL; } @@ -137,17 +119,12 @@ always_inline void make_v6_ss_kv (session_kv6_t * kv, ip6_address_t * lcl, ip6_address_t * rmt, u16 lcl_port, u16 rmt_port, u8 proto) { - v6_connection_key_t *key = (v6_connection_key_t *) kv->key; - - key->src.as_u64[0] = lcl->as_u64[0]; - key->src.as_u64[1] = lcl->as_u64[1]; - key->dst.as_u64[0] = rmt->as_u64[0]; - key->dst.as_u64[1] = rmt->as_u64[1]; - key->src_port = lcl_port; - key->dst_port = rmt_port; - key->proto = proto; - key->unused = 0; - + kv->key[0] = lcl->as_u64[0]; + kv->key[1] = lcl->as_u64[1]; + kv->key[2] = rmt->as_u64[0]; + kv->key[3] = rmt->as_u64[1]; + kv->key[4] = (u64) proto << 32 | (u64) rmt_port << 16 | (u64) lcl_port; + kv->key[5] = 0; kv->value = ~0ULL; } @@ -155,34 +132,24 @@ always_inline void make_v6_listener_kv (session_kv6_t * kv, ip6_address_t * lcl, u16 lcl_port, u8 proto) { - v6_connection_key_t *key = (v6_connection_key_t *) kv->key; - - key->src.as_u64[0] = lcl->as_u64[0]; - key->src.as_u64[1] = lcl->as_u64[1]; - key->dst.as_u64[0] = 0; - key->dst.as_u64[1] = 0; - key->src_port = lcl_port; - key->dst_port = 0; - key->proto = proto; - key->unused = 0; - + kv->key[0] = lcl->as_u64[0]; + kv->key[1] = lcl->as_u64[1]; + kv->key[2] = 0; + kv->key[3] = 0; + kv->key[4] = (u64) proto << 32 | (u64) lcl_port; + kv->key[5] = 0; kv->value = ~0ULL; } always_inline void make_v6_proxy_kv (session_kv6_t * kv, ip6_address_t * lcl, u8 proto) { - v6_connection_key_t *key = (v6_connection_key_t *) kv->key; - - key->src.as_u64[0] = lcl->as_u64[0]; - key->src.as_u64[1] = lcl->as_u64[1]; - key->dst.as_u64[0] = 0; - key->dst.as_u64[1] = 0; - key->src_port = 0; - key->dst_port = 0; - key->proto = proto; - key->unused = 0; - + kv->key[0] = lcl->as_u64[0]; + kv->key[1] = lcl->as_u64[1]; + kv->key[2] = 0; + kv->key[3] = 0; + kv->key[4] = (u64) proto << 32; + kv->key[5] = 0; kv->value = ~0ULL; } @@ -413,7 +380,8 @@ session_lookup_app_listen_session (u32 app_index, u8 fib_proto, if (!app) return 0; - return application_first_listener (app, fib_proto, transport_proto); + return app_worker_first_listener (application_get_default_worker (app), + fib_proto, transport_proto); } static stream_session_t * @@ -1332,15 +1300,17 @@ u8 * format_ip4_session_lookup_kvp (u8 * s, va_list * args) { clib_bihash_kv_16_8_t *kvp = va_arg (*args, clib_bihash_kv_16_8_t *); - u32 is_local = va_arg (*args, u32); + u32 is_local = va_arg (*args, u32), app_wrk_index, session_index; + v4_connection_key_t *key = (v4_connection_key_t *) kvp->key; u8 *app_name, *str = 0; stream_session_t *session; - v4_connection_key_t *key = (v4_connection_key_t *) kvp->key; + app_worker_t *app_wrk; if (!is_local) { session = session_get_from_handle (kvp->value); - app_name = application_name_from_index (session->app_index); + app_wrk = app_worker_get (session->app_wrk_index); + app_name = application_name_from_index (app_wrk->app_index); str = format (0, "[%U] %U:%d->%U:%d", format_transport_proto_short, key->proto, format_ip4_address, &key->src, clib_net_to_host_u16 (key->src_port), format_ip4_address, @@ -1349,7 +1319,9 @@ format_ip4_session_lookup_kvp (u8 * s, va_list * args) } else { - app_name = application_name_from_index (kvp->value); + local_session_parse_handle (kvp->value, &app_wrk_index, &session_index); + app_wrk = app_worker_get (app_wrk_index); + app_name = application_name_from_index (app_wrk->app_index); str = format (0, "[%U] %U:%d", format_transport_proto_short, key->proto, format_ip4_address, &key->src, clib_net_to_host_u16 (key->src_port));