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

queue.h (3299B)


      1/*
      2 * Copyright (c) 2003-2008 Fabrice Bellard
      3 * Copyright (c) 2009 Red Hat, Inc.
      4 *
      5 * Permission is hereby granted, free of charge, to any person obtaining a copy
      6 * of this software and associated documentation files (the "Software"), to deal
      7 * in the Software without restriction, including without limitation the rights
      8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      9 * copies of the Software, and to permit persons to whom the Software is
     10 * furnished to do so, subject to the following conditions:
     11 *
     12 * The above copyright notice and this permission notice shall be included in
     13 * all copies or substantial portions of the Software.
     14 *
     15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
     18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
     21 * THE SOFTWARE.
     22 */
     23
     24#ifndef QEMU_NET_QUEUE_H
     25#define QEMU_NET_QUEUE_H
     26
     27
     28typedef struct NetPacket NetPacket;
     29typedef struct NetQueue NetQueue;
     30
     31typedef void (NetPacketSent) (NetClientState *sender, ssize_t ret);
     32
     33#define QEMU_NET_PACKET_FLAG_NONE  0
     34#define QEMU_NET_PACKET_FLAG_RAW  (1<<0)
     35
     36/* Returns:
     37 *   >0 - success
     38 *    0 - queue packet for future redelivery
     39 *   <0 - failure (discard packet)
     40 */
     41typedef ssize_t (NetQueueDeliverFunc)(NetClientState *sender,
     42                                      unsigned flags,
     43                                      const struct iovec *iov,
     44                                      int iovcnt,
     45                                      void *opaque);
     46
     47NetQueue *qemu_new_net_queue(NetQueueDeliverFunc *deliver, void *opaque);
     48
     49void qemu_net_queue_append_iov(NetQueue *queue,
     50                               NetClientState *sender,
     51                               unsigned flags,
     52                               const struct iovec *iov,
     53                               int iovcnt,
     54                               NetPacketSent *sent_cb);
     55
     56void qemu_del_net_queue(NetQueue *queue);
     57
     58ssize_t qemu_net_queue_receive(NetQueue *queue,
     59                               const uint8_t *data,
     60                               size_t size);
     61
     62ssize_t qemu_net_queue_receive_iov(NetQueue *queue,
     63                                   const struct iovec *iov,
     64                                   int iovcnt);
     65
     66ssize_t qemu_net_queue_send(NetQueue *queue,
     67                            NetClientState *sender,
     68                            unsigned flags,
     69                            const uint8_t *data,
     70                            size_t size,
     71                            NetPacketSent *sent_cb);
     72
     73ssize_t qemu_net_queue_send_iov(NetQueue *queue,
     74                                NetClientState *sender,
     75                                unsigned flags,
     76                                const struct iovec *iov,
     77                                int iovcnt,
     78                                NetPacketSent *sent_cb);
     79
     80void qemu_net_queue_purge(NetQueue *queue, NetClientState *from);
     81bool qemu_net_queue_flush(NetQueue *queue);
     82
     83#endif /* QEMU_NET_QUEUE_H */