Parses OVN expressions from stdin and prints out matching packets in hexadecimal on stdout.
Signed-off-by: Justin Pettit <[email protected]> --- tests/test-ovn.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/tests/test-ovn.c b/tests/test-ovn.c index c0bc484..9165f5c 100644 --- a/tests/test-ovn.c +++ b/tests/test-ovn.c @@ -19,6 +19,7 @@ #include <getopt.h> #include <sys/wait.h> #include "command-line.h" +#include "dp-packet.h" #include "fatal-signal.h" #include "flow.h" #include "openvswitch/dynamic-string.h" @@ -1120,6 +1121,48 @@ test_exhaustive(struct ovs_cmdl_context *ctx OVS_UNUSED) expr_symtab_destroy(&symtab); shash_destroy(&symtab); } + +static void +test_expr_to_packets(struct ovs_cmdl_context *ctx OVS_UNUSED) +{ + struct shash symtab; + struct ds input; + + create_symtab(&symtab); + + ds_init(&input); + while (!ds_get_test_line(&input, stdin)) { + struct flow uflow; + memset(&uflow, '\0', sizeof uflow); + char *error = expr_parse_microflow(ds_cstr(&input), &symtab, NULL, + lookup_atoi_cb, NULL, &uflow); + if (error) { + puts(error); + free(error); + continue; + } + + uint64_t packet_stub[128 / 8]; + struct dp_packet packet; + dp_packet_use_stub(&packet, packet_stub, sizeof packet_stub); + flow_compose(&packet, &uflow); + + struct ds output = DS_EMPTY_INITIALIZER; + const uint8_t *buf = dp_packet_data(&packet); + for (int i = 0; i < dp_packet_size(&packet); i++) { + uint8_t val = buf[i]; + ds_put_format(&output, "%02"PRIx8, val); + } + puts(ds_cstr(&output)); + ds_destroy(&output); + + dp_packet_uninit(&packet); + } + ds_destroy(&input); + + expr_symtab_destroy(&symtab); + shash_destroy(&symtab); +} /* Actions. */ @@ -1291,10 +1334,14 @@ annotate-expr\n\ simplify-expr\n\ normalize-expr\n\ expr-to-flows\n\ - Parses OVN expressions from stdin and print them back on stdout after\n\ + Parses OVN expressions from stdin and prints them back on stdout after\n\ differing degrees of analysis. Available fields are based on packet\n\ headers.\n\ \n\ +expr-to-packets\n\ + Parses OVN expressions from stdin and prints out matching packets in\n\ + hexadecimal on stdout.\n\ +\n\ evaluate-expr MICROFLOW\n\ Parses OVN expressions from stdin and evaluates them against the flow\n\ specified in MICROFLOW, which must be an expression that constrains\n\ @@ -1451,6 +1498,7 @@ test_ovn_main(int argc, char *argv[]) {"composition", NULL, 1, 1, test_composition, OVS_RO}, {"tree-shape", NULL, 1, 1, test_tree_shape, OVS_RO}, {"exhaustive", NULL, 1, 1, test_exhaustive, OVS_RO}, + {"expr-to-packets", NULL, 0, 0, test_expr_to_packets, OVS_RO}, /* Actions. */ {"parse-actions", NULL, 0, 0, test_parse_actions, OVS_RO}, -- 1.9.1 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
