aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/l2/feat_bitmap.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/l2/feat_bitmap.h')
-rw-r--r--src/vnet/l2/feat_bitmap.h18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/vnet/l2/feat_bitmap.h b/src/vnet/l2/feat_bitmap.h
index c6e02ecc7c9..5940ff7ea9b 100644
--- a/src/vnet/l2/feat_bitmap.h
+++ b/src/vnet/l2/feat_bitmap.h
@@ -75,8 +75,8 @@ feat_bitmap_init_next_nodes (vlib_main_t * vm, u32 node_index, /* the current gr
Return the graph node index for the feature corresponding to the
first set bit in the bitmap.
*/
-always_inline
- u32 feat_bitmap_get_next_node_index (u32 * next_nodes, u32 bitmap)
+always_inline u32
+feat_bitmap_get_next_node_index (u32 * next_nodes, u32 bitmap)
{
u32 first_bit;
@@ -85,6 +85,20 @@ always_inline
return next_nodes[first_bit];
}
+/**
+ Return the graph node index for the feature corresponding to the next
+ set bit after clearing the current feature bit in the feature_bitmap
+ of the current packet.
+*/
+always_inline u32
+vnet_l2_feature_next (vlib_buffer_t * b, u32 * next_nodes, u32 feat_bit)
+{
+ vnet_buffer (b)->l2.feature_bitmap &= ~feat_bit;
+ u32 fb = vnet_buffer (b)->l2.feature_bitmap;
+ ASSERT (fb != 0);
+ return feat_bitmap_get_next_node_index (next_nodes, fb);
+}
+
#endif /* included_vnet_l2_feat_bitmap_h */
/*