]> git.proxmox.com Git - mirror_ovs.git/blame - tests/test-odp.c
ofproto: Rate-limit STP status errors on non-existent ports.
[mirror_ovs.git] / tests / test-odp.c
CommitLineData
3bffc610
BP
1/*
2 * Copyright (c) 2011 Nicira Networks.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at:
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include <config.h>
18
19#include <stdio.h>
20
21#include "dynamic-string.h"
22#include "flow.h"
23#include "odp-util.h"
24#include "ofpbuf.h"
b0f7b9b5 25#include "vlog.h"
3bffc610
BP
26
27int
28main(void)
29{
30 struct ds in;
31
32 ds_init(&in);
b0f7b9b5 33 vlog_set_levels_from_string("odp_util:console:dbg");
3bffc610 34 while (!ds_get_line(&in, stdin)) {
b0f7b9b5 35 enum odp_key_fitness fitness;
3bffc610
BP
36 struct ofpbuf odp_key;
37 struct flow flow;
38 struct ds out;
39 int error;
40 char *s;
41
42 /* Delete comments, skip blank lines. */
43 s = ds_cstr(&in);
44 if (*s == '#') {
45 puts(s);
46 continue;
47 }
48 if (strchr(s, '#')) {
49 *strchr(s, '#') = '\0';
50 }
51 if (s[strspn(s, " ")] == '\0') {
52 putchar('\n');
53 continue;
54 }
55
df2c07f4 56 /* Convert string to OVS DP key. */
3bffc610 57 ofpbuf_init(&odp_key, 0);
b2a60db8 58 error = odp_flow_key_from_string(ds_cstr(&in), NULL, &odp_key);
3bffc610
BP
59 if (error) {
60 printf("odp_flow_key_from_string: error\n");
61 goto next;
62 }
63
64 /* Convert odp_key to flow. */
b0f7b9b5
BP
65 fitness = odp_flow_key_to_flow(odp_key.data, odp_key.size, &flow);
66 switch (fitness) {
67 case ODP_FIT_PERFECT:
68 break;
69
70 case ODP_FIT_TOO_LITTLE:
71 printf("ODP_FIT_TOO_LITTLE: ");
72 break;
73
74 case ODP_FIT_TOO_MUCH:
75 printf("ODP_FIT_TOO_MUCH: ");
76 break;
77
78 case ODP_FIT_ERROR:
3bffc610
BP
79 printf("odp_flow_key_to_flow: error\n");
80 goto next;
81 }
82
83 /* Convert cls_rule back to odp_key. */
84 ofpbuf_uninit(&odp_key);
85 ofpbuf_init(&odp_key, 0);
86 odp_flow_key_from_flow(&odp_key, &flow);
87
88 /* Convert odp_key to string. */
89 ds_init(&out);
90 odp_flow_key_format(odp_key.data, odp_key.size, &out);
91 puts(ds_cstr(&out));
92 ds_destroy(&out);
93
94 next:
95 ofpbuf_uninit(&odp_key);
96 }
97 ds_destroy(&in);
98
99 return 0;
100}