vat: add infrastructure to align vnet test code and plugin test code
Split vat/api_format.c also for VNET features. Use auto-generated VAT test code and support dynamic message ID allocation as for plugins. The arp and geneve features as Guinea pigs. Type: improvement Signed-off-by: Ole Troan <ot@cisco.com> Change-Id: I461591496766bdf10c5f950fd30f1a0ae05909da Signed-off-by: Ole Troan <ot@cisco.com>
This commit is contained in:
@@ -32,6 +32,8 @@ add_vpp_executable(vpp_api_test ENABLE_EXPORTS
|
||||
ip_types_api.c
|
||||
ip_types.c
|
||||
protocols.def
|
||||
../vnet/arp/arp_test.c
|
||||
../vnet/geneve/geneve_test.c
|
||||
|
||||
DEPENDS api_headers
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -318,6 +318,26 @@ vat_find_plugin_path ()
|
||||
vat_plugin_path = (char *) s;
|
||||
}
|
||||
|
||||
static void
|
||||
load_features (void)
|
||||
{
|
||||
vat_registered_features_t *f;
|
||||
vat_main_t *vam = &vat_main;
|
||||
clib_error_t *error;
|
||||
|
||||
f = vam->feature_function_registrations;
|
||||
|
||||
while (f)
|
||||
{
|
||||
error = f->function (vam);
|
||||
if (error)
|
||||
{
|
||||
clib_warning ("INIT FAILED");
|
||||
}
|
||||
f = f->next;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
@@ -422,6 +442,8 @@ main (int argc, char **argv)
|
||||
|
||||
vec_validate (vam->inbuf, 4096);
|
||||
|
||||
load_features ();
|
||||
|
||||
vam->current_file = (u8 *) "plugin-init";
|
||||
vat_plugin_init (vam);
|
||||
|
||||
|
@@ -127,6 +127,8 @@ typedef struct
|
||||
u64 bytes;
|
||||
} ip6_nbr_counter_t;
|
||||
|
||||
struct vat_registered_features_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* vpe input queue */
|
||||
@@ -228,6 +230,8 @@ typedef struct
|
||||
|
||||
elog_main_t elog_main;
|
||||
|
||||
struct vat_registered_features_t *feature_function_registrations;
|
||||
|
||||
/* Convenience */
|
||||
vlib_main_t *vlib_main;
|
||||
} vat_main_t;
|
||||
@@ -267,6 +271,31 @@ void api_cli_output (void *, const char *fmt, ...);
|
||||
void fformat_append_cr (FILE *, const char *fmt, ...);
|
||||
#endif
|
||||
|
||||
|
||||
typedef clib_error_t *(vat_feature_function_t) (vat_main_t * vam);
|
||||
typedef struct vat_registered_features_t
|
||||
{
|
||||
vat_feature_function_t *function;
|
||||
struct vat_registered_features_t *next;
|
||||
} vat_registered_features_t;
|
||||
|
||||
|
||||
#define VAT_REGISTER_FEATURE_FUNCTION(x) \
|
||||
vat_registered_features_t _vat_feature_function_##x; \
|
||||
static void __vlib_add_config_function_##x (void) \
|
||||
__attribute__((__constructor__)) ; \
|
||||
static void __vlib_add_config_function_##x (void) \
|
||||
{ \
|
||||
vat_main_t * vam = &vat_main; \
|
||||
_vat_feature_function_##x.next = vam->feature_function_registrations; \
|
||||
vam->feature_function_registrations = &_vat_feature_function_##x; \
|
||||
} \
|
||||
vat_registered_features_t _vat_feature_function_##x = \
|
||||
{ \
|
||||
.function = x, \
|
||||
}
|
||||
|
||||
|
||||
#endif /* __included_vat_h__ */
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user