Revision 35277d14 hw/vhost_net.c
b/hw/vhost_net.c | ||
---|---|---|
42 | 42 |
struct vhost_dev dev; |
43 | 43 |
struct vhost_virtqueue vqs[2]; |
44 | 44 |
int backend; |
45 |
NetClientState *vc;
|
|
45 |
NetClientState *nc;
|
|
46 | 46 |
}; |
47 | 47 |
|
48 | 48 |
unsigned vhost_net_get_features(struct vhost_net *net, unsigned features) |
... | ... | |
104 | 104 |
if (r < 0) { |
105 | 105 |
goto fail; |
106 | 106 |
} |
107 |
net->vc = backend;
|
|
107 |
net->nc = backend;
|
|
108 | 108 |
net->dev.backend_features = tap_has_vnet_hdr(backend) ? 0 : |
109 | 109 |
(1 << VHOST_NET_F_VIRTIO_NET_HDR); |
110 | 110 |
net->backend = r; |
... | ... | |
151 | 151 |
goto fail_notifiers; |
152 | 152 |
} |
153 | 153 |
if (net->dev.acked_features & (1 << VIRTIO_NET_F_MRG_RXBUF)) { |
154 |
tap_set_vnet_hdr_len(net->vc,
|
|
154 |
tap_set_vnet_hdr_len(net->nc,
|
|
155 | 155 |
sizeof(struct virtio_net_hdr_mrg_rxbuf)); |
156 | 156 |
} |
157 | 157 |
|
... | ... | |
160 | 160 |
goto fail_start; |
161 | 161 |
} |
162 | 162 |
|
163 |
net->vc->info->poll(net->vc, false);
|
|
163 |
net->nc->info->poll(net->nc, false);
|
|
164 | 164 |
qemu_set_fd_handler(net->backend, NULL, NULL, NULL); |
165 | 165 |
file.fd = net->backend; |
166 | 166 |
for (file.index = 0; file.index < net->dev.nvqs; ++file.index) { |
... | ... | |
177 | 177 |
int r = ioctl(net->dev.control, VHOST_NET_SET_BACKEND, &file); |
178 | 178 |
assert(r >= 0); |
179 | 179 |
} |
180 |
net->vc->info->poll(net->vc, true);
|
|
180 |
net->nc->info->poll(net->nc, true);
|
|
181 | 181 |
vhost_dev_stop(&net->dev, dev); |
182 | 182 |
if (net->dev.acked_features & (1 << VIRTIO_NET_F_MRG_RXBUF)) { |
183 |
tap_set_vnet_hdr_len(net->vc, sizeof(struct virtio_net_hdr));
|
|
183 |
tap_set_vnet_hdr_len(net->nc, sizeof(struct virtio_net_hdr));
|
|
184 | 184 |
} |
185 | 185 |
fail_start: |
186 | 186 |
vhost_dev_disable_notifiers(&net->dev, dev); |
... | ... | |
197 | 197 |
int r = ioctl(net->dev.control, VHOST_NET_SET_BACKEND, &file); |
198 | 198 |
assert(r >= 0); |
199 | 199 |
} |
200 |
net->vc->info->poll(net->vc, true);
|
|
200 |
net->nc->info->poll(net->nc, true);
|
|
201 | 201 |
vhost_dev_stop(&net->dev, dev); |
202 | 202 |
if (net->dev.acked_features & (1 << VIRTIO_NET_F_MRG_RXBUF)) { |
203 |
tap_set_vnet_hdr_len(net->vc, sizeof(struct virtio_net_hdr));
|
|
203 |
tap_set_vnet_hdr_len(net->nc, sizeof(struct virtio_net_hdr));
|
|
204 | 204 |
} |
205 | 205 |
vhost_dev_disable_notifiers(&net->dev, dev); |
206 | 206 |
} |
... | ... | |
209 | 209 |
{ |
210 | 210 |
vhost_dev_cleanup(&net->dev); |
211 | 211 |
if (net->dev.acked_features & (1 << VIRTIO_NET_F_MRG_RXBUF)) { |
212 |
tap_set_vnet_hdr_len(net->vc, sizeof(struct virtio_net_hdr));
|
|
212 |
tap_set_vnet_hdr_len(net->nc, sizeof(struct virtio_net_hdr));
|
|
213 | 213 |
} |
214 | 214 |
g_free(net); |
215 | 215 |
} |
Also available in: Unified diff