1
2
3
4
5
6
7
8
9#ifndef QEMU_NET_FILTER_H
10#define QEMU_NET_FILTER_H
11
12#include "qapi/qapi-types-net.h"
13#include "qom/object.h"
14#include "qemu-common.h"
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
25typedef void (FilterSetup) (NetFilterState *nf, Error **errp);
26typedef void (FilterCleanup) (NetFilterState *nf);
27
28
29
30
31
32typedef ssize_t (FilterReceiveIOV)(NetFilterState *nc,
33 NetClientState *sender,
34 unsigned flags,
35 const struct iovec *iov,
36 int iovcnt,
37 NetPacketSent *sent_cb);
38
39typedef void (FilterStatusChanged) (NetFilterState *nf, Error **errp);
40
41typedef struct NetFilterClass {
42 ObjectClass parent_class;
43
44
45 FilterSetup *setup;
46 FilterCleanup *cleanup;
47 FilterStatusChanged *status_changed;
48
49 FilterReceiveIOV *receive_iov;
50} NetFilterClass;
51
52
53struct NetFilterState {
54
55 Object parent;
56
57
58 char *netdev_id;
59 NetClientState *netdev;
60 NetFilterDirection direction;
61 bool on;
62 QTAILQ_ENTRY(NetFilterState) next;
63};
64
65ssize_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
73
74ssize_t qemu_netfilter_pass_to_next(NetClientState *sender,
75 unsigned flags,
76 const struct iovec *iov,
77 int iovcnt,
78 void *opaque);
79
80#endif
81