qemu/include/net/filter.h
<<
>>
Prefs
   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 "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 * Return:
  28 *   0: finished handling the packet, we should continue
  29 *   size: filter stolen this packet, we stop pass this packet further
  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    /* optional */
  44    FilterSetup *setup;
  45    FilterCleanup *cleanup;
  46    FilterStatusChanged *status_changed;
  47    /* mandatory */
  48    FilterReceiveIOV *receive_iov;
  49} NetFilterClass;
  50
  51
  52struct NetFilterState {
  53    /* private */
  54    Object parent;
  55
  56    /* protected */
  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/* pass the packet to the next filter */
  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 /* QEMU_NET_FILTER_H */
  80