qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

rocker.h (2544B)


      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
     33 static inline G_GNUC_PRINTF(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 
     47 static inline bool ipv4_addr_is_multicast(__be32 addr)
     48 {
     49     return (addr & htonl(0xf0000000)) == htonl(0xe0000000);
     50 }
     51 
     52 typedef struct ipv6_addr {
     53     union {
     54         uint8_t addr8[16];
     55         __be16 addr16[8];
     56         __be32 addr32[4];
     57     };
     58 } Ipv6Addr;
     59 
     60 static inline bool ipv6_addr_is_multicast(const Ipv6Addr *addr)
     61 {
     62     return (addr->addr32[0] & htonl(0xFF000000)) == htonl(0xFF000000);
     63 }
     64 
     65 typedef struct world World;
     66 typedef struct desc_info DescInfo;
     67 typedef struct desc_ring DescRing;
     68 
     69 #define TYPE_ROCKER "rocker"
     70 typedef struct rocker Rocker;
     71 DECLARE_INSTANCE_CHECKER(Rocker, ROCKER,
     72                          TYPE_ROCKER)
     73 
     74 Rocker *rocker_find(const char *name);
     75 uint32_t rocker_fp_ports(Rocker *r);
     76 int rocker_event_link_changed(Rocker *r, uint32_t pport, bool link_up);
     77 int rocker_event_mac_vlan_seen(Rocker *r, uint32_t pport, uint8_t *addr,
     78                                uint16_t vlan_id);
     79 int rx_produce(World *world, uint32_t pport,
     80                const struct iovec *iov, int iovcnt, uint8_t copy_to_cpu);
     81 int rocker_port_eg(Rocker *r, uint32_t pport,
     82                    const struct iovec *iov, int iovcnt);
     83 
     84 #endif /* ROCKER_H */