} time_u64_t;
static inline u8
-fetch_trace_data_size(trace_type)
+fetch_trace_data_size(u8 trace_type)
{
u8 trace_data_size = 0;
vlib_node_registration_t ip6_hop_by_hop_node;
#define foreach_ip6_hop_by_hop_error \
-_(PROCESSED, "Pkts with ip6 hop-by-hop options")
+_(PROCESSED, "Pkts with ip6 hop-by-hop options") \
+_(UNKNOWN_OPTION, "Unknown ip6 hop-by-hop options")
typedef enum {
#define _(sym,str) IP6_HOP_BY_HOP_ERROR_##sym,
ip6_hop_by_hop_main_t * hm = &ip6_hop_by_hop_main;
u32 n_left_from, * from, * to_next;
ip_lookup_next_t next_index;
- u32 processed = 0;
+ u32 processed = 0, unknown_opts = 0;
u8 elt_index = 0;
time_u64_t time_u64;
case 0: /* Pad */
opt0 = (ip6_hop_by_hop_option_t *) ((u8 *)opt0) + 1;
goto out0;
+
+ default:
+ opt0 = (ip6_hop_by_hop_option_t *)
+ (((u8 *)opt0) + opt0->length
+ + sizeof (ip6_hop_by_hop_option_t));
+ unknown_opts++;
+ break;
}
}
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
}
+ if (PREDICT_FALSE(unknown_opts > 0)) {
+ vlib_node_increment_counter (vm, ip6_hop_by_hop_node.index,
+ IP6_HOP_BY_HOP_ERROR_UNKNOWN_OPTION, unknown_opts);
+ }
+
vlib_node_increment_counter (vm, ip6_hop_by_hop_node.index,
IP6_HOP_BY_HOP_ERROR_PROCESSED, processed);
return frame->n_vectors;
/* See ip/lookup.h */
.n_next_nodes = IP_LOOKUP_N_NEXT,
- .next_nodes = {
- [IP_LOOKUP_NEXT_MISS] = "ip6-miss",
- [IP_LOOKUP_NEXT_DROP] = "ip6-drop",
- [IP_LOOKUP_NEXT_PUNT] = "ip6-punt",
- [IP_LOOKUP_NEXT_LOCAL] = "ip6-local",
- [IP_LOOKUP_NEXT_ARP] = "ip6-discover-neighbor",
- [IP_LOOKUP_NEXT_REWRITE] = "ip6-rewrite",
- [IP_LOOKUP_NEXT_CLASSIFY] = "ip6-classify",
- [IP_LOOKUP_NEXT_MAP] = "ip6-map",
- [IP_LOOKUP_NEXT_MAP_T] = "ip6-map-t",
- [IP_LOOKUP_NEXT_SIXRD] = "ip6-sixrd",
- /* Next 3 arcs probably never used */
- [IP_LOOKUP_NEXT_HOP_BY_HOP] = "ip6-hop-by-hop",
- [IP_LOOKUP_NEXT_ADD_HOP_BY_HOP] = "ip6-add-hop-by-hop",
- [IP_LOOKUP_NEXT_POP_HOP_BY_HOP] = "ip6-pop-hop-by-hop",
- },
+ .next_nodes = IP6_LOOKUP_NEXT_NODES,
};
/* The main h-b-h tracer will be invoked, no need to do much here */
/* See ip/lookup.h */
.n_next_nodes = IP_LOOKUP_N_NEXT,
- .next_nodes = {
- [IP_LOOKUP_NEXT_MISS] = "ip6-miss",
- [IP_LOOKUP_NEXT_DROP] = "ip6-drop",
- [IP_LOOKUP_NEXT_PUNT] = "ip6-punt",
- [IP_LOOKUP_NEXT_LOCAL] = "ip6-local",
- [IP_LOOKUP_NEXT_ARP] = "ip6-discover-neighbor",
- [IP_LOOKUP_NEXT_REWRITE] = "ip6-rewrite",
- [IP_LOOKUP_NEXT_CLASSIFY] = "ip6-classify",
- [IP_LOOKUP_NEXT_MAP] = "ip6-map",
- [IP_LOOKUP_NEXT_MAP_T] = "ip6-map-t",
- [IP_LOOKUP_NEXT_SIXRD] = "ip6-sixrd",
- /* Next 3 arcs probably never used */
- [IP_LOOKUP_NEXT_HOP_BY_HOP] = "ip6-hop-by-hop",
- [IP_LOOKUP_NEXT_ADD_HOP_BY_HOP] = "ip6-add-hop-by-hop",
- [IP_LOOKUP_NEXT_POP_HOP_BY_HOP] = "ip6-pop-hop-by-hop",
- },
+ .next_nodes = IP6_LOOKUP_NEXT_NODES,
};
/* See ip/lookup.h */
.n_next_nodes = IP_LOOKUP_N_NEXT,
- .next_nodes = {
- [IP_LOOKUP_NEXT_MISS] = "ip6-miss",
- [IP_LOOKUP_NEXT_DROP] = "ip6-drop",
- [IP_LOOKUP_NEXT_PUNT] = "ip6-punt",
- [IP_LOOKUP_NEXT_LOCAL] = "ip6-local",
- [IP_LOOKUP_NEXT_ARP] = "ip6-discover-neighbor",
- [IP_LOOKUP_NEXT_REWRITE] = "ip6-rewrite",
- [IP_LOOKUP_NEXT_CLASSIFY] = "ip6-classify",
- [IP_LOOKUP_NEXT_MAP] = "ip6-map",
- [IP_LOOKUP_NEXT_MAP_T] = "ip6-map-t",
- [IP_LOOKUP_NEXT_SIXRD] = "ip6-sixrd",
- /* Next 3 arcs probably never used */
- [IP_LOOKUP_NEXT_HOP_BY_HOP] = "ip6-hop-by-hop",
- [IP_LOOKUP_NEXT_ADD_HOP_BY_HOP] = "ip6-add-hop-by-hop",
- [IP_LOOKUP_NEXT_POP_HOP_BY_HOP] = "ip6-pop-hop-by-hop",
- },
+ .next_nodes = IP6_LOOKUP_NEXT_NODES,
};
}
clib_error_t *
-clear_ioam_rewrite_fn()
+clear_ioam_rewrite_fn(void)
{
ip6_hop_by_hop_main_t *hm = &ip6_hop_by_hop_main;
return 0;
}
+
+clib_error_t * clear_ioam_rewrite_command_fn (vlib_main_t * vm,
+ unformat_input_t * input,
+ vlib_cli_command_t * cmd)
+{
+ return(clear_ioam_rewrite_fn());
+}
VLIB_CLI_COMMAND (ip6_clear_ioam_trace_cmd, static) = {
.path = "clear ioam rewrite",
.short_help = "clear ioam rewrite",
- .function = clear_ioam_rewrite_fn,
+ .function = clear_ioam_rewrite_command_fn,
};
clib_error_t *
break;
default:
- return clib_error_return (0, "ip6_ioam_set_rewrite returned %d", rv);
+ return clib_error_return_code(0, rv, 0, "ip6_ioam_set_rewrite returned %d", rv);
}
return 0;