aboutsummaryrefslogtreecommitdiffstats
path: root/hicn-plugin/src/faces/ip
diff options
context:
space:
mode:
authorAlberto Compagno <acompagn+fdio@cisco.com>2019-03-23 14:46:14 +0100
committerAlberto Compagno <acompagn+fdio@cisco.com>2019-03-23 16:05:19 +0100
commit2ba7f1f0bef4ecb20af57283d456e66e31fa667a (patch)
tree5c29f03e3259bc9def5623152ae9e3eff771f39f /hicn-plugin/src/faces/ip
parenta2bdc00ea25f89185c1095a48a8f51cb2c1a20e6 (diff)
[HICN-138] Added number of received/transmitted bytes and packets on each face
Change-Id: Icfe9cd84bdc72afef3d714064e695d1abef368f5 Signed-off-by: Alberto Compagno <acompagn+fdio@cisco.com>
Diffstat (limited to 'hicn-plugin/src/faces/ip')
-rw-r--r--hicn-plugin/src/faces/ip/face_ip.c13
-rw-r--r--hicn-plugin/src/faces/ip/face_ip.h7
-rw-r--r--hicn-plugin/src/faces/ip/face_ip_node.c61
-rw-r--r--hicn-plugin/src/faces/ip/iface_ip_node.c81
4 files changed, 138 insertions, 24 deletions
diff --git a/hicn-plugin/src/faces/ip/face_ip.c b/hicn-plugin/src/faces/ip/face_ip.c
index a7ec95417..e4eb8b665 100644
--- a/hicn-plugin/src/faces/ip/face_ip.c
+++ b/hicn-plugin/src/faces/ip/face_ip.c
@@ -233,13 +233,20 @@ hicn_face_ip_add (const ip46_address_t * local_addr,
hicn_mapme_eventmgr_process_node.index,
HICN_MAPME_EVENT_FACE_ADD, 1,
sizeof (retx_t));
+
+ /* *INDENT-OFF* */
*retx = (retx_t)
{
- .prefix = 0,.dpo = (dpo_id_t)
+ .prefix = 0,
+ .dpo = (dpo_id_t)
{
- .dpoi_type = hicn_face_ip_type,.dpoi_proto = dpo_proto,.dpoi_next_node =
- 0,.dpoi_index = *pfaceid,}
+ .dpoi_type = hicn_face_ip_type,
+ .dpoi_proto = dpo_proto,
+ .dpoi_next_node = 0,
+ .dpoi_index = *pfaceid,
+ }
};
+ /* *INDENT-ON* */
return HICN_ERROR_NONE;
}
diff --git a/hicn-plugin/src/faces/ip/face_ip.h b/hicn-plugin/src/faces/ip/face_ip.h
index 8c31f6dd3..852106b70 100644
--- a/hicn-plugin/src/faces/ip/face_ip.h
+++ b/hicn-plugin/src/faces/ip/face_ip.h
@@ -202,6 +202,13 @@ hicn_iface_ip_add (const ip46_address_t * local_addr,
*pfaceid = hicn_dpoi_get_index (face);
mhash_set_mem (&hicn_face_ip_remote_hashtb, &key, (uword *) pfaceid, 0);
+
+ for (int i = 0; i < HICN_N_COUNTER; i++)
+ {
+ vlib_validate_combined_counter (&counters[(*pfaceid) * HICN_N_COUNTER],
+ i);
+ vlib_zero_combined_counter (&counters[(*pfaceid) * HICN_N_COUNTER], i);
+ }
}
/**
diff --git a/hicn-plugin/src/faces/ip/face_ip_node.c b/hicn-plugin/src/faces/ip/face_ip_node.c
index 7b32f7355..8d0820604 100644
--- a/hicn-plugin/src/faces/ip/face_ip_node.c
+++ b/hicn-plugin/src/faces/ip/face_ip_node.c
@@ -151,7 +151,15 @@ typedef enum
if ( PREDICT_FALSE(ret != HICN_ERROR_NONE) ) \
next0 = NEXT_ERROR_DROP_IP##ipv; \
else \
- stats.pkts_data_count += 1; \
+ { \
+ vlib_increment_combined_counter ( \
+ &counters[hicnb0->face_dpo_id.dpoi_index \
+ * HICN_N_COUNTER], thread_index, \
+ HICN_FACE_COUNTERS_DATA_RX, \
+ 1, \
+ vlib_buffer_length_in_chain(vm, b0)); \
+ stats.pkts_data_count += 1; \
+ } \
\
if (PREDICT_FALSE ((node->flags & VLIB_NODE_FLAG_TRACE) && \
(b0->flags & VLIB_BUFFER_IS_TRACED))) \
@@ -237,12 +245,28 @@ typedef enum
if ( PREDICT_FALSE(ret0 != HICN_ERROR_NONE) ) \
next0 = NEXT_ERROR_DROP_IP##ipv; \
else \
- stats.pkts_data_count += 1; \
+ { \
+ vlib_increment_combined_counter ( \
+ &counters[hicnb0->face_dpo_id.dpoi_index \
+ * HICN_N_COUNTER], thread_index, \
+ HICN_FACE_COUNTERS_DATA_RX, \
+ 1, \
+ vlib_buffer_length_in_chain(vm, b0)); \
+ stats.pkts_data_count += 1; \
+ } \
\
if ( PREDICT_FALSE(ret1 != HICN_ERROR_NONE) ) \
next1 = NEXT_ERROR_DROP_IP##ipv; \
else \
- stats.pkts_data_count += 1; \
+ { \
+ vlib_increment_combined_counter ( \
+ &counters[hicnb1->face_dpo_id.dpoi_index \
+ * HICN_N_COUNTER], thread_index,\
+ HICN_FACE_COUNTERS_DATA_RX, \
+ 1, \
+ vlib_buffer_length_in_chain(vm, b1)); \
+ stats.pkts_data_count += 1; \
+ } \
\
if (PREDICT_FALSE ((node->flags & VLIB_NODE_FLAG_TRACE) && \
(b0->flags & VLIB_BUFFER_IS_TRACED))) \
@@ -288,6 +312,7 @@ hicn_face_ip4_input_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
n_left_from = frame->n_vectors;
next_index = node->cached_next_index;
vl_api_hicn_api_node_stats_get_reply_t stats = { 0 };
+ u32 thread_index = vm->thread_index;
while (n_left_from > 0)
{
@@ -368,6 +393,7 @@ hicn_face_ip6_input_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
n_left_from = frame->n_vectors;
next_index = node->cached_next_index;
vl_api_hicn_api_node_stats_get_reply_t stats = { 0 };
+ u32 thread_index = vm->thread_index;
while (n_left_from > 0)
{
@@ -525,14 +551,21 @@ hicn_face_ip6_output_trace_t;
\
b0 = vlib_get_buffer (vm, bi0); \
\
+ hicn_face_id_t face_id = vnet_buffer (b0)->ip.adj_index[VLIB_TX]; \
face = \
- hicn_dpoi_get_from_idx (vnet_buffer (b0)->ip.adj_index[VLIB_TX]); \
+ hicn_dpoi_get_from_idx (face_id); \
\
if (PREDICT_TRUE(face != NULL)) \
{ \
hicn_face_rewrite_interest \
(vm, b0, face, &next0); \
stats.pkts_interest_count += 1; \
+ vlib_increment_combined_counter ( \
+ &counters[face_id * HICN_N_COUNTER], \
+ thread_index, \
+ HICN_FACE_COUNTERS_INTEREST_TX, \
+ 1, \
+ vlib_buffer_length_in_chain(vm, b0)); \
} \
\
if (PREDICT_FALSE ((node->flags & VLIB_NODE_FLAG_TRACE) && \
@@ -586,16 +619,24 @@ hicn_face_ip6_output_trace_t;
b0 = vlib_get_buffer (vm, bi0); \
b1 = vlib_get_buffer (vm, bi1); \
\
+ hicn_face_id_t face_id0 = vnet_buffer (b0)->ip.adj_index[VLIB_TX]; \
+ hicn_face_id_t face_id1 = vnet_buffer (b1)->ip.adj_index[VLIB_TX]; \
face0 = \
- hicn_dpoi_get_from_idx (vnet_buffer (b0)->ip.adj_index[VLIB_TX]); \
+ hicn_dpoi_get_from_idx (face_id0); \
face1 = \
- hicn_dpoi_get_from_idx (vnet_buffer (b1)->ip.adj_index[VLIB_TX]); \
+ hicn_dpoi_get_from_idx (face_id1); \
\
if (PREDICT_TRUE(face0 != NULL)) \
{ \
hicn_face_rewrite_interest \
(vm, b0, face0, &next0); \
stats.pkts_interest_count += 1; \
+ vlib_increment_combined_counter ( \
+ &counters[face_id0 * HICN_N_COUNTER], \
+ thread_index, \
+ HICN_FACE_COUNTERS_INTEREST_TX, \
+ 1, \
+ vlib_buffer_length_in_chain(vm, b0)); \
} \
\
if (PREDICT_TRUE(face1 != NULL)) \
@@ -603,6 +644,12 @@ hicn_face_ip6_output_trace_t;
hicn_face_rewrite_interest \
(vm, b1, face1, &next1); \
stats.pkts_interest_count += 1; \
+ vlib_increment_combined_counter ( \
+ &counters[face_id1 * HICN_N_COUNTER], \
+ thread_index, \
+ HICN_FACE_COUNTERS_INTEREST_TX, \
+ 1, \
+ vlib_buffer_length_in_chain(vm, b1)); \
} \
\
if (PREDICT_FALSE ((node->flags & VLIB_NODE_FLAG_TRACE) && \
@@ -645,6 +692,7 @@ hicn_face_ip4_output_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
{
u32 n_left_from, *from, *to_next, next_index;
vl_api_hicn_api_node_stats_get_reply_t stats = { 0 };
+ u32 thread_index = vm->thread_index;
from = vlib_frame_vector_args (frame);
n_left_from = frame->n_vectors;
@@ -718,6 +766,7 @@ hicn_face_ip6_output_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
{
u32 n_left_from, *from, *to_next, next_index;
vl_api_hicn_api_node_stats_get_reply_t stats = { 0 };
+ u32 thread_index = vm->thread_index;
from = vlib_frame_vector_args (frame);
n_left_from = frame->n_vectors;
diff --git a/hicn-plugin/src/faces/ip/iface_ip_node.c b/hicn-plugin/src/faces/ip/iface_ip_node.c
index fcf43ebd7..62ccc514d 100644
--- a/hicn-plugin/src/faces/ip/iface_ip_node.c
+++ b/hicn-plugin/src/faces/ip/iface_ip_node.c
@@ -47,13 +47,11 @@ hicn_iface_ip_init (vlib_main_t * vm)
data_fwd_iface_ip4_vlib_edge = vlib_node_add_next (vm,
hicn_data_fwd_node.index,
- hicn_iface_ip4_output_node.
- index);
+ hicn_iface_ip4_output_node.index);
data_fwd_iface_ip6_vlib_edge = vlib_node_add_next (vm,
hicn_data_fwd_node.index,
- hicn_iface_ip6_output_node.
- index);
+ hicn_iface_ip6_output_node.index);
ASSERT (temp_index4 == data_fwd_iface_ip4_vlib_edge);
ASSERT (temp_index6 == data_fwd_iface_ip6_vlib_edge);
@@ -193,6 +191,12 @@ typedef enum
\
} \
\
+ vlib_increment_combined_counter ( \
+ &counters[hicnb0->face_dpo_id.dpoi_index \
+ * HICN_N_COUNTER], thread_index, \
+ HICN_FACE_COUNTERS_INTEREST_RX, \
+ 1, \
+ vlib_buffer_length_in_chain(vm, b0)); \
\
/* Verify speculative enqueue, maybe switch current next frame */ \
vlib_validate_buffer_enqueue_x1 (vm, node, next_index, \
@@ -294,6 +298,20 @@ typedef enum
sizeof (t->packet_data)); \
} \
\
+ vlib_increment_combined_counter ( \
+ &counters[hicnb0->face_dpo_id.dpoi_index \
+ * HICN_N_COUNTER], thread_index, \
+ HICN_FACE_COUNTERS_INTEREST_RX, \
+ 1, \
+ vlib_buffer_length_in_chain(vm, b0)); \
+ \
+ vlib_increment_combined_counter ( \
+ &counters[hicnb1->face_dpo_id.dpoi_index \
+ * HICN_N_COUNTER], thread_index, \
+ HICN_FACE_COUNTERS_INTEREST_RX, \
+ 1, \
+ vlib_buffer_length_in_chain(vm, b1)); \
+ \
/* Verify speculative enqueue, maybe switch current next frame */ \
vlib_validate_buffer_enqueue_x2 (vm, node, next_index, \
to_next, n_left_to_next, \
@@ -311,6 +329,7 @@ hicn_iface_ip4_input_node_fn (vlib_main_t * vm,
n_left_from = frame->n_vectors;
next_index = node->cached_next_index;
vl_api_hicn_api_node_stats_get_reply_t stats = { 0 };
+ u32 thread_index = vm->thread_index;
while (n_left_from > 0)
{
@@ -347,8 +366,10 @@ hicn_iface_ip4_input_format_trace (u8 * s, va_list * args)
hicn_iface_ip4_input_trace_t *t =
va_arg (*args, hicn_iface_ip4_input_trace_t *);
- s = format (s, "IFACE_IP4_INPUT: pkt: %d, sw_if_index %d, next index %d\n%U",
- (int) t->pkt_type, t->sw_if_index, t->next_index, format_ip4_header, t->packet_data, sizeof (t->packet_data));
+ s =
+ format (s, "IFACE_IP4_INPUT: pkt: %d, sw_if_index %d, next index %d\n%U",
+ (int) t->pkt_type, t->sw_if_index, t->next_index,
+ format_ip4_header, t->packet_data, sizeof (t->packet_data));
return (s);
}
@@ -387,6 +408,7 @@ hicn_iface_ip6_input_node_fn (vlib_main_t * vm,
n_left_from = frame->n_vectors;
next_index = node->cached_next_index;
vl_api_hicn_api_node_stats_get_reply_t stats = { 0 };
+ u32 thread_index = vm->thread_index;
while (n_left_from > 0)
{
@@ -424,8 +446,10 @@ hicn_iface_ip6_input_format_trace (u8 * s, va_list * args)
hicn_iface_ip6_input_trace_t *t =
va_arg (*args, hicn_iface_ip6_input_trace_t *);
- s = format (s, "IFACE_IP6_INPUT: pkt: %d, sw_if_index %d, next index %d\n%U",
- (int) t->pkt_type, t->sw_if_index, t->next_index, format_ip6_header, t->packet_data, sizeof (t->packet_data));
+ s =
+ format (s, "IFACE_IP6_INPUT: pkt: %d, sw_if_index %d, next index %d\n%U",
+ (int) t->pkt_type, t->sw_if_index, t->next_index,
+ format_ip6_header, t->packet_data, sizeof (t->packet_data));
return (s);
}
@@ -593,8 +617,9 @@ typedef enum
\
b0 = vlib_get_buffer (vm, bi0); \
\
+ hicn_face_id_t face_id = vnet_buffer (b0)->ip.adj_index[VLIB_TX]; \
face = \
- hicn_dpoi_get_from_idx (vnet_buffer (b0)->ip.adj_index[VLIB_TX]); \
+ hicn_dpoi_get_from_idx (face_id); \
\
if (PREDICT_TRUE(face != NULL)) \
{ \
@@ -602,6 +627,12 @@ typedef enum
(vm, b0, face); \
next0 = NEXT_DATA_LOOKUP_IP##ipv; \
stats.pkts_data_count += 1; \
+ vlib_increment_combined_counter ( \
+ &counters[face_id * HICN_N_COUNTER], \
+ thread_index, \
+ HICN_FACE_COUNTERS_DATA_TX, \
+ 1, \
+ vlib_buffer_length_in_chain(vm, b0));\
} \
\
if (PREDICT_FALSE ((node->flags & VLIB_NODE_FLAG_TRACE) && \
@@ -657,10 +688,12 @@ typedef enum
b0 = vlib_get_buffer (vm, bi0); \
b1 = vlib_get_buffer (vm, bi1); \
\
+ hicn_face_id_t face_id0 = vnet_buffer (b0)->ip.adj_index[VLIB_TX]; \
+ hicn_face_id_t face_id1 = vnet_buffer (b1)->ip.adj_index[VLIB_TX]; \
face0 = \
- hicn_dpoi_get_from_idx (vnet_buffer (b0)->ip.adj_index[VLIB_TX]); \
+ hicn_dpoi_get_from_idx (face_id0); \
face1 = \
- hicn_dpoi_get_from_idx (vnet_buffer (b1)->ip.adj_index[VLIB_TX]); \
+ hicn_dpoi_get_from_idx (face_id1); \
\
if (PREDICT_TRUE(face0 != NULL)) \
{ \
@@ -668,6 +701,12 @@ typedef enum
(vm, b0, face0); \
next0 = NEXT_DATA_LOOKUP_IP##ipv; \
stats.pkts_data_count += 1; \
+ vlib_increment_combined_counter ( \
+ &counters[face_id0 * HICN_N_COUNTER], \
+ thread_index, \
+ HICN_FACE_COUNTERS_DATA_TX, \
+ 1, \
+ vlib_buffer_length_in_chain(vm, b0));\
} \
\
if (PREDICT_TRUE(face1 != NULL)) \
@@ -676,6 +715,12 @@ typedef enum
(vm, b1, face1); \
next1 = NEXT_DATA_LOOKUP_IP##ipv; \
stats.pkts_data_count += 1; \
+ vlib_increment_combined_counter ( \
+ &counters[face_id1 * HICN_N_COUNTER], \
+ thread_index, \
+ HICN_FACE_COUNTERS_DATA_TX, \
+ 1, \
+ vlib_buffer_length_in_chain(vm, b1)); \
} \
\
if (PREDICT_FALSE ((node->flags & VLIB_NODE_FLAG_TRACE) && \
@@ -720,6 +765,7 @@ hicn_iface_ip4_output_node_fn (vlib_main_t * vm,
{
u32 n_left_from, *from, *to_next, next_index;
vl_api_hicn_api_node_stats_get_reply_t stats = { 0 };
+ u32 thread_index = vm->thread_index;
from = vlib_frame_vector_args (frame);
n_left_from = frame->n_vectors;
@@ -758,8 +804,10 @@ hicn_iface_ip4_output_format_trace (u8 * s, va_list * args)
hicn_iface_ip4_output_trace_t *t =
va_arg (*args, hicn_iface_ip4_output_trace_t *);
- s = format (s, "IFACE_IP4_OUTPUT: pkt: %d, sw_if_index %d, next index %d\n%U",
- (int) t->pkt_type, t->sw_if_index, t->next_index, format_ip4_header, t->packet_data, sizeof (t->packet_data));
+ s =
+ format (s, "IFACE_IP4_OUTPUT: pkt: %d, sw_if_index %d, next index %d\n%U",
+ (int) t->pkt_type, t->sw_if_index, t->next_index,
+ format_ip4_header, t->packet_data, sizeof (t->packet_data));
return (s);
}
@@ -794,6 +842,7 @@ hicn_iface_ip6_output_node_fn (vlib_main_t * vm,
{
u32 n_left_from, *from, *to_next, next_index;
vl_api_hicn_api_node_stats_get_reply_t stats = { 0 };
+ u32 thread_index = vm->thread_index;
from = vlib_frame_vector_args (frame);
n_left_from = frame->n_vectors;
@@ -831,8 +880,10 @@ hicn_iface_ip6_output_format_trace (u8 * s, va_list * args)
hicn_iface_ip6_output_trace_t *t =
va_arg (*args, hicn_iface_ip6_output_trace_t *);
- s = format (s, "IFACE_IP6_OUTPUT: pkt: %d, sw_if_index %d, next index %d\n%U",
- (int) t->pkt_type, t->sw_if_index, t->next_index, format_ip6_header, t->packet_data, sizeof (t->packet_data));
+ s =
+ format (s, "IFACE_IP6_OUTPUT: pkt: %d, sw_if_index %d, next index %d\n%U",
+ (int) t->pkt_type, t->sw_if_index, t->next_index,
+ format_ip6_header, t->packet_data, sizeof (t->packet_data));
return (s);
}