cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

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