extern vnet_feature_main_t feature_main;
+#ifndef CLIB_MARCH_VARIANT
#define VNET_FEATURE_ARC_INIT(x,...) \
__VA_ARGS__ vnet_feature_arc_registration_t vnet_feat_arc_##x;\
static void __vnet_add_feature_arc_registration_##x (void) \
VLIB_REMOVE_FROM_LINKED_LIST (fm->next_feature, r, next); \
} \
__VA_ARGS__ vnet_feature_registration_t vnet_feat_##x
+#else
+#define VNET_FEATURE_ARC_INIT(x,...) \
+extern vnet_feature_arc_registration_t __clib_unused vnet_feat_arc_##x; \
+static vnet_feature_arc_registration_t __clib_unused __clib_unused_vnet_feat_arc_##x
+#define VNET_FEATURE_INIT(x,...) \
+extern vnet_feature_registration_t __clib_unused vnet_feat_##x; \
+static vnet_feature_registration_t __clib_unused __clib_unused_vnet_feat_##x
+#endif
void
vnet_config_update_feature_count (vnet_feature_main_t * fm, u8 arc,
}
static_always_inline void *
-vnet_feature_next_with_data (u32 sw_if_index, u32 * next0,
- vlib_buffer_t * b0, u32 n_data_bytes)
+vnet_feature_next_with_data (u32 * next0, vlib_buffer_t * b0,
+ u32 n_data_bytes)
{
vnet_feature_main_t *fm = &feature_main;
u8 arc = vnet_buffer (b0)->feature_arc_index;
}
static_always_inline void
-vnet_feature_next (u32 sw_if_index, u32 * next0, vlib_buffer_t * b0)
+vnet_feature_next (u32 * next0, vlib_buffer_t * b0)
{
- vnet_feature_next_with_data (sw_if_index, next0, b0, 0);
+ vnet_feature_next_with_data (next0, b0, 0);
}
static_always_inline int
*/
u16 adv;
- vnet_buffer (b0)->device_input_feat.saved_next_index = *next0;
adv = device_input_next_node_advance[*next0];
- vnet_buffer (b0)->device_input_feat.buffer_advance = adv;
vlib_buffer_advance (b0, -adv);
vnet_buffer (b0)->feature_arc_index = feature_arc_index;
*/
u16 adv;
- vnet_buffer (b0)->device_input_feat.saved_next_index = *next0;
adv = device_input_next_node_advance[*next0];
- vnet_buffer (b0)->device_input_feat.buffer_advance = adv;
vlib_buffer_advance (b0, -adv);
- vnet_buffer (b1)->device_input_feat.saved_next_index = *next1;
adv = device_input_next_node_advance[*next1];
- vnet_buffer (b1)->device_input_feat.buffer_advance = adv;
vlib_buffer_advance (b1, -adv);
vnet_buffer (b0)->feature_arc_index = feature_arc_index;
*/
u16 adv;
- vnet_buffer (b0)->device_input_feat.saved_next_index = *next0;
adv = device_input_next_node_advance[*next0];
- vnet_buffer (b0)->device_input_feat.buffer_advance = adv;
vlib_buffer_advance (b0, -adv);
- vnet_buffer (b1)->device_input_feat.saved_next_index = *next1;
adv = device_input_next_node_advance[*next1];
- vnet_buffer (b1)->device_input_feat.buffer_advance = adv;
vlib_buffer_advance (b1, -adv);
- vnet_buffer (b2)->device_input_feat.saved_next_index = *next2;
adv = device_input_next_node_advance[*next2];
- vnet_buffer (b2)->device_input_feat.buffer_advance = adv;
vlib_buffer_advance (b2, -adv);
- vnet_buffer (b3)->device_input_feat.saved_next_index = *next3;
adv = device_input_next_node_advance[*next3];
- vnet_buffer (b3)->device_input_feat.buffer_advance = adv;
vlib_buffer_advance (b3, -adv);
vnet_buffer (b0)->feature_arc_index = feature_arc_index;
vnet_feature_registration_t *
first_reg, char ***feature_nodes);
-void vnet_interface_features_show (vlib_main_t * vm, u32 sw_if_index);
+void vnet_interface_features_show (vlib_main_t * vm, u32 sw_if_index,
+ int verbose);
#endif /* included_feature_h */