sam460ex: Fix PCI interrupts with multiple devices
[qemu.git] / tests / test-netfilter.c
blobe47075dd06b67bd46239c78aab2d245f505cfe55
1 /*
2 * QTest testcase for netfilter
4 * Copyright (c) 2015 FUJITSU LIMITED
5 * Author: Yang Hongyang <yanghy@cn.fujitsu.com>
7 * This work is licensed under the terms of the GNU GPL, version 2 or
8 * later. See the COPYING file in the top-level directory.
9 */
11 #include "qemu/osdep.h"
12 #include "libqtest.h"
13 #include "qapi/qmp/qdict.h"
15 /* add a netfilter to a netdev and then remove it */
16 static void add_one_netfilter(void)
18 QDict *response;
20 response = qmp("{'execute': 'object-add',"
21 " 'arguments': {"
22 " 'qom-type': 'filter-buffer',"
23 " 'id': 'qtest-f0',"
24 " 'props': {"
25 " 'netdev': 'qtest-bn0',"
26 " 'queue': 'rx',"
27 " 'interval': 1000"
28 "}}}");
30 g_assert(response);
31 g_assert(!qdict_haskey(response, "error"));
32 qobject_unref(response);
34 response = qmp("{'execute': 'object-del',"
35 " 'arguments': {"
36 " 'id': 'qtest-f0'"
37 "}}");
38 g_assert(response);
39 g_assert(!qdict_haskey(response, "error"));
40 qobject_unref(response);
43 /* add a netfilter to a netdev and then remove the netdev */
44 static void remove_netdev_with_one_netfilter(void)
46 QDict *response;
48 response = qmp("{'execute': 'object-add',"
49 " 'arguments': {"
50 " 'qom-type': 'filter-buffer',"
51 " 'id': 'qtest-f0',"
52 " 'props': {"
53 " 'netdev': 'qtest-bn0',"
54 " 'queue': 'rx',"
55 " 'interval': 1000"
56 "}}}");
58 g_assert(response);
59 g_assert(!qdict_haskey(response, "error"));
60 qobject_unref(response);
62 response = qmp("{'execute': 'netdev_del',"
63 " 'arguments': {"
64 " 'id': 'qtest-bn0'"
65 "}}");
66 g_assert(response);
67 g_assert(!qdict_haskey(response, "error"));
68 qobject_unref(response);
70 /* add back the netdev */
71 response = qmp("{'execute': 'netdev_add',"
72 " 'arguments': {"
73 " 'type': 'user',"
74 " 'id': 'qtest-bn0'"
75 "}}");
76 g_assert(response);
77 g_assert(!qdict_haskey(response, "error"));
78 qobject_unref(response);
81 /* add multi(2) netfilters to a netdev and then remove them */
82 static void add_multi_netfilter(void)
84 QDict *response;
86 response = qmp("{'execute': 'object-add',"
87 " 'arguments': {"
88 " 'qom-type': 'filter-buffer',"
89 " 'id': 'qtest-f0',"
90 " 'props': {"
91 " 'netdev': 'qtest-bn0',"
92 " 'queue': 'rx',"
93 " 'interval': 1000"
94 "}}}");
96 g_assert(response);
97 g_assert(!qdict_haskey(response, "error"));
98 qobject_unref(response);
100 response = qmp("{'execute': 'object-add',"
101 " 'arguments': {"
102 " 'qom-type': 'filter-buffer',"
103 " 'id': 'qtest-f1',"
104 " 'props': {"
105 " 'netdev': 'qtest-bn0',"
106 " 'queue': 'rx',"
107 " 'interval': 1000"
108 "}}}");
110 g_assert(response);
111 g_assert(!qdict_haskey(response, "error"));
112 qobject_unref(response);
114 response = qmp("{'execute': 'object-del',"
115 " 'arguments': {"
116 " 'id': 'qtest-f0'"
117 "}}");
118 g_assert(response);
119 g_assert(!qdict_haskey(response, "error"));
120 qobject_unref(response);
122 response = qmp("{'execute': 'object-del',"
123 " 'arguments': {"
124 " 'id': 'qtest-f1'"
125 "}}");
126 g_assert(response);
127 g_assert(!qdict_haskey(response, "error"));
128 qobject_unref(response);
131 /* add multi(2) netfilters to a netdev and then remove the netdev */
132 static void remove_netdev_with_multi_netfilter(void)
134 QDict *response;
136 response = qmp("{'execute': 'object-add',"
137 " 'arguments': {"
138 " 'qom-type': 'filter-buffer',"
139 " 'id': 'qtest-f0',"
140 " 'props': {"
141 " 'netdev': 'qtest-bn0',"
142 " 'queue': 'rx',"
143 " 'interval': 1000"
144 "}}}");
146 g_assert(response);
147 g_assert(!qdict_haskey(response, "error"));
148 qobject_unref(response);
150 response = qmp("{'execute': 'object-add',"
151 " 'arguments': {"
152 " 'qom-type': 'filter-buffer',"
153 " 'id': 'qtest-f1',"
154 " 'props': {"
155 " 'netdev': 'qtest-bn0',"
156 " 'queue': 'rx',"
157 " 'interval': 1000"
158 "}}}");
160 g_assert(response);
161 g_assert(!qdict_haskey(response, "error"));
162 qobject_unref(response);
164 response = qmp("{'execute': 'netdev_del',"
165 " 'arguments': {"
166 " 'id': 'qtest-bn0'"
167 "}}");
168 g_assert(response);
169 g_assert(!qdict_haskey(response, "error"));
170 qobject_unref(response);
172 /* add back the netdev */
173 response = qmp("{'execute': 'netdev_add',"
174 " 'arguments': {"
175 " 'type': 'user',"
176 " 'id': 'qtest-bn0'"
177 "}}");
178 g_assert(response);
179 g_assert(!qdict_haskey(response, "error"));
180 qobject_unref(response);
183 int main(int argc, char **argv)
185 int ret;
186 char *args;
187 const char *devstr = "e1000";
189 if (g_str_equal(qtest_get_arch(), "s390x")) {
190 devstr = "virtio-net-ccw";
193 g_test_init(&argc, &argv, NULL);
194 qtest_add_func("/netfilter/addremove_one", add_one_netfilter);
195 qtest_add_func("/netfilter/remove_netdev_one",
196 remove_netdev_with_one_netfilter);
197 qtest_add_func("/netfilter/addremove_multi", add_multi_netfilter);
198 qtest_add_func("/netfilter/remove_netdev_multi",
199 remove_netdev_with_multi_netfilter);
201 args = g_strdup_printf("-netdev user,id=qtest-bn0 "
202 "-device %s,netdev=qtest-bn0", devstr);
203 qtest_start(args);
204 ret = g_test_run();
206 qtest_end();
207 g_free(args);
209 return ret;