Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
QoS recording and marking
[vpp.git]
/
src
/
vnet
/
mpls
/
mpls_output.c
diff --git
a/src/vnet/mpls/mpls_output.c
b/src/vnet/mpls/mpls_output.c
index
2d8bd0c
..
b7bb769
100644
(file)
--- a/
src/vnet/mpls/mpls_output.c
+++ b/
src/vnet/mpls/mpls_output.c
@@
-24,9
+24,6
@@
typedef struct {
/* Adjacency taken. */
u32 adj_index;
u32 flow_hash;
/* Adjacency taken. */
u32 adj_index;
u32 flow_hash;
-
- /* Packet data, possibly *after* rewrite. */
- u8 packet_data[64 - 1*sizeof(u32)];
} mpls_output_trace_t;
#define foreach_mpls_output_next \
} mpls_output_trace_t;
#define foreach_mpls_output_next \
@@
-45,16
+42,11
@@
format_mpls_output_trace (u8 * s, va_list * args)
CLIB_UNUSED (vlib_main_t * vm) = va_arg (*args, vlib_main_t *);
CLIB_UNUSED (vlib_node_t * node) = va_arg (*args, vlib_node_t *);
mpls_output_trace_t * t = va_arg (*args, mpls_output_trace_t *);
CLIB_UNUSED (vlib_main_t * vm) = va_arg (*args, vlib_main_t *);
CLIB_UNUSED (vlib_node_t * node) = va_arg (*args, vlib_node_t *);
mpls_output_trace_t * t = va_arg (*args, mpls_output_trace_t *);
- uword indent = format_get_indent (s);
s = format (s, "adj-idx %d : %U flow hash: 0x%08x",
t->adj_index,
format_ip_adjacency, t->adj_index, FORMAT_IP_ADJACENCY_NONE,
t->flow_hash);
s = format (s, "adj-idx %d : %U flow hash: 0x%08x",
t->adj_index,
format_ip_adjacency, t->adj_index, FORMAT_IP_ADJACENCY_NONE,
t->flow_hash);
- s = format (s, "\n%U%U",
- format_white_space, indent,
- format_ip_adjacency_packet_data,
- t->adj_index, t->packet_data, sizeof (t->packet_data));
return s;
}
return s;
}
@@
-64,12
+56,12
@@
mpls_output_inline (vlib_main_t * vm,
vlib_frame_t * from_frame,
int is_midchain)
{
vlib_frame_t * from_frame,
int is_midchain)
{
- u32 n_left_from, next_index, * from, * to_next,
cpu
_index;
+ u32 n_left_from, next_index, * from, * to_next,
thread
_index;
vlib_node_runtime_t * error_node;
u32 n_left_to_next;
mpls_main_t *mm;
vlib_node_runtime_t * error_node;
u32 n_left_to_next;
mpls_main_t *mm;
-
cpu_index = os_get_cpu_number
();
+
thread_index = vlib_get_thread_index
();
error_node = vlib_node_get_runtime (vm, mpls_output_node.index);
from = vlib_frame_vector_args (from_frame);
n_left_from = from_frame->n_vectors;
error_node = vlib_node_get_runtime (vm, mpls_output_node.index);
from = vlib_frame_vector_args (from_frame);
n_left_from = from_frame->n_vectors;
@@
-121,10
+113,6
@@
mpls_output_inline (vlib_main_t * vm,
adj_index0 = vnet_buffer (p0)->ip.adj_index[VLIB_TX];
adj_index1 = vnet_buffer (p1)->ip.adj_index[VLIB_TX];
adj_index0 = vnet_buffer (p0)->ip.adj_index[VLIB_TX];
adj_index1 = vnet_buffer (p1)->ip.adj_index[VLIB_TX];
- /* We should never rewrite a pkt using the MISS adjacency */
- ASSERT(adj_index0);
- ASSERT(adj_index1);
-
adj0 = adj_get(adj_index0);
adj1 = adj_get(adj_index1);
hdr0 = vlib_buffer_get_current (p0);
adj0 = adj_get(adj_index0);
adj1 = adj_get(adj_index1);
hdr0 = vlib_buffer_get_current (p0);
@@
-137,17
+125,19
@@
mpls_output_inline (vlib_main_t * vm,
/* Update packet buffer attributes/set output interface. */
rw_len0 = adj0[0].rewrite_header.data_bytes;
rw_len1 = adj1[0].rewrite_header.data_bytes;
/* Update packet buffer attributes/set output interface. */
rw_len0 = adj0[0].rewrite_header.data_bytes;
rw_len1 = adj1[0].rewrite_header.data_bytes;
+ vnet_buffer (p0)->mpls.save_rewrite_length = rw_len0;
+ vnet_buffer (p1)->mpls.save_rewrite_length = rw_len1;
/* Bump the adj counters for packet and bytes */
vlib_increment_combined_counter
(&adjacency_counters,
/* Bump the adj counters for packet and bytes */
vlib_increment_combined_counter
(&adjacency_counters,
-
cpu
_index,
+
thread
_index,
adj_index0,
1,
vlib_buffer_length_in_chain (vm, p0) + rw_len0);
vlib_increment_combined_counter
(&adjacency_counters,
adj_index0,
1,
vlib_buffer_length_in_chain (vm, p0) + rw_len0);
vlib_increment_combined_counter
(&adjacency_counters,
-
cpu
_index,
+
thread
_index,
adj_index1,
1,
vlib_buffer_length_in_chain (vm, p1) + rw_len1);
adj_index1,
1,
vlib_buffer_length_in_chain (vm, p1) + rw_len1);
@@
-197,8
+187,12
@@
mpls_output_inline (vlib_main_t * vm,
}
if (is_midchain)
{
}
if (is_midchain)
{
- adj0->sub_type.midchain.fixup_func(vm, adj0, p0);
- adj1->sub_type.midchain.fixup_func(vm, adj1, p1);
+ adj0->sub_type.midchain.fixup_func
+ (vm, adj0, p0,
+ adj0->sub_type.midchain.fixup_data);
+ adj1->sub_type.midchain.fixup_func
+ (vm, adj1, p1,
+ adj1->sub_type.midchain.fixup_data);
}
p0->error = error_node->errors[error0];
}
p0->error = error_node->errors[error0];
@@
-237,9
+231,6
@@
mpls_output_inline (vlib_main_t * vm,
adj_index0 = vnet_buffer (p0)->ip.adj_index[VLIB_TX];
adj_index0 = vnet_buffer (p0)->ip.adj_index[VLIB_TX];
- /* We should never rewrite a pkt using the MISS adjacency */
- ASSERT(adj_index0);
-
adj0 = adj_get(adj_index0);
hdr0 = vlib_buffer_get_current (p0);
adj0 = adj_get(adj_index0);
hdr0 = vlib_buffer_get_current (p0);
@@
-249,10
+240,11
@@
mpls_output_inline (vlib_main_t * vm,
/* Update packet buffer attributes/set output interface. */
rw_len0 = adj0[0].rewrite_header.data_bytes;
/* Update packet buffer attributes/set output interface. */
rw_len0 = adj0[0].rewrite_header.data_bytes;
-
+ vnet_buffer (p0)->mpls.save_rewrite_length = rw_len0;
+
vlib_increment_combined_counter
(&adjacency_counters,
vlib_increment_combined_counter
(&adjacency_counters,
-
cpu
_index,
+
thread
_index,
adj_index0,
1,
vlib_buffer_length_in_chain (vm, p0) + rw_len0);
adj_index0,
1,
vlib_buffer_length_in_chain (vm, p0) + rw_len0);
@@
-281,7
+273,9
@@
mpls_output_inline (vlib_main_t * vm,
}
if (is_midchain)
{
}
if (is_midchain)
{
- adj0->sub_type.midchain.fixup_func(vm, adj0, p0);
+ adj0->sub_type.midchain.fixup_func
+ (vm, adj0, p0,
+ adj0->sub_type.midchain.fixup_data);
}
p0->error = error_node->errors[error0];
}
p0->error = error_node->errors[error0];
@@
-431,7
+425,6
@@
mpls_adj_incomplete (vlib_main_t * vm,
n_left_to_next -= 1;
adj_index0 = vnet_buffer (p0)->ip.adj_index[VLIB_TX];
n_left_to_next -= 1;
adj_index0 = vnet_buffer (p0)->ip.adj_index[VLIB_TX];
- ASSERT(adj_index0);
adj0 = adj_get(adj_index0);
adj0 = adj_get(adj_index0);
@@
-468,7
+461,7
@@
format_mpls_adj_incomplete_trace (u8 * s, va_list * args)
CLIB_UNUSED (vlib_main_t * vm) = va_arg (*args, vlib_main_t *);
CLIB_UNUSED (vlib_node_t * node) = va_arg (*args, vlib_node_t *);
mpls_adj_incomplete_trace_t * t;
CLIB_UNUSED (vlib_main_t * vm) = va_arg (*args, vlib_main_t *);
CLIB_UNUSED (vlib_node_t * node) = va_arg (*args, vlib_node_t *);
mpls_adj_incomplete_trace_t * t;
- u
word
indent;
+ u
32
indent;
t = va_arg (*args, mpls_adj_incomplete_trace_t *);
indent = format_get_indent (s);
t = va_arg (*args, mpls_adj_incomplete_trace_t *);
indent = format_get_indent (s);