22 #undef __included_bihash_template_h__ 62 }) v4_connection_key_t;
87 u16 lcl_port,
u16 rmt_port,
u8 proto)
89 v4_connection_key_t *key = (v4_connection_key_t *) kv->
key;
91 key->src.as_u32 = lcl->
as_u32;
92 key->dst.as_u32 = rmt->
as_u32;
93 key->src_port = lcl_port;
94 key->dst_port = rmt_port;
104 v4_connection_key_t *key = (v4_connection_key_t *) kv->
key;
106 key->src.as_u32 = lcl->
as_u32;
108 key->src_port = lcl_port;
118 v4_connection_key_t *key = (v4_connection_key_t *) kv->
key;
120 key->src.as_u32 = lcl->
as_u32;
132 make_v4_ss_kv (kv, &tc->lcl_ip.ip4, &tc->rmt_ip.ip4, tc->lcl_port,
133 tc->rmt_port, tc->proto);
138 u16 lcl_port,
u16 rmt_port,
u8 proto)
142 key->src.as_u64[0] = lcl->
as_u64[0];
143 key->src.as_u64[1] = lcl->
as_u64[1];
144 key->dst.as_u64[0] = rmt->
as_u64[0];
145 key->dst.as_u64[1] = rmt->
as_u64[1];
146 key->src_port = lcl_port;
147 key->dst_port = rmt_port;
160 key->src.as_u64[0] = lcl->
as_u64[0];
161 key->src.as_u64[1] = lcl->
as_u64[1];
162 key->dst.as_u64[0] = 0;
163 key->dst.as_u64[1] = 0;
164 key->src_port = lcl_port;
177 key->src.as_u64[0] = lcl->
as_u64[0];
178 key->src.as_u64[1] = lcl->
as_u64[1];
179 key->dst.as_u64[0] = 0;
180 key->dst.as_u64[1] = 0;
192 make_v6_ss_kv (kv, &tc->lcl_ip.ip6, &tc->rmt_ip.ip6, tc->lcl_port,
193 tc->rmt_port, tc->proto);
201 if (
vec_len (fib_index_to_table_index[fib_proto]) <= fib_index)
205 vec_validate (fib_index_to_table_index[fib_proto], fib_index);
206 fib_index_to_table_index[fib_proto][fib_index] = table_index;
207 st->active_fib_proto = fib_proto;
213 table_index = fib_index_to_table_index[fib_proto][fib_index];
230 if (
vec_len (fib_index_to_table_index[fib_proto]) <= tc->fib_index)
239 if (
vec_len (fib_index_to_table_index[fib_proto]) <= fib_index)
247 if (
vec_len (fib_index_to_table_index[fib_proto]) <= fib_index)
249 return fib_index_to_table_index[fib_proto][fib_index];
277 return clib_bihash_add_del_16_8 (&st->v4_session_hash, &kv4,
284 return clib_bihash_add_del_48_8 (&st->v6_session_hash, &kv6,
303 sep->transport_proto);
305 return clib_bihash_add_del_16_8 (&st->v4_session_hash, &kv4, 1);
310 sep->transport_proto);
312 return clib_bihash_add_del_48_8 (&st->v6_session_hash, &kv6, 1);
330 sep->transport_proto);
331 return clib_bihash_add_del_16_8 (&st->v4_session_hash, &kv4, 0);
336 sep->transport_proto);
337 return clib_bihash_add_del_48_8 (&st->v6_session_hash, &kv6, 0);
362 return clib_bihash_add_del_16_8 (&st->v4_session_hash, &kv4,
368 return clib_bihash_add_del_48_8 (&st->v6_session_hash, &kv6,
378 ts = tp_vfts[tp].get_connection (s->connection_index, s->thread_index);
394 switch (action_index)
486 sep->transport_proto);
487 rv = clib_bihash_search_inline_16_8 (&st->v4_session_hash, &kv4);
492 memset (&lcl4, 0,
sizeof (lcl4));
493 srt = &st->session_rules[sep->transport_proto];
506 sep->transport_proto);
507 rv = clib_bihash_search_inline_48_8 (&st->v6_session_hash, &kv6);
513 memset (&lcl6, 0,
sizeof (lcl6));
514 srt = &st->session_rules[sep->transport_proto];
561 memset (&lcl4, 0,
sizeof (lcl4));
562 srt = &st->session_rules[sep->transport_proto];
572 sep->transport_proto);
573 rv = clib_bihash_search_inline_16_8 (&st->v4_session_hash, &kv4);
582 rv = clib_bihash_search_inline_16_8 (&st->v4_session_hash, &kv4);
590 rv = clib_bihash_search_inline_16_8 (&st->v4_session_hash, &kv4);
599 memset (&lcl6, 0,
sizeof (lcl6));
600 srt = &st->session_rules[sep->transport_proto];
607 sep->transport_proto);
608 rv = clib_bihash_search_inline_48_8 (&st->v6_session_hash, &kv6);
615 kv6.
key[0] = kv6.
key[1] = 0;
616 rv = clib_bihash_search_inline_48_8 (&st->v6_session_hash, &kv6);
623 kv6.
key[4] = kv6.
key[5] = 0;
624 rv = clib_bihash_search_inline_48_8 (&st->v6_session_hash, &kv6);
633 u16 lcl_port,
u8 proto)
644 rv = clib_bihash_search_inline_16_8 (&st->v4_session_hash, &kv4);
652 rv = clib_bihash_search_inline_16_8 (&st->v4_session_hash, &kv4);
660 rv = clib_bihash_search_inline_16_8 (&st->v4_session_hash, &kv4);
680 u16 lcl_port,
u8 proto)
688 rv = clib_bihash_search_inline_48_8 (&st->v6_session_hash, &kv6);
693 kv6.
key[0] = kv6.
key[1] = 0;
694 rv = clib_bihash_search_inline_48_8 (&st->v6_session_hash, &kv6);
699 rv = clib_bihash_search_inline_48_8 (&st->v6_session_hash, &kv6);
725 sep->transport_proto);
728 sep->transport_proto);
746 return clib_bihash_add_del_16_8 (&st->v4_half_open_hash, &kv4,
753 return clib_bihash_add_del_48_8 (&st->v6_half_open_hash, &kv6,
771 return clib_bihash_add_del_16_8 (&st->v4_half_open_hash, &kv4,
777 return clib_bihash_add_del_48_8 (&st->v6_half_open_hash, &kv6,
796 make_v4_ss_kv (&kv4, &tc->lcl_ip.ip4, &tc->rmt_ip.ip4, tc->lcl_port,
797 tc->rmt_port, tc->proto);
798 rv = clib_bihash_search_inline_16_8 (&st->v4_half_open_hash, &kv4);
804 make_v6_ss_kv (&kv6, &tc->lcl_ip.ip6, &tc->rmt_ip.ip6, tc->lcl_port,
805 tc->rmt_port, tc->proto);
806 rv = clib_bihash_search_inline_48_8 (&st->v6_half_open_hash, &kv6);
821 return tp_vfts[sst].get_half_open (handle & 0xFFFFFFFF);
855 u16 rmt_port,
u8 proto,
u32 thread_index,
872 rv = clib_bihash_search_inline_16_8 (&st->v4_session_hash, &kv4);
877 return tp_vfts[proto].get_connection (s->connection_index,
884 rv = clib_bihash_search_inline_16_8 (&st->v4_half_open_hash, &kv4);
886 return tp_vfts[proto].get_half_open (kv4.
value & 0xFFFFFFFF);
892 rmt, lcl_port, rmt_port);
899 return tp_vfts[proto].get_listener (s->connection_index);
908 return tp_vfts[proto].get_listener (s->connection_index);
948 rv = clib_bihash_search_inline_16_8 (&st->v4_session_hash, &kv4);
952 return tp_vfts[proto].get_connection (s->connection_index,
959 rv = clib_bihash_search_inline_16_8 (&st->v4_half_open_hash, &kv4);
961 return tp_vfts[proto].get_half_open (kv4.
value & 0xFFFFFFFF);
967 rmt, lcl_port, rmt_port);
974 return tp_vfts[proto].get_listener (s->connection_index);
983 return tp_vfts[proto].get_listener (s->connection_index);
1003 u16 lcl_port,
u16 rmt_port,
u8 proto)
1019 rv = clib_bihash_search_inline_16_8 (&st->v4_session_hash, &kv4);
1027 rmt, lcl_port, rmt_port);
1073 u16 rmt_port,
u8 proto,
u32 thread_index,
1087 rv = clib_bihash_search_inline_48_8 (&st->v6_session_hash, &kv6);
1092 return tp_vfts[proto].get_connection (s->connection_index,
1097 rv = clib_bihash_search_inline_48_8 (&st->v6_half_open_hash, &kv6);
1099 return tp_vfts[proto].get_half_open (kv6.
value & 0xFFFFFFFF);
1103 rmt, lcl_port, rmt_port);
1110 return tp_vfts[proto].get_listener (s->connection_index);
1117 return tp_vfts[proto].get_listener (s->connection_index);
1154 rv = clib_bihash_search_inline_48_8 (&st->v6_session_hash, &kv6);
1158 return tp_vfts[proto].get_connection (s->connection_index,
1163 rv = clib_bihash_search_inline_48_8 (&st->v6_half_open_hash, &kv6);
1165 return tp_vfts[proto].get_half_open (kv6.
value & 0xFFFFFFFF);
1169 rmt, lcl_port, rmt_port);
1176 return tp_vfts[proto].get_listener (s->connection_index);
1183 return tp_vfts[proto].get_listener (s->connection_index);
1203 u16 lcl_port,
u16 rmt_port,
u8 proto)
1216 rv = clib_bihash_search_inline_48_8 (&st->v6_session_hash, &kv6);
1222 rmt, lcl_port, rmt_port);
1241 | (
u32) sep->port << 16 | (
u32) sep->transport_proto << 8
1242 | (
u32) sep->is_ip4);
1257 u32 local_table_handle;
1260 local_table_handle = handle & 0xFFFFFFFFULL;
1261 sep->is_ip4 = local_table_handle & 0xff;
1262 local_table_handle >>= 8;
1263 sep->transport_proto = local_table_handle & 0xff;
1264 sep->port = local_table_handle >> 8;
1281 if (args->scope > 3)
1287 "invalid transport proto");
1290 fib_proto = args->table_args.rmt.fp_proto;
1293 srt = &st->session_rules[args->transport_proto];
1302 memset (&args->table_args.lcl, 0, sizeof (args->table_args.lcl));
1303 args->table_args.lcl.fp_proto = args->table_args.rmt.fp_proto;
1304 args->table_args.lcl_port = 0;
1306 srt = &st->session_rules[args->transport_proto];
1322 for (fp = 0; fp <
ARRAY_LEN (fib_index_to_table_index); fp++)
1335 u32 is_local = va_arg (*args,
u32);
1336 u8 *app_name, *str = 0;
1338 v4_connection_key_t *key = (v4_connection_key_t *) kvp->
key;
1347 &key->dst, clib_net_to_host_u16 (key->dst_port));
1348 s =
format (s,
"%-40v%-30v", str, app_name);
1355 clib_net_to_host_u16 (key->src_port));
1356 s =
format (s,
"%-30v%-30v", str, app_name);
1362 typedef struct _ip4_session_table_show_ctx_t
1379 u8 type,
u8 is_local)
1383 .is_local = is_local,
1405 u32 proto = ~0, lcl_port, rmt_port, action = 0, lcl_plen = 0, rmt_plen = 0;
1406 u32 appns_index, scope = 0;
1407 ip46_address_t lcl_ip, rmt_ip;
1408 u8 is_ip4 = 1, conn_set = 0;
1409 u8 fib_proto, is_add = 1, *ns_id = 0;
1414 memset (&lcl_ip, 0,
sizeof (lcl_ip));
1415 memset (&rmt_ip, 0,
sizeof (rmt_ip));
1422 else if (
unformat (input,
"appns %_%v%_", &ns_id))
1424 else if (
unformat (input,
"scope global"))
1426 else if (
unformat (input,
"scope local"))
1428 else if (
unformat (input,
"scope all"))
1433 &lcl_ip.ip4, &lcl_plen, &lcl_port,
1441 &lcl_ip.ip6, &lcl_plen, &lcl_port,
1448 else if (
unformat (input,
"action %d", &action))
1450 else if (
unformat (input,
"tag %_%v%_", &tag))
1462 if (is_add && !conn_set && action == ~0)
1467 if (!is_add && !tag && !conn_set)
1495 .table_args.lcl.fp_addr = lcl_ip,
1496 .table_args.lcl.fp_len = lcl_plen,
1497 .table_args.lcl.fp_proto = fib_proto,
1498 .table_args.rmt.fp_addr = rmt_ip,
1499 .table_args.rmt.fp_len = rmt_plen,
1500 .table_args.rmt.fp_proto = fib_proto,
1501 .table_args.lcl_port = lcl_port,
1502 .table_args.rmt_port = rmt_port,
1503 .table_args.action_index = action,
1504 .table_args.is_add = is_add,
1505 .table_args.tag = tag,
1506 .appns_index = appns_index,
1517 .path =
"session rule",
1518 .short_help =
"session rule [add|del] appns <ns_id> proto <proto> " 1519 "<lcl-ip/plen> <lcl-port> <rmt-ip/plen> <rmt-port> action <action>",
1532 srt = &st->session_rules[transport_proto];
1544 srt = &st->session_rules[transport_proto];
1552 u32 transport_proto = ~0, lcl_port, rmt_port, lcl_plen, rmt_plen;
1553 u32 fib_index, scope = 0;
1554 ip46_address_t lcl_ip, rmt_ip;
1555 u8 is_ip4 = 1, show_one = 0;
1559 u8 *ns_id = 0, fib_proto;
1561 memset (&lcl_ip, 0,
sizeof (lcl_ip));
1562 memset (&rmt_ip, 0,
sizeof (rmt_ip));
1567 else if (
unformat (input,
"appns %_%v%_", &ns_id))
1569 else if (
unformat (input,
"scope global"))
1571 else if (
unformat (input,
"scope local"))
1574 &lcl_ip.ip4, &lcl_plen, &lcl_port,
1582 &lcl_ip.ip6, &lcl_plen, &lcl_port,
1594 if (transport_proto == ~0)
1614 if (scope == 1 || scope == 0)
1617 fib_index = is_ip4 ? app_ns->ip4_fib_index : app_ns->ip6_fib_index;
1627 srt = &st->session_rules[transport_proto];
1635 srt = &st->session_rules[transport_proto];
1646 .path =
"show session rules",
1647 .short_help =
"show session rules [<proto> appns <id> <lcl-ip/plen> " 1648 "<lcl-port> <rmt-ip/plen> <rmt-port> scope <scope>]",
#define vec_validate(V, I)
Make sure vector is long enough for given index (no header, unspecified alignment) ...
stream_session_t * session_lookup_listener6(u32 fib_index, ip6_address_t *lcl, u16 lcl_port, u8 proto)
int session_lookup_del_connection(transport_connection_t *tc)
Delete transport connection from session table.
static session_table_t * session_table_get_or_alloc_for_connection(transport_connection_t *tc)
session_table_t * session_table_alloc(void)
void session_lookup_show_table_entries(vlib_main_t *vm, session_table_t *table, u8 type, u8 is_local)
#define SESSION_RULES_TABLE_ACTION_DROP
u8 * format_transport_proto_short(u8 *s, va_list *args)
clib_bihash_kv_48_8_t session_kv6_t
void session_rules_table_cli_dump(vlib_main_t *vm, session_rules_table_t *srt, u8 fib_proto)
#define SESSION_TABLE_INVALID_INDEX
u64 session_lookup_endpoint_listener(u32 table_index, session_endpoint_t *sep, u8 use_rules)
Lookup listener for session endpoint in table.
static clib_error_t * session_rule_command_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
static session_table_t * session_table_get_for_fib_index(u32 fib_proto, u32 fib_index)
struct _session_rules_table_t session_rules_table_t
struct _transport_connection transport_connection_t
clib_error_t * session_rules_table_add_del(session_rules_table_t *srt, session_rule_table_add_del_args_t *args)
Add/delete session rule.
static u8 session_lookup_action_index_is_valid(u32 action_index)
u32 app_namespace_index(app_namespace_t *app_ns)
stream_session_t * session_lookup_rules_table_session4(session_table_t *st, u8 proto, ip4_address_t *lcl, u16 lcl_port, ip4_address_t *rmt, u16 rmt_port)
stream_session_t * session_lookup_listener4(u32 fib_index, ip4_address_t *lcl, u16 lcl_port, u8 proto)
void session_lookup_set_tables_appns(app_namespace_t *app_ns)
Mark (global) tables as pertaining to app ns.
static clib_error_t * show_session_rules_command_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
u32 session_lookup_get_index_for_fib(u32 fib_proto, u32 fib_index)
struct _transport_proto_vft transport_proto_vft_t
int session_lookup_del_session(stream_session_t *s)
u32 session_rules_table_lookup4(session_rules_table_t *srt, ip4_address_t *lcl_ip, ip4_address_t *rmt_ip, u16 lcl_port, u16 rmt_port)
static stream_session_t * session_lookup_listener4_i(session_table_t *st, ip4_address_t *lcl, u16 lcl_port, u8 proto)
static void make_v6_listener_kv(session_kv6_t *kv, ip6_address_t *lcl, u16 lcl_port, u8 proto)
u64 session_lookup_half_open_handle(transport_connection_t *tc)
static void make_v6_ss_kv_from_tc(session_kv6_t *kv, transport_connection_t *tc)
stream_session_t * session_lookup_listener(u32 table_index, session_endpoint_t *sep)
transport_connection_t * session_lookup_connection6(u32 fib_index, ip6_address_t *lcl, ip6_address_t *rmt, u16 lcl_port, u16 rmt_port, u8 proto)
Lookup connection with ip6 and transport layer information.
static stream_session_t * session_lookup_listener6_i(session_table_t *st, ip6_address_t *lcl, u16 lcl_port, u8 proto)
#define SESSION_INVALID_INDEX
clib_error_t * vnet_session_rule_add_del(session_rule_add_del_args_t *args)
transport_proto_vft_t * tp_vfts
Generate typed init functions for multiple hash table styles...
static 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)
#define clib_error_return(e, args...)
static int ip4_session_table_show(clib_bihash_kv_16_8_t *kvp, void *arg)
static void make_v6_proxy_kv(session_kv6_t *kv, ip6_address_t *lcl, u8 proto)
struct _stream_session_t stream_session_t
int session_lookup_del_half_open(transport_connection_t *tc)
transport_connection_t * session_lookup_connection4(u32 fib_index, ip4_address_t *lcl, ip4_address_t *rmt, u16 lcl_port, u16 rmt_port, u8 proto)
Lookup connection with ip4 and transport layer information.
static transport_proto_t session_get_transport_proto(stream_session_t *s)
void session_table_init(session_table_t *slt, u8 fib_proto)
Initialize session table hash tables.
u32 app_namespace_get_fib_index(app_namespace_t *app_ns, u8 fib_proto)
struct _session_endpoint session_endpoint_t
struct _session_rule_add_del_args session_rule_add_del_args_t
void session_lookup_dump_rules_table(u32 fib_index, u8 fib_proto, u8 transport_proto)
static app_namespace_t * app_namespace_get_default(void)
#define APP_INVALID_INDEX
stream_session_t * session_lookup_safe6(u32 fib_index, ip6_address_t *lcl, ip6_address_t *rmt, u16 lcl_port, u16 rmt_port, u8 proto)
Lookup session with ip6 and transport layer information.
stream_session_t * application_first_listener(application_t *app, u8 fib_proto, u8 transport_proto)
app_namespace_t * app_namespace_get(u32 index)
static stream_session_t * session_manager_get_listener(u8 session_type, u32 index)
u8 * application_name_from_index(u32 app_index)
Returns app name.
static stream_session_t * session_get(u32 si, u32 thread_index)
u32 session_rules_table_lookup6(session_rules_table_t *srt, ip6_address_t *lcl_ip, ip6_address_t *rmt_ip, u16 lcl_port, u16 rmt_port)
static session_table_t * session_table_get_for_connection(transport_connection_t *tc)
static session_type_t session_type_from_proto_and_ip(transport_proto_t proto, u8 is_ip4)
static u32 * fib_index_to_table_index[2]
Network namespace index (i.e., fib index) to session lookup table.
static u32 session_lookup_action_to_app_index(u32 action_index)
int session_lookup_local_listener_parse_handle(u64 handle, session_endpoint_t *sep)
#define SESSION_RULES_TABLE_INVALID_INDEX
session_table_t * app_namespace_get_local_table(app_namespace_t *app_ns)
#define vec_free(V)
Free vector's memory (no header).
int session_lookup_del_session_endpoint(u32 table_index, session_endpoint_t *sep)
static stream_session_t * session_get_from_handle_safe(u64 handle)
Get session from handle and 'lock' pool resize if not in same thread.
#define clib_warning(format, args...)
stream_session_t * session_lookup_safe4(u32 fib_index, ip4_address_t *lcl, ip4_address_t *rmt, u16 lcl_port, u16 rmt_port, u8 proto)
Lookup session with ip4 and transport layer information.
#define SESSION_INVALID_HANDLE
u64 session_lookup_local_listener_make_handle(session_endpoint_t *sep)
static u8 transport_connection_fib_proto(transport_connection_t *tc)
struct _application application_t
int session_lookup_add_session_endpoint(u32 table_index, session_endpoint_t *sep, u64 value)
struct _app_namespace app_namespace_t
#define VLIB_CLI_COMMAND(x,...)
transport_connection_t * session_lookup_connection_wt4(u32 fib_index, ip4_address_t *lcl, ip4_address_t *rmt, u16 lcl_port, u16 rmt_port, u8 proto, u32 thread_index, u8 *is_filtered)
Lookup connection with ip4 and transport layer information.
session_table_t * session_table_get(u32 table_index)
static void make_v4_proxy_kv(session_kv4_t *kv, ip4_address_t *lcl, u8 proto)
struct _ip4_session_table_show_ctx_t ip4_session_table_show_ctx_t
static stream_session_t * session_lookup_action_to_session(u32 action_index, u8 fib_proto, u8 transport_proto)
uword unformat_transport_proto(unformat_input_t *input, va_list *args)
static stream_session_t * session_lookup_app_listen_session(u32 app_index, u8 fib_proto, u8 transport_proto)
void ip4_session_table_walk(clib_bihash_16_8_t *hash, ip4_session_table_walk_fn_t fn, void *arg)
#define clib_error_report(e)
#define SESSION_RULES_TABLE_ACTION_ALLOW
typedef CLIB_PACKED(struct{union{struct{ip4_address_t src;ip4_address_t dst;u16 src_port;u16 dst_port;u32 proto;};u64 as_u64[2];};})
transport_connection_t * session_lookup_connection_wt6(u32 fib_index, ip6_address_t *lcl, ip6_address_t *rmt, u16 lcl_port, u16 rmt_port, u8 proto, u32 thread_index, u8 *is_filtered)
Lookup connection with ip6 and transport layer information.
static void make_v4_listener_kv(session_kv4_t *kv, ip4_address_t *lcl, u16 lcl_port, u8 proto)
static vlib_main_t * vlib_get_main(void)
#define HALF_OPEN_LOOKUP_INVALID_VALUE
void session_rules_table_show_rule(vlib_main_t *vm, session_rules_table_t *srt, ip46_address_t *lcl_ip, u16 lcl_port, ip46_address_t *rmt_ip, u16 rmt_port, u8 is_ip4)
u8 * format_ip4_session_lookup_kvp(u8 *s, va_list *args)
#define SESSION_RULE_TAG_MAX_LEN
static stream_session_t * session_get_from_handle(u64 handle)
enum _transport_proto transport_proto_t
void session_lookup_init(void)
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
void session_lookup_dump_local_rules_table(u32 table_index, u8 fib_proto, u8 transport_proto)
struct _session_lookup_table session_table_t
u8 session_lookup_local_is_handle(u64 handle)
static session_table_t * session_table_get_or_alloc(u8 fib_proto, u8 fib_index)
int session_lookup_add_connection(transport_connection_t *tc, u64 value)
Add transport connection to a session table.
u32 session_table_index(session_table_t *slt)
#define clib_error_return_code(e, code, flags, args...)
static 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)
u32 session_lookup_local_endpoint(u32 table_index, session_endpoint_t *sep)
Look up endpoint in local session table.
app_namespace_t * app_namespace_get_from_id(const u8 *ns_id)
int session_lookup_add_half_open(transport_connection_t *tc, u64 value)
#define SESSION_LOCAL_TABLE_PREFIX
void vlib_cli_output(vlib_main_t *vm, char *fmt,...)
stream_session_t * session_lookup_rules_table_session6(session_table_t *st, u8 proto, ip6_address_t *lcl, u16 lcl_port, ip6_address_t *rmt, u16 rmt_port)
u8 * format_transport_proto(u8 *s, va_list *args)
static void make_v4_ss_kv_from_tc(session_kv4_t *kv, transport_connection_t *tc)
application_t * application_get_if_valid(u32 index)
transport_connection_t * session_lookup_half_open_connection(u64 handle, u8 proto, u8 is_ip4)
clib_bihash_kv_16_8_t session_kv4_t