+typedef struct
+{
+ char uri[128];
+ u32 app_index;
+ u32 api_context;
+} proxy_connect_args_t;
+
+static void
+proxy_cb_fn (void *data, u32 data_len)
+{
+ proxy_connect_args_t *pa = (proxy_connect_args_t *) data;
+ vnet_connect_args_t a;
+
+ memset (&a, 0, sizeof (a));
+ a.api_context = pa->api_context;
+ a.app_index = pa->app_index;
+ a.uri = pa->uri;
+ vnet_connect_uri (&a);
+}
+
+static void
+proxy_call_main_thread (vnet_connect_args_t * a)
+{
+ if (vlib_get_thread_index () == 0)
+ {
+ vnet_connect_uri (a);
+ }
+ else
+ {
+ proxy_connect_args_t args;
+ args.api_context = a->api_context;
+ args.app_index = a->app_index;
+ clib_memcpy (args.uri, a->uri, vec_len (a->uri));
+ vl_api_rpc_call_main_thread (proxy_cb_fn, (u8 *) & args, sizeof (args));
+ }
+}
+