X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Fip4_forward.c;h=e85c888f6695a0b4c58c6d9f8a66728332f3bdc2;hb=2f4586d9b3507243918c11ce99b9d151d5bde7a0;hp=57ad658b83f98e5d763073f29a24ad58c96161ca;hpb=76b19ceafcf892b56a679d3d7fe5c6f4b93f7de7;p=vpp.git diff --git a/src/vnet/ip/ip4_forward.c b/src/vnet/ip/ip4_forward.c index 57ad658b83f..e85c888f669 100644 --- a/src/vnet/ip/ip4_forward.c +++ b/src/vnet/ip/ip4_forward.c @@ -52,6 +52,7 @@ #include #include #include +#include #include #include /* for mFIB table and entry creation */ #include @@ -60,6 +61,7 @@ #include #include #include +#include /** @brief IPv4 lookup node. @node ip4-lookup @@ -101,7 +103,6 @@ VLIB_NODE_FN (ip4_lookup_node) (vlib_main_t * vm, vlib_node_runtime_t * node, static u8 *format_ip4_lookup_trace (u8 * s, va_list * args); -/* *INDENT-OFF* */ VLIB_REGISTER_NODE (ip4_lookup_node) = { .name = "ip4-lookup", @@ -110,7 +111,6 @@ VLIB_REGISTER_NODE (ip4_lookup_node) = .n_next_nodes = IP_LOOKUP_N_NEXT, .next_nodes = IP4_LOOKUP_NEXT_NODES, }; -/* *INDENT-ON* */ VLIB_NODE_FN (ip4_load_balance_node) (vlib_main_t * vm, vlib_node_runtime_t * node, @@ -266,7 +266,6 @@ VLIB_NODE_FN (ip4_load_balance_node) (vlib_main_t * vm, return frame->n_vectors; } -/* *INDENT-OFF* */ VLIB_REGISTER_NODE (ip4_load_balance_node) = { .name = "ip4-load-balance", @@ -274,7 +273,6 @@ VLIB_REGISTER_NODE (ip4_load_balance_node) = .sibling_of = "ip4-lookup", .format_trace = format_ip4_lookup_trace, }; -/* *INDENT-ON* */ #ifndef CLIB_MARCH_VARIANT /* get first interface address */ @@ -286,7 +284,6 @@ ip4_interface_first_address (ip4_main_t * im, u32 sw_if_index, ip_interface_address_t *ia = 0; ip4_address_t *result = 0; - /* *INDENT-OFF* */ foreach_ip_interface_address (lm, ia, sw_if_index, 1 /* honor unnumbered */ , @@ -296,7 +293,6 @@ ip4_interface_first_address (ip4_main_t * im, u32 sw_if_index, result = a; break; })); - /* *INDENT-OFF* */ if (result_ia) *result_ia = result ? ia : 0; return result; @@ -655,9 +651,11 @@ ip4_add_del_interface_address_internal (vlib_main_t * vm, error = vnet_sw_interface_supports_addressing (vnm, sw_if_index); if (error) - return error; + { + vnm->api_errno = VNET_API_ERROR_UNSUPPORTED; + return error; + } - vec_validate (im->fib_index_by_sw_if_index, sw_if_index); ip4_addr_fib_init (&ip4_af, address, vec_elt (im->fib_index_by_sw_if_index, sw_if_index)); vec_add1 (addr_fib, ip4_af); @@ -667,7 +665,6 @@ ip4_add_del_interface_address_internal (vlib_main_t * vm, * subnets on interfaces. Easy fix - disallow overlapping subnets, like * most routers do. */ - /* *INDENT-OFF* */ if (!is_del) { /* When adding an address check that it does not conflict @@ -728,7 +725,6 @@ ip4_add_del_interface_address_internal (vlib_main_t * vm, } } } - /* *INDENT-ON* */ if_address_index = ip_interface_address_find (lm, addr_fib, address_length); @@ -849,7 +845,6 @@ ip4_directed_broadcast (u32 sw_if_index, u8 enable) * when directed broadcast is enabled, the subnet braodcast route will forward * packets using an adjacency with a broadcast MAC. otherwise it drops */ - /* *INDENT-OFF* */ foreach_ip_interface_address(&im->lookup_main, ia, sw_if_index, 0, ({ @@ -873,7 +868,6 @@ ip4_directed_broadcast (u32 sw_if_index, u8 enable) &pfx, sw_if_index); } })); - /* *INDENT-ON* */ } #endif @@ -885,9 +879,6 @@ ip4_sw_interface_admin_up_down (vnet_main_t * vnm, u32 sw_if_index, u32 flags) ip4_address_t *a; u32 is_admin_up, fib_index; - /* Fill in lookup tables with default table (0). */ - vec_validate (im->fib_index_by_sw_if_index, sw_if_index); - vec_validate_init_empty (im-> lookup_main.if_address_pool_index_by_sw_if_index, sw_if_index, ~0); @@ -896,7 +887,6 @@ ip4_sw_interface_admin_up_down (vnet_main_t * vnm, u32 sw_if_index, u32 flags) fib_index = vec_elt (im->fib_index_by_sw_if_index, sw_if_index); - /* *INDENT-OFF* */ foreach_ip_interface_address (&im->lookup_main, ia, sw_if_index, 0 /* honor unnumbered */, ({ @@ -910,7 +900,6 @@ ip4_sw_interface_admin_up_down (vnet_main_t * vnm, u32 sw_if_index, u32 flags) im, fib_index, a, ia->address_length); })); - /* *INDENT-ON* */ return 0; } @@ -918,7 +907,6 @@ ip4_sw_interface_admin_up_down (vnet_main_t * vnm, u32 sw_if_index, u32 flags) VNET_SW_INTERFACE_ADMIN_UP_DOWN_FUNCTION (ip4_sw_interface_admin_up_down); /* Built-in ip4 unicast rx feature path definition */ -/* *INDENT-OFF* */ VNET_FEATURE_ARC_INIT (ip4_unicast, static) = { .arc_name = "ip4-unicast", @@ -1057,18 +1045,22 @@ VNET_FEATURE_INIT (ip4_interface_output, static) = .node_name = "interface-output", .runs_before = 0, /* not before any other features */ }; -/* *INDENT-ON* */ static clib_error_t * ip4_sw_interface_add_del (vnet_main_t * vnm, u32 sw_if_index, u32 is_add) { ip4_main_t *im = &ip4_main; - /* Fill in lookup tables with default table (0). */ - vec_validate (im->fib_index_by_sw_if_index, sw_if_index); - vec_validate (im->mfib_index_by_sw_if_index, sw_if_index); + vec_validate_init_empty (im->fib_index_by_sw_if_index, sw_if_index, ~0); + vec_validate_init_empty (im->mfib_index_by_sw_if_index, sw_if_index, ~0); - if (!is_add) + if (is_add) + { + /* Fill in lookup tables with default table (0). */ + im->fib_index_by_sw_if_index[sw_if_index] = 0; + im->mfib_index_by_sw_if_index[sw_if_index] = 0; + } + else { ip4_main_t *im4 = &ip4_main; ip_lookup_main_t *lm4 = &im4->lookup_main; @@ -1077,14 +1069,21 @@ ip4_sw_interface_add_del (vnet_main_t * vnm, u32 sw_if_index, u32 is_add) vlib_main_t *vm = vlib_get_main (); vnet_sw_interface_update_unnumbered (sw_if_index, ~0, 0); - /* *INDENT-OFF* */ foreach_ip_interface_address (lm4, ia, sw_if_index, 0, ({ address = ip_interface_address_get_address (lm4, ia); ip4_add_del_interface_address(vm, sw_if_index, address, ia->address_length, 1); })); - /* *INDENT-ON* */ ip4_mfib_interface_enable_disable (sw_if_index, 0); + + if (0 != im4->fib_index_by_sw_if_index[sw_if_index]) + fib_table_bind (FIB_PROTOCOL_IP4, sw_if_index, 0); + if (0 != im4->mfib_index_by_sw_if_index[sw_if_index]) + mfib_table_bind (FIB_PROTOCOL_IP4, sw_if_index, 0); + + /* Erase the lookup tables just in case */ + im4->fib_index_by_sw_if_index[sw_if_index] = ~0; + im4->mfib_index_by_sw_if_index[sw_if_index] = ~0; } vnet_feature_enable_disable ("ip4-unicast", "ip4-not-enabled", sw_if_index, @@ -1382,14 +1381,11 @@ ip4_tcp_udp_validate_checksum (vlib_main_t * vm, vlib_buffer_t * p0) } #endif -/* *INDENT-OFF* */ -VNET_FEATURE_ARC_INIT (ip4_local) = -{ - .arc_name = "ip4-local", - .start_nodes = VNET_FEATURES ("ip4-local"), +VNET_FEATURE_ARC_INIT (ip4_local) = { + .arc_name = "ip4-local", + .start_nodes = VNET_FEATURES ("ip4-local", "ip4-receive"), .last_in_arc = "ip4-local-end-of-arc", }; -/* *INDENT-ON* */ static inline void ip4_local_l4_csum_validate (vlib_main_t * vm, vlib_buffer_t * p, @@ -1465,10 +1461,10 @@ ip4_local_check_l4_csum_x2 (vlib_main_t * vm, vlib_buffer_t ** b, if (PREDICT_FALSE (ip4_local_need_csum_check (is_tcp_udp[0], b[0]) || ip4_local_need_csum_check (is_tcp_udp[1], b[1]))) { - if (is_tcp_udp[0]) + if (is_tcp_udp[0] && !ip4_local_csum_is_offloaded (b[0])) ip4_local_l4_csum_validate (vm, b[0], ih[0], is_udp[0], &error[0], &good_tcp_udp[0]); - if (is_tcp_udp[1]) + if (is_tcp_udp[1] && !ip4_local_csum_is_offloaded (b[1])) ip4_local_l4_csum_validate (vm, b[1], ih[1], is_udp[1], &error[1], &good_tcp_udp[1]); } @@ -1494,9 +1490,8 @@ ip4_local_set_next_and_error (vlib_node_runtime_t * error_node, next_index = *next; if (PREDICT_TRUE (error == (u8) IP4_ERROR_UNKNOWN_PROTOCOL)) { - vnet_feature_arc_start (arc_index, - vnet_buffer (b)->sw_if_index[VLIB_RX], - &next_index, b); + vnet_feature_arc_start ( + arc_index, vnet_buffer (b)->ip.rx_sw_if_index, &next_index, b); *next = next_index; } } @@ -1504,15 +1499,18 @@ ip4_local_set_next_and_error (vlib_node_runtime_t * error_node, typedef struct { + /* The src and fib-index together determine if packet n is the same as n-1 */ ip4_address_t src; + u32 fib_index; u32 lbi; u8 error; u8 first; } ip4_local_last_check_t; static inline void -ip4_local_check_src (vlib_buffer_t * b, ip4_header_t * ip0, - ip4_local_last_check_t * last_check, u8 * error0) +ip4_local_check_src (vlib_buffer_t *b, ip4_header_t *ip0, + ip4_local_last_check_t *last_check, u8 *error0, + int is_receive_dpo) { const dpo_id_t *dpo0; load_balance_t *lb0; @@ -1522,13 +1520,23 @@ ip4_local_check_src (vlib_buffer_t * b, ip4_header_t * ip0, vnet_buffer (b)->sw_if_index[VLIB_TX] != ~0 ? vnet_buffer (b)->sw_if_index[VLIB_TX] : vnet_buffer (b)->ip.fib_index; + vnet_buffer (b)->ip.rx_sw_if_index = vnet_buffer (b)->sw_if_index[VLIB_RX]; + if (is_receive_dpo) + { + receive_dpo_t *rd; + rd = receive_dpo_get (vnet_buffer (b)->ip.adj_index[VLIB_TX]); + if (rd->rd_sw_if_index != ~0) + vnet_buffer (b)->ip.rx_sw_if_index = rd->rd_sw_if_index; + } + /* * vnet_buffer()->ip.adj_index[VLIB_RX] will be set to the index of the * adjacency for the destination address (the local interface address). * vnet_buffer()->ip.adj_index[VLIB_TX] will be set to the index of the * adjacency for the source address (the remote sender's address) */ - if (PREDICT_TRUE (last_check->src.as_u32 != ip0->src_address.as_u32) || + if (PREDICT_TRUE ((last_check->src.as_u32 != ip0->src_address.as_u32)) || + (last_check->fib_index != vnet_buffer (b)->ip.fib_index) || last_check->first) { lbi0 = ip4_fib_forwarding_lookup (vnet_buffer (b)->ip.fib_index, @@ -1564,6 +1572,7 @@ ip4_local_check_src (vlib_buffer_t * b, ip4_header_t * ip0, last_check->lbi = lbi0; last_check->error = *error0; last_check->first = 0; + last_check->fib_index = vnet_buffer (b)->ip.fib_index; } else { @@ -1575,8 +1584,9 @@ ip4_local_check_src (vlib_buffer_t * b, ip4_header_t * ip0, } static inline void -ip4_local_check_src_x2 (vlib_buffer_t ** b, ip4_header_t ** ip, - ip4_local_last_check_t * last_check, u8 * error) +ip4_local_check_src_x2 (vlib_buffer_t **b, ip4_header_t **ip, + ip4_local_last_check_t *last_check, u8 *error, + int is_receive_dpo) { const dpo_id_t *dpo[2]; load_balance_t *lb[2]; @@ -1597,6 +1607,24 @@ ip4_local_check_src_x2 (vlib_buffer_t ** b, ip4_header_t ** ip, vnet_buffer (b[1])->sw_if_index[VLIB_TX] : vnet_buffer (b[1])->ip.fib_index; + not_last_hit |= vnet_buffer (b[0])->ip.fib_index ^ last_check->fib_index; + not_last_hit |= vnet_buffer (b[1])->ip.fib_index ^ last_check->fib_index; + + vnet_buffer (b[0])->ip.rx_sw_if_index = + vnet_buffer (b[0])->sw_if_index[VLIB_RX]; + vnet_buffer (b[1])->ip.rx_sw_if_index = + vnet_buffer (b[1])->sw_if_index[VLIB_RX]; + if (is_receive_dpo) + { + const receive_dpo_t *rd0, *rd1; + rd0 = receive_dpo_get (vnet_buffer (b[0])->ip.adj_index[VLIB_TX]); + rd1 = receive_dpo_get (vnet_buffer (b[1])->ip.adj_index[VLIB_TX]); + if (rd0->rd_sw_if_index != ~0) + vnet_buffer (b[0])->ip.rx_sw_if_index = rd0->rd_sw_if_index; + if (rd1->rd_sw_if_index != ~0) + vnet_buffer (b[1])->ip.rx_sw_if_index = rd1->rd_sw_if_index; + } + /* * vnet_buffer()->ip.adj_index[VLIB_RX] will be set to the index of the * adjacency for the destination address (the local interface address). @@ -1643,6 +1671,7 @@ ip4_local_check_src_x2 (vlib_buffer_t ** b, ip4_header_t ** ip, last_check->lbi = lbi[1]; last_check->error = error[1]; last_check->first = 0; + last_check->fib_index = vnet_buffer (b[1])->ip.fib_index; } else { @@ -1693,9 +1722,9 @@ ip4_local_classify (vlib_buffer_t * b, ip4_header_t * ip, u16 * next) } static inline uword -ip4_local_inline (vlib_main_t * vm, - vlib_node_runtime_t * node, - vlib_frame_t * frame, int head_of_feature_arc) +ip4_local_inline (vlib_main_t *vm, vlib_node_runtime_t *node, + vlib_frame_t *frame, int head_of_feature_arc, + int is_receive_dpo) { u32 *from, n_left_from; vlib_node_runtime_t *error_node = @@ -1712,10 +1741,11 @@ ip4_local_inline (vlib_main_t * vm, * member to make sure the .lbi is initialised for the first * packet. */ - .src = {.as_u32 = 0}, + .src = { .as_u32 = 0 }, .lbi = ~0, .error = IP4_ERROR_UNKNOWN_PROTOCOL, .first = 1, + .fib_index = 0, }; from = vlib_frame_vector_args (frame); @@ -1760,19 +1790,21 @@ ip4_local_inline (vlib_main_t * vm, if (PREDICT_TRUE (not_batch == 0)) { ip4_local_check_l4_csum_x2 (vm, b, ip, error); - ip4_local_check_src_x2 (b, ip, &last_check, error); + ip4_local_check_src_x2 (b, ip, &last_check, error, is_receive_dpo); } else { if (!pt[0]) { ip4_local_check_l4_csum (vm, b[0], ip[0], &error[0]); - ip4_local_check_src (b[0], ip[0], &last_check, &error[0]); + ip4_local_check_src (b[0], ip[0], &last_check, &error[0], + is_receive_dpo); } if (!pt[1]) { ip4_local_check_l4_csum (vm, b[1], ip[1], &error[1]); - ip4_local_check_src (b[1], ip[1], &last_check, &error[1]); + ip4_local_check_src (b[1], ip[1], &last_check, &error[1], + is_receive_dpo); } } @@ -1800,7 +1832,8 @@ ip4_local_inline (vlib_main_t * vm, goto skip_check; ip4_local_check_l4_csum (vm, b[0], ip[0], &error[0]); - ip4_local_check_src (b[0], ip[0], &last_check, &error[0]); + ip4_local_check_src (b[0], ip[0], &last_check, &error[0], + is_receive_dpo); skip_check: @@ -1819,17 +1852,17 @@ ip4_local_inline (vlib_main_t * vm, VLIB_NODE_FN (ip4_local_node) (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { - return ip4_local_inline (vm, node, frame, 1 /* head of feature arc */ ); + return ip4_local_inline (vm, node, frame, 1 /* head of feature arc */, + 0 /* is_receive_dpo */); } -/* *INDENT-OFF* */ VLIB_REGISTER_NODE (ip4_local_node) = { .name = "ip4-local", .vector_size = sizeof (u32), .format_trace = format_ip4_forward_next_trace, .n_errors = IP4_N_ERROR, - .error_strings = ip4_error_strings, + .error_counters = ip4_error_counters, .n_next_nodes = IP_LOCAL_N_NEXT, .next_nodes = { @@ -1837,20 +1870,32 @@ VLIB_REGISTER_NODE (ip4_local_node) = [IP_LOCAL_NEXT_PUNT] = "ip4-punt", [IP_LOCAL_NEXT_UDP_LOOKUP] = "ip4-udp-lookup", [IP_LOCAL_NEXT_ICMP] = "ip4-icmp-input", - [IP_LOCAL_NEXT_REASSEMBLY] = "ip4-full-reassembly", + [IP_LOCAL_NEXT_REASSEMBLY] = "ip4-local-full-reassembly", }, }; -/* *INDENT-ON* */ +VLIB_NODE_FN (ip4_receive_local_node) +(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame) +{ + return ip4_local_inline (vm, node, frame, 1 /* head of feature arc */, + 1 /* is_receive_dpo */); +} + +VLIB_REGISTER_NODE (ip4_receive_local_node) = { + .name = "ip4-receive", + .vector_size = sizeof (u32), + .format_trace = format_ip4_forward_next_trace, + .sibling_of = "ip4-local" +}; VLIB_NODE_FN (ip4_local_end_of_arc_node) (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { - return ip4_local_inline (vm, node, frame, 0 /* head of feature arc */ ); + return ip4_local_inline (vm, node, frame, 0 /* head of feature arc */, + 0 /* is_receive_dpo */); } -/* *INDENT-OFF* */ VLIB_REGISTER_NODE (ip4_local_end_of_arc_node) = { .name = "ip4-local-end-of-arc", .vector_size = sizeof (u32), @@ -1864,7 +1909,6 @@ VNET_FEATURE_INIT (ip4_local_end_of_arc, static) = { .node_name = "ip4-local-end-of-arc", .runs_before = 0, /* not before any other features */ }; -/* *INDENT-ON* */ #ifndef CLIB_MARCH_VARIANT void @@ -1927,14 +1971,12 @@ show_ip_local_command_fn (vlib_main_t * vm, * 47 * @cliexend ?*/ -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (show_ip_local, static) = { .path = "show ip local", .function = show_ip_local_command_fn, .short_help = "show ip local", }; -/* *INDENT-ON* */ typedef enum { @@ -2001,7 +2043,9 @@ ip4_ttl_inc (vlib_buffer_t * b, ip4_header_t * ip) ttl += 1; ip->ttl = ttl; - ASSERT (ip4_header_checksum_is_valid (ip)); + ASSERT (ip4_header_checksum_is_valid (ip) || + (vnet_buffer (b)->oflags & VNET_BUFFER_OFFLOAD_F_IP_CKSUM) || + (vnet_buffer (b)->oflags & VNET_BUFFER_OFFLOAD_F_OUTER_IP_CKSUM)); } /* Decrement TTL & update checksum. @@ -2043,7 +2087,8 @@ ip4_ttl_and_checksum_check (vlib_buffer_t * b, ip4_header_t * ip, u16 * next, /* Verify checksum. */ ASSERT (ip4_header_checksum_is_valid (ip) || - (vnet_buffer (b)->oflags & VNET_BUFFER_OFFLOAD_F_IP_CKSUM)); + (vnet_buffer (b)->oflags & VNET_BUFFER_OFFLOAD_F_IP_CKSUM) || + (vnet_buffer (b)->oflags & VNET_BUFFER_OFFLOAD_F_OUTER_IP_CKSUM)); } always_inline uword @@ -2178,9 +2223,6 @@ ip4_rewrite_inline (vlib_main_t *vm, vlib_node_runtime_t *node, adj0->ia_cfg_index); next[0] = next_index; - if (is_midchain) - vnet_calc_checksums_inline (vm, b[0], 1 /* is_ip4 */ , - 0 /* is_ip6 */ ); } else { @@ -2203,9 +2245,6 @@ ip4_rewrite_inline (vlib_main_t *vm, vlib_node_runtime_t *node, &next_index, b[1], adj1->ia_cfg_index); next[1] = next_index; - if (is_midchain) - vnet_calc_checksums_inline (vm, b[1], 1 /* is_ip4 */ , - 0 /* is_ip6 */ ); } else { @@ -2355,9 +2394,6 @@ ip4_rewrite_inline (vlib_main_t *vm, vlib_node_runtime_t *node, if (is_midchain) { - vnet_calc_checksums_inline (vm, b[0], 1 /* is_ip4 */ , - 0 /* is_ip6 */ ); - /* Guess we are only writing on ipv4 header. */ vnet_rewrite_one_header (adj0[0], ip0, sizeof (ip4_header_t)); } @@ -2461,10 +2497,6 @@ ip4_rewrite_inline (vlib_main_t *vm, vlib_node_runtime_t *node, if (is_midchain) { - /* this acts on the packet that is about to be encapped */ - vnet_calc_checksums_inline (vm, b[0], 1 /* is_ip4 */ , - 0 /* is_ip6 */ ); - /* Guess we are only writing on ipv4 header. */ vnet_rewrite_one_header (adj0[0], ip0, sizeof (ip4_header_t)); } @@ -2591,7 +2623,6 @@ VLIB_NODE_FN (ip4_mcast_midchain_node) (vlib_main_t * vm, return ip4_rewrite_inline (vm, node, frame, 0, 1, 1); } -/* *INDENT-OFF* */ VLIB_REGISTER_NODE (ip4_rewrite_node) = { .name = "ip4-rewrite", .vector_size = sizeof (u32), @@ -2636,7 +2667,6 @@ VLIB_REGISTER_NODE (ip4_midchain_node) = { .format_trace = format_ip4_rewrite_trace, .sibling_of = "ip4-rewrite", }; -/* *INDENT-ON */ static clib_error_t * set_ip_flow_hash_command_fn (vlib_main_t * vm, @@ -2768,15 +2798,12 @@ set_ip_flow_hash_command_fn (vlib_main_t * vm, * [0] [@0]: dpo-drop ip6 * @cliexend ?*/ -/* *INDENT-OFF* */ -VLIB_CLI_COMMAND (set_ip_flow_hash_command, static) = -{ +VLIB_CLI_COMMAND (set_ip_flow_hash_command, static) = { .path = "set ip flow-hash", - .short_help = - "set ip flow-hash table [src] [dst] [sport] [dport] [proto] [reverse]", + .short_help = "set ip flow-hash table [src] [dst] [sport] " + "[dport] [proto] [reverse] [gtpv1teid]", .function = set_ip_flow_hash_command_fn, }; -/* *INDENT-ON* */ #ifndef CLIB_MARCH_VARIANT int @@ -2893,7 +2920,6 @@ set_ip_classify_command_fn (vlib_main_t * vm, * Example of how to assign a classification table to an interface: * @cliexcmd{set ip classify intfc GigabitEthernet2/0/0 table-index 1} ?*/ -/* *INDENT-OFF* */ VLIB_CLI_COMMAND (set_ip_classify_command, static) = { .path = "set ip classify", @@ -2901,7 +2927,6 @@ VLIB_CLI_COMMAND (set_ip_classify_command, static) = "set ip classify intfc table-index ", .function = set_ip_classify_command_fn, }; -/* *INDENT-ON* */ /* * fd.io coding-style-patch-verification: ON