summaryrefslogtreecommitdiffstats
path: root/src/vnet/session/session.c
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2022-01-20 18:10:26 -0800
committerDave Barach <openvpp@barachs.net>2022-01-22 00:29:30 +0000
commit5384cca85573f553452254abc888f0153a26c15e (patch)
treecec0101efd61ec4d0240ca11165772b8d6268de9 /src/vnet/session/session.c
parent77e69ae2d172dce74f4da4cae52bb63e28daa3ae (diff)
session: update time for list of subscribers
Instead of constantly scanning all transport vfts for update time functions, build list at transport enable time. Type: improvement Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: Id5c07cc03ee1fdd072ebbbd40119d1a440a5e3b1
Diffstat (limited to 'src/vnet/session/session.c')
-rw-r--r--src/vnet/session/session.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/vnet/session/session.c b/src/vnet/session/session.c
index 77259ad76d3..42f24d2fb21 100644
--- a/src/vnet/session/session.c
+++ b/src/vnet/session/session.c
@@ -1768,6 +1768,39 @@ session_register_transport (transport_proto_t transport_proto,
session_tx_fns[vft->transport_options.tx_type];
}
+void
+session_register_update_time_fn (session_update_time_fn fn, u8 is_add)
+{
+ session_main_t *smm = &session_main;
+ session_update_time_fn *fi;
+ u32 fi_pos = ~0;
+ u8 found = 0;
+
+ vec_foreach (fi, smm->update_time_fns)
+ {
+ if (*fi == fn)
+ {
+ fi_pos = fi - smm->update_time_fns;
+ found = 1;
+ break;
+ }
+ }
+
+ if (is_add)
+ {
+ if (found)
+ {
+ clib_warning ("update time fn %p already registered", fn);
+ return;
+ }
+ vec_add1 (smm->update_time_fns, fn);
+ }
+ else
+ {
+ vec_del1 (smm->update_time_fns, fi_pos);
+ }
+}
+
transport_proto_t
session_add_transport_proto (void)
{