diff options
-rw-r--r-- | vnet/vnet/ethernet/init.c | 12 | ||||
-rw-r--r-- | vnet/vnet/ip/ip4.h | 50 | ||||
-rw-r--r-- | vnet/vnet/ip/ip4_forward.c | 216 | ||||
-rw-r--r-- | vnet/vnet/ip/ip6.h | 54 | ||||
-rw-r--r-- | vnet/vnet/ip/ip6_forward.c | 186 | ||||
-rw-r--r-- | vnet/vnet/ip/ip_feature_registration.c | 60 | ||||
-rw-r--r-- | vnet/vnet/ip/ip_feature_registration.h | 15 | ||||
-rw-r--r-- | vnet/vnet/mpls/mpls.h | 26 | ||||
-rw-r--r-- | vnet/vnet/mpls/mpls_features.c | 28 |
9 files changed, 341 insertions, 306 deletions
diff --git a/vnet/vnet/ethernet/init.c b/vnet/vnet/ethernet/init.c index 513d9c66c18..7590abdb831 100644 --- a/vnet/vnet/ethernet/init.c +++ b/vnet/vnet/ethernet/init.c @@ -81,12 +81,12 @@ ethernet_feature_init (vlib_main_t * vm) ip_config_main_t *cm = ðernet_main.feature_config_mains[VNET_IP_TX_FEAT]; vnet_config_main_t *vcm = &cm->config_main; - return (ip_feature_init_cast (vm, cm, vcm, - feature_start_nodes, - ARRAY_LEN (feature_start_nodes), - ethernet_main.next_feature[VNET_IP_TX_FEAT], - ðernet_main.feature_nodes - [VNET_IP_TX_FEAT])); + return (vnet_feature_arc_init (vm, vcm, + feature_start_nodes, + ARRAY_LEN (feature_start_nodes), + ethernet_main.next_feature[VNET_IP_TX_FEAT], + ðernet_main.feature_nodes + [VNET_IP_TX_FEAT])); } static clib_error_t * diff --git a/vnet/vnet/ip/ip4.h b/vnet/vnet/ip/ip4.h index 745ce1ebb17..441e32f4646 100644 --- a/vnet/vnet/ip/ip4.h +++ b/vnet/vnet/ip/ip4.h @@ -119,25 +119,25 @@ typedef struct ip4_main_t { /** Feature path configuration lists */ vnet_ip_feature_registration_t * next_feature[VNET_N_IP_FEAT]; - /** Built-in unicast feature path index, see @ref ip_feature_init_cast() */ + /** Built-in unicast feature path index, see @ref vnet_feature_arc_init() */ u32 ip4_unicast_rx_feature_check_access; - /** Built-in unicast feature path index, see @ref ip_feature_init_cast() */ + /** Built-in unicast feature path index, see @ref vnet_feature_arc_init() */ u32 ip4_unicast_rx_feature_source_reachable_via_rx; - /** Built-in unicast feature path index, see @ref ip_feature_init_cast() */ + /** Built-in unicast feature path index, see @ref vnet_feature_arc_init() */ u32 ip4_unicast_rx_feature_source_reachable_via_any; - /** Built-in unicast feature path index, see @ref ip_feature_init_cast() */ + /** Built-in unicast feature path index, see @ref vnet_feature_arc_init() */ u32 ip4_unicast_rx_feature_policer_classify; - /** Built-in unicast feature path index, see @ref ip_feature_init_cast() */ + /** Built-in unicast feature path index, see @ref vnet_feature_arc_init() */ u32 ip4_unicast_rx_feature_flow_classify; - /** Built-in unicast feature path indix, see @ref ip_feature_init_cast() */ + /** Built-in unicast feature path indix, see @ref vnet_feature_arc_init() */ u32 ip4_unicast_rx_feature_ipsec; - /** Built-in unicast feature path index, see @ref ip_feature_init_cast() */ + /** Built-in unicast feature path index, see @ref vnet_feature_arc_init() */ u32 ip4_unicast_rx_feature_vpath; - /** Built-in unicast feature path index, see @ref ip_feature_init_cast() */ + /** Built-in unicast feature path index, see @ref vnet_feature_arc_init() */ u32 ip4_unicast_rx_feature_lookup; - /** Built-in unicast feature path index, see @ref ip_feature_init_cast() */ + /** Built-in unicast feature path index, see @ref vnet_feature_arc_init() */ u32 ip4_unicast_rx_feature_source_and_port_range_check; - /** Built-in unicast feature path indice, see @ref ip_feature_init_cast() */ + /** Built-in unicast feature path indice, see @ref vnet_feature_arc_init() */ u32 ip4_unicast_rx_feature_drop; /** Built-in multicast feature path index */ @@ -147,7 +147,7 @@ typedef struct ip4_main_t { /** Built-in multicast feature path indices */ u32 ip4_multicast_rx_feature_drop; - /** Built-in unicast feature path index, see @ref ip_feature_init_cast() */ + /** Built-in unicast feature path index, see @ref vnet_feature_arc_init() */ u32 ip4_unicast_tx_feature_source_and_port_range_check; /** Built-in tx feature path index */ @@ -184,7 +184,7 @@ static void __vnet_add_feature_registration_uc_##x (void) \ uc_##x.next = im->next_feature[VNET_IP_RX_UNICAST_FEAT]; \ im->next_feature[VNET_IP_RX_UNICAST_FEAT] = &uc_##x; \ } \ -__VA_ARGS__ vnet_ip_feature_registration_t uc_##x +__VA_ARGS__ vnet_ip_feature_registration_t uc_##x #define VNET_IP4_MULTICAST_FEATURE_INIT(x,...) \ __VA_ARGS__ vnet_ip_feature_registration_t mc_##x; \ @@ -196,7 +196,7 @@ static void __vnet_add_feature_registration_mc_##x (void) \ mc_##x.next = im->next_feature[VNET_IP_RX_MULTICAST_FEAT]; \ im->next_feature[VNET_IP_RX_MULTICAST_FEAT] = &mc_##x; \ } \ -__VA_ARGS__ vnet_ip_feature_registration_t mc_##x +__VA_ARGS__ vnet_ip_feature_registration_t mc_##x #define VNET_IP4_TX_FEATURE_INIT(x,...) \ __VA_ARGS__ vnet_ip_feature_registration_t tx_##x; \ @@ -208,7 +208,7 @@ static void __vnet_add_feature_registration_tx_##x (void) \ tx_##x.next = im->next_feature[VNET_IP_TX_FEAT]; \ im->next_feature[VNET_IP_TX_FEAT] = &tx_##x; \ } \ -__VA_ARGS__ vnet_ip_feature_registration_t tx_##x +__VA_ARGS__ vnet_ip_feature_registration_t tx_##x /** Global ip4 input node. Errors get attached to ip4 input node. */ @@ -249,12 +249,12 @@ ip4_src_address_for_packet (ip_lookup_main_t * lm, u32 sw_if_index, ip4_address_t * src) { - u32 if_add_index = + u32 if_add_index = lm->if_address_pool_index_by_sw_if_index[sw_if_index]; if (PREDICT_TRUE(if_add_index != ~0)) { - ip_interface_address_t *if_add = + ip_interface_address_t *if_add = pool_elt_at_index(lm->if_address_pool, if_add_index); - ip4_address_t *if_ip = + ip4_address_t *if_ip = ip_interface_address_get_address(lm, if_add); *src = *if_ip; return 0; @@ -276,7 +276,7 @@ ip4_interface_address_matching_destination (ip4_main_t * im, ip4_address_t * dst ip_interface_address_t * ia; ip4_address_t * result = 0; - foreach_ip_interface_address (lm, ia, sw_if_index, + foreach_ip_interface_address (lm, ia, sw_if_index, 1 /* honor unnumbered */, ({ ip4_address_t * a = ip_interface_address_get_address (lm, ia); @@ -318,8 +318,8 @@ ip4_udp_register_listener (vlib_main_t * vm, u16 dst_port, u32 next_node_index); -void -ip4_icmp_register_type (vlib_main_t * vm, icmp4_type_t type, +void +ip4_icmp_register_type (vlib_main_t * vm, icmp4_type_t type, u32 node_index); u16 ip4_tcp_udp_compute_checksum (vlib_main_t * vm, vlib_buffer_t * p0, ip4_header_t * ip0); @@ -332,7 +332,7 @@ int vnet_set_ip4_flow_hash (u32 table_id, flow_hash_config_t flow_hash_config); void ip4_mtrie_init (ip4_fib_mtrie_t * m); -int vnet_set_ip4_classify_intfc (vlib_main_t * vm, u32 sw_if_index, +int vnet_set_ip4_classify_intfc (vlib_main_t * vm, u32 sw_if_index, u32 table_index); /* Compute flow hash. We'll use it to select which adjacency to use for this @@ -346,18 +346,18 @@ ip4_compute_flow_hash (const ip4_header_t * ip, uword is_tcp_udp = (ip->protocol == IP_PROTOCOL_TCP || ip->protocol == IP_PROTOCOL_UDP); - t1 = (flow_hash_config & IP_FLOW_HASH_SRC_ADDR) + t1 = (flow_hash_config & IP_FLOW_HASH_SRC_ADDR) ? ip->src_address.data_u32 : 0; - t2 = (flow_hash_config & IP_FLOW_HASH_DST_ADDR) + t2 = (flow_hash_config & IP_FLOW_HASH_DST_ADDR) ? ip->dst_address.data_u32 : 0; - + a = (flow_hash_config & IP_FLOW_HASH_REVERSE_SRC_DST) ? t2 : t1; b = (flow_hash_config & IP_FLOW_HASH_REVERSE_SRC_DST) ? t1 : t2; b ^= (flow_hash_config & IP_FLOW_HASH_PROTO) ? ip->protocol : 0; t1 = is_tcp_udp ? tcp->ports.src : 0; t2 = is_tcp_udp ? tcp->ports.dst : 0; - + t1 = (flow_hash_config & IP_FLOW_HASH_SRC_PORT) ? t1 : 0; t2 = (flow_hash_config & IP_FLOW_HASH_DST_PORT) ? t2 : 0; diff --git a/vnet/vnet/ip/ip4_forward.c b/vnet/vnet/ip/ip4_forward.c index e997366c983..321716da2b1 100644 --- a/vnet/vnet/ip/ip4_forward.c +++ b/vnet/vnet/ip/ip4_forward.c @@ -267,7 +267,7 @@ ip4_lookup_inline (vlib_main_t * vm, } } } - + while (n_left_from > 0 && n_left_to_next > 0) { vlib_buffer_t * p0; @@ -336,7 +336,7 @@ ip4_lookup_inline (vlib_main_t * vm, { flow_hash_config0 = lb0->lb_hash_config; - hash_c0 = vnet_buffer (p0)->ip.flow_hash = + hash_c0 = vnet_buffer (p0)->ip.flow_hash = ip4_compute_flow_hash (ip0, flow_hash_config0); } @@ -350,7 +350,7 @@ ip4_lookup_inline (vlib_main_t * vm, next0 = dpo0->dpoi_next_node; vnet_buffer (p0)->ip.adj_index[VLIB_TX] = dpo0->dpoi_index; - vlib_increment_combined_counter + vlib_increment_combined_counter (cm, cpu_index, lbi0, 1, vlib_buffer_length_in_chain (vm, p0)); @@ -459,7 +459,7 @@ ip4_load_balance (vlib_main_t * vm, vlib_get_next_frame (vm, node, next, to_next, n_left_to_next); - + while (n_left_from > 0 && n_left_to_next > 0) { ip_lookup_next_t next0; @@ -481,14 +481,14 @@ ip4_load_balance (vlib_main_t * vm, hc0 = lb0->lb_hash_config; vnet_buffer(p0)->ip.flow_hash = ip4_compute_flow_hash(ip0, hc0); - dpo0 = load_balance_get_bucket_i(lb0, + dpo0 = load_balance_get_bucket_i(lb0, vnet_buffer(p0)->ip.flow_hash & (lb0->lb_n_buckets_minus_1)); next0 = dpo0->dpoi_next_node; vnet_buffer (p0)->ip.adj_index[VLIB_TX] = dpo0->dpoi_index; - vlib_increment_combined_counter + vlib_increment_combined_counter (cm, cpu_index, lbi0, 1, vlib_buffer_length_in_chain (vm, p0)); @@ -538,7 +538,7 @@ ip4_interface_first_address (ip4_main_t * im, u32 sw_if_index, ip_interface_address_t * ia = 0; ip4_address_t * result = 0; - foreach_ip_interface_address (lm, ia, sw_if_index, + foreach_ip_interface_address (lm, ia, sw_if_index, 1 /* honor unnumbered */, ({ ip4_address_t * a = ip_interface_address_get_address (lm, ia); @@ -733,7 +733,7 @@ ip4_add_del_interface_address_internal (vlib_main_t * vm, /* When adding an address check that it does not conflict with an existing address. */ ip_interface_address_t * ia; - foreach_ip_interface_address (&im->lookup_main, ia, sw_if_index, + foreach_ip_interface_address (&im->lookup_main, ia, sw_if_index, 0 /* honor unnumbered */, ({ ip4_address_t * x = ip_interface_address_get_address (&im->lookup_main, ia); @@ -758,7 +758,7 @@ ip4_add_del_interface_address_internal (vlib_main_t * vm, &if_address_index); if (error) goto done; - + ip4_sw_interface_enable_disable(sw_if_index, !is_del); if (is_del) @@ -767,7 +767,7 @@ ip4_add_del_interface_address_internal (vlib_main_t * vm, else ip4_add_interface_routes (sw_if_index, im, ip4_af.fib_index, - pool_elt_at_index + pool_elt_at_index (lm->if_address_pool, if_address_index)); /* If pool did not grow/shrink: add duplicate address. */ @@ -804,7 +804,7 @@ VNET_IP4_UNICAST_FEATURE_INIT (ip4_flow_classify, static) = { }; VNET_IP4_UNICAST_FEATURE_INIT (ip4_inacl, static) = { - .node_name = "ip4-inacl", + .node_name = "ip4-inacl", .runs_before = ORDER_CONSTRAINTS {"ip4-source-check-via-rx", 0}, .feature_index = &ip4_main.ip4_unicast_rx_feature_check_access, }; @@ -812,14 +812,14 @@ VNET_IP4_UNICAST_FEATURE_INIT (ip4_inacl, static) = { VNET_IP4_UNICAST_FEATURE_INIT (ip4_source_check_1, static) = { .node_name = "ip4-source-check-via-rx", .runs_before = ORDER_CONSTRAINTS {"ip4-source-check-via-any", 0}, - .feature_index = + .feature_index = &ip4_main.ip4_unicast_rx_feature_source_reachable_via_rx, }; VNET_IP4_UNICAST_FEATURE_INIT (ip4_source_check_2, static) = { .node_name = "ip4-source-check-via-any", .runs_before = ORDER_CONSTRAINTS {"ip4-policer-classify", 0}, - .feature_index = + .feature_index = &ip4_main.ip4_unicast_rx_feature_source_reachable_via_any, }; @@ -881,10 +881,10 @@ VNET_IP4_MULTICAST_FEATURE_INIT (ip4_mc_drop, static) = { .feature_index = &ip4_main.ip4_multicast_rx_feature_drop, }; -static char * rx_feature_start_nodes[] = +static char * rx_feature_start_nodes[] = { "ip4-input", "ip4-input-no-checksum"}; -static char * tx_feature_start_nodes[] = +static char * tx_feature_start_nodes[] = { "ip4-rewrite-transit", "ip4-midchain", @@ -932,8 +932,8 @@ ip4_feature_init (vlib_main_t * vm, ip4_main_t * im) feature_start_nodes = tx_feature_start_nodes; feature_start_len = ARRAY_LEN(tx_feature_start_nodes); } - - if ((error = ip_feature_init_cast (vm, cm, vcm, + + if ((error = vnet_feature_arc_init (vm, vcm, feature_start_nodes, feature_start_len, im->next_feature[cast], @@ -974,7 +974,7 @@ ip4_sw_interface_add_del (vnet_main_t * vnm, feature_index = im->ip4_tx_feature_interface_output; if (is_add) - ci = vnet_config_add_feature (vm, vcm, + ci = vnet_config_add_feature (vm, vcm, ci, feature_index, /* config data */ 0, @@ -1015,7 +1015,7 @@ ip4_lookup_init (vlib_main_t * vm) if (i < 32) m = pow2_mask (i) << (32 - i); - else + else m = ~0; im->fib_masks[i] = clib_host_to_net_u32 (m); } @@ -1133,7 +1133,7 @@ ip4_forward_next_trace (vlib_main_t * vm, n_left = frame->n_vectors; from = vlib_frame_vector_args (frame); - + while (n_left >= 4) { u32 bi0, bi1; @@ -1284,7 +1284,7 @@ ip4_tcp_udp_compute_checksum (vlib_main_t * vm, vlib_buffer_t * p0, u32 n_this_buffer, n_bytes_left; u16 sum16; void * data_this_buffer; - + /* Initialize checksum with ip header. */ ip_header_length = ip4_header_bytes (ip0); payload_length_host_byte_order = clib_net_to_host_u16 (ip0->length) - ip_header_length; @@ -1360,7 +1360,7 @@ ip4_local (vlib_main_t * vm, from = vlib_frame_vector_args (frame); n_left_from = frame->n_vectors; next_index = node->cached_next_index; - + if (node->flags & VLIB_NODE_FLAG_TRACE) ip4_forward_next_trace (vm, node, frame, VLIB_TX); @@ -1383,23 +1383,23 @@ ip4_local (vlib_main_t * vm, u8 error0, is_udp0, is_tcp_udp0, good_tcp_udp0, proto0; u8 error1, is_udp1, is_tcp_udp1, good_tcp_udp1, proto1; u8 enqueue_code; - + pi0 = to_next[0] = from[0]; pi1 = to_next[1] = from[1]; from += 2; n_left_from -= 2; to_next += 2; n_left_to_next -= 2; - + p0 = vlib_get_buffer (vm, pi0); p1 = vlib_get_buffer (vm, pi1); ip0 = vlib_buffer_get_current (p0); ip1 = vlib_buffer_get_current (p1); - fib_index0 = vec_elt (im->fib_index_by_sw_if_index, + fib_index0 = vec_elt (im->fib_index_by_sw_if_index, vnet_buffer(p0)->sw_if_index[VLIB_RX]); - fib_index1 = vec_elt (im->fib_index_by_sw_if_index, + fib_index1 = vec_elt (im->fib_index_by_sw_if_index, vnet_buffer(p1)->sw_if_index[VLIB_RX]); mtrie0 = &ip4_fib_get (fib_index0)->mtrie; @@ -1505,7 +1505,7 @@ ip4_local (vlib_main_t * vm, dpo0 = load_balance_get_bucket_i(lb0, 0); dpo1 = load_balance_get_bucket_i(lb1, 0); - /* + /* * Must have a route to source otherwise we drop the packet. * ip4 broadcasts are accepted, e.g. to make dhcp client work * @@ -1517,7 +1517,7 @@ ip4_local (vlib_main_t * vm, */ error0 = ((error0 == IP4_ERROR_UNKNOWN_PROTOCOL && dpo0->dpoi_type == DPO_RECEIVE) ? - IP4_ERROR_SPOOFED_LOCAL_PACKETS : + IP4_ERROR_SPOOFED_LOCAL_PACKETS : error0); error0 = ((error0 == IP4_ERROR_UNKNOWN_PROTOCOL && !fib_urpf_check_size(lb0->lb_urpf) && @@ -1526,7 +1526,7 @@ ip4_local (vlib_main_t * vm, : error0); error1 = ((error1 == IP4_ERROR_UNKNOWN_PROTOCOL && dpo1->dpoi_type == DPO_RECEIVE) ? - IP4_ERROR_SPOOFED_LOCAL_PACKETS : + IP4_ERROR_SPOOFED_LOCAL_PACKETS : error1); error1 = ((error1 == IP4_ERROR_UNKNOWN_PROTOCOL && !fib_urpf_check_size(lb1->lb_urpf) && @@ -1599,12 +1599,12 @@ ip4_local (vlib_main_t * vm, n_left_from -= 1; to_next += 1; n_left_to_next -= 1; - + p0 = vlib_get_buffer (vm, pi0); ip0 = vlib_buffer_get_current (p0); - fib_index0 = vec_elt (im->fib_index_by_sw_if_index, + fib_index0 = vec_elt (im->fib_index_by_sw_if_index, vnet_buffer(p0)->sw_if_index[VLIB_RX]); mtrie0 = &ip4_fib_get (fib_index0)->mtrie; @@ -1679,7 +1679,7 @@ ip4_local (vlib_main_t * vm, error0 = ((error0 == IP4_ERROR_UNKNOWN_PROTOCOL && dpo0->dpoi_type == DPO_RECEIVE) ? - IP4_ERROR_SPOOFED_LOCAL_PACKETS : + IP4_ERROR_SPOOFED_LOCAL_PACKETS : error0); error0 = ((error0 == IP4_ERROR_UNKNOWN_PROTOCOL && !fib_urpf_check_size(lb0->lb_urpf) && @@ -1705,7 +1705,7 @@ ip4_local (vlib_main_t * vm, n_left_to_next -= 1; } } - + vlib_put_next_frame (vm, node, next_index, n_left_to_next); } @@ -1779,7 +1779,7 @@ ip4_arp_inline (vlib_main_t * vm, uword n_left_from, n_left_to_next_drop, next_index; static f64 time_last_seed_change = -1e100; static u32 hash_seeds[3]; - static uword hash_bitmap[256 / BITS (uword)]; + static uword hash_bitmap[256 / BITS (uword)]; f64 time_now; if (node->flags & VLIB_NODE_FLAG_TRACE) @@ -1830,7 +1830,7 @@ ip4_arp_inline (vlib_main_t * vm, /* * this is the Glean case, so we are ARPing for the - * packet's destination + * packet's destination */ a0 = hash_seeds[0]; b0 = hash_seeds[1]; @@ -1872,7 +1872,7 @@ ip4_arp_inline (vlib_main_t * vm, if (drop0) continue; - /* + /* * Can happen if the control-plane is programming tables * with traffic flowing; at least that's today's lame excuse. */ @@ -2008,7 +2008,7 @@ _(REPLICATE_FAIL) clib_error_t * arp_notrace_init (vlib_main_t * vm) { - vlib_node_runtime_t *rt = + vlib_node_runtime_t *rt = vlib_node_get_runtime (vm, ip4_arp_node.index); /* don't trace ARP request packets */ @@ -2044,8 +2044,8 @@ ip4_probe_neighbor (vlib_main_t * vm, ip4_address_t * dst, u32 sw_if_index) if (!(si->flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP)) { return clib_error_return (0, "%U: interface %U down", - format_ip4_address, dst, - format_vnet_sw_if_index_name, vnm, + format_ip4_address, dst, + format_vnet_sw_if_index_name, vnm, sw_if_index); } @@ -2053,7 +2053,7 @@ ip4_probe_neighbor (vlib_main_t * vm, ip4_address_t * dst, u32 sw_if_index) if (! src) { vnm->api_errno = VNET_API_ERROR_NO_MATCHING_INTERFACE; - return clib_error_return + return clib_error_return (0, "no matching interface address for destination %U (interface %U)", format_ip4_address, dst, format_vnet_sw_if_index_name, vnm, sw_if_index); @@ -2111,7 +2111,7 @@ ip4_rewrite_inline (vlib_main_t * vm, n_left_from = frame->n_vectors; next_index = node->cached_next_index; u32 cpu_index = os_get_cpu_number(); - + while (n_left_from > 0) { vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); @@ -2150,7 +2150,7 @@ ip4_rewrite_inline (vlib_main_t * vm, n_left_from -= 2; to_next += 2; n_left_to_next -= 2; - + p0 = vlib_get_buffer (vm, pi0); p1 = vlib_get_buffer (vm, pi1); @@ -2220,7 +2220,7 @@ ip4_rewrite_inline (vlib_main_t * vm, /* Rewrite packet header and updates lengths. */ adj0 = ip_get_adjacency (lm, adj_index0); adj1 = ip_get_adjacency (lm, adj_index1); - + if (rewrite_for_locally_received_packets) { if (PREDICT_FALSE(adj0->lookup_next_index @@ -2257,20 +2257,20 @@ ip4_rewrite_inline (vlib_main_t * vm, if (rewrite_for_locally_received_packets) next1 = next1 && next1_override ? next1_override : next1; - /* + /* * We've already accounted for an ethernet_header_t elsewhere */ if (PREDICT_FALSE (rw_len0 > sizeof(ethernet_header_t))) - vlib_increment_combined_counter + vlib_increment_combined_counter (&adjacency_counters, - cpu_index, adj_index0, + cpu_index, adj_index0, /* packet increment */ 0, /* byte increment */ rw_len0-sizeof(ethernet_header_t)); if (PREDICT_FALSE (rw_len1 > sizeof(ethernet_header_t))) - vlib_increment_combined_counter + vlib_increment_combined_counter (&adjacency_counters, - cpu_index, adj_index1, + cpu_index, adj_index1, /* packet increment */ 0, /* byte increment */ rw_len1-sizeof(ethernet_header_t)); @@ -2284,12 +2284,12 @@ ip4_rewrite_inline (vlib_main_t * vm, vnet_buffer (p0)->sw_if_index[VLIB_TX] = tx_sw_if_index0; - if (PREDICT_FALSE - (clib_bitmap_get (lm->tx_sw_if_has_ip_output_features, + if (PREDICT_FALSE + (clib_bitmap_get (lm->tx_sw_if_has_ip_output_features, tx_sw_if_index0))) { - p0->current_config_index = - vec_elt (cm->config_index_by_sw_if_index, + p0->current_config_index = + vec_elt (cm->config_index_by_sw_if_index, tx_sw_if_index0); vnet_get_config_data (&cm->config_main, &p0->current_config_index, @@ -2306,12 +2306,12 @@ ip4_rewrite_inline (vlib_main_t * vm, vnet_buffer (p1)->sw_if_index[VLIB_TX] = tx_sw_if_index1; - if (PREDICT_FALSE - (clib_bitmap_get (lm->tx_sw_if_has_ip_output_features, + if (PREDICT_FALSE + (clib_bitmap_get (lm->tx_sw_if_has_ip_output_features, tx_sw_if_index1))) { - p1->current_config_index = - vec_elt (cm->config_index_by_sw_if_index, + p1->current_config_index = + vec_elt (cm->config_index_by_sw_if_index, tx_sw_if_index1); vnet_get_config_data (&cm->config_main, &p1->current_config_index, @@ -2330,7 +2330,7 @@ ip4_rewrite_inline (vlib_main_t * vm, adj0->sub_type.midchain.fixup_func(vm, adj0, p0); adj1->sub_type.midchain.fixup_func(vm, adj1, p1); } - + vlib_validate_buffer_enqueue_x2 (vm, node, next_index, to_next, n_left_to_next, pi0, pi1, next0, next1); @@ -2358,7 +2358,7 @@ ip4_rewrite_inline (vlib_main_t * vm, ASSERT(adj_index0); adj0 = ip_get_adjacency (lm, adj_index0); - + ip0 = vlib_buffer_get_current (p0); error0 = IP4_ERROR_NONE; @@ -2399,7 +2399,7 @@ ip4_rewrite_inline (vlib_main_t * vm, if (rewrite_for_locally_received_packets) { - /* + /* * We have to override the next_index in ARP adjacencies, * because they're set up for ip4-arp, not this node... */ @@ -2409,22 +2409,22 @@ ip4_rewrite_inline (vlib_main_t * vm, } /* Guess we are only writing on simple Ethernet header. */ - vnet_rewrite_one_header (adj0[0], ip0, + vnet_rewrite_one_header (adj0[0], ip0, sizeof (ethernet_header_t)); - + /* Update packet buffer attributes/set output interface. */ rw_len0 = adj0[0].rewrite_header.data_bytes; vnet_buffer(p0)->ip.save_rewrite_length = rw_len0; - + if (PREDICT_FALSE (rw_len0 > sizeof(ethernet_header_t))) - vlib_increment_combined_counter + vlib_increment_combined_counter (&adjacency_counters, - cpu_index, adj_index0, + cpu_index, adj_index0, /* packet increment */ 0, /* byte increment */ rw_len0-sizeof(ethernet_header_t)); - + /* Check MTU of outgoing interface. */ - error0 = (vlib_buffer_length_in_chain (vm, p0) + error0 = (vlib_buffer_length_in_chain (vm, p0) > adj0[0].rewrite_header.max_l3_packet_bytes ? IP4_ERROR_MTU_EXCEEDED : error0); @@ -2447,12 +2447,12 @@ ip4_rewrite_inline (vlib_main_t * vm, adj0->sub_type.midchain.fixup_func(vm, adj0, p0); } - if (PREDICT_FALSE - (clib_bitmap_get (lm->tx_sw_if_has_ip_output_features, + if (PREDICT_FALSE + (clib_bitmap_get (lm->tx_sw_if_has_ip_output_features, tx_sw_if_index0))) { - p0->current_config_index = - vec_elt (cm->config_index_by_sw_if_index, + p0->current_config_index = + vec_elt (cm->config_index_by_sw_if_index, tx_sw_if_index0); vnet_get_config_data (&cm->config_main, &p0->current_config_index, @@ -2468,12 +2468,12 @@ ip4_rewrite_inline (vlib_main_t * vm, n_left_from -= 1; to_next += 1; n_left_to_next -= 1; - + vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, pi0, next0); } - + vlib_put_next_frame (vm, node, next_index, n_left_to_next); } @@ -2504,7 +2504,7 @@ ip4_rewrite_inline (vlib_main_t * vm, - the rewrite adjacency index - <code>adj->lookup_next_index</code> - Must be IP_LOOKUP_NEXT_REWRITE or IP_LOOKUP_NEXT_ARP, otherwise - the packet will be dropped. + the packet will be dropped. - <code>adj->rewrite_header</code> - Rewrite string length, rewrite string, next_index @@ -2514,7 +2514,7 @@ ip4_rewrite_inline (vlib_main_t * vm, <em>Next Indices:</em> - <code> adj->rewrite_header.next_index </code> - or @c error-drop + or @c error-drop */ static uword ip4_rewrite_transit (vlib_main_t * vm, @@ -2545,7 +2545,7 @@ ip4_rewrite_transit (vlib_main_t * vm, - the rewrite adjacency index - <code>adj->lookup_next_index</code> - Must be IP_LOOKUP_NEXT_REWRITE or IP_LOOKUP_NEXT_ARP, otherwise - the packet will be dropped. + the packet will be dropped. - <code>adj->rewrite_header</code> - Rewrite string length, rewrite string, next_index @@ -2555,7 +2555,7 @@ ip4_rewrite_transit (vlib_main_t * vm, <em>Next Indices:</em> - <code> adj->rewrite_header.next_index </code> - or @c error-drop + or @c error-drop */ static uword @@ -2760,10 +2760,10 @@ ip4_lookup_multicast (vlib_main_t * vm, ASSERT (lb1->lb_n_buckets > 0); ASSERT (is_pow2 (lb1->lb_n_buckets)); - vnet_buffer (p0)->ip.flow_hash = ip4_compute_flow_hash + vnet_buffer (p0)->ip.flow_hash = ip4_compute_flow_hash (ip0, lb0->lb_hash_config); - - vnet_buffer (p1)->ip.flow_hash = ip4_compute_flow_hash + + vnet_buffer (p1)->ip.flow_hash = ip4_compute_flow_hash (ip1, lb1->lb_hash_config); dpo0 = load_balance_get_bucket_i(lb0, @@ -2779,11 +2779,11 @@ ip4_lookup_multicast (vlib_main_t * vm, vnet_buffer (p1)->ip.adj_index[VLIB_TX] = dpo1->dpoi_index; if (1) /* $$$$$$ HACK FIXME */ - vlib_increment_combined_counter + vlib_increment_combined_counter (cm, cpu_index, lb_index0, 1, vlib_buffer_length_in_chain (vm, p0)); if (1) /* $$$$$$ HACK FIXME */ - vlib_increment_combined_counter + vlib_increment_combined_counter (cm, cpu_index, lb_index1, 1, vlib_buffer_length_in_chain (vm, p1)); @@ -2828,7 +2828,7 @@ ip4_lookup_multicast (vlib_main_t * vm, } } } - + while (n_left_from > 0 && n_left_to_next > 0) { vlib_buffer_t * p0; @@ -2846,11 +2846,11 @@ ip4_lookup_multicast (vlib_main_t * vm, ip0 = vlib_buffer_get_current (p0); - fib_index0 = vec_elt (im->fib_index_by_sw_if_index, + fib_index0 = vec_elt (im->fib_index_by_sw_if_index, vnet_buffer (p0)->sw_if_index[VLIB_RX]); fib_index0 = (vnet_buffer(p0)->sw_if_index[VLIB_TX] == (u32)~0) ? fib_index0 : vnet_buffer(p0)->sw_if_index[VLIB_TX]; - + lb_index0 = ip4_fib_table_lookup_lb (ip4_fib_get(fib_index0), &ip0->dst_address); @@ -2859,7 +2859,7 @@ ip4_lookup_multicast (vlib_main_t * vm, ASSERT (lb0->lb_n_buckets > 0); ASSERT (is_pow2 (lb0->lb_n_buckets)); - vnet_buffer (p0)->ip.flow_hash = ip4_compute_flow_hash + vnet_buffer (p0)->ip.flow_hash = ip4_compute_flow_hash (ip0, lb0->lb_hash_config); dpo0 = load_balance_get_bucket_i(lb0, @@ -2870,7 +2870,7 @@ ip4_lookup_multicast (vlib_main_t * vm, vnet_buffer (p0)->ip.adj_index[VLIB_TX] = dpo0->dpoi_index; if (1) /* $$$$$$ HACK FIXME */ - vlib_increment_combined_counter + vlib_increment_combined_counter (cm, cpu_index, lb_index0, 1, vlib_buffer_length_in_chain (vm, p0)); @@ -2931,7 +2931,7 @@ int ip4_lookup_validate (ip4_address_t *a, u32 fib_index0) ip4_fib_mtrie_t * mtrie0; ip4_fib_mtrie_leaf_t leaf0; u32 lbi0; - + mtrie0 = &ip4_fib_get (fib_index0)->mtrie; leaf0 = IP4_FIB_MTRIE_LEAF_ROOT; @@ -2939,15 +2939,15 @@ int ip4_lookup_validate (ip4_address_t *a, u32 fib_index0) leaf0 = ip4_fib_mtrie_lookup_step (mtrie0, leaf0, a, 1); leaf0 = ip4_fib_mtrie_lookup_step (mtrie0, leaf0, a, 2); leaf0 = ip4_fib_mtrie_lookup_step (mtrie0, leaf0, a, 3); - + /* Handle default route. */ leaf0 = (leaf0 == IP4_FIB_MTRIE_LEAF_EMPTY ? mtrie0->default_leaf : leaf0); - + lbi0 = ip4_fib_mtrie_leaf_get_adj_index (leaf0); - + return lbi0 == ip4_fib_table_lookup_lb (ip4_fib_get(fib_index0), a); } - + static clib_error_t * test_lookup_command_fn (vlib_main_t * vm, unformat_input_t * input, @@ -2981,12 +2981,12 @@ test_lookup_command_fn (vlib_main_t * vm, if (!ip4_lookup_validate (&ip4_base_address, table_id)) errors++; - ip4_base_address.as_u32 = - clib_host_to_net_u32 (1 + + ip4_base_address.as_u32 = + clib_host_to_net_u32 (1 + clib_net_to_host_u32 (ip4_base_address.as_u32)); } - if (errors) + if (errors) vlib_cli_output (vm, "%llu errors out of %d lookups\n", errors, n); else vlib_cli_output (vm, "No errors in %d lookups\n", n); @@ -3014,7 +3014,7 @@ int vnet_set_ip4_flow_hash (u32 table_id, u32 flow_hash_config) fib->flow_hash_config = flow_hash_config; return 0; } - + static clib_error_t * set_ip_flow_hash_command_fn (vlib_main_t * vm, unformat_input_t * input, @@ -3034,36 +3034,36 @@ set_ip_flow_hash_command_fn (vlib_main_t * vm, #undef _ else break; } - + if (matched == 0) return clib_error_return (0, "unknown input `%U'", format_unformat_error, input); - + rv = vnet_set_ip4_flow_hash (table_id, flow_hash_config); switch (rv) { case 0: break; - + case VNET_API_ERROR_NO_SUCH_FIB: return clib_error_return (0, "no such FIB table %d", table_id); - + default: clib_warning ("BUG: illegal flow hash config 0x%x", flow_hash_config); break; } - + return 0; } - + VLIB_CLI_COMMAND (set_ip_flow_hash_command, static) = { .path = "set ip flow-hash", - .short_help = + .short_help = "set ip table flow-hash table <fib-id> src dst sport dport proto reverse", .function = set_ip_flow_hash_command_fn, }; - -int vnet_set_ip4_classify_intfc (vlib_main_t * vm, u32 sw_if_index, + +int vnet_set_ip4_classify_intfc (vlib_main_t * vm, u32 sw_if_index, u32 table_index) { vnet_main_t * vnm = vnet_get_main(); @@ -3134,17 +3134,17 @@ set_ip_classify_command_fn (vlib_main_t * vm, int table_index_set = 0; u32 sw_if_index = ~0; int rv; - + while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) { if (unformat (input, "table-index %d", &table_index)) table_index_set = 1; - else if (unformat (input, "intfc %U", unformat_vnet_sw_interface, + else if (unformat (input, "intfc %U", unformat_vnet_sw_interface, vnet_get_main(), &sw_if_index)) ; else break; } - + if (table_index_set == 0) return clib_error_return (0, "classify table-index must be specified"); @@ -3169,7 +3169,7 @@ set_ip_classify_command_fn (vlib_main_t * vm, VLIB_CLI_COMMAND (set_ip_classify_command, static) = { .path = "set ip classify", - .short_help = + .short_help = "set ip classify intfc <int> table-index <index>", .function = set_ip_classify_command_fn, }; diff --git a/vnet/vnet/ip/ip6.h b/vnet/vnet/ip/ip6.h index b80317e0687..13d8d5fdf37 100644 --- a/vnet/vnet/ip/ip6.h +++ b/vnet/vnet/ip/ip6.h @@ -101,8 +101,8 @@ typedef enum ip6_fib_table_instance_type_t_ { IP6_FIB_TABLE_FWDING, /** * The table that stores ALL routes learned by the DP. - * Some of these routes may not be ready to install in forwarding - * at a given time. + * Some of these routes may not be ready to install in forwarding + * at a given time. * The key in this table is the prefix, the result is the fib_entry_t */ IP6_FIB_TABLE_NON_FWDING, @@ -130,7 +130,7 @@ typedef struct ip6_main_t { ip6_fib_table_instance_t ip6_table[IP6_FIB_NUM_TABLES]; ip_lookup_main_t lookup_main; - + /* Pool of FIBs. */ struct fib_table_t_ * fibs; @@ -163,7 +163,7 @@ typedef struct ip6_main_t { /* feature path configuration lists */ vnet_ip_feature_registration_t * next_feature[VNET_N_IP_FEAT]; - /* Built-in unicast feature path indices, see ip_feature_init_cast(...) */ + /* Built-in unicast feature path indices, see vnet_feature_arc_init(...) */ u32 ip6_unicast_rx_feature_check_access; u32 ip6_unicast_rx_feature_policer_classify; u32 ip6_unicast_rx_feature_flow_classify; @@ -177,7 +177,7 @@ typedef struct ip6_main_t { u32 ip6_multicast_rx_feature_drop; u32 ip6_multicast_rx_feature_vpath; u32 ip6_multicast_rx_feature_lookup; - + /* Built-in tx feature path index */ u32 ip6_tx_feature_interface_output; @@ -211,7 +211,7 @@ static void __vnet_add_feature_registration_uc_##x (void) \ uc_##x.next = im->next_feature[VNET_IP_RX_UNICAST_FEAT]; \ im->next_feature[VNET_IP_RX_UNICAST_FEAT] = &uc_##x; \ } \ -__VA_ARGS__ vnet_ip_feature_registration_t uc_##x +__VA_ARGS__ vnet_ip_feature_registration_t uc_##x #define VNET_IP6_MULTICAST_FEATURE_INIT(x,...) \ __VA_ARGS__ vnet_ip_feature_registration_t mc_##x; \ @@ -223,7 +223,7 @@ static void __vnet_add_feature_registration_mc_##x (void) \ mc_##x.next = im->next_feature[VNET_IP_RX_MULTICAST_FEAT]; \ im->next_feature[VNET_IP_RX_MULTICAST_FEAT] = &mc_##x; \ } \ -__VA_ARGS__ vnet_ip_feature_registration_t mc_##x +__VA_ARGS__ vnet_ip_feature_registration_t mc_##x #define VNET_IP6_TX_FEATURE_INIT(x,...) \ __VA_ARGS__ vnet_ip_feature_registration_t tx_##x; \ @@ -235,7 +235,7 @@ static void __vnet_add_feature_registration_tx_##x (void) \ tx_##x.next = im->next_feature[VNET_IP_TX_FEAT]; \ im->next_feature[VNET_IP_TX_FEAT] = &tx_##x; \ } \ -__VA_ARGS__ vnet_ip_feature_registration_t tx_##x +__VA_ARGS__ vnet_ip_feature_registration_t tx_##x /* Global ip6 input node. Errors get attached to ip6 input node. */ @@ -306,12 +306,12 @@ ip6_src_address_for_packet (ip_lookup_main_t * lm, u32 sw_if_index, ip6_address_t * src) { - u32 if_add_index = + u32 if_add_index = lm->if_address_pool_index_by_sw_if_index[sw_if_index]; if (PREDICT_TRUE(if_add_index != ~0)) { - ip_interface_address_t *if_add = + ip_interface_address_t *if_add = pool_elt_at_index(lm->if_address_pool, if_add_index); - ip6_address_t *if_ip = + ip6_address_t *if_ip = ip_interface_address_get_address(lm, if_add); *src = *if_ip; return (0); @@ -333,7 +333,7 @@ ip6_interface_address_matching_destination (ip6_main_t * im, ip6_address_t * dst ip_interface_address_t * ia; ip6_address_t * result = 0; - foreach_ip_interface_address (lm, ia, sw_if_index, + foreach_ip_interface_address (lm, ia, sw_if_index, 1 /* honor unnumbered */, ({ ip6_address_t * a = ip_interface_address_get_address (lm, ia); @@ -389,28 +389,28 @@ vnet_unset_ip6_ethernet_neighbor (vlib_main_t * vm, u8 * link_layer_address, uword n_bytes_link_layer_address); -void +void ip6_link_local_address_from_ethernet_mac_address (ip6_address_t *ip, u8 *mac); -void -ip6_ethernet_mac_address_from_link_local_address (u8 *mac, +void +ip6_ethernet_mac_address_from_link_local_address (u8 *mac, ip6_address_t *ip); int vnet_set_ip6_flow_hash (u32 table_id, flow_hash_config_t flow_hash_config); int -ip6_neighbor_ra_config(vlib_main_t * vm, u32 sw_if_index, +ip6_neighbor_ra_config(vlib_main_t * vm, u32 sw_if_index, u8 suppress, u8 managed, u8 other, - u8 ll_option, u8 send_unicast, u8 cease, + u8 ll_option, u8 send_unicast, u8 cease, u8 use_lifetime, u32 lifetime, - u32 initial_count, u32 initial_interval, + u32 initial_count, u32 initial_interval, u32 max_interval, u32 min_interval, u8 is_no); int -ip6_neighbor_ra_prefix(vlib_main_t * vm, u32 sw_if_index, +ip6_neighbor_ra_prefix(vlib_main_t * vm, u32 sw_if_index, ip6_address_t *prefix_addr, u8 prefix_len, u8 use_default, u32 val_lifetime, u32 pref_lifetime, u8 no_advertise, u8 off_link, u8 no_autoconfig, u8 no_onlink, @@ -421,7 +421,7 @@ clib_error_t * enable_ip6_interface(vlib_main_t * vm, u32 sw_if_index); -clib_error_t * +clib_error_t * disable_ip6_interface(vlib_main_t * vm, u32 sw_if_index); @@ -435,19 +435,19 @@ set_ip6_link_local_address(vlib_main_t * vm, ip6_address_t *address, u8 address_length); -void vnet_register_ip6_neighbor_resolution_event(vnet_main_t * vnm, +void vnet_register_ip6_neighbor_resolution_event(vnet_main_t * vnm, void * address_arg, uword node_index, uword type_opaque, uword data); -int vnet_add_del_ip6_nd_change_event (vnet_main_t * vnm, +int vnet_add_del_ip6_nd_change_event (vnet_main_t * vnm, void * data_callback, u32 pid, void * address_arg, uword node_index, uword type_opaque, - uword data, + uword data, int is_add); int vnet_ip6_nd_term (vlib_main_t * vm, @@ -459,7 +459,7 @@ int vnet_ip6_nd_term (vlib_main_t * vm, u16 bd_index, u8 shg); -int vnet_set_ip6_classify_intfc (vlib_main_t * vm, u32 sw_if_index, +int vnet_set_ip6_classify_intfc (vlib_main_t * vm, u32 sw_if_index, u32 table_index); extern vlib_node_registration_t ip6_lookup_node; @@ -477,10 +477,10 @@ ip6_compute_flow_hash (const ip6_header_t * ip, t1 = (ip->src_address.as_u64[0] ^ ip->src_address.as_u64[1]); t1 = (flow_hash_config & IP_FLOW_HASH_SRC_ADDR) ? t1 : 0; - + t2 = (ip->dst_address.as_u64[0] ^ ip->dst_address.as_u64[1]); t2 = (flow_hash_config & IP_FLOW_HASH_DST_ADDR) ? t2 : 0; - + a = (flow_hash_config & IP_FLOW_HASH_REVERSE_SRC_DST) ? t2 : t1; b = (flow_hash_config & IP_FLOW_HASH_REVERSE_SRC_DST) ? t1 : t2; b ^= (flow_hash_config & IP_FLOW_HASH_PROTO) ? ip->protocol : 0; @@ -490,7 +490,7 @@ ip6_compute_flow_hash (const ip6_header_t * ip, t1 = (flow_hash_config & IP_FLOW_HASH_SRC_PORT) ? t1 : 0; t2 = (flow_hash_config & IP_FLOW_HASH_DST_PORT) ? t2 : 0; - + c = (flow_hash_config & IP_FLOW_HASH_REVERSE_SRC_DST) ? ((t1<<16) | t2) : ((t2<<16) | t1); diff --git a/vnet/vnet/ip/ip6_forward.c b/vnet/vnet/ip/ip6_forward.c index 4db6be5f7bb..23f00885118 100644 --- a/vnet/vnet/ip/ip6_forward.c +++ b/vnet/vnet/ip/ip6_forward.c @@ -126,19 +126,19 @@ ip6_lookup_inline (vlib_main_t * vm, lb0 = load_balance_get (lbi0); lb1 = load_balance_get (lbi1); - vnet_buffer (p0)->ip.flow_hash = + vnet_buffer (p0)->ip.flow_hash = vnet_buffer(p1)->ip.flow_hash = 0; if (PREDICT_FALSE(lb0->lb_n_buckets > 1)) { flow_hash_config0 = lb0->lb_hash_config; - vnet_buffer (p0)->ip.flow_hash = + vnet_buffer (p0)->ip.flow_hash = ip6_compute_flow_hash (ip0, flow_hash_config0); } if (PREDICT_FALSE(lb1->lb_n_buckets > 1)) { flow_hash_config1 = lb1->lb_hash_config; - vnet_buffer (p1)->ip.flow_hash = + vnet_buffer (p1)->ip.flow_hash = ip6_compute_flow_hash (ip1, flow_hash_config1); } @@ -169,10 +169,10 @@ ip6_lookup_inline (vlib_main_t * vm, vnet_buffer (p0)->ip.adj_index[VLIB_TX] = dpo0->dpoi_index; vnet_buffer (p1)->ip.adj_index[VLIB_TX] = dpo1->dpoi_index; - vlib_increment_combined_counter + vlib_increment_combined_counter (cm, cpu_index, lbi0, 1, vlib_buffer_length_in_chain (vm, p0)); - vlib_increment_combined_counter + vlib_increment_combined_counter (cm, cpu_index, lbi1, 1, vlib_buffer_length_in_chain (vm, p1)); @@ -217,7 +217,7 @@ ip6_lookup_inline (vlib_main_t * vm, } } } - + while (n_left_from > 0 && n_left_to_next > 0) { vlib_buffer_t * p0; @@ -242,7 +242,7 @@ ip6_lookup_inline (vlib_main_t * vm, fib_index0 = (vnet_buffer(p0)->sw_if_index[VLIB_TX] == (u32)~0) ? fib_index0 : vnet_buffer(p0)->sw_if_index[VLIB_TX]; - flow_hash_config0 = + flow_hash_config0 = ip6_fib_get (fib_index0)->flow_hash_config; lbi0 = ip6_fib_table_fwding_lookup (im, fib_index0, dst_addr0); @@ -254,7 +254,7 @@ ip6_lookup_inline (vlib_main_t * vm, if (PREDICT_FALSE(lb0->lb_n_buckets > 1)) { flow_hash_config0 = lb0->lb_hash_config; - vnet_buffer (p0)->ip.flow_hash = + vnet_buffer (p0)->ip.flow_hash = ip6_compute_flow_hash (ip0, flow_hash_config0); } @@ -272,7 +272,7 @@ ip6_lookup_inline (vlib_main_t * vm, vnet_buffer (p0)->ip.adj_index[VLIB_TX] = dpo0->dpoi_index; - vlib_increment_combined_counter + vlib_increment_combined_counter (cm, cpu_index, lbi0, 1, vlib_buffer_length_in_chain (vm, p0)); @@ -557,7 +557,7 @@ ip6_sw_interface_admin_up_down (vnet_main_t * vnm, fib_index = vec_elt (im->fib_index_by_sw_if_index, sw_if_index); - foreach_ip_interface_address (&im->lookup_main, ia, sw_if_index, + foreach_ip_interface_address (&im->lookup_main, ia, sw_if_index, 0 /* honor unnumbered */, ({ a = ip_interface_address_get_address (&im->lookup_main, ia); @@ -583,7 +583,7 @@ VNET_IP6_UNICAST_FEATURE_INIT (ip6_flow_classify, static) = { }; VNET_IP6_UNICAST_FEATURE_INIT (ip6_inacl, static) = { - .node_name = "ip6-inacl", + .node_name = "ip6-inacl", .runs_before = ORDER_CONSTRAINTS {"ip6-policer-classify", 0}, .feature_index = &ip6_main.ip6_unicast_rx_feature_check_access, }; @@ -643,10 +643,10 @@ VNET_IP6_MULTICAST_FEATURE_INIT (ip6_drop_mc, static) = { .feature_index = &ip6_main.ip6_multicast_rx_feature_drop, }; -static char * rx_feature_start_nodes[] = +static char * rx_feature_start_nodes[] = {"ip6-input"}; -static char * tx_feature_start_nodes[] = +static char * tx_feature_start_nodes[] = { "ip6-rewrite", "ip6-midchain", @@ -669,12 +669,12 @@ ip6_feature_init (vlib_main_t * vm, ip6_main_t * im) vnet_config_main_t * vcm; char **feature_start_nodes; int feature_start_len; - + for (cast = 0; cast < VNET_N_IP_FEAT; cast++) { cm = &lm->feature_config_mains[cast]; vcm = &cm->config_main; - + if (cast < VNET_IP_TX_FEAT) { feature_start_nodes = rx_feature_start_nodes; @@ -686,7 +686,7 @@ ip6_feature_init (vlib_main_t * vm, ip6_main_t * im) feature_start_len = ARRAY_LEN(tx_feature_start_nodes); } - if ((error = ip_feature_init_cast (vm, cm, vcm, + if ((error = vnet_feature_arc_init (vm, vcm, feature_start_nodes, feature_start_len, im->next_feature[cast], @@ -719,7 +719,7 @@ ip6_sw_interface_add_del (vnet_main_t * vnm, feature_index = im->ip6_unicast_rx_feature_drop; else if (cast == VNET_IP_RX_MULTICAST_FEAT) feature_index = im->ip6_multicast_rx_feature_drop; - else + else feature_index = im->ip6_tx_feature_interface_output; if (is_add) @@ -738,7 +738,7 @@ ip6_sw_interface_add_del (vnet_main_t * vnm, im->ip_enabled_by_sw_if_index[sw_if_index] = 0; } cm->config_index_by_sw_if_index[sw_if_index] = ci; - /* + /* * note: do not update the tx feature count here. */ } @@ -792,7 +792,7 @@ ip6_load_balance (vlib_main_t * vm, vlib_get_next_frame (vm, node, next, to_next, n_left_to_next); - + while (n_left_from > 0 && n_left_to_next > 0) { ip_lookup_next_t next0; @@ -814,14 +814,14 @@ ip6_load_balance (vlib_main_t * vm, hc0 = lb0->lb_hash_config; vnet_buffer(p0)->ip.flow_hash = ip6_compute_flow_hash(ip0, hc0); - dpo0 = load_balance_get_bucket_i(lb0, + dpo0 = load_balance_get_bucket_i(lb0, vnet_buffer(p0)->ip.flow_hash & (lb0->lb_n_buckets - 1)); next0 = dpo0->dpoi_next_node; vnet_buffer (p0)->ip.adj_index[VLIB_TX] = dpo0->dpoi_index; - vlib_increment_combined_counter + vlib_increment_combined_counter (cm, cpu_index, lbi0, 1, vlib_buffer_length_in_chain (vm, p0)); @@ -1103,7 +1103,7 @@ u16 ip6_tcp_udp_icmp_compute_checksum (vlib_main_t * vm, vlib_buffer_t * p0, ip6 sum0 = ip0->payload_length + clib_host_to_net_u16 (ip0->protocol); payload_length_host_byte_order = clib_net_to_host_u16 (ip0->payload_length); data_this_buffer = (void *) (ip0 + 1); - + for (i = 0; i < ARRAY_LEN (ip0->src_address.as_uword); i++) { sum0 = ip_csum_with_carry (sum0, @@ -1123,7 +1123,7 @@ u16 ip6_tcp_udp_icmp_compute_checksum (vlib_main_t * vm, vlib_buffer_t * p0, ip6 skip_bytes = 8* (1 + ext_hdr->n_data_u64s); data_this_buffer = (void *)((u8 *)data_this_buffer + skip_bytes); - + payload_length_host_byte_order -= skip_bytes; headers_size += skip_bytes; } @@ -1155,7 +1155,7 @@ u16 ip6_tcp_udp_icmp_compute_checksum (vlib_main_t * vm, vlib_buffer_t * p0, ip6 *bogus_lengthp = 1; return 0xfefe; } - } + } else sum0 = ip_incremental_checksum (sum0, data_this_buffer, n_this_buffer); #else if (p0 && n_this_buffer + headers_size > p0->current_length) @@ -1226,7 +1226,7 @@ ip6_local (vlib_main_t * vm, from = vlib_frame_vector_args (frame); n_left_from = frame->n_vectors; next_index = node->cached_next_index; - + if (node->flags & VLIB_NODE_FLAG_TRACE) ip6_forward_next_trace (vm, node, frame, VLIB_TX); @@ -1245,14 +1245,14 @@ ip6_local (vlib_main_t * vm, i32 len_diff0, len_diff1; u8 error0, type0, good_l4_checksum0; u8 error1, type1, good_l4_checksum1; - + pi0 = to_next[0] = from[0]; pi1 = to_next[1] = from[1]; from += 2; n_left_from -= 2; to_next += 2; n_left_to_next -= 2; - + p0 = vlib_get_buffer (vm, pi0); p1 = vlib_get_buffer (vm, pi1); @@ -1364,13 +1364,13 @@ ip6_local (vlib_main_t * vm, u32 pi0, ip_len0, udp_len0, flags0, next0; i32 len_diff0; u8 error0, type0, good_l4_checksum0; - + pi0 = to_next[0] = from[0]; from += 1; n_left_from -= 1; to_next += 1; n_left_to_next -= 1; - + p0 = vlib_get_buffer (vm, pi0); ip0 = vlib_buffer_get_current (p0); @@ -1435,7 +1435,7 @@ ip6_local (vlib_main_t * vm, to_next, n_left_to_next, pi0, next0); } - + vlib_put_next_frame (vm, node, next_index, n_left_to_next); } @@ -1495,7 +1495,7 @@ ip6_discover_neighbor_inline (vlib_main_t * vm, uword n_left_from, n_left_to_next_drop; static f64 time_last_seed_change = -1e100; static u32 hash_seeds[3]; - static uword hash_bitmap[256 / BITS (uword)]; + static uword hash_bitmap[256 / BITS (uword)]; f64 time_now; int bogus_length; @@ -1592,8 +1592,8 @@ ip6_discover_neighbor_inline (vlib_main_t * vm, if (!(hw_if0->flags & VNET_HW_INTERFACE_FLAG_LINK_UP)) drop0 = 1; - p0->error = - node->errors[drop0 ? IP6_DISCOVER_NEIGHBOR_ERROR_DROP + p0->error = + node->errors[drop0 ? IP6_DISCOVER_NEIGHBOR_ERROR_DROP : IP6_DISCOVER_NEIGHBOR_ERROR_REQUEST_SENT]; if (drop0) continue; @@ -1603,13 +1603,13 @@ ip6_discover_neighbor_inline (vlib_main_t * vm, icmp6_neighbor_solicitation_header_t * h0; vlib_buffer_t * b0; - h0 = vlib_packet_template_get_packet + h0 = vlib_packet_template_get_packet (vm, &im->discover_neighbor_packet_template, &bi0); - /* + /* * Build ethernet header. - * Choose source address based on destination lookup - * adjacency. + * Choose source address based on destination lookup + * adjacency. */ if (ip6_src_address_for_packet (lm, sw_if_index0, @@ -1621,10 +1621,10 @@ ip6_discover_neighbor_inline (vlib_main_t * vm, continue; } - /* - * Destination address is a solicited node multicast address. + /* + * Destination address is a solicited node multicast address. * We need to fill in - * the low 24 bits with low 24 bits of target's address. + * the low 24 bits with low 24 bits of target's address. */ h0->ip.dst_address.as_u8[13] = ip0->dst_address.as_u8[13]; h0->ip.dst_address.as_u8[14] = ip0->dst_address.as_u8[14]; @@ -1632,24 +1632,24 @@ ip6_discover_neighbor_inline (vlib_main_t * vm, h0->neighbor.target_address = ip0->dst_address; - clib_memcpy (h0->link_layer_option.ethernet_address, + clib_memcpy (h0->link_layer_option.ethernet_address, hw_if0->hw_address, vec_len (hw_if0->hw_address)); /* $$$$ appears we need this; why is the checksum non-zero? */ h0->neighbor.icmp.checksum = 0; - h0->neighbor.icmp.checksum = - ip6_tcp_udp_icmp_compute_checksum (vm, 0, &h0->ip, + h0->neighbor.icmp.checksum = + ip6_tcp_udp_icmp_compute_checksum (vm, 0, &h0->ip, &bogus_length); ASSERT (bogus_length == 0); vlib_buffer_copy_trace_flag (vm, p0, bi0); b0 = vlib_get_buffer (vm, bi0); - vnet_buffer (b0)->sw_if_index[VLIB_TX] + vnet_buffer (b0)->sw_if_index[VLIB_TX] = vnet_buffer (p0)->sw_if_index[VLIB_TX]; /* Add rewrite/encap string. */ - vnet_rewrite_one_header (adj0[0], h0, + vnet_rewrite_one_header (adj0[0], h0, sizeof (ethernet_header_t)); vlib_buffer_advance (b0, -adj0->rewrite_header.data_bytes); @@ -1659,7 +1659,7 @@ ip6_discover_neighbor_inline (vlib_main_t * vm, } } - vlib_put_next_frame (vm, node, IP6_DISCOVER_NEIGHBOR_NEXT_DROP, + vlib_put_next_frame (vm, node, IP6_DISCOVER_NEIGHBOR_NEXT_DROP, n_left_to_next_drop); } @@ -1684,7 +1684,7 @@ ip6_glean (vlib_main_t * vm, static char * ip6_discover_neighbor_error_strings[] = { [IP6_DISCOVER_NEIGHBOR_ERROR_DROP] = "address overflow drops", - [IP6_DISCOVER_NEIGHBOR_ERROR_REQUEST_SENT] + [IP6_DISCOVER_NEIGHBOR_ERROR_REQUEST_SENT] = "neighbor solicitations sent", [IP6_DISCOVER_NEIGHBOR_ERROR_NO_SOURCE_ADDRESS] = "no source address for ND solicitation", @@ -1744,8 +1744,8 @@ ip6_probe_neighbor (vlib_main_t * vm, ip6_address_t * dst, u32 sw_if_index) if (!(si->flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP)) { return clib_error_return (0, "%U: interface %U down", - format_ip6_address, dst, - format_vnet_sw_if_index_name, vnm, + format_ip6_address, dst, + format_vnet_sw_if_index_name, vnm, sw_if_index); } @@ -1753,7 +1753,7 @@ ip6_probe_neighbor (vlib_main_t * vm, ip6_address_t * dst, u32 sw_if_index) if (! src) { vnm->api_errno = VNET_API_ERROR_NO_MATCHING_INTERFACE; - return clib_error_return + return clib_error_return (0, "no matching interface address for destination %U (interface %U)", format_ip6_address, dst, format_vnet_sw_if_index_name, vnm, sw_if_index); @@ -1774,7 +1774,7 @@ ip6_probe_neighbor (vlib_main_t * vm, ip6_address_t * dst, u32 sw_if_index) clib_memcpy (h->link_layer_option.ethernet_address, hi->hw_address, vec_len (hi->hw_address)); - h->neighbor.icmp.checksum = + h->neighbor.icmp.checksum = ip6_tcp_udp_icmp_compute_checksum (vm, 0, &h->ip, &bogus_length); ASSERT(bogus_length == 0); @@ -1819,7 +1819,7 @@ ip6_rewrite_inline (vlib_main_t * vm, n_left_from = frame->n_vectors; next_index = node->cached_next_index; u32 cpu_index = os_get_cpu_number(); - + while (n_left_from > 0) { vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); @@ -1832,7 +1832,7 @@ ip6_rewrite_inline (vlib_main_t * vm, u32 pi0, rw_len0, next0, error0, adj_index0; u32 pi1, rw_len1, next1, error1, adj_index1; u32 tx_sw_if_index0, tx_sw_if_index1; - + /* Prefetch next iteration. */ { vlib_buffer_t * p2, * p3; @@ -1857,7 +1857,7 @@ ip6_rewrite_inline (vlib_main_t * vm, n_left_from -= 2; to_next += 2; n_left_to_next -= 2; - + p0 = vlib_get_buffer (vm, pi0); p1 = vlib_get_buffer (vm, pi1); @@ -1918,12 +1918,12 @@ ip6_rewrite_inline (vlib_main_t * vm, vnet_buffer(p1)->ip.save_rewrite_length = rw_len1; vlib_increment_combined_counter (&adjacency_counters, - cpu_index, + cpu_index, adj_index0, /* packet increment */ 0, /* byte increment */ rw_len0); vlib_increment_combined_counter (&adjacency_counters, - cpu_index, + cpu_index, adj_index1, /* packet increment */ 0, /* byte increment */ rw_len1); @@ -1948,12 +1948,12 @@ ip6_rewrite_inline (vlib_main_t * vm, tx_sw_if_index0; next0 = adj0[0].rewrite_header.next_index; - if (PREDICT_FALSE - (clib_bitmap_get (lm->tx_sw_if_has_ip_output_features, + if (PREDICT_FALSE + (clib_bitmap_get (lm->tx_sw_if_has_ip_output_features, tx_sw_if_index0))) { - p0->current_config_index = - vec_elt (cm->config_index_by_sw_if_index, + p0->current_config_index = + vec_elt (cm->config_index_by_sw_if_index, tx_sw_if_index0); vnet_get_config_data (&cm->config_main, &p0->current_config_index, @@ -1971,12 +1971,12 @@ ip6_rewrite_inline (vlib_main_t * vm, tx_sw_if_index1; next1 = adj1[0].rewrite_header.next_index; - if (PREDICT_FALSE - (clib_bitmap_get (lm->tx_sw_if_has_ip_output_features, + if (PREDICT_FALSE + (clib_bitmap_get (lm->tx_sw_if_has_ip_output_features, tx_sw_if_index1))) { - p1->current_config_index = - vec_elt (cm->config_index_by_sw_if_index, + p1->current_config_index = + vec_elt (cm->config_index_by_sw_if_index, tx_sw_if_index1); vnet_get_config_data (&cm->config_main, &p1->current_config_index, @@ -1989,7 +1989,7 @@ ip6_rewrite_inline (vlib_main_t * vm, vnet_rewrite_two_headers (adj0[0], adj1[0], ip0, ip1, sizeof (ethernet_header_t)); - + if (is_midchain) { adj0->sub_type.midchain.fixup_func(vm, adj0, p0); @@ -2009,7 +2009,7 @@ ip6_rewrite_inline (vlib_main_t * vm, u32 pi0, rw_len0; u32 adj_index0, next0, error0; u32 tx_sw_if_index0; - + pi0 = to_next[0] = from[0]; p0 = vlib_get_buffer (vm, pi0); @@ -2020,7 +2020,7 @@ ip6_rewrite_inline (vlib_main_t * vm, ASSERT(adj_index0); adj0 = ip_get_adjacency (lm, adj_index0); - + ip0 = vlib_buffer_get_current (p0); error0 = IP6_ERROR_NONE; @@ -2053,13 +2053,13 @@ ip6_rewrite_inline (vlib_main_t * vm, /* Guess we are only writing on simple Ethernet header. */ vnet_rewrite_one_header (adj0[0], ip0, sizeof (ethernet_header_t)); - + /* Update packet buffer attributes/set output interface. */ rw_len0 = adj0[0].rewrite_header.data_bytes; vnet_buffer(p0)->ip.save_rewrite_length = rw_len0; vlib_increment_combined_counter (&adjacency_counters, - cpu_index, + cpu_index, adj_index0, /* packet increment */ 0, /* byte increment */ rw_len0); @@ -2081,12 +2081,12 @@ ip6_rewrite_inline (vlib_main_t * vm, vnet_buffer (p0)->sw_if_index[VLIB_TX] = tx_sw_if_index0; next0 = adj0[0].rewrite_header.next_index; - if (PREDICT_FALSE - (clib_bitmap_get (lm->tx_sw_if_has_ip_output_features, + if (PREDICT_FALSE + (clib_bitmap_get (lm->tx_sw_if_has_ip_output_features, tx_sw_if_index0))) { - p0->current_config_index = - vec_elt (cm->config_index_by_sw_if_index, + p0->current_config_index = + vec_elt (cm->config_index_by_sw_if_index, tx_sw_if_index0); vnet_get_config_data (&cm->config_main, &p0->current_config_index, @@ -2106,7 +2106,7 @@ ip6_rewrite_inline (vlib_main_t * vm, n_left_from -= 1; to_next += 1; n_left_to_next -= 1; - + vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, pi0, next0); @@ -2662,7 +2662,7 @@ ip6_lookup_init (vlib_main_t * vm) if (im->lookup_table_size == 0) im->lookup_table_size = IP6_FIB_DEFAULT_HASH_MEMORY_SIZE; - + BV(clib_bihash_init) (&(im->ip6_table[IP6_FIB_TABLE_FWDING].ip6_hash), "ip6 FIB fwding table", im->lookup_table_nbuckets, @@ -2761,7 +2761,7 @@ VLIB_CLI_COMMAND (set_interface_ip6_table_command, static) = { .short_help = "set interface ip6 table <intfc> <table-id>" }; -void +void ip6_link_local_address_from_ethernet_mac_address (ip6_address_t *ip, u8 *mac) { @@ -2777,8 +2777,8 @@ ip6_link_local_address_from_ethernet_mac_address (ip6_address_t *ip, ip->as_u8 [15] = mac[5]; } -void -ip6_ethernet_mac_address_from_link_local_address (u8 *mac, +void +ip6_ethernet_mac_address_from_link_local_address (u8 *mac, ip6_address_t *ip) { /* Invert the previously inverted "u" bit */ @@ -2790,7 +2790,7 @@ ip6_ethernet_mac_address_from_link_local_address (u8 *mac, mac[5] = ip->as_u8 [15]; } -static clib_error_t * +static clib_error_t * test_ip6_link_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) @@ -2807,13 +2807,13 @@ test_ip6_link_command_fn (vlib_main_t * vm, vlib_cli_output (vm, "Original MAC address: %U", format_ethernet_address, mac); } - + return 0; } VLIB_CLI_COMMAND (test_link_command, static) = { .path = "test ip6 link", - .function = test_ip6_link_command_fn, + .function = test_ip6_link_command_fn, .short_help = "test ip6 link <mac-address>", }; @@ -2855,7 +2855,7 @@ set_ip6_flow_hash_command_fn (vlib_main_t * vm, if (matched == 0) return clib_error_return (0, "unknown input `%U'", format_unformat_error, input); - + rv = vnet_set_ip6_flow_hash (table_id, flow_hash_config); switch (rv) { @@ -2864,18 +2864,18 @@ set_ip6_flow_hash_command_fn (vlib_main_t * vm, case -1: return clib_error_return (0, "no such FIB table %d", table_id); - + default: clib_warning ("BUG: illegal flow hash config 0x%x", flow_hash_config); break; } - + return 0; } VLIB_CLI_COMMAND (set_ip6_flow_hash_command, static) = { .path = "set ip6 flow-hash", - .short_help = + .short_help = "set ip table flow-hash table <fib-id> src dst sport dport proto reverse", .function = set_ip6_flow_hash_command_fn, }; @@ -2888,7 +2888,7 @@ show_ip6_local_command_fn (vlib_main_t * vm, ip6_main_t * im = &ip6_main; ip_lookup_main_t * lm = &im->lookup_main; int i; - + vlib_cli_output (vm, "Protocols handled by ip6_local"); for (i = 0; i < ARRAY_LEN(lm->local_next_by_ip_protocol); i++) { @@ -2906,7 +2906,7 @@ VLIB_CLI_COMMAND (show_ip6_local, static) = { .short_help = "Show ip6 local protocol table", }; -int vnet_set_ip6_classify_intfc (vlib_main_t * vm, u32 sw_if_index, +int vnet_set_ip6_classify_intfc (vlib_main_t * vm, u32 sw_if_index, u32 table_index) { vnet_main_t * vnm = vnet_get_main(); @@ -2977,20 +2977,20 @@ set_ip6_classify_command_fn (vlib_main_t * vm, int table_index_set = 0; u32 sw_if_index = ~0; int rv; - + while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) { if (unformat (input, "table-index %d", &table_index)) table_index_set = 1; - else if (unformat (input, "intfc %U", unformat_vnet_sw_interface, + else if (unformat (input, "intfc %U", unformat_vnet_sw_interface, vnet_get_main(), &sw_if_index)) ; else break; } - + if (table_index_set == 0) return clib_error_return (0, "classify table-index must be specified"); - + if (sw_if_index == ~0) return clib_error_return (0, "interface / subif must be specified"); @@ -3012,7 +3012,7 @@ set_ip6_classify_command_fn (vlib_main_t * vm, VLIB_CLI_COMMAND (set_ip6_classify_command, static) = { .path = "set ip6 classify", - .short_help = + .short_help = "set ip6 classify intfc <int> table-index <index>", .function = set_ip6_classify_command_fn, }; @@ -3063,7 +3063,7 @@ set_interface_ip6_output_feature_command_fn (vlib_main_t * vm, ip6_main_t * im = &ip6_main; ip_lookup_main_t * lm = &im->lookup_main; - while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) + while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) { if (unformat (input, "%U", unformat_vnet_sw_interface, vnm, &sw_if_index)) ; diff --git a/vnet/vnet/ip/ip_feature_registration.c b/vnet/vnet/ip/ip_feature_registration.c index f09a894ca03..7ea5e79fca5 100644 --- a/vnet/vnet/ip/ip_feature_registration.c +++ b/vnet/vnet/ip/ip_feature_registration.c @@ -128,14 +128,30 @@ comma_split (u8 * s, u8 ** a, u8 ** b) return 0; } +/** + * @brief Initialize a feature graph arc + * @param vm vlib main structure pointer + * @param vcm vnet config main structure pointer + * @param feature_start_nodes names of start-nodes which use this + * feature graph arc + * @param num_feature_start_nodes number of start-nodes + * @param first_reg first element in + * [an __attribute__((constructor)) function built, or + * otherwise created] singly-linked list of feature registrations + * @param [out] in_feature_nodes returned vector of + * topologically-sorted feature node names, for use in + * show commands + * @returns 0 on success, otherwise an error message. Errors + * are fatal since they invariably involve mistyped node-names, or + * genuinely missing node-names + */ clib_error_t * -ip_feature_init_cast (vlib_main_t * vm, - ip_config_main_t * cm, - vnet_config_main_t * vcm, - char **feature_start_nodes, - int num_feature_start_nodes, - vnet_ip_feature_registration_t * first_reg, - char ***in_feature_nodes) +vnet_feature_arc_init (vlib_main_t * vm, + vnet_config_main_t * vcm, + char **feature_start_nodes, + int num_feature_start_nodes, + vnet_ip_feature_registration_t * first_reg, + char ***in_feature_nodes) { uword *index_by_name; uword *reg_by_index; @@ -305,12 +321,12 @@ again: return 0; } -#define foreach_af_cast \ -_(4, VNET_IP_RX_UNICAST_FEAT, "ip4 unicast") \ -_(4, VNET_IP_RX_MULTICAST_FEAT, "ip4 multicast") \ -_(4, VNET_IP_TX_FEAT, "ip4 output") \ -_(6, VNET_IP_RX_UNICAST_FEAT, "ip6 unicast") \ -_(6, VNET_IP_RX_MULTICAST_FEAT, "ip6 multicast") \ +#define foreach_af_cast \ +_(4, VNET_IP_RX_UNICAST_FEAT, "ip4 unicast") \ +_(4, VNET_IP_RX_MULTICAST_FEAT, "ip4 multicast") \ +_(4, VNET_IP_TX_FEAT, "ip4 output") \ +_(6, VNET_IP_RX_UNICAST_FEAT, "ip6 unicast") \ +_(6, VNET_IP_RX_MULTICAST_FEAT, "ip6 multicast") \ _(6, VNET_IP_TX_FEAT, "ip6 output") /** Display the set of available ip features. @@ -342,6 +358,15 @@ show_ip_features_command_fn (vlib_main_t * vm, return 0; } +/*? + * Display the set of available ip features + * + * @cliexpar + * Example: + * @cliexcmd{show ip features} + * @cliexend + * @endparblock +?*/ /* *INDENT-OFF* */ VLIB_CLI_COMMAND (show_ip_features_command, static) = { .path = "show ip features", @@ -437,6 +462,15 @@ show_ip_interface_features_command_fn (vlib_main_t * vm, return 0; } +/*? + * Display the ip features configured on a specific interface + * + * @cliexpar + * Example: + * @cliexcmd{show ip interface features GigabitEthernet2/0/0} + * @cliexend + * @endparblock +?*/ /* *INDENT-OFF* */ VLIB_CLI_COMMAND (show_ip_interface_features_command, static) = { .path = "show ip interface features", diff --git a/vnet/vnet/ip/ip_feature_registration.h b/vnet/vnet/ip/ip_feature_registration.h index b86e3a626e1..7829980739a 100644 --- a/vnet/vnet/ip/ip_feature_registration.h +++ b/vnet/vnet/ip/ip_feature_registration.h @@ -23,7 +23,7 @@ typedef struct _vnet_ip_feature_registration struct _vnet_ip_feature_registration *next; /** Graph node name */ char *node_name; - /** Pointer to this feature index, filled in by ip_feature_init_cast */ + /** Pointer to this feature index, filled in by vnet_feature_arc_init */ u32 *feature_index; /** Constraints of the form "this feature runs before X" */ char **runs_before; @@ -40,13 +40,12 @@ typedef struct ip_config_main_t_ /** Syntactic sugar, the c-compiler won't initialize registrations without it */ #define ORDER_CONSTRAINTS (char*[]) -clib_error_t *ip_feature_init_cast (vlib_main_t * vm, - ip_config_main_t * cm, - vnet_config_main_t * vcm, - char **feature_start_nodes, - int num_feature_start_nodes, - vnet_ip_feature_registration_t * - first_reg, char ***feature_nodes); +clib_error_t *vnet_feature_arc_init (vlib_main_t * vm, + vnet_config_main_t * vcm, + char **feature_start_nodes, + int num_feature_start_nodes, + vnet_ip_feature_registration_t * + first_reg, char ***feature_nodes); void ip_interface_features_show (vlib_main_t * vm, const char *pname, diff --git a/vnet/vnet/mpls/mpls.h b/vnet/vnet/mpls/mpls.h index e7fed192e57..5a09e5a0103 100644 --- a/vnet/vnet/mpls/mpls.h +++ b/vnet/vnet/mpls/mpls.h @@ -39,8 +39,8 @@ typedef enum { MPLS_N_ERROR, } mpls_gre_error_t; -/* - * No protocol info, MPLS labels don't have a next-header field +/* + * No protocol info, MPLS labels don't have a next-header field * presumably the label field tells all... */ @@ -100,7 +100,7 @@ typedef struct mpls_fib_t_ * A hash table of entries. 21 bit key * Hash table for reduced memory footprint */ - uword * mf_entries; + uword * mf_entries; /** * The load-balance indeices keyed by 21 bit label+eos bit. @@ -129,7 +129,7 @@ typedef struct { /* rx/tx interface/feature configuration. */ ip_config_main_t feature_config_mains[VNET_N_IP_FEAT]; - /* Built-in unicast feature path indices, see ip_feature_init_cast(...) */ + /* Built-in unicast feature path indices, see vnet_feature_arc_init(...) */ u32 mpls_rx_feature_lookup; u32 mpls_rx_feature_not_enabled; u32 mpls_tx_feature_interface_output; @@ -195,7 +195,7 @@ static void __vnet_add_feature_registration_tx_##x (void) \ tx_##x.next = mm->next_feature[VNET_IP_TX_FEAT]; \ mm->next_feature[VNET_IP_TX_FEAT] = &tx_##x; \ } \ -__VA_ARGS__ vnet_ip_feature_registration_t tx_##x +__VA_ARGS__ vnet_ip_feature_registration_t tx_##x extern clib_error_t * mpls_feature_init(vlib_main_t * vm); @@ -239,7 +239,7 @@ void mpls_sw_interface_enable_disable (mpls_main_t * mm, u8 mpls_sw_interface_is_enabled (u32 sw_if_index); -mpls_encap_t * +mpls_encap_t * mpls_encap_by_fib_and_dest (mpls_main_t * mm, u32 rx_fib, u32 dst_address); int mpls_label_from_fib_id_and_dest (mpls_main_t *gm, u32 fib_id, @@ -257,7 +257,7 @@ int vnet_mpls_gre_add_del_tunnel (ip4_address_t *src, int vnet_mpls_ethernet_add_del_tunnel (u8 *dst, ip4_address_t *intfc, u32 mask_width, - u32 inner_fib_id, + u32 inner_fib_id, u32 tx_sw_if_index, u32 * tunnel_sw_if_index, u8 l2_only, @@ -267,18 +267,18 @@ int vnet_mpls_gre_delete_fib_tunnels (u32 fib_id); int mpls_fib_reset_labels (u32 fib_id); -int vnet_mpls_add_del_decap (u32 rx_fib_id, +int vnet_mpls_add_del_decap (u32 rx_fib_id, u32 tx_fib_id, - u32 label_host_byte_order, + u32 label_host_byte_order, int s_bit, int next_index, int is_add); -int vnet_mpls_add_del_encap (ip4_address_t *dest, u32 fib_id, +int vnet_mpls_add_del_encap (ip4_address_t *dest, u32 fib_id, u32 *labels_host_byte_order, u32 policy_tunnel_index, int no_dst_hash, u32 * indexp, int is_add); -int vnet_mpls_policy_tunnel_add_rewrite (mpls_main_t * mm, - mpls_encap_t * e, +int vnet_mpls_policy_tunnel_add_rewrite (mpls_main_t * mm, + mpls_encap_t * e, u32 policy_tunnel_index); typedef struct { @@ -326,7 +326,7 @@ typedef enum { } mpls_lookup_next_t; #define foreach_mpls_output_next \ -_(DROP, "error-drop") +_(DROP, "error-drop") typedef enum { #define _(s,n) MPLS_OUTPUT_NEXT_##s, diff --git a/vnet/vnet/mpls/mpls_features.c b/vnet/vnet/mpls/mpls_features.c index 80002fcb6f9..3eb469c8768 100644 --- a/vnet/vnet/mpls/mpls_features.c +++ b/vnet/vnet/mpls/mpls_features.c @@ -124,7 +124,7 @@ static char * rx_feature_start_nodes[] = { "mpls-input", }; -static char * tx_feature_start_nodes[] = +static char * tx_feature_start_nodes[] = { "mpls-output", "mpls-midchain", @@ -137,22 +137,24 @@ mpls_feature_init (vlib_main_t * vm) vnet_config_main_t * vcm = &cm->config_main; clib_error_t *error; - if ((error = ip_feature_init_cast (vm, cm, vcm, - rx_feature_start_nodes, - ARRAY_LEN(rx_feature_start_nodes), - mpls_main.next_feature[VNET_IP_RX_UNICAST_FEAT], - &mpls_main.feature_nodes[VNET_IP_RX_UNICAST_FEAT]))) + error = vnet_feature_arc_init + (vm, vcm, rx_feature_start_nodes, + ARRAY_LEN(rx_feature_start_nodes), + mpls_main.next_feature[VNET_IP_RX_UNICAST_FEAT], + &mpls_main.feature_nodes[VNET_IP_RX_UNICAST_FEAT]); + + if (error) return error; cm = &mpls_main.feature_config_mains[VNET_IP_TX_FEAT]; vcm = &cm->config_main; - if ((error = ip_feature_init_cast (vm, cm, vcm, - tx_feature_start_nodes, - ARRAY_LEN(tx_feature_start_nodes), - mpls_main.next_feature[VNET_IP_TX_FEAT], - &mpls_main.feature_nodes[VNET_IP_TX_FEAT]))) - return error; + error = vnet_feature_arc_init + (vm, vcm, + tx_feature_start_nodes, + ARRAY_LEN(tx_feature_start_nodes), + mpls_main.next_feature[VNET_IP_TX_FEAT], + &mpls_main.feature_nodes[VNET_IP_TX_FEAT]); return error; } @@ -256,7 +258,7 @@ show_mpls_interface_features_command_fn (vlib_main_t * vm, vlib_cli_output (vm, "MPLS feature paths configured on %U...", format_vnet_sw_if_index_name, vnm, sw_if_index); - ip_interface_features_show (vm, "MPLS", + ip_interface_features_show (vm, "MPLS", mpls_main.feature_config_mains, sw_if_index); |