}
int
-af_packet_create_if(vlib_main_t * vm, u8 * host_if_name, u8 * hw_addr_set)
+af_packet_create_if(vlib_main_t * vm, u8 * host_if_name, u8 * hw_addr_set, u32 *sw_if_index)
{
af_packet_main_t * apm = &af_packet_main;
int ret, fd = -1;
VNET_HW_INTERFACE_FLAG_LINK_UP);
mhash_set_mem (&apm->if_index_by_host_if_name, host_if_name, &if_index, 0);
-
+ if (sw_if_index)
+ *sw_if_index = apif->sw_if_index;
return 0;
error:
extern vnet_device_class_t af_packet_device_class;
extern vlib_node_registration_t af_packet_input_node;
-int af_packet_create_if(vlib_main_t * vm, u8 * host_if_name, u8 * hw_addr_set);
+int af_packet_create_if(vlib_main_t * vm, u8 * host_if_name, u8 * hw_addr_set, u32 *sw_if_index);
int af_packet_delete_if(vlib_main_t * vm, u8 * host_if_name);
u8 * host_if_name = NULL;
u8 hwaddr [6];
u8 * hw_addr_ptr = 0;
+ u32 sw_if_index;
int r;
/* Get a line of input. */
if (host_if_name == NULL)
return clib_error_return (0, "missing host interface name");
- r = af_packet_create_if(vm, host_if_name, hw_addr_ptr);
+ r = af_packet_create_if(vm, host_if_name, hw_addr_ptr, &sw_if_index);
if (r == VNET_API_ERROR_SYSCALL_ERROR_1)
return clib_error_return(0, "%s (errno %d)", strerror (errno), errno);
if (r == VNET_API_ERROR_SUBIF_ALREADY_EXISTS)
return clib_error_return(0, "Interface elready exists");
+ vlib_cli_output(vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main(), sw_if_index);
return 0;
}
renumber, custom_dev_instance, hw);
vec_free(sock_filename);
+ vlib_cli_output(vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main(), sw_if_index);
return 0;
}
int r;
u8 is_pipe = 0;
u8 is_master = 0;
+ u32 sw_if_index = ~0;
/* Get a line of input. */
if (! unformat_user (input, unformat_line_input, line_input))
if (host_if_name == NULL)
return clib_error_return (0, "missing host interface name");
- r = netmap_create_if(vm, host_if_name, hw_addr_ptr, is_pipe, is_master);
+ r = netmap_create_if(vm, host_if_name, hw_addr_ptr, is_pipe, is_master, &sw_if_index);
if (r == VNET_API_ERROR_SYSCALL_ERROR_1)
return clib_error_return(0, "%s (errno %d)", strerror (errno), errno);
if (r == VNET_API_ERROR_SUBIF_ALREADY_EXISTS)
return clib_error_return(0, "Interface already exists");
+ vlib_cli_output(vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main(), sw_if_index);
return 0;
}
int
netmap_create_if(vlib_main_t * vm, u8 * if_name, u8 * hw_addr_set,
- u8 is_pipe, u8 is_master)
+ u8 is_pipe, u8 is_master, u32 *sw_if_index)
{
netmap_main_t * nm = &netmap_main;
int ret = 0;
mhash_set_mem (&nm->if_index_by_host_if_name, if_name, &nif->if_index, 0);
+ if (sw_if_index)
+ *sw_if_index = nif->sw_if_index;
+
return 0;
error:
extern vnet_device_class_t netmap_device_class;
extern vlib_node_registration_t netmap_input_node;
-int netmap_create_if(vlib_main_t * vm, u8 * host_if_name, u8 * hw_addr_set, u8 is_pipe, u8 is_master);
+int netmap_create_if(vlib_main_t * vm, u8 * host_if_name, u8 * hw_addr_set,
+ u8 is_pipe, u8 is_master, u32 *sw_if_index);
int netmap_delete_if(vlib_main_t * vm, u8 * host_if_name);
renumber, custom_dev_instance, hw);
vec_free(sock_filename);
-
+ vlib_cli_output(vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main(), sw_if_index);
return 0;
}
if (rv)
return clib_error_return (0, "vnet_create_loopback_interface failed");
+ vlib_cli_output(vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main(), sw_if_index);
return 0;
}
int rv;
u32 num_m_args = 0;
u8 is_add = 1;
+ u32 sw_if_index;
/* Get a line of input. */
if (! unformat_user (input, unformat_line_input, line_input))
clib_memcpy(&a->src, &src, sizeof(src));
clib_memcpy(&a->dst, &dst, sizeof(dst));
- rv = vnet_gre_add_del_tunnel (a, 0);
+ rv = vnet_gre_add_del_tunnel (a, &sw_if_index);
switch(rv)
{
case 0:
+ vlib_cli_output(vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main(), sw_if_index);
break;
case VNET_API_ERROR_INVALID_VALUE:
return clib_error_return (0, "GRE tunnel already exists...");
if (error) goto done;
hash_set (hi->sub_interface_sw_if_index_by_id, id, sw_if_index);
hash_set_mem (im->sw_if_index_by_sup_and_sub, kp, sw_if_index);
+ vlib_cli_output(vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main(), sw_if_index);
}
if (error)
switch(rv)
{
case 0:
+ vlib_cli_output(vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main(), sw_if_index);
break;
case VNET_API_ERROR_INVALID_VALUE:
return clib_error_return (0, "session already exists...");
switch (rv)
{
case 0:
+ if (!is_del)
+ vlib_cli_output(vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main(), tunnel_intfc_sw_if_index);
break;
case VNET_API_ERROR_NO_SUCH_INNER_FIB:
u8 is_del = 0;
u8 l2_only = 0;
u32 tx_sw_if_index;
+ u32 sw_if_index = ~0;
/* Get a line of input. */
if (! unformat_user (input, unformat_line_input, line_input))
rv = vnet_mpls_ethernet_add_del_tunnel (dst, &intfc, mask_width,
inner_fib_id, tx_sw_if_index,
- 0 /* tunnel sw_if_index */,
+ &sw_if_index,
l2_only, !is_del);
switch (rv)
{
+ case 0:
+ if (!is_del)
+ vlib_cli_output(vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main(), sw_if_index);
+ break;
case VNET_API_ERROR_NO_SUCH_FIB:
return clib_error_return (0, "rx fib ID %d doesn't exist\n",
inner_fib_id);
break;
default:
+ return clib_error_return (0, "vnet_mpls_ethernet_add_del_tunnel returned %d", rv);
break;
}
return 0;
l2_only, !is_del);
switch (rv)
{
+ case 0:
+ if (!is_del)
+ vlib_cli_output(vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main(), new_tunnel_index);
+ break;
case VNET_API_ERROR_NO_SUCH_FIB:
return clib_error_return (0, "rx fib ID %d doesn't exist\n",
inner_fib_id);
break;
default:
+ return clib_error_return (0, "vnet_mpls_ethernet_add_del_policy_tunnel returned %d", rv);
break;
}
- if (!is_del)
- vlib_cli_output (vm, "tunnel index %d", new_tunnel_index);
-
return 0;
}
return 0;
}
- vlib_cli_output (vm, "Created %U for Linux tap '%s'",
- format_vnet_sw_if_index_name, tm->vnet_main,
- sw_if_index, intfc_name);
-
+ vlib_cli_output(vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main(), sw_if_index);
return 0;
-
}
VLIB_CLI_COMMAND (tap_connect_command, static) = {
int rv;
u32 tmp;
vnet_vxlan_gpe_add_del_tunnel_args_t _a, * a = &_a;
+ u32 sw_if_index;
/* Get a line of input. */
if (! unformat_user (input, unformat_line_input, line_input))
foreach_gpe_copy_field;
#undef _
- rv = vnet_vxlan_gpe_add_del_tunnel (a, 0 /* hw_if_indexp */);
+ rv = vnet_vxlan_gpe_add_del_tunnel (a, &sw_if_index);
switch(rv)
{
case 0:
+ vlib_cli_output(vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main(), sw_if_index);
break;
case VNET_API_ERROR_INVALID_DECAP_NEXT:
return clib_error_return (0, "invalid decap-next...");
u32 tmp;
int rv;
vnet_vxlan_add_del_tunnel_args_t _a, * a = &_a;
+ u32 sw_if_index;
/* Get a line of input. */
if (! unformat_user (input, unformat_line_input, line_input))
else foreach_copy_ipv6
#undef _
- rv = vnet_vxlan_add_del_tunnel (a, 0 /* hw_if_indexp */);
+ rv = vnet_vxlan_add_del_tunnel (a, &sw_if_index);
switch(rv)
{
case 0:
+ if (is_add)
+ vlib_cli_output(vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main(), sw_if_index);
break;
case VNET_API_ERROR_INVALID_DECAP_NEXT:
return clib_error_return (0, "invalid decap-next...");
vec_add1 (host_if_name, 0);
rv = af_packet_create_if(vm, host_if_name,
- mp->use_random_hw_addr ? 0 : mp->hw_addr);
+ mp->use_random_hw_addr ? 0 : mp->hw_addr, 0);
vec_free(host_if_name);
vec_add1 (if_name, 0);
rv = netmap_create_if(vm, if_name, mp->use_random_hw_addr ? 0 : mp->hw_addr,
- mp->is_pipe, mp->is_master);
+ mp->is_pipe, mp->is_master, 0);
vec_free(if_name);