X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=tests%2Ftest-odp.c;h=45605e4b9c989b8262891b6598bf8065c12ec832;hb=7061a497b10b0c830cebcd463ceac053ba81dea5;hp=5ed31a9e1bbde326c2b20fa621e11c6fd7a0c02d;hpb=ddbfda846297ab9e89ed9c3f844a8eff86692275;p=sliver-openvswitch.git diff --git a/tests/test-odp.c b/tests/test-odp.c index 5ed31a9e1..45605e4b9 100644 --- a/tests/test-odp.c +++ b/tests/test-odp.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2012 Nicira, Inc. + * Copyright (c) 2011, 2012, 2013 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,61 +26,70 @@ #include "vlog.h" static int -parse_keys(void) +parse_keys(bool wc_keys) { int exit_code = 0; struct ds in; ds_init(&in); - vlog_set_levels_from_string("odp_util:console:dbg"); + vlog_set_levels_from_string_assert("odp_util:console:dbg"); while (!ds_get_test_line(&in, stdin)) { enum odp_key_fitness fitness; struct ofpbuf odp_key; + struct ofpbuf odp_mask; struct flow flow; struct ds out; int error; /* Convert string to OVS DP key. */ ofpbuf_init(&odp_key, 0); - error = odp_flow_key_from_string(ds_cstr(&in), NULL, &odp_key); + ofpbuf_init(&odp_mask, 0); + error = odp_flow_from_string(ds_cstr(&in), NULL, + &odp_key, &odp_mask); if (error) { - printf("odp_flow_key_from_string: error\n"); + printf("odp_flow_from_string: error\n"); goto next; } - /* Convert odp_key to flow. */ - fitness = odp_flow_key_to_flow(odp_key.data, odp_key.size, &flow); - switch (fitness) { - case ODP_FIT_PERFECT: - break; - - case ODP_FIT_TOO_LITTLE: - printf("ODP_FIT_TOO_LITTLE: "); - break; - - case ODP_FIT_TOO_MUCH: - printf("ODP_FIT_TOO_MUCH: "); - break; - - case ODP_FIT_ERROR: - printf("odp_flow_key_to_flow: error\n"); - goto next; - } - - /* Convert cls_rule back to odp_key. */ - ofpbuf_uninit(&odp_key); - ofpbuf_init(&odp_key, 0); - odp_flow_key_from_flow(&odp_key, &flow, flow.in_port); - - if (odp_key.size > ODPUTIL_FLOW_KEY_BYTES) { - printf ("too long: %zu > %d\n", - odp_key.size, ODPUTIL_FLOW_KEY_BYTES); - exit_code = 1; + if (!wc_keys) { + /* Convert odp_key to flow. */ + fitness = odp_flow_key_to_flow(odp_key.data, odp_key.size, &flow); + switch (fitness) { + case ODP_FIT_PERFECT: + break; + + case ODP_FIT_TOO_LITTLE: + printf("ODP_FIT_TOO_LITTLE: "); + break; + + case ODP_FIT_TOO_MUCH: + printf("ODP_FIT_TOO_MUCH: "); + break; + + case ODP_FIT_ERROR: + printf("odp_flow_key_to_flow: error\n"); + goto next; + } + /* Convert cls_rule back to odp_key. */ + ofpbuf_uninit(&odp_key); + ofpbuf_init(&odp_key, 0); + odp_flow_key_from_flow(&odp_key, &flow, flow.in_port.odp_port); + + if (odp_key.size > ODPUTIL_FLOW_KEY_BYTES) { + printf ("too long: %zu > %d\n", + odp_key.size, ODPUTIL_FLOW_KEY_BYTES); + exit_code = 1; + } } /* Convert odp_key to string. */ ds_init(&out); - odp_flow_key_format(odp_key.data, odp_key.size, &out); + if (wc_keys) { + odp_flow_format(odp_key.data, odp_key.size, + odp_mask.data, odp_mask.size, &out, false); + } else { + odp_flow_key_format(odp_key.data, odp_key.size, &out); + } puts(ds_cstr(&out)); ds_destroy(&out); @@ -98,7 +107,7 @@ parse_actions(void) struct ds in; ds_init(&in); - vlog_set_levels_from_string("odp_util:console:dbg"); + vlog_set_levels_from_string_assert("odp_util:console:dbg"); while (!ds_get_test_line(&in, stdin)) { struct ofpbuf odp_actions; struct ds out; @@ -130,10 +139,12 @@ int main(int argc, char *argv[]) { if (argc == 2 &&!strcmp(argv[1], "parse-keys")) { - return parse_keys(); + return parse_keys(false); + } else if (argc == 2 &&!strcmp(argv[1], "parse-wc-keys")) { + return parse_keys(true); } else if (argc == 2 && !strcmp(argv[1], "parse-actions")) { return parse_actions(); } else { - ovs_fatal(0, "usage: %s parse-keys | parse-actions", argv[0]); + ovs_fatal(0, "usage: %s parse-keys | parse-wc-keys | parse-actions", argv[0]); } }