1
2
3
4
5
6
7
8
9#ifndef QEMU_NET_FILTER_H
10#define QEMU_NET_FILTER_H
11
12#include "qom/object.h"
13#include "qemu-common.h"
14#include "net/queue.h"
15
16#define TYPE_NETFILTER "netfilter"
17#define NETFILTER(obj) \
18 OBJECT_CHECK(NetFilterState, (obj), TYPE_NETFILTER)
19#define NETFILTER_GET_CLASS(obj) \
20 OBJECT_GET_CLASS(NetFilterClass, (obj), TYPE_NETFILTER)
21#define NETFILTER_CLASS(klass) \
22 OBJECT_CLASS_CHECK(NetFilterClass, (klass), TYPE_NETFILTER)
23
24typedef void (FilterSetup) (NetFilterState *nf, Error **errp);
25typedef void (FilterCleanup) (NetFilterState *nf);
26
27
28
29
30
31typedef ssize_t (FilterReceiveIOV)(NetFilterState *nc,
32 NetClientState *sender,
33 unsigned flags,
34 const struct iovec *iov,
35 int iovcnt,
36 NetPacketSent *sent_cb);
37
38typedef void (FilterStatusChanged) (NetFilterState *nf, Error **errp);
39
40typedef struct NetFilterClass {
41 ObjectClass parent_class;
42
43
44 FilterSetup *setup;
45 FilterCleanup *cleanup;
46 FilterStatusChanged *status_changed;
47
48 FilterReceiveIOV *receive_iov;
49} NetFilterClass;
50
51
52struct NetFilterState {
53
54 Object parent;
55
56
57 char *netdev_id;
58 NetClientState *netdev;
59 NetFilterDirection direction;
60 bool on;
61 QTAILQ_ENTRY(NetFilterState) next;
62};
63
64ssize_t qemu_netfilter_receive(NetFilterState *nf,
65 NetFilterDirection direction,
66 NetClientState *sender,
67 unsigned flags,
68 const struct iovec *iov,
69 int iovcnt,
70 NetPacketSent *sent_cb);
71
72
73ssize_t qemu_netfilter_pass_to_next(NetClientState *sender,
74 unsigned flags,
75 const struct iovec *iov,
76 int iovcnt,
77 void *opaque);
78
79#endif
80