#ifndef _VIRTIO_NET_H_
#define _VIRTIO_NET_H_
#include "mevent.h"
#include "net_backends.h"
typedef struct virtio_net_ctrl_hdr {
uint8_t vnch_class;
uint8_t vnch_command;
} __packed virtio_net_ctrl_hdr_t;
typedef struct virtio_net_ctrl_mac {
uint32_t vncm_entries;
ether_addr_t vncm_mac;
} __packed virtio_net_ctrl_mac_t;
typedef struct virtio_net_ctrl_mq {
uint16_t virtqueue_pairs;
} __packed virtio_net_ctrl_mq_t;
#define VIRTIO_NET_CTRL_RX 0
#define VIRTIO_NET_CTRL_MAC 1
#define VIRTIO_NET_CTRL_VLAN 2
#define VIRTIO_NET_CTRL_ANNOUNCE 3
#define VIRTIO_NET_CTRL_MQ 4
#define VIRTIO_NET_CTRL_RX_PROMISC 0
#define VIRTIO_NET_CTRL_RX_ALLMULTI 1
#define VIRTIO_NET_CTRL_RX_ALLUNI 2
#define VIRTIO_NET_CTRL_RX_NOMULTI 3
#define VIRTIO_NET_CTRL_RX_NOUNI 4
#define VIRTIO_NET_CTRL_RX_NOBCAST 5
#define VIRTIO_NET_CTRL_MAC_TABLE_SET 0
#define VIRTIO_NET_CTRL_MAC_ADDR_SET 1
#define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET 0
#define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN 1
#define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX 0x8000
#define VIRTIO_NET_CQ_OK 0
#define VIRTIO_NET_CQ_ERR 1
#endif