filter.h (2538B)
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 12#include "qapi/qapi-types-net.h" 13#include "qemu/queue.h" 14#include "qom/object.h" 15#include "net/queue.h" 16 17#define TYPE_NETFILTER "netfilter" 18OBJECT_DECLARE_TYPE(NetFilterState, NetFilterClass, NETFILTER) 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 34typedef void (FilterStatusChanged) (NetFilterState *nf, Error **errp); 35 36typedef void (FilterHandleEvent) (NetFilterState *nf, int event, Error **errp); 37 38struct NetFilterClass { 39 ObjectClass parent_class; 40 41 /* optional */ 42 FilterSetup *setup; 43 FilterCleanup *cleanup; 44 FilterStatusChanged *status_changed; 45 FilterHandleEvent *handle_event; 46 /* mandatory */ 47 FilterReceiveIOV *receive_iov; 48}; 49 50 51struct NetFilterState { 52 /* private */ 53 Object parent; 54 55 /* protected */ 56 char *netdev_id; 57 NetClientState *netdev; 58 NetFilterDirection direction; 59 bool on; 60 char *position; 61 bool insert_before_flag; 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/* 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 80void colo_notify_filters_event(int event, Error **errp); 81 82#endif /* QEMU_NET_FILTER_H */