1 | /* AUTOMATICALLY GENERATED, DO NOT MODIFY */ |
2 | |
3 | /* |
4 | * Schema-defined QAPI visitors |
5 | * |
6 | * Copyright IBM, Corp. 2011 |
7 | * Copyright (C) 2014-2018 Red Hat, Inc. |
8 | * |
9 | * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. |
10 | * See the COPYING.LIB file in the top-level directory. |
11 | */ |
12 | |
13 | #include "qemu/osdep.h" |
14 | #include "qapi/error.h" |
15 | #include "qapi/qmp/qerror.h" |
16 | #include "qapi-visit-net.h" |
17 | |
18 | void visit_type_q_obj_set_link_arg_members(Visitor *v, q_obj_set_link_arg *obj, Error **errp) |
19 | { |
20 | Error *err = NULL; |
21 | |
22 | visit_type_str(v, "name" , &obj->name, &err); |
23 | if (err) { |
24 | goto out; |
25 | } |
26 | visit_type_bool(v, "up" , &obj->up, &err); |
27 | if (err) { |
28 | goto out; |
29 | } |
30 | |
31 | out: |
32 | error_propagate(errp, err); |
33 | } |
34 | |
35 | void visit_type_q_obj_netdev_add_arg_members(Visitor *v, q_obj_netdev_add_arg *obj, Error **errp) |
36 | { |
37 | Error *err = NULL; |
38 | |
39 | visit_type_str(v, "type" , &obj->type, &err); |
40 | if (err) { |
41 | goto out; |
42 | } |
43 | visit_type_str(v, "id" , &obj->id, &err); |
44 | if (err) { |
45 | goto out; |
46 | } |
47 | |
48 | out: |
49 | error_propagate(errp, err); |
50 | } |
51 | |
52 | void visit_type_q_obj_netdev_del_arg_members(Visitor *v, q_obj_netdev_del_arg *obj, Error **errp) |
53 | { |
54 | Error *err = NULL; |
55 | |
56 | visit_type_str(v, "id" , &obj->id, &err); |
57 | if (err) { |
58 | goto out; |
59 | } |
60 | |
61 | out: |
62 | error_propagate(errp, err); |
63 | } |
64 | |
65 | void visit_type_NetLegacyNicOptions_members(Visitor *v, NetLegacyNicOptions *obj, Error **errp) |
66 | { |
67 | Error *err = NULL; |
68 | |
69 | if (visit_optional(v, "netdev" , &obj->has_netdev)) { |
70 | visit_type_str(v, "netdev" , &obj->netdev, &err); |
71 | if (err) { |
72 | goto out; |
73 | } |
74 | } |
75 | if (visit_optional(v, "macaddr" , &obj->has_macaddr)) { |
76 | visit_type_str(v, "macaddr" , &obj->macaddr, &err); |
77 | if (err) { |
78 | goto out; |
79 | } |
80 | } |
81 | if (visit_optional(v, "model" , &obj->has_model)) { |
82 | visit_type_str(v, "model" , &obj->model, &err); |
83 | if (err) { |
84 | goto out; |
85 | } |
86 | } |
87 | if (visit_optional(v, "addr" , &obj->has_addr)) { |
88 | visit_type_str(v, "addr" , &obj->addr, &err); |
89 | if (err) { |
90 | goto out; |
91 | } |
92 | } |
93 | if (visit_optional(v, "vectors" , &obj->has_vectors)) { |
94 | visit_type_uint32(v, "vectors" , &obj->vectors, &err); |
95 | if (err) { |
96 | goto out; |
97 | } |
98 | } |
99 | |
100 | out: |
101 | error_propagate(errp, err); |
102 | } |
103 | |
104 | void visit_type_NetLegacyNicOptions(Visitor *v, const char *name, NetLegacyNicOptions **obj, Error **errp) |
105 | { |
106 | Error *err = NULL; |
107 | |
108 | visit_start_struct(v, name, (void **)obj, sizeof(NetLegacyNicOptions), &err); |
109 | if (err) { |
110 | goto out; |
111 | } |
112 | if (!*obj) { |
113 | goto out_obj; |
114 | } |
115 | visit_type_NetLegacyNicOptions_members(v, *obj, &err); |
116 | if (err) { |
117 | goto out_obj; |
118 | } |
119 | visit_check_struct(v, &err); |
120 | out_obj: |
121 | visit_end_struct(v, (void **)obj); |
122 | if (err && visit_is_input(v)) { |
123 | qapi_free_NetLegacyNicOptions(*obj); |
124 | *obj = NULL; |
125 | } |
126 | out: |
127 | error_propagate(errp, err); |
128 | } |
129 | |
130 | void visit_type_NetdevUserOptions_members(Visitor *v, NetdevUserOptions *obj, Error **errp) |
131 | { |
132 | Error *err = NULL; |
133 | |
134 | if (visit_optional(v, "hostname" , &obj->has_hostname)) { |
135 | visit_type_str(v, "hostname" , &obj->hostname, &err); |
136 | if (err) { |
137 | goto out; |
138 | } |
139 | } |
140 | if (visit_optional(v, "restrict" , &obj->has_q_restrict)) { |
141 | visit_type_bool(v, "restrict" , &obj->q_restrict, &err); |
142 | if (err) { |
143 | goto out; |
144 | } |
145 | } |
146 | if (visit_optional(v, "ipv4" , &obj->has_ipv4)) { |
147 | visit_type_bool(v, "ipv4" , &obj->ipv4, &err); |
148 | if (err) { |
149 | goto out; |
150 | } |
151 | } |
152 | if (visit_optional(v, "ipv6" , &obj->has_ipv6)) { |
153 | visit_type_bool(v, "ipv6" , &obj->ipv6, &err); |
154 | if (err) { |
155 | goto out; |
156 | } |
157 | } |
158 | if (visit_optional(v, "ip" , &obj->has_ip)) { |
159 | visit_type_str(v, "ip" , &obj->ip, &err); |
160 | if (err) { |
161 | goto out; |
162 | } |
163 | } |
164 | if (visit_optional(v, "net" , &obj->has_net)) { |
165 | visit_type_str(v, "net" , &obj->net, &err); |
166 | if (err) { |
167 | goto out; |
168 | } |
169 | } |
170 | if (visit_optional(v, "host" , &obj->has_host)) { |
171 | visit_type_str(v, "host" , &obj->host, &err); |
172 | if (err) { |
173 | goto out; |
174 | } |
175 | } |
176 | if (visit_optional(v, "tftp" , &obj->has_tftp)) { |
177 | visit_type_str(v, "tftp" , &obj->tftp, &err); |
178 | if (err) { |
179 | goto out; |
180 | } |
181 | } |
182 | if (visit_optional(v, "bootfile" , &obj->has_bootfile)) { |
183 | visit_type_str(v, "bootfile" , &obj->bootfile, &err); |
184 | if (err) { |
185 | goto out; |
186 | } |
187 | } |
188 | if (visit_optional(v, "dhcpstart" , &obj->has_dhcpstart)) { |
189 | visit_type_str(v, "dhcpstart" , &obj->dhcpstart, &err); |
190 | if (err) { |
191 | goto out; |
192 | } |
193 | } |
194 | if (visit_optional(v, "dns" , &obj->has_dns)) { |
195 | visit_type_str(v, "dns" , &obj->dns, &err); |
196 | if (err) { |
197 | goto out; |
198 | } |
199 | } |
200 | if (visit_optional(v, "dnssearch" , &obj->has_dnssearch)) { |
201 | visit_type_StringList(v, "dnssearch" , &obj->dnssearch, &err); |
202 | if (err) { |
203 | goto out; |
204 | } |
205 | } |
206 | if (visit_optional(v, "domainname" , &obj->has_domainname)) { |
207 | visit_type_str(v, "domainname" , &obj->domainname, &err); |
208 | if (err) { |
209 | goto out; |
210 | } |
211 | } |
212 | if (visit_optional(v, "ipv6-prefix" , &obj->has_ipv6_prefix)) { |
213 | visit_type_str(v, "ipv6-prefix" , &obj->ipv6_prefix, &err); |
214 | if (err) { |
215 | goto out; |
216 | } |
217 | } |
218 | if (visit_optional(v, "ipv6-prefixlen" , &obj->has_ipv6_prefixlen)) { |
219 | visit_type_int(v, "ipv6-prefixlen" , &obj->ipv6_prefixlen, &err); |
220 | if (err) { |
221 | goto out; |
222 | } |
223 | } |
224 | if (visit_optional(v, "ipv6-host" , &obj->has_ipv6_host)) { |
225 | visit_type_str(v, "ipv6-host" , &obj->ipv6_host, &err); |
226 | if (err) { |
227 | goto out; |
228 | } |
229 | } |
230 | if (visit_optional(v, "ipv6-dns" , &obj->has_ipv6_dns)) { |
231 | visit_type_str(v, "ipv6-dns" , &obj->ipv6_dns, &err); |
232 | if (err) { |
233 | goto out; |
234 | } |
235 | } |
236 | if (visit_optional(v, "smb" , &obj->has_smb)) { |
237 | visit_type_str(v, "smb" , &obj->smb, &err); |
238 | if (err) { |
239 | goto out; |
240 | } |
241 | } |
242 | if (visit_optional(v, "smbserver" , &obj->has_smbserver)) { |
243 | visit_type_str(v, "smbserver" , &obj->smbserver, &err); |
244 | if (err) { |
245 | goto out; |
246 | } |
247 | } |
248 | if (visit_optional(v, "hostfwd" , &obj->has_hostfwd)) { |
249 | visit_type_StringList(v, "hostfwd" , &obj->hostfwd, &err); |
250 | if (err) { |
251 | goto out; |
252 | } |
253 | } |
254 | if (visit_optional(v, "guestfwd" , &obj->has_guestfwd)) { |
255 | visit_type_StringList(v, "guestfwd" , &obj->guestfwd, &err); |
256 | if (err) { |
257 | goto out; |
258 | } |
259 | } |
260 | if (visit_optional(v, "tftp-server-name" , &obj->has_tftp_server_name)) { |
261 | visit_type_str(v, "tftp-server-name" , &obj->tftp_server_name, &err); |
262 | if (err) { |
263 | goto out; |
264 | } |
265 | } |
266 | |
267 | out: |
268 | error_propagate(errp, err); |
269 | } |
270 | |
271 | void visit_type_NetdevUserOptions(Visitor *v, const char *name, NetdevUserOptions **obj, Error **errp) |
272 | { |
273 | Error *err = NULL; |
274 | |
275 | visit_start_struct(v, name, (void **)obj, sizeof(NetdevUserOptions), &err); |
276 | if (err) { |
277 | goto out; |
278 | } |
279 | if (!*obj) { |
280 | goto out_obj; |
281 | } |
282 | visit_type_NetdevUserOptions_members(v, *obj, &err); |
283 | if (err) { |
284 | goto out_obj; |
285 | } |
286 | visit_check_struct(v, &err); |
287 | out_obj: |
288 | visit_end_struct(v, (void **)obj); |
289 | if (err && visit_is_input(v)) { |
290 | qapi_free_NetdevUserOptions(*obj); |
291 | *obj = NULL; |
292 | } |
293 | out: |
294 | error_propagate(errp, err); |
295 | } |
296 | |
297 | void visit_type_NetdevTapOptions_members(Visitor *v, NetdevTapOptions *obj, Error **errp) |
298 | { |
299 | Error *err = NULL; |
300 | |
301 | if (visit_optional(v, "ifname" , &obj->has_ifname)) { |
302 | visit_type_str(v, "ifname" , &obj->ifname, &err); |
303 | if (err) { |
304 | goto out; |
305 | } |
306 | } |
307 | if (visit_optional(v, "fd" , &obj->has_fd)) { |
308 | visit_type_str(v, "fd" , &obj->fd, &err); |
309 | if (err) { |
310 | goto out; |
311 | } |
312 | } |
313 | if (visit_optional(v, "fds" , &obj->has_fds)) { |
314 | visit_type_str(v, "fds" , &obj->fds, &err); |
315 | if (err) { |
316 | goto out; |
317 | } |
318 | } |
319 | if (visit_optional(v, "script" , &obj->has_script)) { |
320 | visit_type_str(v, "script" , &obj->script, &err); |
321 | if (err) { |
322 | goto out; |
323 | } |
324 | } |
325 | if (visit_optional(v, "downscript" , &obj->has_downscript)) { |
326 | visit_type_str(v, "downscript" , &obj->downscript, &err); |
327 | if (err) { |
328 | goto out; |
329 | } |
330 | } |
331 | if (visit_optional(v, "br" , &obj->has_br)) { |
332 | visit_type_str(v, "br" , &obj->br, &err); |
333 | if (err) { |
334 | goto out; |
335 | } |
336 | } |
337 | if (visit_optional(v, "helper" , &obj->has_helper)) { |
338 | visit_type_str(v, "helper" , &obj->helper, &err); |
339 | if (err) { |
340 | goto out; |
341 | } |
342 | } |
343 | if (visit_optional(v, "sndbuf" , &obj->has_sndbuf)) { |
344 | visit_type_size(v, "sndbuf" , &obj->sndbuf, &err); |
345 | if (err) { |
346 | goto out; |
347 | } |
348 | } |
349 | if (visit_optional(v, "vnet_hdr" , &obj->has_vnet_hdr)) { |
350 | visit_type_bool(v, "vnet_hdr" , &obj->vnet_hdr, &err); |
351 | if (err) { |
352 | goto out; |
353 | } |
354 | } |
355 | if (visit_optional(v, "vhost" , &obj->has_vhost)) { |
356 | visit_type_bool(v, "vhost" , &obj->vhost, &err); |
357 | if (err) { |
358 | goto out; |
359 | } |
360 | } |
361 | if (visit_optional(v, "vhostfd" , &obj->has_vhostfd)) { |
362 | visit_type_str(v, "vhostfd" , &obj->vhostfd, &err); |
363 | if (err) { |
364 | goto out; |
365 | } |
366 | } |
367 | if (visit_optional(v, "vhostfds" , &obj->has_vhostfds)) { |
368 | visit_type_str(v, "vhostfds" , &obj->vhostfds, &err); |
369 | if (err) { |
370 | goto out; |
371 | } |
372 | } |
373 | if (visit_optional(v, "vhostforce" , &obj->has_vhostforce)) { |
374 | visit_type_bool(v, "vhostforce" , &obj->vhostforce, &err); |
375 | if (err) { |
376 | goto out; |
377 | } |
378 | } |
379 | if (visit_optional(v, "queues" , &obj->has_queues)) { |
380 | visit_type_uint32(v, "queues" , &obj->queues, &err); |
381 | if (err) { |
382 | goto out; |
383 | } |
384 | } |
385 | if (visit_optional(v, "poll-us" , &obj->has_poll_us)) { |
386 | visit_type_uint32(v, "poll-us" , &obj->poll_us, &err); |
387 | if (err) { |
388 | goto out; |
389 | } |
390 | } |
391 | |
392 | out: |
393 | error_propagate(errp, err); |
394 | } |
395 | |
396 | void visit_type_NetdevTapOptions(Visitor *v, const char *name, NetdevTapOptions **obj, Error **errp) |
397 | { |
398 | Error *err = NULL; |
399 | |
400 | visit_start_struct(v, name, (void **)obj, sizeof(NetdevTapOptions), &err); |
401 | if (err) { |
402 | goto out; |
403 | } |
404 | if (!*obj) { |
405 | goto out_obj; |
406 | } |
407 | visit_type_NetdevTapOptions_members(v, *obj, &err); |
408 | if (err) { |
409 | goto out_obj; |
410 | } |
411 | visit_check_struct(v, &err); |
412 | out_obj: |
413 | visit_end_struct(v, (void **)obj); |
414 | if (err && visit_is_input(v)) { |
415 | qapi_free_NetdevTapOptions(*obj); |
416 | *obj = NULL; |
417 | } |
418 | out: |
419 | error_propagate(errp, err); |
420 | } |
421 | |
422 | void visit_type_NetdevSocketOptions_members(Visitor *v, NetdevSocketOptions *obj, Error **errp) |
423 | { |
424 | Error *err = NULL; |
425 | |
426 | if (visit_optional(v, "fd" , &obj->has_fd)) { |
427 | visit_type_str(v, "fd" , &obj->fd, &err); |
428 | if (err) { |
429 | goto out; |
430 | } |
431 | } |
432 | if (visit_optional(v, "listen" , &obj->has_listen)) { |
433 | visit_type_str(v, "listen" , &obj->listen, &err); |
434 | if (err) { |
435 | goto out; |
436 | } |
437 | } |
438 | if (visit_optional(v, "connect" , &obj->has_connect)) { |
439 | visit_type_str(v, "connect" , &obj->connect, &err); |
440 | if (err) { |
441 | goto out; |
442 | } |
443 | } |
444 | if (visit_optional(v, "mcast" , &obj->has_mcast)) { |
445 | visit_type_str(v, "mcast" , &obj->mcast, &err); |
446 | if (err) { |
447 | goto out; |
448 | } |
449 | } |
450 | if (visit_optional(v, "localaddr" , &obj->has_localaddr)) { |
451 | visit_type_str(v, "localaddr" , &obj->localaddr, &err); |
452 | if (err) { |
453 | goto out; |
454 | } |
455 | } |
456 | if (visit_optional(v, "udp" , &obj->has_udp)) { |
457 | visit_type_str(v, "udp" , &obj->udp, &err); |
458 | if (err) { |
459 | goto out; |
460 | } |
461 | } |
462 | |
463 | out: |
464 | error_propagate(errp, err); |
465 | } |
466 | |
467 | void visit_type_NetdevSocketOptions(Visitor *v, const char *name, NetdevSocketOptions **obj, Error **errp) |
468 | { |
469 | Error *err = NULL; |
470 | |
471 | visit_start_struct(v, name, (void **)obj, sizeof(NetdevSocketOptions), &err); |
472 | if (err) { |
473 | goto out; |
474 | } |
475 | if (!*obj) { |
476 | goto out_obj; |
477 | } |
478 | visit_type_NetdevSocketOptions_members(v, *obj, &err); |
479 | if (err) { |
480 | goto out_obj; |
481 | } |
482 | visit_check_struct(v, &err); |
483 | out_obj: |
484 | visit_end_struct(v, (void **)obj); |
485 | if (err && visit_is_input(v)) { |
486 | qapi_free_NetdevSocketOptions(*obj); |
487 | *obj = NULL; |
488 | } |
489 | out: |
490 | error_propagate(errp, err); |
491 | } |
492 | |
493 | void visit_type_NetdevL2TPv3Options_members(Visitor *v, NetdevL2TPv3Options *obj, Error **errp) |
494 | { |
495 | Error *err = NULL; |
496 | |
497 | visit_type_str(v, "src" , &obj->src, &err); |
498 | if (err) { |
499 | goto out; |
500 | } |
501 | visit_type_str(v, "dst" , &obj->dst, &err); |
502 | if (err) { |
503 | goto out; |
504 | } |
505 | if (visit_optional(v, "srcport" , &obj->has_srcport)) { |
506 | visit_type_str(v, "srcport" , &obj->srcport, &err); |
507 | if (err) { |
508 | goto out; |
509 | } |
510 | } |
511 | if (visit_optional(v, "dstport" , &obj->has_dstport)) { |
512 | visit_type_str(v, "dstport" , &obj->dstport, &err); |
513 | if (err) { |
514 | goto out; |
515 | } |
516 | } |
517 | if (visit_optional(v, "ipv6" , &obj->has_ipv6)) { |
518 | visit_type_bool(v, "ipv6" , &obj->ipv6, &err); |
519 | if (err) { |
520 | goto out; |
521 | } |
522 | } |
523 | if (visit_optional(v, "udp" , &obj->has_udp)) { |
524 | visit_type_bool(v, "udp" , &obj->udp, &err); |
525 | if (err) { |
526 | goto out; |
527 | } |
528 | } |
529 | if (visit_optional(v, "cookie64" , &obj->has_cookie64)) { |
530 | visit_type_bool(v, "cookie64" , &obj->cookie64, &err); |
531 | if (err) { |
532 | goto out; |
533 | } |
534 | } |
535 | if (visit_optional(v, "counter" , &obj->has_counter)) { |
536 | visit_type_bool(v, "counter" , &obj->counter, &err); |
537 | if (err) { |
538 | goto out; |
539 | } |
540 | } |
541 | if (visit_optional(v, "pincounter" , &obj->has_pincounter)) { |
542 | visit_type_bool(v, "pincounter" , &obj->pincounter, &err); |
543 | if (err) { |
544 | goto out; |
545 | } |
546 | } |
547 | if (visit_optional(v, "txcookie" , &obj->has_txcookie)) { |
548 | visit_type_uint64(v, "txcookie" , &obj->txcookie, &err); |
549 | if (err) { |
550 | goto out; |
551 | } |
552 | } |
553 | if (visit_optional(v, "rxcookie" , &obj->has_rxcookie)) { |
554 | visit_type_uint64(v, "rxcookie" , &obj->rxcookie, &err); |
555 | if (err) { |
556 | goto out; |
557 | } |
558 | } |
559 | visit_type_uint32(v, "txsession" , &obj->txsession, &err); |
560 | if (err) { |
561 | goto out; |
562 | } |
563 | if (visit_optional(v, "rxsession" , &obj->has_rxsession)) { |
564 | visit_type_uint32(v, "rxsession" , &obj->rxsession, &err); |
565 | if (err) { |
566 | goto out; |
567 | } |
568 | } |
569 | if (visit_optional(v, "offset" , &obj->has_offset)) { |
570 | visit_type_uint32(v, "offset" , &obj->offset, &err); |
571 | if (err) { |
572 | goto out; |
573 | } |
574 | } |
575 | |
576 | out: |
577 | error_propagate(errp, err); |
578 | } |
579 | |
580 | void visit_type_NetdevL2TPv3Options(Visitor *v, const char *name, NetdevL2TPv3Options **obj, Error **errp) |
581 | { |
582 | Error *err = NULL; |
583 | |
584 | visit_start_struct(v, name, (void **)obj, sizeof(NetdevL2TPv3Options), &err); |
585 | if (err) { |
586 | goto out; |
587 | } |
588 | if (!*obj) { |
589 | goto out_obj; |
590 | } |
591 | visit_type_NetdevL2TPv3Options_members(v, *obj, &err); |
592 | if (err) { |
593 | goto out_obj; |
594 | } |
595 | visit_check_struct(v, &err); |
596 | out_obj: |
597 | visit_end_struct(v, (void **)obj); |
598 | if (err && visit_is_input(v)) { |
599 | qapi_free_NetdevL2TPv3Options(*obj); |
600 | *obj = NULL; |
601 | } |
602 | out: |
603 | error_propagate(errp, err); |
604 | } |
605 | |
606 | void visit_type_NetdevVdeOptions_members(Visitor *v, NetdevVdeOptions *obj, Error **errp) |
607 | { |
608 | Error *err = NULL; |
609 | |
610 | if (visit_optional(v, "sock" , &obj->has_sock)) { |
611 | visit_type_str(v, "sock" , &obj->sock, &err); |
612 | if (err) { |
613 | goto out; |
614 | } |
615 | } |
616 | if (visit_optional(v, "port" , &obj->has_port)) { |
617 | visit_type_uint16(v, "port" , &obj->port, &err); |
618 | if (err) { |
619 | goto out; |
620 | } |
621 | } |
622 | if (visit_optional(v, "group" , &obj->has_group)) { |
623 | visit_type_str(v, "group" , &obj->group, &err); |
624 | if (err) { |
625 | goto out; |
626 | } |
627 | } |
628 | if (visit_optional(v, "mode" , &obj->has_mode)) { |
629 | visit_type_uint16(v, "mode" , &obj->mode, &err); |
630 | if (err) { |
631 | goto out; |
632 | } |
633 | } |
634 | |
635 | out: |
636 | error_propagate(errp, err); |
637 | } |
638 | |
639 | void visit_type_NetdevVdeOptions(Visitor *v, const char *name, NetdevVdeOptions **obj, Error **errp) |
640 | { |
641 | Error *err = NULL; |
642 | |
643 | visit_start_struct(v, name, (void **)obj, sizeof(NetdevVdeOptions), &err); |
644 | if (err) { |
645 | goto out; |
646 | } |
647 | if (!*obj) { |
648 | goto out_obj; |
649 | } |
650 | visit_type_NetdevVdeOptions_members(v, *obj, &err); |
651 | if (err) { |
652 | goto out_obj; |
653 | } |
654 | visit_check_struct(v, &err); |
655 | out_obj: |
656 | visit_end_struct(v, (void **)obj); |
657 | if (err && visit_is_input(v)) { |
658 | qapi_free_NetdevVdeOptions(*obj); |
659 | *obj = NULL; |
660 | } |
661 | out: |
662 | error_propagate(errp, err); |
663 | } |
664 | |
665 | void visit_type_NetdevBridgeOptions_members(Visitor *v, NetdevBridgeOptions *obj, Error **errp) |
666 | { |
667 | Error *err = NULL; |
668 | |
669 | if (visit_optional(v, "br" , &obj->has_br)) { |
670 | visit_type_str(v, "br" , &obj->br, &err); |
671 | if (err) { |
672 | goto out; |
673 | } |
674 | } |
675 | if (visit_optional(v, "helper" , &obj->has_helper)) { |
676 | visit_type_str(v, "helper" , &obj->helper, &err); |
677 | if (err) { |
678 | goto out; |
679 | } |
680 | } |
681 | |
682 | out: |
683 | error_propagate(errp, err); |
684 | } |
685 | |
686 | void visit_type_NetdevBridgeOptions(Visitor *v, const char *name, NetdevBridgeOptions **obj, Error **errp) |
687 | { |
688 | Error *err = NULL; |
689 | |
690 | visit_start_struct(v, name, (void **)obj, sizeof(NetdevBridgeOptions), &err); |
691 | if (err) { |
692 | goto out; |
693 | } |
694 | if (!*obj) { |
695 | goto out_obj; |
696 | } |
697 | visit_type_NetdevBridgeOptions_members(v, *obj, &err); |
698 | if (err) { |
699 | goto out_obj; |
700 | } |
701 | visit_check_struct(v, &err); |
702 | out_obj: |
703 | visit_end_struct(v, (void **)obj); |
704 | if (err && visit_is_input(v)) { |
705 | qapi_free_NetdevBridgeOptions(*obj); |
706 | *obj = NULL; |
707 | } |
708 | out: |
709 | error_propagate(errp, err); |
710 | } |
711 | |
712 | void visit_type_NetdevHubPortOptions_members(Visitor *v, NetdevHubPortOptions *obj, Error **errp) |
713 | { |
714 | Error *err = NULL; |
715 | |
716 | visit_type_int32(v, "hubid" , &obj->hubid, &err); |
717 | if (err) { |
718 | goto out; |
719 | } |
720 | if (visit_optional(v, "netdev" , &obj->has_netdev)) { |
721 | visit_type_str(v, "netdev" , &obj->netdev, &err); |
722 | if (err) { |
723 | goto out; |
724 | } |
725 | } |
726 | |
727 | out: |
728 | error_propagate(errp, err); |
729 | } |
730 | |
731 | void visit_type_NetdevHubPortOptions(Visitor *v, const char *name, NetdevHubPortOptions **obj, Error **errp) |
732 | { |
733 | Error *err = NULL; |
734 | |
735 | visit_start_struct(v, name, (void **)obj, sizeof(NetdevHubPortOptions), &err); |
736 | if (err) { |
737 | goto out; |
738 | } |
739 | if (!*obj) { |
740 | goto out_obj; |
741 | } |
742 | visit_type_NetdevHubPortOptions_members(v, *obj, &err); |
743 | if (err) { |
744 | goto out_obj; |
745 | } |
746 | visit_check_struct(v, &err); |
747 | out_obj: |
748 | visit_end_struct(v, (void **)obj); |
749 | if (err && visit_is_input(v)) { |
750 | qapi_free_NetdevHubPortOptions(*obj); |
751 | *obj = NULL; |
752 | } |
753 | out: |
754 | error_propagate(errp, err); |
755 | } |
756 | |
757 | void visit_type_NetdevNetmapOptions_members(Visitor *v, NetdevNetmapOptions *obj, Error **errp) |
758 | { |
759 | Error *err = NULL; |
760 | |
761 | visit_type_str(v, "ifname" , &obj->ifname, &err); |
762 | if (err) { |
763 | goto out; |
764 | } |
765 | if (visit_optional(v, "devname" , &obj->has_devname)) { |
766 | visit_type_str(v, "devname" , &obj->devname, &err); |
767 | if (err) { |
768 | goto out; |
769 | } |
770 | } |
771 | |
772 | out: |
773 | error_propagate(errp, err); |
774 | } |
775 | |
776 | void visit_type_NetdevNetmapOptions(Visitor *v, const char *name, NetdevNetmapOptions **obj, Error **errp) |
777 | { |
778 | Error *err = NULL; |
779 | |
780 | visit_start_struct(v, name, (void **)obj, sizeof(NetdevNetmapOptions), &err); |
781 | if (err) { |
782 | goto out; |
783 | } |
784 | if (!*obj) { |
785 | goto out_obj; |
786 | } |
787 | visit_type_NetdevNetmapOptions_members(v, *obj, &err); |
788 | if (err) { |
789 | goto out_obj; |
790 | } |
791 | visit_check_struct(v, &err); |
792 | out_obj: |
793 | visit_end_struct(v, (void **)obj); |
794 | if (err && visit_is_input(v)) { |
795 | qapi_free_NetdevNetmapOptions(*obj); |
796 | *obj = NULL; |
797 | } |
798 | out: |
799 | error_propagate(errp, err); |
800 | } |
801 | |
802 | void visit_type_NetdevVhostUserOptions_members(Visitor *v, NetdevVhostUserOptions *obj, Error **errp) |
803 | { |
804 | Error *err = NULL; |
805 | |
806 | visit_type_str(v, "chardev" , &obj->chardev, &err); |
807 | if (err) { |
808 | goto out; |
809 | } |
810 | if (visit_optional(v, "vhostforce" , &obj->has_vhostforce)) { |
811 | visit_type_bool(v, "vhostforce" , &obj->vhostforce, &err); |
812 | if (err) { |
813 | goto out; |
814 | } |
815 | } |
816 | if (visit_optional(v, "queues" , &obj->has_queues)) { |
817 | visit_type_int(v, "queues" , &obj->queues, &err); |
818 | if (err) { |
819 | goto out; |
820 | } |
821 | } |
822 | |
823 | out: |
824 | error_propagate(errp, err); |
825 | } |
826 | |
827 | void visit_type_NetdevVhostUserOptions(Visitor *v, const char *name, NetdevVhostUserOptions **obj, Error **errp) |
828 | { |
829 | Error *err = NULL; |
830 | |
831 | visit_start_struct(v, name, (void **)obj, sizeof(NetdevVhostUserOptions), &err); |
832 | if (err) { |
833 | goto out; |
834 | } |
835 | if (!*obj) { |
836 | goto out_obj; |
837 | } |
838 | visit_type_NetdevVhostUserOptions_members(v, *obj, &err); |
839 | if (err) { |
840 | goto out_obj; |
841 | } |
842 | visit_check_struct(v, &err); |
843 | out_obj: |
844 | visit_end_struct(v, (void **)obj); |
845 | if (err && visit_is_input(v)) { |
846 | qapi_free_NetdevVhostUserOptions(*obj); |
847 | *obj = NULL; |
848 | } |
849 | out: |
850 | error_propagate(errp, err); |
851 | } |
852 | |
853 | void visit_type_NetClientDriver(Visitor *v, const char *name, NetClientDriver *obj, Error **errp) |
854 | { |
855 | int value = *obj; |
856 | visit_type_enum(v, name, &value, &NetClientDriver_lookup, errp); |
857 | *obj = value; |
858 | } |
859 | |
860 | void visit_type_q_obj_Netdev_base_members(Visitor *v, q_obj_Netdev_base *obj, Error **errp) |
861 | { |
862 | Error *err = NULL; |
863 | |
864 | visit_type_str(v, "id" , &obj->id, &err); |
865 | if (err) { |
866 | goto out; |
867 | } |
868 | visit_type_NetClientDriver(v, "type" , &obj->type, &err); |
869 | if (err) { |
870 | goto out; |
871 | } |
872 | |
873 | out: |
874 | error_propagate(errp, err); |
875 | } |
876 | |
877 | void visit_type_Netdev_members(Visitor *v, Netdev *obj, Error **errp) |
878 | { |
879 | Error *err = NULL; |
880 | |
881 | visit_type_q_obj_Netdev_base_members(v, (q_obj_Netdev_base *)obj, &err); |
882 | if (err) { |
883 | goto out; |
884 | } |
885 | switch (obj->type) { |
886 | case NET_CLIENT_DRIVER_NIC: |
887 | visit_type_NetLegacyNicOptions_members(v, &obj->u.nic, &err); |
888 | break; |
889 | case NET_CLIENT_DRIVER_USER: |
890 | visit_type_NetdevUserOptions_members(v, &obj->u.user, &err); |
891 | break; |
892 | case NET_CLIENT_DRIVER_TAP: |
893 | visit_type_NetdevTapOptions_members(v, &obj->u.tap, &err); |
894 | break; |
895 | case NET_CLIENT_DRIVER_L2TPV3: |
896 | visit_type_NetdevL2TPv3Options_members(v, &obj->u.l2tpv3, &err); |
897 | break; |
898 | case NET_CLIENT_DRIVER_SOCKET: |
899 | visit_type_NetdevSocketOptions_members(v, &obj->u.socket, &err); |
900 | break; |
901 | case NET_CLIENT_DRIVER_VDE: |
902 | visit_type_NetdevVdeOptions_members(v, &obj->u.vde, &err); |
903 | break; |
904 | case NET_CLIENT_DRIVER_BRIDGE: |
905 | visit_type_NetdevBridgeOptions_members(v, &obj->u.bridge, &err); |
906 | break; |
907 | case NET_CLIENT_DRIVER_HUBPORT: |
908 | visit_type_NetdevHubPortOptions_members(v, &obj->u.hubport, &err); |
909 | break; |
910 | case NET_CLIENT_DRIVER_NETMAP: |
911 | visit_type_NetdevNetmapOptions_members(v, &obj->u.netmap, &err); |
912 | break; |
913 | case NET_CLIENT_DRIVER_VHOST_USER: |
914 | visit_type_NetdevVhostUserOptions_members(v, &obj->u.vhost_user, &err); |
915 | break; |
916 | case NET_CLIENT_DRIVER_NONE: |
917 | break; |
918 | default: |
919 | abort(); |
920 | } |
921 | |
922 | out: |
923 | error_propagate(errp, err); |
924 | } |
925 | |
926 | void visit_type_Netdev(Visitor *v, const char *name, Netdev **obj, Error **errp) |
927 | { |
928 | Error *err = NULL; |
929 | |
930 | visit_start_struct(v, name, (void **)obj, sizeof(Netdev), &err); |
931 | if (err) { |
932 | goto out; |
933 | } |
934 | if (!*obj) { |
935 | goto out_obj; |
936 | } |
937 | visit_type_Netdev_members(v, *obj, &err); |
938 | if (err) { |
939 | goto out_obj; |
940 | } |
941 | visit_check_struct(v, &err); |
942 | out_obj: |
943 | visit_end_struct(v, (void **)obj); |
944 | if (err && visit_is_input(v)) { |
945 | qapi_free_Netdev(*obj); |
946 | *obj = NULL; |
947 | } |
948 | out: |
949 | error_propagate(errp, err); |
950 | } |
951 | |
952 | void visit_type_NetLegacy_members(Visitor *v, NetLegacy *obj, Error **errp) |
953 | { |
954 | Error *err = NULL; |
955 | |
956 | if (visit_optional(v, "id" , &obj->has_id)) { |
957 | visit_type_str(v, "id" , &obj->id, &err); |
958 | if (err) { |
959 | goto out; |
960 | } |
961 | } |
962 | if (visit_optional(v, "name" , &obj->has_name)) { |
963 | visit_type_str(v, "name" , &obj->name, &err); |
964 | if (err) { |
965 | goto out; |
966 | } |
967 | } |
968 | visit_type_NetLegacyOptions(v, "opts" , &obj->opts, &err); |
969 | if (err) { |
970 | goto out; |
971 | } |
972 | |
973 | out: |
974 | error_propagate(errp, err); |
975 | } |
976 | |
977 | void visit_type_NetLegacy(Visitor *v, const char *name, NetLegacy **obj, Error **errp) |
978 | { |
979 | Error *err = NULL; |
980 | |
981 | visit_start_struct(v, name, (void **)obj, sizeof(NetLegacy), &err); |
982 | if (err) { |
983 | goto out; |
984 | } |
985 | if (!*obj) { |
986 | goto out_obj; |
987 | } |
988 | visit_type_NetLegacy_members(v, *obj, &err); |
989 | if (err) { |
990 | goto out_obj; |
991 | } |
992 | visit_check_struct(v, &err); |
993 | out_obj: |
994 | visit_end_struct(v, (void **)obj); |
995 | if (err && visit_is_input(v)) { |
996 | qapi_free_NetLegacy(*obj); |
997 | *obj = NULL; |
998 | } |
999 | out: |
1000 | error_propagate(errp, err); |
1001 | } |
1002 | |
1003 | void visit_type_NetLegacyOptionsType(Visitor *v, const char *name, NetLegacyOptionsType *obj, Error **errp) |
1004 | { |
1005 | int value = *obj; |
1006 | visit_type_enum(v, name, &value, &NetLegacyOptionsType_lookup, errp); |
1007 | *obj = value; |
1008 | } |
1009 | |
1010 | void visit_type_q_obj_NetLegacyOptions_base_members(Visitor *v, q_obj_NetLegacyOptions_base *obj, Error **errp) |
1011 | { |
1012 | Error *err = NULL; |
1013 | |
1014 | visit_type_NetLegacyOptionsType(v, "type" , &obj->type, &err); |
1015 | if (err) { |
1016 | goto out; |
1017 | } |
1018 | |
1019 | out: |
1020 | error_propagate(errp, err); |
1021 | } |
1022 | |
1023 | void visit_type_NetLegacyOptions_members(Visitor *v, NetLegacyOptions *obj, Error **errp) |
1024 | { |
1025 | Error *err = NULL; |
1026 | |
1027 | visit_type_q_obj_NetLegacyOptions_base_members(v, (q_obj_NetLegacyOptions_base *)obj, &err); |
1028 | if (err) { |
1029 | goto out; |
1030 | } |
1031 | switch (obj->type) { |
1032 | case NET_LEGACY_OPTIONS_TYPE_NIC: |
1033 | visit_type_NetLegacyNicOptions_members(v, &obj->u.nic, &err); |
1034 | break; |
1035 | case NET_LEGACY_OPTIONS_TYPE_USER: |
1036 | visit_type_NetdevUserOptions_members(v, &obj->u.user, &err); |
1037 | break; |
1038 | case NET_LEGACY_OPTIONS_TYPE_TAP: |
1039 | visit_type_NetdevTapOptions_members(v, &obj->u.tap, &err); |
1040 | break; |
1041 | case NET_LEGACY_OPTIONS_TYPE_L2TPV3: |
1042 | visit_type_NetdevL2TPv3Options_members(v, &obj->u.l2tpv3, &err); |
1043 | break; |
1044 | case NET_LEGACY_OPTIONS_TYPE_SOCKET: |
1045 | visit_type_NetdevSocketOptions_members(v, &obj->u.socket, &err); |
1046 | break; |
1047 | case NET_LEGACY_OPTIONS_TYPE_VDE: |
1048 | visit_type_NetdevVdeOptions_members(v, &obj->u.vde, &err); |
1049 | break; |
1050 | case NET_LEGACY_OPTIONS_TYPE_BRIDGE: |
1051 | visit_type_NetdevBridgeOptions_members(v, &obj->u.bridge, &err); |
1052 | break; |
1053 | case NET_LEGACY_OPTIONS_TYPE_NETMAP: |
1054 | visit_type_NetdevNetmapOptions_members(v, &obj->u.netmap, &err); |
1055 | break; |
1056 | case NET_LEGACY_OPTIONS_TYPE_VHOST_USER: |
1057 | visit_type_NetdevVhostUserOptions_members(v, &obj->u.vhost_user, &err); |
1058 | break; |
1059 | case NET_LEGACY_OPTIONS_TYPE_NONE: |
1060 | break; |
1061 | default: |
1062 | abort(); |
1063 | } |
1064 | |
1065 | out: |
1066 | error_propagate(errp, err); |
1067 | } |
1068 | |
1069 | void visit_type_NetLegacyOptions(Visitor *v, const char *name, NetLegacyOptions **obj, Error **errp) |
1070 | { |
1071 | Error *err = NULL; |
1072 | |
1073 | visit_start_struct(v, name, (void **)obj, sizeof(NetLegacyOptions), &err); |
1074 | if (err) { |
1075 | goto out; |
1076 | } |
1077 | if (!*obj) { |
1078 | goto out_obj; |
1079 | } |
1080 | visit_type_NetLegacyOptions_members(v, *obj, &err); |
1081 | if (err) { |
1082 | goto out_obj; |
1083 | } |
1084 | visit_check_struct(v, &err); |
1085 | out_obj: |
1086 | visit_end_struct(v, (void **)obj); |
1087 | if (err && visit_is_input(v)) { |
1088 | qapi_free_NetLegacyOptions(*obj); |
1089 | *obj = NULL; |
1090 | } |
1091 | out: |
1092 | error_propagate(errp, err); |
1093 | } |
1094 | |
1095 | void visit_type_NetFilterDirection(Visitor *v, const char *name, NetFilterDirection *obj, Error **errp) |
1096 | { |
1097 | int value = *obj; |
1098 | visit_type_enum(v, name, &value, &NetFilterDirection_lookup, errp); |
1099 | *obj = value; |
1100 | } |
1101 | |
1102 | void visit_type_RxState(Visitor *v, const char *name, RxState *obj, Error **errp) |
1103 | { |
1104 | int value = *obj; |
1105 | visit_type_enum(v, name, &value, &RxState_lookup, errp); |
1106 | *obj = value; |
1107 | } |
1108 | |
1109 | void visit_type_RxFilterInfo_members(Visitor *v, RxFilterInfo *obj, Error **errp) |
1110 | { |
1111 | Error *err = NULL; |
1112 | |
1113 | visit_type_str(v, "name" , &obj->name, &err); |
1114 | if (err) { |
1115 | goto out; |
1116 | } |
1117 | visit_type_bool(v, "promiscuous" , &obj->promiscuous, &err); |
1118 | if (err) { |
1119 | goto out; |
1120 | } |
1121 | visit_type_RxState(v, "multicast" , &obj->multicast, &err); |
1122 | if (err) { |
1123 | goto out; |
1124 | } |
1125 | visit_type_RxState(v, "unicast" , &obj->unicast, &err); |
1126 | if (err) { |
1127 | goto out; |
1128 | } |
1129 | visit_type_RxState(v, "vlan" , &obj->vlan, &err); |
1130 | if (err) { |
1131 | goto out; |
1132 | } |
1133 | visit_type_bool(v, "broadcast-allowed" , &obj->broadcast_allowed, &err); |
1134 | if (err) { |
1135 | goto out; |
1136 | } |
1137 | visit_type_bool(v, "multicast-overflow" , &obj->multicast_overflow, &err); |
1138 | if (err) { |
1139 | goto out; |
1140 | } |
1141 | visit_type_bool(v, "unicast-overflow" , &obj->unicast_overflow, &err); |
1142 | if (err) { |
1143 | goto out; |
1144 | } |
1145 | visit_type_str(v, "main-mac" , &obj->main_mac, &err); |
1146 | if (err) { |
1147 | goto out; |
1148 | } |
1149 | visit_type_intList(v, "vlan-table" , &obj->vlan_table, &err); |
1150 | if (err) { |
1151 | goto out; |
1152 | } |
1153 | visit_type_strList(v, "unicast-table" , &obj->unicast_table, &err); |
1154 | if (err) { |
1155 | goto out; |
1156 | } |
1157 | visit_type_strList(v, "multicast-table" , &obj->multicast_table, &err); |
1158 | if (err) { |
1159 | goto out; |
1160 | } |
1161 | |
1162 | out: |
1163 | error_propagate(errp, err); |
1164 | } |
1165 | |
1166 | void visit_type_RxFilterInfo(Visitor *v, const char *name, RxFilterInfo **obj, Error **errp) |
1167 | { |
1168 | Error *err = NULL; |
1169 | |
1170 | visit_start_struct(v, name, (void **)obj, sizeof(RxFilterInfo), &err); |
1171 | if (err) { |
1172 | goto out; |
1173 | } |
1174 | if (!*obj) { |
1175 | goto out_obj; |
1176 | } |
1177 | visit_type_RxFilterInfo_members(v, *obj, &err); |
1178 | if (err) { |
1179 | goto out_obj; |
1180 | } |
1181 | visit_check_struct(v, &err); |
1182 | out_obj: |
1183 | visit_end_struct(v, (void **)obj); |
1184 | if (err && visit_is_input(v)) { |
1185 | qapi_free_RxFilterInfo(*obj); |
1186 | *obj = NULL; |
1187 | } |
1188 | out: |
1189 | error_propagate(errp, err); |
1190 | } |
1191 | |
1192 | void visit_type_q_obj_query_rx_filter_arg_members(Visitor *v, q_obj_query_rx_filter_arg *obj, Error **errp) |
1193 | { |
1194 | Error *err = NULL; |
1195 | |
1196 | if (visit_optional(v, "name" , &obj->has_name)) { |
1197 | visit_type_str(v, "name" , &obj->name, &err); |
1198 | if (err) { |
1199 | goto out; |
1200 | } |
1201 | } |
1202 | |
1203 | out: |
1204 | error_propagate(errp, err); |
1205 | } |
1206 | |
1207 | void visit_type_RxFilterInfoList(Visitor *v, const char *name, RxFilterInfoList **obj, Error **errp) |
1208 | { |
1209 | Error *err = NULL; |
1210 | RxFilterInfoList *tail; |
1211 | size_t size = sizeof(**obj); |
1212 | |
1213 | visit_start_list(v, name, (GenericList **)obj, size, &err); |
1214 | if (err) { |
1215 | goto out; |
1216 | } |
1217 | |
1218 | for (tail = *obj; tail; |
1219 | tail = (RxFilterInfoList *)visit_next_list(v, (GenericList *)tail, size)) { |
1220 | visit_type_RxFilterInfo(v, NULL, &tail->value, &err); |
1221 | if (err) { |
1222 | break; |
1223 | } |
1224 | } |
1225 | |
1226 | if (!err) { |
1227 | visit_check_list(v, &err); |
1228 | } |
1229 | visit_end_list(v, (void **)obj); |
1230 | if (err && visit_is_input(v)) { |
1231 | qapi_free_RxFilterInfoList(*obj); |
1232 | *obj = NULL; |
1233 | } |
1234 | out: |
1235 | error_propagate(errp, err); |
1236 | } |
1237 | |
1238 | void visit_type_q_obj_NIC_RX_FILTER_CHANGED_arg_members(Visitor *v, q_obj_NIC_RX_FILTER_CHANGED_arg *obj, Error **errp) |
1239 | { |
1240 | Error *err = NULL; |
1241 | |
1242 | if (visit_optional(v, "name" , &obj->has_name)) { |
1243 | visit_type_str(v, "name" , &obj->name, &err); |
1244 | if (err) { |
1245 | goto out; |
1246 | } |
1247 | } |
1248 | visit_type_str(v, "path" , &obj->path, &err); |
1249 | if (err) { |
1250 | goto out; |
1251 | } |
1252 | |
1253 | out: |
1254 | error_propagate(errp, err); |
1255 | } |
1256 | |
1257 | void visit_type_AnnounceParameters_members(Visitor *v, AnnounceParameters *obj, Error **errp) |
1258 | { |
1259 | Error *err = NULL; |
1260 | |
1261 | visit_type_int(v, "initial" , &obj->initial, &err); |
1262 | if (err) { |
1263 | goto out; |
1264 | } |
1265 | visit_type_int(v, "max" , &obj->max, &err); |
1266 | if (err) { |
1267 | goto out; |
1268 | } |
1269 | visit_type_int(v, "rounds" , &obj->rounds, &err); |
1270 | if (err) { |
1271 | goto out; |
1272 | } |
1273 | visit_type_int(v, "step" , &obj->step, &err); |
1274 | if (err) { |
1275 | goto out; |
1276 | } |
1277 | if (visit_optional(v, "interfaces" , &obj->has_interfaces)) { |
1278 | visit_type_strList(v, "interfaces" , &obj->interfaces, &err); |
1279 | if (err) { |
1280 | goto out; |
1281 | } |
1282 | } |
1283 | if (visit_optional(v, "id" , &obj->has_id)) { |
1284 | visit_type_str(v, "id" , &obj->id, &err); |
1285 | if (err) { |
1286 | goto out; |
1287 | } |
1288 | } |
1289 | |
1290 | out: |
1291 | error_propagate(errp, err); |
1292 | } |
1293 | |
1294 | void visit_type_AnnounceParameters(Visitor *v, const char *name, AnnounceParameters **obj, Error **errp) |
1295 | { |
1296 | Error *err = NULL; |
1297 | |
1298 | visit_start_struct(v, name, (void **)obj, sizeof(AnnounceParameters), &err); |
1299 | if (err) { |
1300 | goto out; |
1301 | } |
1302 | if (!*obj) { |
1303 | goto out_obj; |
1304 | } |
1305 | visit_type_AnnounceParameters_members(v, *obj, &err); |
1306 | if (err) { |
1307 | goto out_obj; |
1308 | } |
1309 | visit_check_struct(v, &err); |
1310 | out_obj: |
1311 | visit_end_struct(v, (void **)obj); |
1312 | if (err && visit_is_input(v)) { |
1313 | qapi_free_AnnounceParameters(*obj); |
1314 | *obj = NULL; |
1315 | } |
1316 | out: |
1317 | error_propagate(errp, err); |
1318 | } |
1319 | |
1320 | /* Dummy declaration to prevent empty .o file */ |
1321 | char qapi_dummy_qapi_visit_net_c; |
1322 | |