xref: /qemu/include/net/vhost_net.h (revision 8aab0d1dbe90c7b5ac6672a1a09b0578178f5f4c)
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