]>
Commit | Line | Data |
---|---|---|
fdccce45 YH |
1 | /* |
2 | * Copyright (c) 2015 FUJITSU LIMITED | |
3 | * Author: Yang Hongyang <[email protected]> | |
4 | * | |
5 | * This work is licensed under the terms of the GNU GPL, version 2 or | |
6 | * later. See the COPYING file in the top-level directory. | |
7 | */ | |
8 | ||
9 | #ifndef QEMU_NET_FILTER_H | |
10 | #define QEMU_NET_FILTER_H | |
11 | ||
9af23989 | 12 | #include "qapi/qapi-types-net.h" |
fdccce45 YH |
13 | #include "qom/object.h" |
14 | #include "qemu-common.h" | |
fdccce45 YH |
15 | #include "net/queue.h" |
16 | ||
17 | #define TYPE_NETFILTER "netfilter" | |
18 | #define NETFILTER(obj) \ | |
19 | OBJECT_CHECK(NetFilterState, (obj), TYPE_NETFILTER) | |
20 | #define NETFILTER_GET_CLASS(obj) \ | |
21 | OBJECT_GET_CLASS(NetFilterClass, (obj), TYPE_NETFILTER) | |
22 | #define NETFILTER_CLASS(klass) \ | |
23 | OBJECT_CLASS_CHECK(NetFilterClass, (klass), TYPE_NETFILTER) | |
24 | ||
25 | typedef void (FilterSetup) (NetFilterState *nf, Error **errp); | |
26 | typedef void (FilterCleanup) (NetFilterState *nf); | |
27 | /* | |
28 | * Return: | |
29 | * 0: finished handling the packet, we should continue | |
30 | * size: filter stolen this packet, we stop pass this packet further | |
31 | */ | |
32 | typedef ssize_t (FilterReceiveIOV)(NetFilterState *nc, | |
33 | NetClientState *sender, | |
34 | unsigned flags, | |
35 | const struct iovec *iov, | |
36 | int iovcnt, | |
37 | NetPacketSent *sent_cb); | |
38 | ||
338d3f41 HZ |
39 | typedef void (FilterStatusChanged) (NetFilterState *nf, Error **errp); |
40 | ||
5fbba3d6 ZC |
41 | typedef void (FilterHandleEvent) (NetFilterState *nf, int event, Error **errp); |
42 | ||
fdccce45 YH |
43 | typedef struct NetFilterClass { |
44 | ObjectClass parent_class; | |
45 | ||
46 | /* optional */ | |
47 | FilterSetup *setup; | |
48 | FilterCleanup *cleanup; | |
338d3f41 | 49 | FilterStatusChanged *status_changed; |
5fbba3d6 | 50 | FilterHandleEvent *handle_event; |
fdccce45 YH |
51 | /* mandatory */ |
52 | FilterReceiveIOV *receive_iov; | |
53 | } NetFilterClass; | |
54 | ||
55 | ||
56 | struct NetFilterState { | |
57 | /* private */ | |
58 | Object parent; | |
59 | ||
60 | /* protected */ | |
61 | char *netdev_id; | |
62 | NetClientState *netdev; | |
63 | NetFilterDirection direction; | |
338d3f41 | 64 | bool on; |
fdccce45 YH |
65 | QTAILQ_ENTRY(NetFilterState) next; |
66 | }; | |
67 | ||
e64c770d YH |
68 | ssize_t qemu_netfilter_receive(NetFilterState *nf, |
69 | NetFilterDirection direction, | |
70 | NetClientState *sender, | |
71 | unsigned flags, | |
72 | const struct iovec *iov, | |
73 | int iovcnt, | |
74 | NetPacketSent *sent_cb); | |
75 | ||
7ef7bc85 YH |
76 | /* pass the packet to the next filter */ |
77 | ssize_t qemu_netfilter_pass_to_next(NetClientState *sender, | |
78 | unsigned flags, | |
79 | const struct iovec *iov, | |
80 | int iovcnt, | |
81 | void *opaque); | |
82 | ||
5fbba3d6 ZC |
83 | void colo_notify_filters_event(int event, Error **errp); |
84 | ||
fdccce45 | 85 | #endif /* QEMU_NET_FILTER_H */ |