diff options
-rw-r--r-- | vnet/vnet/snap/node.c | 82 | ||||
-rw-r--r-- | vnet/vnet/snap/pg.c | 40 | ||||
-rw-r--r-- | vnet/vnet/snap/snap.c | 65 | ||||
-rw-r--r-- | vnet/vnet/snap/snap.h | 61 |
4 files changed, 147 insertions, 101 deletions
diff --git a/vnet/vnet/snap/node.c b/vnet/vnet/snap/node.c index 83d373a22de..884ff32444b 100644 --- a/vnet/vnet/snap/node.c +++ b/vnet/vnet/snap/node.c @@ -42,22 +42,25 @@ #include <vnet/llc/llc.h> #include <vnet/snap/snap.h> -typedef enum { +typedef enum +{ SNAP_INPUT_NEXT_DROP, SNAP_INPUT_NEXT_PUNT, SNAP_INPUT_NEXT_ETHERNET_TYPE, SNAP_INPUT_N_NEXT, } snap_input_next_t; -typedef struct { +typedef struct +{ u8 packet_data[32]; } snap_input_trace_t; -static u8 * format_snap_input_trace (u8 * s, va_list * va) +static u8 * +format_snap_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 *); - snap_input_trace_t * t = va_arg (*va, snap_input_trace_t *); + snap_input_trace_t *t = va_arg (*va, snap_input_trace_t *); s = format (s, "%U", format_snap_header, t->packet_data); @@ -66,11 +69,10 @@ static u8 * format_snap_input_trace (u8 * s, va_list * va) static uword snap_input (vlib_main_t * vm, - vlib_node_runtime_t * node, - vlib_frame_t * from_frame) + vlib_node_runtime_t * node, vlib_frame_t * from_frame) { - snap_main_t * sm = &snap_main; - u32 n_left_from, next_index, * from, * to_next; + snap_main_t *sm = &snap_main; + u32 n_left_from, next_index, *from, *to_next; from = vlib_frame_vector_args (from_frame); n_left_from = from_frame->n_vectors; @@ -88,21 +90,21 @@ snap_input (vlib_main_t * vm, { 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) { u32 bi0, bi1; - vlib_buffer_t * b0, * b1; - snap_header_t * h0, * h1; - snap_protocol_info_t * pi0, * pi1; - u8 next0, next1, is_ethernet0, is_ethernet1, len0, len1, enqueue_code; + vlib_buffer_t *b0, *b1; + snap_header_t *h0, *h1; + snap_protocol_info_t *pi0, *pi1; + u8 next0, next1, is_ethernet0, is_ethernet1, len0, len1, + enqueue_code; u32 oui0, oui1; /* Prefetch next iteration. */ { - vlib_buffer_t * b2, * b3; + vlib_buffer_t *b2, *b3; b2 = vlib_get_buffer (vm, from[2]); b3 = vlib_get_buffer (vm, from[3]); @@ -157,7 +159,7 @@ snap_input (vlib_main_t * vm, b0->error = node->errors[SNAP_ERROR_UNKNOWN_PROTOCOL]; b1->error = node->errors[SNAP_ERROR_UNKNOWN_PROTOCOL]; - enqueue_code = (next0 != next_index) + 2*(next1 != next_index); + enqueue_code = (next0 != next_index) + 2 * (next1 != next_index); if (PREDICT_FALSE (enqueue_code != 0)) { @@ -189,18 +191,19 @@ snap_input (vlib_main_t * vm, vlib_put_next_frame (vm, node, next_index, n_left_to_next); next_index = next1; - 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 > 0 && n_left_to_next > 0) { u32 bi0; - vlib_buffer_t * b0; - snap_header_t * h0; - snap_protocol_info_t * pi0; + vlib_buffer_t *b0; + snap_header_t *h0; + snap_protocol_info_t *pi0; u8 next0, is_ethernet0, len0; u32 oui0; @@ -257,12 +260,13 @@ snap_input (vlib_main_t * vm, return from_frame->n_vectors; } -static char * snap_error_strings[] = { +static char *snap_error_strings[] = { #define _(f,s) s, foreach_snap_error #undef _ }; +/* *INDENT-OFF* */ VLIB_REGISTER_NODE (snap_input_node) = { .function = snap_input, .name = "snap-input", @@ -283,11 +287,13 @@ VLIB_REGISTER_NODE (snap_input_node) = { .format_trace = format_snap_input_trace, .unformat_buffer = unformat_snap_header, }; +/* *INDENT-ON* */ -static clib_error_t * snap_input_init (vlib_main_t * vm) +static clib_error_t * +snap_input_init (vlib_main_t * vm) { { - clib_error_t * error = vlib_call_init_function (vm, snap_init); + clib_error_t *error = vlib_call_init_function (vm, snap_init); if (error) clib_error_report (error); } @@ -303,26 +309,24 @@ VLIB_INIT_FUNCTION (snap_input_init); void snap_register_input_protocol (vlib_main_t * vm, - char * name, - u32 ieee_oui, - u16 protocol, - u32 node_index) + char *name, + u32 ieee_oui, u16 protocol, u32 node_index) { - snap_main_t * sm = &snap_main; - snap_protocol_info_t * pi; + snap_main_t *sm = &snap_main; + snap_protocol_info_t *pi; snap_header_t h; snap_oui_and_protocol_t key; { - clib_error_t * error = vlib_call_init_function (vm, snap_input_init); + clib_error_t *error = vlib_call_init_function (vm, snap_input_init); if (error) clib_error_report (error); } h.protocol = clib_host_to_net_u16 (protocol); h.oui[0] = (ieee_oui >> 16) & 0xff; - h.oui[1] = (ieee_oui >> 8) & 0xff; - h.oui[2] = (ieee_oui >> 0) & 0xff; + h.oui[1] = (ieee_oui >> 8) & 0xff; + h.oui[2] = (ieee_oui >> 0) & 0xff; pi = snap_get_protocol_info (sm, &h); if (pi) return; @@ -331,9 +335,7 @@ snap_register_input_protocol (vlib_main_t * vm, pi->name = format (0, "%s", name); pi->node_index = node_index; - pi->next_index = vlib_node_add_next (vm, - snap_input_node.index, - node_index); + pi->next_index = vlib_node_add_next (vm, snap_input_node.index, node_index); key.oui = ieee_oui; key.protocol = clib_host_to_net_u16 (protocol); @@ -341,3 +343,11 @@ snap_register_input_protocol (vlib_main_t * vm, mhash_set (&sm->protocol_hash, &key, pi - sm->protocols, /* old_value */ 0); hash_set_mem (sm->protocol_info_by_name, name, pi - sm->protocols); } + +/* + * fd.io coding-style-patch-verification: ON + * + * Local Variables: + * eval: (c-set-style "gnu") + * End: + */ diff --git a/vnet/vnet/snap/pg.c b/vnet/vnet/snap/pg.c index 74c363fcc69..aad125f35b6 100644 --- a/vnet/vnet/snap/pg.c +++ b/vnet/vnet/snap/pg.c @@ -41,7 +41,8 @@ #include <vnet/pg/pg.h> #include <vnet/snap/snap.h> -typedef struct { +typedef struct +{ pg_edit_t oui; pg_edit_t protocol; } pg_snap_header_t; @@ -56,30 +57,29 @@ pg_snap_header_init (pg_snap_header_t * e) uword unformat_pg_snap_header (unformat_input_t * input, va_list * args) { - pg_stream_t * s = va_arg (*args, pg_stream_t *); - pg_snap_header_t * h; + pg_stream_t *s = va_arg (*args, pg_stream_t *); + pg_snap_header_t *h; u32 group_index, error; - + h = pg_create_edit_group (s, sizeof (h[0]), sizeof (snap_header_t), &group_index); pg_snap_header_init (h); error = 1; - if (! unformat (input, "%U -> %U", - unformat_pg_edit, - unformat_snap_protocol, &h->oui, &h->protocol)) + if (!unformat (input, "%U -> %U", + unformat_pg_edit, + unformat_snap_protocol, &h->oui, &h->protocol)) goto done; { - snap_main_t * pm = &snap_main; - snap_protocol_info_t * pi = 0; - pg_node_t * pg_node = 0; + snap_main_t *pm = &snap_main; + snap_protocol_info_t *pi = 0; + pg_node_t *pg_node = 0; - if (h->oui.type == PG_EDIT_FIXED - && h->protocol.type == PG_EDIT_FIXED) + if (h->oui.type == PG_EDIT_FIXED && h->protocol.type == PG_EDIT_FIXED) { - u8 * o = h->oui.values[PG_EDIT_LO]; - u8 * p = h->protocol.values[PG_EDIT_LO]; + u8 *o = h->oui.values[PG_EDIT_LO]; + u8 *p = h->protocol.values[PG_EDIT_LO]; snap_header_t h; h.oui[0] = o[0]; @@ -95,14 +95,22 @@ unformat_pg_snap_header (unformat_input_t * input, va_list * args) && unformat_user (input, pg_node->unformat_edit, s)) ; - else if (! unformat_user (input, unformat_pg_payload, s)) + else if (!unformat_user (input, unformat_pg_payload, s)) goto done; } error = 0; - done: +done: if (error) pg_free_edit_group (s); return error == 0; } + +/* + * fd.io coding-style-patch-verification: ON + * + * Local Variables: + * eval: (c-set-style "gnu") + * End: + */ diff --git a/vnet/vnet/snap/snap.c b/vnet/vnet/snap/snap.c index fb5b031c069..64482bfcfbb 100644 --- a/vnet/vnet/snap/snap.c +++ b/vnet/vnet/snap/snap.c @@ -44,17 +44,19 @@ /* Global main structure. */ snap_main_t snap_main; -static u8 * format_cisco_snap_protocol (u8 * s, va_list * args) +static u8 * +format_cisco_snap_protocol (u8 * s, va_list * args) { - snap_header_t * h = va_arg (*args, snap_header_t *); + snap_header_t *h = va_arg (*args, snap_header_t *); u16 protocol = clib_net_to_host_u16 (h->protocol); - char * t = 0; + char *t = 0; switch (protocol) { #define _(n,f) case n: t = #f; break; foreach_snap_cisco_protocol; #undef _ - default: break; + default: + break; } if (t) return format (s, "%s", t); @@ -62,9 +64,10 @@ static u8 * format_cisco_snap_protocol (u8 * s, va_list * args) return format (s, "unknown 0x%x", protocol); } -u8 * format_snap_protocol (u8 * s, va_list * args) +u8 * +format_snap_protocol (u8 * s, va_list * args) { - snap_header_t * h = va_arg (*args, snap_header_t *); + snap_header_t *h = va_arg (*args, snap_header_t *); u32 oui = snap_header_get_oui (h); u16 protocol = clib_net_to_host_u16 (h->protocol); @@ -81,11 +84,12 @@ u8 * format_snap_protocol (u8 * s, va_list * args) } } -u8 * format_snap_header_with_length (u8 * s, va_list * args) +u8 * +format_snap_header_with_length (u8 * s, va_list * args) { - snap_main_t * sm = &snap_main; - snap_header_t * h = va_arg (*args, snap_header_t *); - snap_protocol_info_t * pi = snap_get_protocol_info (sm, h); + snap_main_t *sm = &snap_main; + snap_header_t *h = va_arg (*args, snap_header_t *); + snap_protocol_info_t *pi = snap_get_protocol_info (sm, h); u32 max_header_bytes = va_arg (*args, u32); uword indent, header_bytes; @@ -99,7 +103,7 @@ u8 * format_snap_header_with_length (u8 * s, va_list * args) if (max_header_bytes != 0 && header_bytes > max_header_bytes && pi != 0) { - vlib_node_t * node = vlib_get_node (sm->vlib_main, pi->node_index); + vlib_node_t *node = vlib_get_node (sm->vlib_main, pi->node_index); if (node->format_buffer) s = format (s, "\n%U%U", format_white_space, indent, @@ -110,9 +114,10 @@ u8 * format_snap_header_with_length (u8 * s, va_list * args) return s; } -u8 * format_snap_header (u8 * s, va_list * args) +u8 * +format_snap_header (u8 * s, va_list * args) { - snap_header_t * h = va_arg (*args, snap_header_t *); + snap_header_t *h = va_arg (*args, snap_header_t *); return format (s, "%U", format_snap_header_with_length, h, 0); } @@ -120,8 +125,8 @@ u8 * format_snap_header (u8 * s, va_list * args) uword unformat_snap_protocol (unformat_input_t * input, va_list * args) { - snap_header_t * result = va_arg (*args, snap_header_t *); - snap_main_t * sm = &snap_main; + snap_header_t *result = va_arg (*args, snap_header_t *); + snap_main_t *sm = &snap_main; snap_oui_and_protocol_t p; u32 i; @@ -138,7 +143,7 @@ unformat_snap_protocol (unformat_input_t * input, va_list * args) else if (unformat_user (input, unformat_vlib_number_by_name, sm->protocol_info_by_name, &i)) { - snap_protocol_info_t * pi = vec_elt_at_index (sm->protocols, i); + snap_protocol_info_t *pi = vec_elt_at_index (sm->protocols, i); p = pi->oui_and_protocol; } @@ -152,38 +157,48 @@ unformat_snap_protocol (unformat_input_t * input, va_list * args) uword unformat_snap_header (unformat_input_t * input, va_list * args) { - u8 ** result = va_arg (*args, u8 **); - snap_header_t _h, * h = &_h; + u8 **result = va_arg (*args, u8 **); + snap_header_t _h, *h = &_h; - if (! unformat (input, "%U", unformat_snap_protocol, h)) + if (!unformat (input, "%U", unformat_snap_protocol, h)) return 0; /* Add header to result. */ { - void * p; + void *p; u32 n_bytes = sizeof (h[0]); vec_add2 (*result, p, n_bytes); clib_memcpy (p, h, n_bytes); } - + return 1; } -static clib_error_t * snap_init (vlib_main_t * vm) +static clib_error_t * +snap_init (vlib_main_t * vm) { - snap_main_t * sm = &snap_main; + snap_main_t *sm = &snap_main; memset (sm, 0, sizeof (sm[0])); sm->vlib_main = vm; - mhash_init (&sm->protocol_hash, sizeof (uword), sizeof (snap_oui_and_protocol_t)); + mhash_init (&sm->protocol_hash, sizeof (uword), + sizeof (snap_oui_and_protocol_t)); sm->protocol_info_by_name - = hash_create_string (/* elts */ 0, sizeof (uword)); + = hash_create_string ( /* elts */ 0, sizeof (uword)); return vlib_call_init_function (vm, snap_input_init); } VLIB_INIT_FUNCTION (snap_init); + +/* + * fd.io coding-style-patch-verification: ON + * + * Local Variables: + * eval: (c-set-style "gnu") + * End: + */ diff --git a/vnet/vnet/snap/snap.h b/vnet/vnet/snap/snap.h index ed4a10e207e..dbba15bf3f7 100644 --- a/vnet/vnet/snap/snap.h +++ b/vnet/vnet/snap/snap.h @@ -47,7 +47,8 @@ _ (0x000000, ethernet) \ _ (0x00000c, cisco) -typedef enum { +typedef enum +{ #define _(n,f) IEEE_OUI_##f = n, foreach_ieee_oui #undef _ @@ -66,13 +67,16 @@ typedef enum { _ (0x2004, dtp) \ _ (0x200a, stp_uplink_fast) -typedef enum { +typedef enum +{ #define _(n,f) SNAP_cisco_##f = n, foreach_snap_cisco_protocol #undef _ } snap_cisco_protocol_t; -typedef union { +typedef union +{ + /* *INDENT-OFF* */ CLIB_PACKED (struct { /* OUI: organization unique identifier. */ u8 oui[3]; @@ -80,18 +84,21 @@ typedef union { /* Per-OUI protocol. */ u16 protocol; }); + /* *INDENT-ON* */ u8 as_u8[5]; } snap_header_t; -typedef struct { +typedef struct +{ u32 oui; u32 protocol; } snap_oui_and_protocol_t; -typedef struct { +typedef struct +{ /* Name vector string. */ - u8 * name; + u8 *name; snap_oui_and_protocol_t oui_and_protocol; @@ -109,32 +116,34 @@ snap_header_set_protocol (snap_header_t * h, snap_oui_and_protocol_t * p) u32 oui = p->oui; h->protocol = clib_host_to_net_u16 (protocol); h->oui[0] = (oui >> 16) & 0xff; - h->oui[1] = (oui >> 8) & 0xff; - h->oui[2] = (oui >> 0) & 0xff; + h->oui[1] = (oui >> 8) & 0xff; + h->oui[2] = (oui >> 0) & 0xff; } #define foreach_snap_error \ _ (NONE, "no error") \ _ (UNKNOWN_PROTOCOL, "unknown oui/snap protocol") -typedef enum { +typedef enum +{ #define _(f,s) SNAP_ERROR_##f, foreach_snap_error #undef _ - SNAP_N_ERROR, + SNAP_N_ERROR, } snap_error_t; -typedef struct { - vlib_main_t * vlib_main; +typedef struct +{ + vlib_main_t *vlib_main; /* Vector of known SNAP oui/protocol pairs. */ - snap_protocol_info_t * protocols; + snap_protocol_info_t *protocols; /* Hash table mapping oui/protocol to protocol index. */ mhash_t protocol_hash; /* Hash table mapping protocol by name. */ - uword * protocol_info_by_name; + uword *protocol_info_by_name; } snap_main_t; always_inline u32 @@ -147,7 +156,7 @@ always_inline snap_protocol_info_t * snap_get_protocol_info (snap_main_t * sm, snap_header_t * h) { snap_oui_and_protocol_t key; - uword * p; + uword *p; key.oui = snap_header_get_oui (h); key.protocol = h->protocol; @@ -161,15 +170,11 @@ snap_main_t snap_main; /* Register given node index to take input for given snap type. */ void snap_register_input_protocol (vlib_main_t * vm, - char * name, - u32 ieee_oui, - u16 protocol, - u32 node_index); + char *name, + u32 ieee_oui, u16 protocol, u32 node_index); void snap_set_adjacency (vnet_rewrite_header_t * rw, - uword max_data_bytes, - u32 ieee_oui, - u16 protocol); + uword max_data_bytes, u32 ieee_oui, u16 protocol); format_function_t format_snap_protocol; format_function_t format_snap_header; @@ -185,8 +190,8 @@ unformat_function_t unformat_pg_snap_header; always_inline void snap_setup_node (vlib_main_t * vm, u32 node_index) { - vlib_node_t * n = vlib_get_node (vm, node_index); - pg_node_t * pn = pg_get_node (node_index); + vlib_node_t *n = vlib_get_node (vm, node_index); + pg_node_t *pn = pg_get_node (node_index); n->format_buffer = format_snap_header_with_length; n->unformat_buffer = unformat_snap_header; @@ -194,3 +199,11 @@ snap_setup_node (vlib_main_t * vm, u32 node_index) } #endif /* included_snap_h */ + +/* + * fd.io coding-style-patch-verification: ON + * + * Local Variables: + * eval: (c-set-style "gnu") + * End: + */ |