Revision 8172539d hw/virtio-net.c
b/hw/virtio-net.c | ||
---|---|---|
147 | 147 |
return n->has_ufo; |
148 | 148 |
} |
149 | 149 |
|
150 |
static uint32_t virtio_net_get_features(VirtIODevice *vdev) |
|
150 |
static uint32_t virtio_net_get_features(VirtIODevice *vdev, uint32_t features)
|
|
151 | 151 |
{ |
152 | 152 |
VirtIONet *n = to_virtio_net(vdev); |
153 |
uint32_t features = (1 << VIRTIO_NET_F_MAC) | |
|
154 |
(1 << VIRTIO_NET_F_MRG_RXBUF) | |
|
155 |
(1 << VIRTIO_NET_F_STATUS) | |
|
156 |
(1 << VIRTIO_NET_F_CTRL_VQ) | |
|
157 |
(1 << VIRTIO_NET_F_CTRL_RX) | |
|
158 |
(1 << VIRTIO_NET_F_CTRL_VLAN) | |
|
159 |
(1 << VIRTIO_NET_F_CTRL_RX_EXTRA); |
|
160 | 153 |
|
161 | 154 |
if (peer_has_vnet_hdr(n)) { |
162 | 155 |
tap_using_vnet_hdr(n->nic->nc.peer, 1); |
156 |
} else { |
|
157 |
features &= ~(0x1 << VIRTIO_NET_F_CSUM); |
|
158 |
features &= ~(0x1 << VIRTIO_NET_F_HOST_TSO4); |
|
159 |
features &= ~(0x1 << VIRTIO_NET_F_HOST_TSO6); |
|
160 |
features &= ~(0x1 << VIRTIO_NET_F_HOST_ECN); |
|
161 |
|
|
162 |
features &= ~(0x1 << VIRTIO_NET_F_GUEST_CSUM); |
|
163 |
features &= ~(0x1 << VIRTIO_NET_F_GUEST_TSO4); |
|
164 |
features &= ~(0x1 << VIRTIO_NET_F_GUEST_TSO6); |
|
165 |
features &= ~(0x1 << VIRTIO_NET_F_GUEST_ECN); |
|
166 |
} |
|
163 | 167 |
|
164 |
features |= (1 << VIRTIO_NET_F_CSUM); |
|
165 |
features |= (1 << VIRTIO_NET_F_HOST_TSO4); |
|
166 |
features |= (1 << VIRTIO_NET_F_HOST_TSO6); |
|
167 |
features |= (1 << VIRTIO_NET_F_HOST_ECN); |
|
168 |
|
|
169 |
features |= (1 << VIRTIO_NET_F_GUEST_CSUM); |
|
170 |
features |= (1 << VIRTIO_NET_F_GUEST_TSO4); |
|
171 |
features |= (1 << VIRTIO_NET_F_GUEST_TSO6); |
|
172 |
features |= (1 << VIRTIO_NET_F_GUEST_ECN); |
|
173 |
|
|
174 |
if (peer_has_ufo(n)) { |
|
175 |
features |= (1 << VIRTIO_NET_F_GUEST_UFO); |
|
176 |
features |= (1 << VIRTIO_NET_F_HOST_UFO); |
|
177 |
} |
|
168 |
if (!peer_has_vnet_hdr(n) || !peer_has_ufo(n)) { |
|
169 |
features &= ~(0x1 << VIRTIO_NET_F_GUEST_UFO); |
|
170 |
features &= ~(0x1 << VIRTIO_NET_F_HOST_UFO); |
|
178 | 171 |
} |
179 | 172 |
|
180 | 173 |
return features; |
... | ... | |
192 | 185 |
features |= (1 << VIRTIO_NET_F_HOST_TSO6); |
193 | 186 |
features |= (1 << VIRTIO_NET_F_HOST_ECN); |
194 | 187 |
|
195 |
return features & virtio_net_get_features(vdev);
|
|
188 |
return features; |
|
196 | 189 |
} |
197 | 190 |
|
198 | 191 |
static void virtio_net_set_features(VirtIODevice *vdev, uint32_t features) |
Also available in: Unified diff