X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fsession%2Fapplication_interface.c;h=a9dda0227511af9b86ffdcd299581a46700ad73e;hb=7999e83a41ebad8a3f02cfcb2809cdb3aae919ba;hp=8599c74fe46ee0eaed0754a7fa3063dcc1a74fb8;hpb=df36f2176d7e90dcd3e895b08ee2d69f42d15426;p=vpp.git diff --git a/src/vnet/session/application_interface.c b/src/vnet/session/application_interface.c index 8599c74fe46..a9dda022751 100644 --- a/src/vnet/session/application_interface.c +++ b/src/vnet/session/application_interface.c @@ -206,7 +206,7 @@ vnet_connect_i (u32 app_index, u32 api_context, session_endpoint_t * sep, void *mp) { application_t *server, *app; - u32 table_index; + u32 table_index, server_index; stream_session_t *listener; if (session_endpoint_is_zero (sep)) @@ -223,14 +223,23 @@ vnet_connect_i (u32 app_index, u32 api_context, session_endpoint_t * sep, if (application_has_local_scope (app)) { table_index = application_local_session_table (app); - app_index = session_lookup_local_session_endpoint (table_index, sep); - server = application_get (app_index); + server_index = session_lookup_local_session_endpoint (table_index, sep); + /* - * Server is willing to have a direct fifo connection created - * instead of going through the state machine, etc. + * Break loop if rule in local table points to connecting app. This + * can happen if client is a generic proxy. Route connect through + * global table instead. */ - if (server && (server->flags & APP_OPTIONS_FLAGS_ACCEPT_REDIRECT)) - return app_connect_redirect (server, mp); + if (server_index != app_index) + { + server = application_get (server_index); + /* + * Server is willing to have a direct fifo connection created + * instead of going through the state machine, etc. + */ + if (server && (server->flags & APP_OPTIONS_FLAGS_ACCEPT_REDIRECT)) + return app_connect_redirect (server, mp); + } } /* @@ -414,6 +423,9 @@ vnet_application_attach (vnet_app_attach_args_t * a) segment_manager_get_segment_info (sm->segment_indices[0], &seg_name, &a->segment_size); + if (application_is_proxy (app)) + application_setup_proxy (app); + a->segment_name_length = vec_len (seg_name); a->segment_name = seg_name; ASSERT (vec_len (a->segment_name) <= 128);