]> git.proxmox.com Git - mirror_qemu.git/blame - include/net/filter.h
Merge remote-tracking branch 'remotes/thuth-gitlab/tags/pull-request-2021-09-06'...
[mirror_qemu.git] / include / net / filter.h
CommitLineData
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 18OBJECT_DECLARE_TYPE(NetFilterState, NetFilterClass, NETFILTER)
fdccce45
YH
19
20typedef void (FilterSetup) (NetFilterState *nf, Error **errp);
21typedef 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 */
27typedef 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
34typedef void (FilterStatusChanged) (NetFilterState *nf, Error **errp);
35
5fbba3d6
ZC
36typedef void (FilterHandleEvent) (NetFilterState *nf, int event, Error **errp);
37
db1015e9 38struct 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
51struct 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
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
7ef7bc85
YH
73/* pass the packet to the next filter */
74ssize_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
80void colo_notify_filters_event(int event, Error **errp);
81
fdccce45 82#endif /* QEMU_NET_FILTER_H */