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

rocker.h (2543B)


      1/*
      2 * QEMU rocker switch emulation
      3 *
      4 * Copyright (c) 2014 Scott Feldman <sfeldma@gmail.com>
      5 * Copyright (c) 2014 Jiri Pirko <jiri@resnulli.us>
      6 * Copyright (c) 2014 Neil Horman <nhorman@tuxdriver.com>
      7 *
      8 * This program is free software; you can redistribute it and/or modify
      9 * it under the terms of the GNU General Public License as published by
     10 * the Free Software Foundation; either version 2 of the License, or
     11 * (at your option) any later version.
     12 *
     13 * This program is distributed in the hope that it will be useful,
     14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     16 * GNU General Public License for more details.
     17 */
     18
     19#ifndef ROCKER_H
     20#define ROCKER_H
     21
     22#include "qemu/sockets.h"
     23#include "qom/object.h"
     24
     25#if defined(DEBUG_ROCKER)
     26#  define DPRINTF(fmt, ...) \
     27    do {                                                           \
     28        g_autoptr(GDateTime) now = g_date_time_new_now_local();    \
     29        g_autofree char *nowstr = g_date_time_format(now, "%T.%f");\
     30        fprintf(stderr, "%s ROCKER: " fmt, nowstr, ## __VA_ARGS__);\
     31    } while (0)
     32#else
     33static inline GCC_FMT_ATTR(1, 2) int DPRINTF(const char *fmt, ...)
     34{
     35    return 0;
     36}
     37#endif
     38
     39#define __le16 uint16_t
     40#define __le32 uint32_t
     41#define __le64 uint64_t
     42
     43#define __be16 uint16_t
     44#define __be32 uint32_t
     45#define __be64 uint64_t
     46
     47static inline bool ipv4_addr_is_multicast(__be32 addr)
     48{
     49    return (addr & htonl(0xf0000000)) == htonl(0xe0000000);
     50}
     51
     52typedef struct ipv6_addr {
     53    union {
     54        uint8_t addr8[16];
     55        __be16 addr16[8];
     56        __be32 addr32[4];
     57    };
     58} Ipv6Addr;
     59
     60static inline bool ipv6_addr_is_multicast(const Ipv6Addr *addr)
     61{
     62    return (addr->addr32[0] & htonl(0xFF000000)) == htonl(0xFF000000);
     63}
     64
     65typedef struct world World;
     66typedef struct desc_info DescInfo;
     67typedef struct desc_ring DescRing;
     68
     69#define TYPE_ROCKER "rocker"
     70typedef struct rocker Rocker;
     71DECLARE_INSTANCE_CHECKER(Rocker, ROCKER,
     72                         TYPE_ROCKER)
     73
     74Rocker *rocker_find(const char *name);
     75uint32_t rocker_fp_ports(Rocker *r);
     76int rocker_event_link_changed(Rocker *r, uint32_t pport, bool link_up);
     77int rocker_event_mac_vlan_seen(Rocker *r, uint32_t pport, uint8_t *addr,
     78                               uint16_t vlan_id);
     79int rx_produce(World *world, uint32_t pport,
     80               const struct iovec *iov, int iovcnt, uint8_t copy_to_cpu);
     81int rocker_port_eg(Rocker *r, uint32_t pport,
     82                   const struct iovec *iov, int iovcnt);
     83
     84#endif /* ROCKER_H */