diff options
Diffstat (limited to 'src/plugins/nsh/nsh_api.c')
-rw-r--r-- | src/plugins/nsh/nsh_api.c | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/src/plugins/nsh/nsh_api.c b/src/plugins/nsh/nsh_api.c index 72ca2d28671..ccae5544c85 100644 --- a/src/plugins/nsh/nsh_api.c +++ b/src/plugins/nsh/nsh_api.c @@ -104,6 +104,61 @@ typedef enum _(NSH_ADD_DEL_MAP, nsh_add_del_map) \ _(NSH_MAP_DUMP, nsh_map_dump) +/** + * @brief CLI function for NSH admin up/down + * + * @param *vnm + * @param nsh_hw_if + * @param flag + * + * @return *rc + * + */ +static clib_error_t * +nsh_interface_admin_up_down (vnet_main_t * vnm, u32 nsh_hw_if, u32 flags) +{ + if (flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP) + vnet_hw_interface_set_flags (vnm, nsh_hw_if, + VNET_HW_INTERFACE_FLAG_LINK_UP); + else + vnet_hw_interface_set_flags (vnm, nsh_hw_if, 0); + + return 0; +} + +static uword +dummy_interface_tx (vlib_main_t * vm, + vlib_node_runtime_t * node, vlib_frame_t * frame) +{ + clib_warning ("you shouldn't be here, leaking buffers..."); + return frame->n_vectors; +} + +/** + * @brief Naming for NSH tunnel + * + * @param *s formatting string + * @param *args + * + * @return *s formatted string + * + */ +static u8 * +format_nsh_name (u8 * s, va_list * args) +{ + u32 dev_instance = va_arg (*args, u32); + return format (s, "nsh_tunnel%d", dev_instance); +} + +/* *INDENT-OFF* */ +VNET_DEVICE_CLASS (nsh_device_class, static) = { + .name = "NSH", + .format_device_name = format_nsh_name, + .tx_function = dummy_interface_tx, + .admin_up_down_function = nsh_interface_admin_up_down, +}; +/* *INDENT-ON* */ + static void send_nsh_entry_details (nsh_entry_t * t, unix_shared_memory_queue_t * q, u32 context) { @@ -329,7 +384,6 @@ nsh_header_rewrite (nsh_entry_t * nsh_entry) return 0; } -extern vnet_device_class_t nsh_device_class; extern vnet_hw_interface_class_t nsh_hw_class; /** |