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 "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"
  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 * Return:
  29 *   0: finished handling the packet, we should continue
  30 *   size: filter stolen this packet, we stop pass this packet further
  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 void (FilterHandleEvent) (NetFilterState *nf, int event, Error **errp);
  42
  43typedef struct NetFilterClass {
  44    ObjectClass parent_class;
  45
  46    /* optional */
  47    FilterSetup *setup;
  48    FilterCleanup *cleanup;
  49    FilterStatusChanged *status_changed;
  50    FilterHandleEvent *handle_event;
  51    /* mandatory */
  52    FilterReceiveIOV *receive_iov;
  53} NetFilterClass;
  54
  55
  56struct NetFilterState {
  57    /* private */
  58    Object parent;
  59
  60    /* protected */
  61    char *netdev_id;
  62    NetClientState *netdev;
  63    NetFilterDirection direction;
  64    bool on;
  65    QTAILQ_ENTRY(NetFilterState) next;
  66};
  67
  68ssize_t qemu_netfilter_receive(NetFilterState *nf,
  69                               NetFilterDirection direction,
  70                               NetClientState *sender,
  71                               unsigned flags,
  72                               const struct iovec *iov,
  73                               int iovcnt,
  74                               NetPacketSent *sent_cb);
  75
  76/* pass the packet to the next filter */
  77ssize_t qemu_netfilter_pass_to_next(NetClientState *sender,
  78                                    unsigned flags,
  79                                    const struct iovec *iov,
  80                                    int iovcnt,
  81                                    void *opaque);
  82
  83void colo_notify_filters_event(int event, Error **errp);
  84
  85#endif /* QEMU_NET_FILTER_H */
  86