Fix output feature issue where opque field is already used by previous node
Change-Id: I1470993668fa8c740229149bbb227bd1e410d5ab Signed-off-by: Damjan Marion <damarion@cisco.com>
This commit is contained in:

committed by
Florin Coras

parent
9341a1f850
commit
2df2e999fb
@@ -61,6 +61,8 @@
|
||||
#define ETH_BUFFER_VLAN_BITS (ETH_BUFFER_VLAN_1_DEEP | \
|
||||
ETH_BUFFER_VLAN_2_DEEP)
|
||||
|
||||
#define LOG2_BUFFER_OUTPUT_FEAT_DONE LOG2_VLIB_BUFFER_FLAG_USER(5)
|
||||
#define BUFFER_OUTPUT_FEAT_DONE (1 << LOG2_BUFFER_OUTPUT_FEAT_DONE)
|
||||
|
||||
#define foreach_buffer_opaque_union_subtype \
|
||||
_(ethernet) \
|
||||
|
@@ -495,9 +495,10 @@ vnet_interface_output_node_no_flatten (vlib_main_t * vm,
|
||||
n_packets += 2;
|
||||
|
||||
if (PREDICT_FALSE(si->output_feature_bitmap &&
|
||||
vnet_buffer(b0)->output_features.bitmap != (1 << INTF_OUTPUT_FEAT_DONE)))
|
||||
((b0->flags & BUFFER_OUTPUT_FEAT_DONE) == 0)))
|
||||
{
|
||||
u32 next0;
|
||||
b0->flags |= BUFFER_OUTPUT_FEAT_DONE;
|
||||
vnet_buffer(b0)->output_features.bitmap = si->output_feature_bitmap;
|
||||
count_trailing_zeros(next0, vnet_buffer(b0)->output_features.bitmap);
|
||||
vnet_buffer(b0)->output_features.bitmap &= ~(1 << next0);
|
||||
@@ -521,9 +522,10 @@ vnet_interface_output_node_no_flatten (vlib_main_t * vm,
|
||||
}
|
||||
|
||||
if (PREDICT_FALSE(si->output_feature_bitmap &&
|
||||
vnet_buffer(b1)->output_features.bitmap != (1 << INTF_OUTPUT_FEAT_DONE)))
|
||||
((b1->flags & BUFFER_OUTPUT_FEAT_DONE) == 0)))
|
||||
{
|
||||
u32 next1;
|
||||
b1->flags |= BUFFER_OUTPUT_FEAT_DONE;
|
||||
vnet_buffer(b1)->output_features.bitmap = si->output_feature_bitmap;
|
||||
count_trailing_zeros(next1, vnet_buffer(b1)->output_features.bitmap);
|
||||
vnet_buffer(b1)->output_features.bitmap &= ~(1 << next1);
|
||||
@@ -573,9 +575,10 @@ vnet_interface_output_node_no_flatten (vlib_main_t * vm,
|
||||
n_packets += 1;
|
||||
|
||||
if (PREDICT_FALSE(si->output_feature_bitmap &&
|
||||
vnet_buffer(b0)->output_features.bitmap != (1 << INTF_OUTPUT_FEAT_DONE)))
|
||||
((b0->flags & BUFFER_OUTPUT_FEAT_DONE) == 0)))
|
||||
{
|
||||
u32 next0;
|
||||
b0->flags |= BUFFER_OUTPUT_FEAT_DONE;
|
||||
vnet_buffer(b0)->output_features.bitmap = si->output_feature_bitmap;
|
||||
count_trailing_zeros(next0, vnet_buffer(b0)->output_features.bitmap);
|
||||
vnet_buffer(b0)->output_features.bitmap &= ~(1 << next0);
|
||||
|
Reference in New Issue
Block a user