~james-page/ubuntu/saucy/openvswitch/1.12-snapshot

« back to all changes in this revision

Viewing changes to tests/test-odp.c

  • Committer: James Page
  • Date: 2013-08-21 10:16:57 UTC
  • mfrom: (1.1.20)
  • Revision ID: james.page@canonical.com-20130821101657-3o0z0qeiv5zkwlzi
New upstream snapshot

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
#include "vlog.h"
27
27
 
28
28
static int
29
 
parse_keys(void)
 
29
parse_keys(bool wc_keys)
30
30
{
31
31
    int exit_code = 0;
32
32
    struct ds in;
36
36
    while (!ds_get_test_line(&in, stdin)) {
37
37
        enum odp_key_fitness fitness;
38
38
        struct ofpbuf odp_key;
 
39
        struct ofpbuf odp_mask;
39
40
        struct flow flow;
40
41
        struct ds out;
41
42
        int error;
42
43
 
43
44
        /* Convert string to OVS DP key. */
44
45
        ofpbuf_init(&odp_key, 0);
45
 
        error = odp_flow_key_from_string(ds_cstr(&in), NULL, &odp_key);
 
46
        ofpbuf_init(&odp_mask, 0);
 
47
        error = odp_flow_from_string(ds_cstr(&in), NULL,
 
48
                                     &odp_key, &odp_mask);
46
49
        if (error) {
47
 
            printf("odp_flow_key_from_string: error\n");
48
 
            goto next;
49
 
        }
50
 
 
51
 
        /* Convert odp_key to flow. */
52
 
        fitness = odp_flow_key_to_flow(odp_key.data, odp_key.size, &flow);
53
 
        switch (fitness) {
54
 
        case ODP_FIT_PERFECT:
55
 
            break;
56
 
 
57
 
        case ODP_FIT_TOO_LITTLE:
58
 
            printf("ODP_FIT_TOO_LITTLE: ");
59
 
            break;
60
 
 
61
 
        case ODP_FIT_TOO_MUCH:
62
 
            printf("ODP_FIT_TOO_MUCH: ");
63
 
            break;
64
 
 
65
 
        case ODP_FIT_ERROR:
66
 
            printf("odp_flow_key_to_flow: error\n");
67
 
            goto next;
68
 
        }
69
 
 
70
 
        /* Convert cls_rule back to odp_key. */
71
 
        ofpbuf_uninit(&odp_key);
72
 
        ofpbuf_init(&odp_key, 0);
73
 
        odp_flow_key_from_flow(&odp_key, &flow, flow.in_port);
74
 
 
75
 
        if (odp_key.size > ODPUTIL_FLOW_KEY_BYTES) {
76
 
            printf ("too long: %zu > %d\n",
77
 
                    odp_key.size, ODPUTIL_FLOW_KEY_BYTES);
78
 
            exit_code = 1;
 
50
            printf("odp_flow_from_string: error\n");
 
51
            goto next;
 
52
        }
 
53
 
 
54
        if (!wc_keys) {
 
55
            /* Convert odp_key to flow. */
 
56
            fitness = odp_flow_key_to_flow(odp_key.data, odp_key.size, &flow);
 
57
            switch (fitness) {
 
58
                case ODP_FIT_PERFECT:
 
59
                    break;
 
60
 
 
61
                case ODP_FIT_TOO_LITTLE:
 
62
                    printf("ODP_FIT_TOO_LITTLE: ");
 
63
                    break;
 
64
 
 
65
                case ODP_FIT_TOO_MUCH:
 
66
                    printf("ODP_FIT_TOO_MUCH: ");
 
67
                    break;
 
68
 
 
69
                case ODP_FIT_ERROR:
 
70
                    printf("odp_flow_key_to_flow: error\n");
 
71
                    goto next;
 
72
            }
 
73
            /* Convert cls_rule back to odp_key. */
 
74
            ofpbuf_uninit(&odp_key);
 
75
            ofpbuf_init(&odp_key, 0);
 
76
            odp_flow_key_from_flow(&odp_key, &flow, flow.in_port.odp_port);
 
77
 
 
78
            if (odp_key.size > ODPUTIL_FLOW_KEY_BYTES) {
 
79
                printf ("too long: %zu > %d\n",
 
80
                        odp_key.size, ODPUTIL_FLOW_KEY_BYTES);
 
81
                exit_code = 1;
 
82
            }
79
83
        }
80
84
 
81
85
        /* Convert odp_key to string. */
82
86
        ds_init(&out);
83
 
        odp_flow_key_format(odp_key.data, odp_key.size, &out);
 
87
        if (wc_keys) {
 
88
            odp_flow_format(odp_key.data, odp_key.size,
 
89
                            odp_mask.data, odp_mask.size, &out);
 
90
        } else {
 
91
            odp_flow_key_format(odp_key.data, odp_key.size, &out);
 
92
        }
84
93
        puts(ds_cstr(&out));
85
94
        ds_destroy(&out);
86
95
 
130
139
main(int argc, char *argv[])
131
140
{
132
141
    if (argc == 2 &&!strcmp(argv[1], "parse-keys")) {
133
 
        return parse_keys();
 
142
        return parse_keys(false);
 
143
    } else if (argc == 2 &&!strcmp(argv[1], "parse-wc-keys")) {
 
144
        return parse_keys(true);
134
145
    } else if (argc == 2 && !strcmp(argv[1], "parse-actions")) {
135
146
        return parse_actions();
136
147
    } else {
137
 
        ovs_fatal(0, "usage: %s parse-keys | parse-actions", argv[0]);
 
148
        ovs_fatal(0, "usage: %s parse-keys | parse-wc-keys | parse-actions", argv[0]);
138
149
    }
139
150
}