struct vring_avail *avail;
struct vring_used *used;
uint32_t size;
- uint16_t vhost_hlen;
/* Last index used on the available ring */
volatile uint16_t last_used_idx;
- /* Used for multiple devices reserving buffers */
- volatile uint16_t last_used_idx_res;
#define VIRTIO_INVALID_EVENTFD (-1)
#define VIRTIO_UNINITIALIZED_EVENTFD (-2)
/* Physical address of used ring, for logging */
uint64_t log_guest_addr;
- uint64_t reserved[15];
- struct buf_vector buf_vec[BUF_VECTOR_MAX];
} __rte_cache_aligned;
/* Old kernels have no such macro defined */
uint64_t protocol_features;
int vid;
uint32_t flags;
+ uint16_t vhost_hlen;
+ /* to tell if we need broadcast rarp packet */
+ rte_atomic16_t broadcast_rarp;
+ uint32_t virt_qp_nb;
+ struct vhost_virtqueue *virtqueue[VHOST_MAX_QUEUE_PAIRS * 2];
#define IF_NAME_SZ (PATH_MAX > IFNAMSIZ ? PATH_MAX : IFNAMSIZ)
char ifname[IF_NAME_SZ];
- uint32_t virt_qp_nb;
- void *priv;
uint64_t log_size;
uint64_t log_base;
+ uint64_t log_addr;
struct ether_addr mac;
- /* to tell if we need broadcast rarp packet */
- rte_atomic16_t broadcast_rarp;
- uint64_t reserved[61];
- struct vhost_virtqueue *virtqueue[VHOST_MAX_QUEUE_PAIRS * 2];
} __rte_cache_aligned;
/**
return vhost_va;
}
+struct virtio_net_device_ops const *notify_ops;
+struct virtio_net *get_device(int vid);
+
int vhost_new_device(void);
void vhost_destroy_device(int);