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:
Ole Troan
2020-09-15 10:53:34 +02:00
committed by Dave Barach
parent 34262d4d56
commit 3d81267945
14 changed files with 486 additions and 519 deletions

View File

@@ -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

View File

@@ -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);

View File

@@ -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__ */
/*