1d5970055SMichael S. Tsirkin #ifndef VHOST_NET_H 2d5970055SMichael S. Tsirkin #define VHOST_NET_H 3d5970055SMichael S. Tsirkin 41422e32dSPaolo Bonzini #include "net/net.h" 51a1bfac9SNikolay Nikolaev #include "hw/virtio/vhost-backend.h" 6d5970055SMichael S. Tsirkin 746d4d36dSJay Zhou #define VHOST_NET_INIT_FAILED \ 846d4d36dSJay Zhou "vhost-net requested but could not be initialized" 946d4d36dSJay Zhou 10d5970055SMichael S. Tsirkin struct vhost_net; 11d5970055SMichael S. Tsirkin typedef struct vhost_net VHostNetState; 12d5970055SMichael S. Tsirkin 1381647a65SNikolay Nikolaev typedef struct VhostNetOptions { 141a1bfac9SNikolay Nikolaev VhostBackendType backend_type; 1581647a65SNikolay Nikolaev NetClientState *net_backend; 1669e87b32SJason Wang uint32_t busyloop_timeout; 176a756d14SJason Wang unsigned int nvqs; 1881647a65SNikolay Nikolaev void *opaque; 1981647a65SNikolay Nikolaev } VhostNetOptions; 2081647a65SNikolay Nikolaev 21e2051e9eSYuanhan Liu uint64_t vhost_net_get_max_queues(VHostNetState *net); 2281647a65SNikolay Nikolaev struct vhost_net *vhost_net_init(VhostNetOptions *options); 23d5970055SMichael S. Tsirkin 2405ba3f63SJason Wang int vhost_net_start(VirtIODevice *dev, NetClientState *ncs, 2505ba3f63SJason Wang int data_queue_pairs, int cvq); 2605ba3f63SJason Wang void vhost_net_stop(VirtIODevice *dev, NetClientState *ncs, 2705ba3f63SJason Wang int data_queue_pairs, int cvq); 28d5970055SMichael S. Tsirkin 29d5970055SMichael S. Tsirkin void vhost_net_cleanup(VHostNetState *net); 30d5970055SMichael S. Tsirkin 319a2ba823SCornelia Huck uint64_t vhost_net_get_features(VHostNetState *net, uint64_t features); 329a2ba823SCornelia Huck void vhost_net_ack_features(VHostNetState *net, uint64_t features); 33d5970055SMichael S. Tsirkin 3438140cc4SCindy Lu int vhost_net_get_config(struct vhost_net *net, uint8_t *config, 3538140cc4SCindy Lu uint32_t config_len); 3638140cc4SCindy Lu 3738140cc4SCindy Lu int vhost_net_set_config(struct vhost_net *net, const uint8_t *data, 3838140cc4SCindy Lu uint32_t offset, uint32_t size, uint32_t flags); 39f56a1247SMichael S. Tsirkin bool vhost_net_virtqueue_pending(VHostNetState *net, int n); 40f56a1247SMichael S. Tsirkin void vhost_net_virtqueue_mask(VHostNetState *net, VirtIODevice *dev, 41f56a1247SMichael S. Tsirkin int idx, bool mask); 42*8aab0d1dSCindy Lu bool vhost_net_config_pending(VHostNetState *net); 43*8aab0d1dSCindy Lu void vhost_net_config_mask(VHostNetState *net, VirtIODevice *dev, bool mask); 443e866365SThibaut Collet int vhost_net_notify_migration_done(VHostNetState *net, char* mac_addr); 45ed8b4afeSNikolay Nikolaev VHostNetState *get_vhost_net(NetClientState *nc); 467263a0adSChangchun Ouyang 477263a0adSChangchun Ouyang int vhost_set_vring_enable(NetClientState * nc, int enable); 48a463215bSMarc-André Lureau 49a463215bSMarc-André Lureau uint64_t vhost_net_get_acked_features(VHostNetState *net); 50a463215bSMarc-André Lureau 5145a368adSMaxime Coquelin int vhost_net_set_mtu(struct vhost_net *net, uint16_t mtu); 5245a368adSMaxime Coquelin 53c2daa08eSKangjie Xu void vhost_net_virtqueue_reset(VirtIODevice *vdev, NetClientState *nc, 54c2daa08eSKangjie Xu int vq_index); 5510f8a115SKangjie Xu int vhost_net_virtqueue_restart(VirtIODevice *vdev, NetClientState *nc, 5610f8a115SKangjie Xu int vq_index); 57c9bdc449SHyman Huang(黄勇) 58c9bdc449SHyman Huang(黄勇) void vhost_net_save_acked_features(NetClientState *nc); 59d5970055SMichael S. Tsirkin #endif 60