From d7cb1b5f22948eba272e1a8844c75a2b87706fc4 Mon Sep 17 00:00:00 2001 From: Dave Barach Date: Fri, 9 Dec 2016 09:52:16 -0500 Subject: Coding standards cleanup for vnet/vnet/ip, VPP-255 Change-Id: I12892fa571cc50e0541d6463a8b68e1b618edd9f Signed-off-by: Dave Barach --- vnet/vnet/ip/ip4_input.c | 246 ++++++++++++++++++++++++++++++----------------- 1 file changed, 156 insertions(+), 90 deletions(-) (limited to 'vnet/vnet/ip/ip4_input.c') diff --git a/vnet/vnet/ip/ip4_input.c b/vnet/vnet/ip/ip4_input.c index a3620de8b42..69b1e5a83d2 100644 --- a/vnet/vnet/ip/ip4_input.c +++ b/vnet/vnet/ip/ip4_input.c @@ -42,24 +42,26 @@ #include #include -typedef struct { +typedef struct +{ u8 packet_data[64]; } ip4_input_trace_t; -static u8 * format_ip4_input_trace (u8 * s, va_list * va) +static u8 * +format_ip4_input_trace (u8 * s, va_list * va) { CLIB_UNUSED (vlib_main_t * vm) = va_arg (*va, vlib_main_t *); CLIB_UNUSED (vlib_node_t * node) = va_arg (*va, vlib_node_t *); - ip4_input_trace_t * t = va_arg (*va, ip4_input_trace_t *); + ip4_input_trace_t *t = va_arg (*va, ip4_input_trace_t *); s = format (s, "%U", - format_ip4_header, - t->packet_data, sizeof (t->packet_data)); + format_ip4_header, t->packet_data, sizeof (t->packet_data)); return s; } -typedef enum { +typedef enum +{ IP4_INPUT_NEXT_DROP, IP4_INPUT_NEXT_PUNT, IP4_INPUT_NEXT_LOOKUP, @@ -73,17 +75,17 @@ typedef enum { always_inline uword ip4_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node, - vlib_frame_t * frame, - int verify_checksum) + vlib_frame_t * frame, int verify_checksum) { - ip4_main_t * im = &ip4_main; - vnet_main_t * vnm = vnet_get_main(); - ip_lookup_main_t * lm = &im->lookup_main; - u32 n_left_from, * from, * to_next; + ip4_main_t *im = &ip4_main; + vnet_main_t *vnm = vnet_get_main (); + ip_lookup_main_t *lm = &im->lookup_main; + u32 n_left_from, *from, *to_next; ip4_input_next_t next_index; - vlib_node_runtime_t * error_node = vlib_node_get_runtime (vm, ip4_input_node.index); - vlib_simple_counter_main_t * cm; - u32 cpu_index = os_get_cpu_number(); + vlib_node_runtime_t *error_node = + vlib_node_get_runtime (vm, ip4_input_node.index); + vlib_simple_counter_main_t *cm; + u32 cpu_index = os_get_cpu_number (); from = vlib_frame_vector_args (frame); n_left_from = frame->n_vectors; @@ -95,19 +97,18 @@ ip4_input_inline (vlib_main_t * vm, sizeof (ip4_input_trace_t)); cm = vec_elt_at_index (vnm->interface_main.sw_if_counters, - VNET_INTERFACE_COUNTER_IP4); + VNET_INTERFACE_COUNTER_IP4); while (n_left_from > 0) { u32 n_left_to_next; - vlib_get_next_frame (vm, node, next_index, - to_next, n_left_to_next); + vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); while (n_left_from >= 4 && n_left_to_next >= 2) { - vlib_buffer_t * p0, * p1; - ip4_header_t * ip0, * ip1; + vlib_buffer_t *p0, *p1; + ip4_header_t *ip0, *ip1; u32 sw_if_index0, pi0, ip_len0, cur_len0, next0 = 0; u32 sw_if_index1, pi1, ip_len1, cur_len1, next1 = 0; i32 len_diff0, len_diff1; @@ -115,7 +116,7 @@ ip4_input_inline (vlib_main_t * vm, /* Prefetch next iteration. */ { - vlib_buffer_t * p2, * p3; + vlib_buffer_t *p2, *p3; p2 = vlib_get_buffer (vm, from[2]); p3 = vlib_get_buffer (vm, from[3]); @@ -143,8 +144,12 @@ ip4_input_inline (vlib_main_t * vm, sw_if_index0 = vnet_buffer (p0)->sw_if_index[VLIB_RX]; sw_if_index1 = vnet_buffer (p1)->sw_if_index[VLIB_RX]; - arc0 = ip4_address_is_multicast (&ip0->dst_address) ? lm->mcast_feature_arc_index : lm->ucast_feature_arc_index; - arc1 = ip4_address_is_multicast (&ip1->dst_address) ? lm->mcast_feature_arc_index : lm->ucast_feature_arc_index; + arc0 = + ip4_address_is_multicast (&ip0->dst_address) ? + lm->mcast_feature_arc_index : lm->ucast_feature_arc_index; + arc1 = + ip4_address_is_multicast (&ip1->dst_address) ? + lm->mcast_feature_arc_index : lm->ucast_feature_arc_index; vnet_buffer (p0)->ip.adj_index[VLIB_RX] = ~0; vnet_buffer (p1)->ip.adj_index[VLIB_RX] = ~0; @@ -158,12 +163,20 @@ ip4_input_inline (vlib_main_t * vm, error0 = error1 = IP4_ERROR_NONE; /* Punt packets with options. */ - error0 = (ip0->ip_version_and_header_length & 0xf) != 5 ? IP4_ERROR_OPTIONS : error0; - error1 = (ip1->ip_version_and_header_length & 0xf) != 5 ? IP4_ERROR_OPTIONS : error1; + error0 = + (ip0->ip_version_and_header_length & 0xf) != + 5 ? IP4_ERROR_OPTIONS : error0; + error1 = + (ip1->ip_version_and_header_length & 0xf) != + 5 ? IP4_ERROR_OPTIONS : error1; /* Version != 4? Drop it. */ - error0 = (ip0->ip_version_and_header_length >> 4) != 4 ? IP4_ERROR_VERSION : error0; - error1 = (ip1->ip_version_and_header_length >> 4) != 4 ? IP4_ERROR_VERSION : error1; + error0 = + (ip0->ip_version_and_header_length >> 4) != + 4 ? IP4_ERROR_VERSION : error0; + error1 = + (ip1->ip_version_and_header_length >> 4) != + 4 ? IP4_ERROR_VERSION : error1; /* Verify header checksum. */ if (verify_checksum) @@ -173,17 +186,31 @@ ip4_input_inline (vlib_main_t * vm, ip4_partial_header_checksum_x1 (ip0, sum0); ip4_partial_header_checksum_x1 (ip1, sum1); - error0 = 0xffff != ip_csum_fold (sum0) ? IP4_ERROR_BAD_CHECKSUM : error0; - error1 = 0xffff != ip_csum_fold (sum1) ? IP4_ERROR_BAD_CHECKSUM : error1; + error0 = + 0xffff != + ip_csum_fold (sum0) ? IP4_ERROR_BAD_CHECKSUM : error0; + error1 = + 0xffff != + ip_csum_fold (sum1) ? IP4_ERROR_BAD_CHECKSUM : error1; } /* Drop fragmentation offset 1 packets. */ - error0 = ip4_get_fragment_offset (ip0) == 1 ? IP4_ERROR_FRAGMENT_OFFSET_ONE : error0; - error1 = ip4_get_fragment_offset (ip1) == 1 ? IP4_ERROR_FRAGMENT_OFFSET_ONE : error1; + error0 = + ip4_get_fragment_offset (ip0) == + 1 ? IP4_ERROR_FRAGMENT_OFFSET_ONE : error0; + error1 = + ip4_get_fragment_offset (ip1) == + 1 ? IP4_ERROR_FRAGMENT_OFFSET_ONE : error1; /* TTL < 1? Drop it. */ - error0 = (ip0->ttl < 1 && arc0 == lm->ucast_feature_arc_index) ? IP4_ERROR_TIME_EXPIRED : error0; - error1 = (ip1->ttl < 1 && arc1 == lm->ucast_feature_arc_index) ? IP4_ERROR_TIME_EXPIRED : error1; + error0 = (ip0->ttl < 1 + && arc0 == + lm->ucast_feature_arc_index) ? IP4_ERROR_TIME_EXPIRED : + error0; + error1 = (ip1->ttl < 1 + && arc1 == + lm->ucast_feature_arc_index) ? IP4_ERROR_TIME_EXPIRED : + error1; /* Verify lengths. */ ip_len0 = clib_net_to_host_u16 (ip0->length); @@ -205,33 +232,45 @@ ip4_input_inline (vlib_main_t * vm, p0->error = error_node->errors[error0]; p1->error = error_node->errors[error1]; - if (PREDICT_FALSE(error0 != IP4_ERROR_NONE)) - { - if (error0 == IP4_ERROR_TIME_EXPIRED) { - icmp4_error_set_vnet_buffer(p0, ICMP4_time_exceeded, - ICMP4_time_exceeded_ttl_exceeded_in_transit, 0); - next0 = IP4_INPUT_NEXT_ICMP_ERROR; - } else - next0 = error0 != IP4_ERROR_OPTIONS ? IP4_INPUT_NEXT_DROP : IP4_INPUT_NEXT_PUNT; - } - if (PREDICT_FALSE(error1 != IP4_ERROR_NONE)) - { - if (error1 == IP4_ERROR_TIME_EXPIRED) { - icmp4_error_set_vnet_buffer(p1, ICMP4_time_exceeded, - ICMP4_time_exceeded_ttl_exceeded_in_transit, 0); - next1 = IP4_INPUT_NEXT_ICMP_ERROR; - } else - next1 = error1 != IP4_ERROR_OPTIONS ? IP4_INPUT_NEXT_DROP : IP4_INPUT_NEXT_PUNT; - } + if (PREDICT_FALSE (error0 != IP4_ERROR_NONE)) + { + if (error0 == IP4_ERROR_TIME_EXPIRED) + { + icmp4_error_set_vnet_buffer (p0, ICMP4_time_exceeded, + ICMP4_time_exceeded_ttl_exceeded_in_transit, + 0); + next0 = IP4_INPUT_NEXT_ICMP_ERROR; + } + else + next0 = + error0 != + IP4_ERROR_OPTIONS ? IP4_INPUT_NEXT_DROP : + IP4_INPUT_NEXT_PUNT; + } + if (PREDICT_FALSE (error1 != IP4_ERROR_NONE)) + { + if (error1 == IP4_ERROR_TIME_EXPIRED) + { + icmp4_error_set_vnet_buffer (p1, ICMP4_time_exceeded, + ICMP4_time_exceeded_ttl_exceeded_in_transit, + 0); + next1 = IP4_INPUT_NEXT_ICMP_ERROR; + } + else + next1 = + error1 != + IP4_ERROR_OPTIONS ? IP4_INPUT_NEXT_DROP : + IP4_INPUT_NEXT_PUNT; + } vlib_validate_buffer_enqueue_x2 (vm, node, next_index, to_next, n_left_to_next, pi0, pi1, next0, next1); - } + } while (n_left_from > 0 && n_left_to_next > 0) { - vlib_buffer_t * p0; - ip4_header_t * ip0; + vlib_buffer_t *p0; + ip4_header_t *ip0; u32 sw_if_index0, pi0, ip_len0, cur_len0, next0 = 0; i32 len_diff0; u8 error0, arc0; @@ -248,7 +287,9 @@ ip4_input_inline (vlib_main_t * vm, sw_if_index0 = vnet_buffer (p0)->sw_if_index[VLIB_RX]; - arc0 = ip4_address_is_multicast (&ip0->dst_address) ? lm->mcast_feature_arc_index : lm->ucast_feature_arc_index; + arc0 = + ip4_address_is_multicast (&ip0->dst_address) ? + lm->mcast_feature_arc_index : lm->ucast_feature_arc_index; vnet_buffer (p0)->ip.adj_index[VLIB_RX] = ~0; vnet_feature_arc_start (arc0, sw_if_index0, &next0, p0); @@ -257,10 +298,14 @@ ip4_input_inline (vlib_main_t * vm, error0 = IP4_ERROR_NONE; /* Punt packets with options. */ - error0 = (ip0->ip_version_and_header_length & 0xf) != 5 ? IP4_ERROR_OPTIONS : error0; + error0 = + (ip0->ip_version_and_header_length & 0xf) != + 5 ? IP4_ERROR_OPTIONS : error0; /* Version != 4? Drop it. */ - error0 = (ip0->ip_version_and_header_length >> 4) != 4 ? IP4_ERROR_VERSION : error0; + error0 = + (ip0->ip_version_and_header_length >> 4) != + 4 ? IP4_ERROR_VERSION : error0; /* Verify header checksum. */ if (verify_checksum) @@ -268,14 +313,21 @@ ip4_input_inline (vlib_main_t * vm, ip_csum_t sum0; ip4_partial_header_checksum_x1 (ip0, sum0); - error0 = 0xffff != ip_csum_fold (sum0) ? IP4_ERROR_BAD_CHECKSUM : error0; + error0 = + 0xffff != + ip_csum_fold (sum0) ? IP4_ERROR_BAD_CHECKSUM : error0; } /* Drop fragmentation offset 1 packets. */ - error0 = ip4_get_fragment_offset (ip0) == 1 ? IP4_ERROR_FRAGMENT_OFFSET_ONE : error0; + error0 = + ip4_get_fragment_offset (ip0) == + 1 ? IP4_ERROR_FRAGMENT_OFFSET_ONE : error0; /* TTL < 1? Drop it. */ - error0 = (ip0->ttl < 1 && arc0 == lm->ucast_feature_arc_index) ? IP4_ERROR_TIME_EXPIRED : error0; + error0 = (ip0->ttl < 1 + && arc0 == + lm->ucast_feature_arc_index) ? IP4_ERROR_TIME_EXPIRED : + error0; /* Verify lengths. */ ip_len0 = clib_net_to_host_u16 (ip0->length); @@ -288,15 +340,21 @@ ip4_input_inline (vlib_main_t * vm, error0 = len_diff0 < 0 ? IP4_ERROR_BAD_LENGTH : error0; p0->error = error_node->errors[error0]; - if (PREDICT_FALSE(error0 != IP4_ERROR_NONE)) - { - if (error0 == IP4_ERROR_TIME_EXPIRED) { - icmp4_error_set_vnet_buffer(p0, ICMP4_time_exceeded, - ICMP4_time_exceeded_ttl_exceeded_in_transit, 0); - next0 = IP4_INPUT_NEXT_ICMP_ERROR; - } else - next0 = error0 != IP4_ERROR_OPTIONS ? IP4_INPUT_NEXT_DROP : IP4_INPUT_NEXT_PUNT; - } + if (PREDICT_FALSE (error0 != IP4_ERROR_NONE)) + { + if (error0 == IP4_ERROR_TIME_EXPIRED) + { + icmp4_error_set_vnet_buffer (p0, ICMP4_time_exceeded, + ICMP4_time_exceeded_ttl_exceeded_in_transit, + 0); + next0 = IP4_INPUT_NEXT_ICMP_ERROR; + } + else + next0 = + error0 != + IP4_ERROR_OPTIONS ? IP4_INPUT_NEXT_DROP : + IP4_INPUT_NEXT_PUNT; + } vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, @@ -324,10 +382,10 @@ ip4_input_inline (vlib_main_t * vm, @par Graph mechanics: buffer metadata, next index usage @em Uses: - - vnet_feature_config_main_t cm corresponding to each pkt's dst address unicast / + - vnet_feature_config_main_t cm corresponding to each pkt's dst address unicast / multicast status. - b->current_config_index corresponding to each pkt's - rx sw_if_index. + rx sw_if_index. - This sets the per-packet graph trajectory, ensuring that each packet visits the per-interface features in order. @@ -342,30 +400,28 @@ ip4_input_inline (vlib_main_t * vm, Next Indices: - Dispatches pkts to the (first) feature node: vnet_get_config_data (... &next0 ...); - or @c error-drop + or @c error-drop */ static uword -ip4_input (vlib_main_t * vm, - vlib_node_runtime_t * node, - vlib_frame_t * frame) +ip4_input (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { return ip4_input_inline (vm, node, frame, /* verify_checksum */ 1); } static uword ip4_input_no_checksum (vlib_main_t * vm, - vlib_node_runtime_t * node, - vlib_frame_t * frame) + vlib_node_runtime_t * node, vlib_frame_t * frame) { return ip4_input_inline (vm, node, frame, /* verify_checksum */ 0); } -static char * ip4_error_strings[] = { +static char *ip4_error_strings[] = { #define _(sym,string) string, foreach_ip4_error #undef _ }; +/* *INDENT-OFF* */ VLIB_REGISTER_NODE (ip4_input_node) = { .function = ip4_input, .name = "ip4-input", @@ -386,9 +442,11 @@ VLIB_REGISTER_NODE (ip4_input_node) = { .format_buffer = format_ip4_header, .format_trace = format_ip4_input_trace, }; +/* *INDENT-ON* */ -VLIB_NODE_FUNCTION_MULTIARCH (ip4_input_node, ip4_input) +VLIB_NODE_FUNCTION_MULTIARCH (ip4_input_node, ip4_input); +/* *INDENT-OFF* */ VLIB_REGISTER_NODE (ip4_input_no_checksum_node,static) = { .function = ip4_input_no_checksum, .name = "ip4-input-no-checksum", @@ -406,22 +464,22 @@ VLIB_REGISTER_NODE (ip4_input_no_checksum_node,static) = { .format_buffer = format_ip4_header, .format_trace = format_ip4_input_trace, }; +/* *INDENT-ON* */ -VLIB_NODE_FUNCTION_MULTIARCH (ip4_input_no_checksum_node, ip4_input_no_checksum) +VLIB_NODE_FUNCTION_MULTIARCH (ip4_input_no_checksum_node, + ip4_input_no_checksum); -static clib_error_t * ip4_init (vlib_main_t * vm) +static clib_error_t * +ip4_init (vlib_main_t * vm) { - clib_error_t * error; + clib_error_t *error; - ethernet_register_input_type (vm, ETHERNET_TYPE_IP4, - ip4_input_node.index); - ppp_register_input_protocol (vm, PPP_PROTOCOL_ip4, - ip4_input_node.index); - hdlc_register_input_protocol (vm, HDLC_PROTOCOL_ip4, - ip4_input_node.index); + ethernet_register_input_type (vm, ETHERNET_TYPE_IP4, ip4_input_node.index); + ppp_register_input_protocol (vm, PPP_PROTOCOL_ip4, ip4_input_node.index); + hdlc_register_input_protocol (vm, HDLC_PROTOCOL_ip4, ip4_input_node.index); { - pg_node_t * pn; + pg_node_t *pn; pn = pg_get_node (ip4_input_node.index); pn->unformat_edit = unformat_pg_ip4_header; pn = pg_get_node (ip4_input_no_checksum_node.index); @@ -434,7 +492,7 @@ static clib_error_t * ip4_init (vlib_main_t * vm) if ((error = vlib_call_init_function (vm, ip4_source_check_init))) return error; - if ((error = vlib_call_init_function + if ((error = vlib_call_init_function (vm, ip4_source_and_port_range_check_init))) return error; @@ -448,3 +506,11 @@ static clib_error_t * ip4_init (vlib_main_t * vm) } VLIB_INIT_FUNCTION (ip4_init); + +/* + * fd.io coding-style-patch-verification: ON + * + * Local Variables: + * eval: (c-set-style "gnu") + * End: + */ -- cgit 1.2.3-korg