]>
Commit | Line | Data |
---|---|---|
fdccce45 YH |
1 | /* |
2 | * Copyright (c) 2015 FUJITSU LIMITED | |
3 | * Author: Yang Hongyang <yanghy@cn.fujitsu.com> | |
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" |
dc5e9ac7 | 13 | #include "qemu/queue.h" |
fdccce45 | 14 | #include "qom/object.h" |
fdccce45 YH |
15 | #include "net/queue.h" |
16 | ||
17 | #define TYPE_NETFILTER "netfilter" | |
a489d195 | 18 | OBJECT_DECLARE_TYPE(NetFilterState, NetFilterClass, NETFILTER) |
fdccce45 YH |
19 | |
20 | typedef void (FilterSetup) (NetFilterState *nf, Error **errp); | |
21 | typedef void (FilterCleanup) (NetFilterState *nf); | |
22 | /* | |
23 | * Return: | |
24 | * 0: finished handling the packet, we should continue | |
25 | * size: filter stolen this packet, we stop pass this packet further | |
26 | */ | |
27 | typedef ssize_t (FilterReceiveIOV)(NetFilterState *nc, | |
28 | NetClientState *sender, | |
29 | unsigned flags, | |
30 | const struct iovec *iov, | |
31 | int iovcnt, | |
32 | NetPacketSent *sent_cb); | |
33 | ||
338d3f41 HZ |
34 | typedef void (FilterStatusChanged) (NetFilterState *nf, Error **errp); |
35 | ||
5fbba3d6 ZC |
36 | typedef void (FilterHandleEvent) (NetFilterState *nf, int event, Error **errp); |
37 | ||
db1015e9 | 38 | struct NetFilterClass { |
fdccce45 YH |
39 | ObjectClass parent_class; |
40 | ||
41 | /* optional */ | |
42 | FilterSetup *setup; | |
43 | FilterCleanup *cleanup; | |
338d3f41 | 44 | FilterStatusChanged *status_changed; |
5fbba3d6 | 45 | FilterHandleEvent *handle_event; |
fdccce45 YH |
46 | /* mandatory */ |
47 | FilterReceiveIOV *receive_iov; | |
db1015e9 | 48 | }; |
fdccce45 YH |
49 | |
50 | ||
51 | struct NetFilterState { | |
52 | /* private */ | |
53 | Object parent; | |
54 | ||
55 | /* protected */ | |
56 | char *netdev_id; | |
57 | NetClientState *netdev; | |
58 | NetFilterDirection direction; | |
338d3f41 | 59 | bool on; |
19731365 LS |
60 | char *position; |
61 | bool insert_before_flag; | |
fdccce45 YH |
62 | QTAILQ_ENTRY(NetFilterState) next; |
63 | }; | |
64 | ||
e64c770d YH |
65 | ssize_t qemu_netfilter_receive(NetFilterState *nf, |
66 | NetFilterDirection direction, | |
67 | NetClientState *sender, | |
68 | unsigned flags, | |
69 | const struct iovec *iov, | |
70 | int iovcnt, | |
71 | NetPacketSent *sent_cb); | |
72 | ||
7ef7bc85 YH |
73 | /* pass the packet to the next filter */ |
74 | ssize_t qemu_netfilter_pass_to_next(NetClientState *sender, | |
75 | unsigned flags, | |
76 | const struct iovec *iov, | |
77 | int iovcnt, | |
78 | void *opaque); | |
79 | ||
5fbba3d6 ZC |
80 | void colo_notify_filters_event(int event, Error **errp); |
81 | ||
fdccce45 | 82 | #endif /* QEMU_NET_FILTER_H */ |