X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fl2%2Fl2_xcrw.c;h=540ce3f9c26aa6d356dc40877fc6388ac769dbe5;hb=7adf5735ef4cc5656a71c97138c4fa35fb6cbeb9;hp=70610a853d3ac8afe13769c95ff95238bf501558;hpb=7cd468a3d7dee7d6c92f69a0bb7061ae208ec727;p=vpp.git diff --git a/src/vnet/l2/l2_xcrw.c b/src/vnet/l2/l2_xcrw.c index 70610a853d3..540ce3f9c26 100644 --- a/src/vnet/l2/l2_xcrw.c +++ b/src/vnet/l2/l2_xcrw.c @@ -57,9 +57,11 @@ format_l2_xcrw_trace (u8 * s, va_list * args) return s; } -l2_xcrw_main_t l2_xcrw_main; +extern l2_xcrw_main_t l2_xcrw_main; -static vlib_node_registration_t l2_xcrw_node; +#ifndef CLIB_MARCH_VARIANT +l2_xcrw_main_t l2_xcrw_main; +#endif /* CLIB_MARCH_VARIANT */ static char *l2_xcrw_error_strings[] = { #define _(sym,string) string, @@ -67,9 +69,8 @@ static char *l2_xcrw_error_strings[] = { #undef _ }; -static uword -l2_xcrw_node_fn (vlib_main_t * vm, - vlib_node_runtime_t * node, vlib_frame_t * frame) +VLIB_NODE_FN (l2_xcrw_node) (vlib_main_t * vm, + vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 n_left_from, *from, *to_next; l2_xcrw_next_t next_index; @@ -238,8 +239,7 @@ l2_xcrw_node_fn (vlib_main_t * vm, } /* *INDENT-OFF* */ -VLIB_REGISTER_NODE (l2_xcrw_node, static) = { - .function = l2_xcrw_node_fn, +VLIB_REGISTER_NODE (l2_xcrw_node) = { .name = "l2-xcrw", .vector_size = sizeof (u32), .format_trace = format_l2_xcrw_trace, @@ -257,8 +257,9 @@ VLIB_REGISTER_NODE (l2_xcrw_node, static) = { }; /* *INDENT-ON* */ -VLIB_NODE_FUNCTION_MULTIARCH (l2_xcrw_node, l2_xcrw_node_fn) - clib_error_t *l2_xcrw_init (vlib_main_t * vm) +#ifndef CLIB_MARCH_VARIANT +clib_error_t * +l2_xcrw_init (vlib_main_t * vm) { l2_xcrw_main_t *mp = &l2_xcrw_main; @@ -271,14 +272,6 @@ VLIB_NODE_FUNCTION_MULTIARCH (l2_xcrw_node, l2_xcrw_node_fn) VLIB_INIT_FUNCTION (l2_xcrw_init); -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; -} - static u8 * format_xcrw_name (u8 * s, va_list * args) { @@ -290,7 +283,6 @@ format_xcrw_name (u8 * s, va_list * args) VNET_DEVICE_CLASS (xcrw_device_class,static) = { .name = "Xcrw", .format_device_name = format_xcrw_name, - .tx_function = dummy_interface_tx, }; /* *INDENT-ON* */ @@ -306,7 +298,7 @@ create_xcrw_interface (vlib_main_t * vm) u32 sw_if_index; /* mac address doesn't really matter */ - memset (address, 0, sizeof (address)); + clib_memset (address, 0, sizeof (address)); address[2] = 0x12; /* can returns error iff phy != 0 */ @@ -352,7 +344,7 @@ vnet_configure_l2_xcrw (vlib_main_t * vm, vnet_main_t * vnm, vec_validate (xcm->adj_by_sw_if_index, t->l2_sw_if_index); a = vec_elt_at_index (xcm->adj_by_sw_if_index, t->l2_sw_if_index); - memset (a, 0, sizeof (*a)); + clib_memset (a, 0, sizeof (*a)); a->rewrite_header.sw_if_index = tx_fib_index; @@ -366,8 +358,8 @@ vnet_configure_l2_xcrw (vlib_main_t * vm, vnet_main_t * vnm, if (vec_len (rewrite)) vnet_rewrite_set_data (a[0], rewrite, vec_len (rewrite)); - set_int_l2_mode (vm, vnm, MODE_L2_XC, t->l2_sw_if_index, 0, 0, 0, - t->tunnel_sw_if_index); + set_int_l2_mode (vm, vnm, MODE_L2_XC, t->l2_sw_if_index, 0, + L2_BD_PORT_TYPE_NORMAL, 0, t->tunnel_sw_if_index); hash_set (xcm->tunnel_index_by_l2_sw_if_index, t->l2_sw_if_index, t - xcm->tunnels); return 0; @@ -382,9 +374,10 @@ vnet_configure_l2_xcrw (vlib_main_t * vm, vnet_main_t * vnm, a = vec_elt_at_index (xcm->adj_by_sw_if_index, t->l2_sw_if_index); /* Reset adj to drop traffic */ - memset (a, 0, sizeof (*a)); + clib_memset (a, 0, sizeof (*a)); - set_int_l2_mode (vm, vnm, MODE_L3, t->l2_sw_if_index, 0, 0, 0, 0); + set_int_l2_mode (vm, vnm, MODE_L3, t->l2_sw_if_index, 0, + L2_BD_PORT_TYPE_NORMAL, 0, 0); vnet_sw_interface_set_flags (vnm, t->tunnel_sw_if_index, 0 /* down */ ); @@ -409,6 +402,7 @@ set_l2_xcrw_command_fn (vlib_main_t * vm, u8 *rw = 0; vnet_main_t *vnm = vnet_get_main (); int rv; + clib_error_t *error = NULL; if (!unformat_user (input, unformat_line_input, line_input)) @@ -416,8 +410,11 @@ set_l2_xcrw_command_fn (vlib_main_t * vm, if (!unformat (line_input, "%U", unformat_vnet_sw_interface, vnm, &l2_sw_if_index)) - return clib_error_return (0, "unknown input '%U'", - format_unformat_error, line_input); + { + error = clib_error_return (0, "unknown input '%U'", + format_unformat_error, line_input); + goto done; + } while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) { @@ -436,7 +433,10 @@ set_l2_xcrw_command_fn (vlib_main_t * vm, } if (next_node_index == ~0) - return clib_error_return (0, "next node not specified"); + { + error = clib_error_return (0, "next node not specified"); + goto done; + } if (tx_fib_id != ~0) { @@ -448,7 +448,11 @@ set_l2_xcrw_command_fn (vlib_main_t * vm, p = hash_get (ip4_main.fib_index_by_table_id, tx_fib_id); if (p == 0) - return clib_error_return (0, "nonexistent tx_fib_id %d", tx_fib_id); + { + error = + clib_error_return (0, "nonexistent tx_fib_id %d", tx_fib_id); + goto done; + } tx_fib_index = p[0]; } @@ -463,16 +467,21 @@ set_l2_xcrw_command_fn (vlib_main_t * vm, break; case VNET_API_ERROR_INVALID_SW_IF_INDEX: - return clib_error_return (0, "%U not cross-connected", - format_vnet_sw_if_index_name, - vnm, l2_sw_if_index); + error = clib_error_return (0, "%U not cross-connected", + format_vnet_sw_if_index_name, + vnm, l2_sw_if_index); + goto done; + default: - return clib_error_return (0, "vnet_configure_l2_xcrw returned %d", rv); + error = clib_error_return (0, "vnet_configure_l2_xcrw returned %d", rv); + goto done; } +done: vec_free (rw); + unformat_free (line_input); - return 0; + return error; } /*? @@ -497,6 +506,8 @@ VLIB_CLI_COMMAND (set_l2_xcrw_command, static) = { }; /* *INDENT-ON* */ +#endif /* CLIB_MARCH_VARIANT */ + static u8 * format_l2xcrw (u8 * s, va_list * args) {