sep->is_ip4 = 1;
return 1;
}
- else if (unformat (input, "%U://[%s]%U/%d", unformat_transport_proto,
- &transport_proto, &sep->hostname, unformat_ip4_address,
- &sep->ip.ip4, &port))
- {
- sep->transport_proto = transport_proto;
- sep->port = clib_host_to_net_u16 (port);
- sep->is_ip4 = 1;
- return 1;
- }
else if (unformat (input, "%U://%U/%d", unformat_transport_proto,
&transport_proto, unformat_ip6_address, &sep->ip.ip6,
&port))
sep->is_ip4 = 0;
return 1;
}
- else if (unformat (input, "%U://[%s]%U/%d", unformat_transport_proto,
- &transport_proto, &sep->hostname, unformat_ip6_address,
- &sep->ip.ip6, &port))
+ else if (unformat (input, "%U://session/%lu", unformat_transport_proto,
+ &transport_proto, &sep->parent_handle))
{
sep->transport_proto = transport_proto;
- sep->port = clib_host_to_net_u16 (port);
- sep->is_ip4 = 0;
+ sep->ip.ip4.as_u32 = 1; /* ip need to be non zero in vnet */
return 1;
}
return 0;
static u8 *cache_uri;
static session_endpoint_cfg_t *cache_sep;
-int
-parse_uri (char *uri, session_endpoint_cfg_t * sep)
+session_error_t
+parse_uri (char *uri, session_endpoint_cfg_t *sep)
{
unformat_input_t _input, *input = &_input;
if (!unformat (input, "%U", unformat_vnet_uri, sep))
{
unformat_free (input);
- return VNET_API_ERROR_INVALID_VALUE;
+ return SESSION_E_INVALID;
}
unformat_free (input);
return 0;
}
-int
-vnet_bind_uri (vnet_listen_args_t * a)
+session_error_t
+vnet_bind_uri (vnet_listen_args_t *a)
{
session_endpoint_cfg_t sep = SESSION_ENDPOINT_CFG_NULL;
int rv;
return vnet_listen (a);
}
-int
-vnet_unbind_uri (vnet_unlisten_args_t * a)
+session_error_t
+vnet_unbind_uri (vnet_unlisten_args_t *a)
{
session_endpoint_cfg_t sep = SESSION_ENDPOINT_CFG_NULL;
+ application_t *app;
session_t *listener;
u32 table_index;
- int rv;
+ session_error_t rv;
if ((rv = parse_uri (a->uri, &sep)))
return rv;
- /* NOTE: only default fib tables supported for uri apis */
- table_index = session_lookup_get_index_for_fib (fib_ip_proto (!sep.is_ip4),
- 0);
+ app = application_get (a->app_index);
+ if (!app)
+ return SESSION_E_INVALID;
+
+ table_index = application_session_table (app, fib_ip_proto (!sep.is_ip4));
listener = session_lookup_listener (table_index,
(session_endpoint_t *) & sep);
if (!listener)
- return VNET_API_ERROR_ADDRESS_NOT_IN_USE;
+ return SESSION_E_ADDR_NOT_IN_USE;
a->handle = listen_session_get_handle (listener);
return vnet_unlisten (a);
}
-int
-vnet_connect_uri (vnet_connect_args_t * a)
+session_error_t
+vnet_connect_uri (vnet_connect_args_t *a)
{
session_endpoint_cfg_t sep = SESSION_ENDPOINT_CFG_NULL;
- int rv;
+ session_error_t rv;
if ((rv = parse_uri (a->uri, &sep)))
return rv;