X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fsession%2Fsession_lookup.c;h=3b330982954b367bfc9060c5a30403b0ca44c82a;hb=30a28c187b0eb9216d5d7918712d98a4b7a5ba6a;hp=4de6fdbe547499fcd256e387370cc5bf0c810206;hpb=68e5fd5206e75cb367375b4fea2e531a3712fd06;p=vpp.git diff --git a/src/vnet/session/session_lookup.c b/src/vnet/session/session_lookup.c index 4de6fdbe547..3b330982954 100644 --- a/src/vnet/session/session_lookup.c +++ b/src/vnet/session/session_lookup.c @@ -156,25 +156,28 @@ make_v6_ss_kv_from_tc (session_kv6_t * kv, transport_connection_t * tc) } static session_table_t * -session_table_get_or_alloc (u8 fib_proto, u8 fib_index) +session_table_get_or_alloc (u8 fib_proto, u32 fib_index) { session_table_t *st; u32 table_index; - if (vec_len (fib_index_to_table_index[fib_proto]) <= fib_index) + ASSERT (fib_index != ~0); + if (vec_len (fib_index_to_table_index[fib_proto]) > fib_index && + fib_index_to_table_index[fib_proto][fib_index] != ~0) + { + table_index = fib_index_to_table_index[fib_proto][fib_index]; + return session_table_get (table_index); + } + else { st = session_table_alloc (); table_index = session_table_index (st); - vec_validate (fib_index_to_table_index[fib_proto], fib_index); + vec_validate_init_empty (fib_index_to_table_index[fib_proto], fib_index, + ~0); fib_index_to_table_index[fib_proto][fib_index] = table_index; st->active_fib_proto = fib_proto; session_table_init (st, fib_proto); return st; } - else - { - table_index = fib_index_to_table_index[fib_proto][fib_index]; - return session_table_get (table_index); - } } static session_table_t *