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"
  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 */
  83