session: rules tables
This introduces 5-tuple lookup tables that may be used to implement
custom session layer actions at connection establishment time (session
layer perspective).
The rules table build mask-match-action lookup trees that for a given
5-tuple key return the action for the first longest match. If rules
overlap, ordering is established by tuple longest match with the
following descending priority: remote ip, local ip, remote port, local
port.
At this time, the only match action supported is to forward packets to
the application identified by the action.
Change-Id: Icbade6fac720fa3979820d50cd7d6137f8b635c3
Signed-off-by: Florin Coras <fcoras@cisco.com>
diff --git a/src/vnet/session/application.c b/src/vnet/session/application.c
index c6fd119..df68ce0 100644
--- a/src/vnet/session/application.c
+++ b/src/vnet/session/application.c
@@ -482,6 +482,27 @@
return app->flags & APP_OPTIONS_FLAGS_USE_GLOBAL_SCOPE;
}
+u32
+application_n_listeners (application_t * app)
+{
+ return hash_elts (app->listeners_table);
+}
+
+stream_session_t *
+application_first_listener (application_t * app)
+{
+ u64 handle;
+ u32 sm_index;
+
+ /* *INDENT-OFF* */
+ hash_foreach (handle, sm_index, app->listeners_table, ({
+ return listen_session_get_from_handle (handle);
+ }));
+ /* *INDENT-ON* */
+
+ return 0;
+}
+
u8 *
format_application_listener (u8 * s, va_list * args)
{
@@ -651,7 +672,7 @@
vlib_cli_output (vm, "%U", format_application_listener,
0 /* header */ , 0, 0,
verbose);
- /* *INDENT-OFF* */
+ /* *INDENT-OFF* */
pool_foreach (app, app_pool,
({
/* App's listener sessions */