如果vi->big_packets开启则调用receive_big():skb = page_to_skb(rq, page, 0),分配一个skb,注意其数据缓冲区长度只有128字节,用于存放virt_net_hdr。由于第一个描述符内的内容是virtio_net_hdr,所以将virtio_net_hdr拷贝到skb中。如果支持GSO/GRO即vi->big_packets开启则此处收到的描述符是一个链表,链表...
virtio-net需要两个virtqueue分别用于网络报文的发送和接收。virtio-net中的buffer也有一个header,用于传递checksum offload和segmentation offload。 struct virtio_net_hdr { // Use csum_start, csum_offset #define VIRTIO_NET_HDR_F_NEEDS_CSUM 1 __u8 flags; #define VIRTIO_NET_HDR_GSO_NONE 0 #define VIR...
代码语言:javascript 代码运行次数:0 运行 AI代码解释 struct VirtIONetPCI{VirtIOPCIProxy parent_obj;VirtIONet vdev;}; virtqueue实现了数据共享,它并不关心到底是网络还是存储数据,所以要在它的buf最前面加上设备类型自己的元数据头,virtio-net-pci用了virtio_net_hdr。 代码语言:javascript 代码运行次数:0 运行...
TYPE_VIRTIO_NET层的class_init函数是virtio_net_class_init,它定义了DeviceClass的realize函数为virtio_net_device_realize,这一点和存储块设备是一样的,如下所示: staticvoidvirtio_net_device_realize(DeviceState *dev, Error **errp) {VirtIODevice*vdev = VIRTIO_DEVICE(dev); VirtIONet *n =VIRTIO_NET(d...
virtio-net 是前端组件,运行在 guest 的内核空间。 vhost-net 是后端组件,运行在 host 的内核空间。 需要注意几点: vhost-net 与 virtio-net 均运行在 host 与 guest 的内核空间,因此我们有时也称其为 vhost-net/virtio-net 驱动。 我们在前端和后端之间拥有独立的控制面和数据面。vhost-net 使用 vhost 协议...
static int vhost_net_init(void) { if (experimental_zcopytx) vhost_net_enable_zcopy(VHOST_NET_VQ_TX); return misc_register(&vhost_net_misc); } module_init(vhost_net_init); static void vhost_net_exit(void) { misc_deregister(&vhost_net_misc); } module_exit(vhost_net_exit); MODULE...
return NETDEV_TX_OK; 在start_xmit()中,主要的操作是使数据包入vring队列: static int xmit_skb(struct send_queue *sq, struct sk_buff *skb) struct skb_vnet_hdr *hdr; const unsigned char *dest = (struct ethhdr *)skb- 22、data)-h_dest; struct virtnet_info *vi = sq-vq-vdev-priv;...
在设备方面 virtio spec 1.2 新支持了一些设备: virtio-pmem,virtio-fs, virtio-rpmb...一些主流的设备也支持了一些新的特性,比如 virtio-net 增加了这些新的特性: UDP segmentation offload Receive Side Scaling Per-packet hash reporting Guest hdrlen optimization Link ...
一些主流的设备也支持了一些新的特性,比如 virtio-net 增加了这些新的特性: UDP segmentation offload Receive Side Scaling Per-packet hash reporting Guest hdrlen optimization Link speed and duplex reporting 此外, virtio core 还增加了一些新的基础特性: ...
⽹络虚拟化Virtio-net ⽹络虚拟化有和存储虚拟化类似的地⽅,例如它们都是基于virtio 的,因⽽在看⽹络虚拟化的过程中,会看到和存储虚拟化很像的数据结构和原理。但是⽹络虚拟化也有⾃⼰的特殊性。例如,存储虚拟化是将宿主机上的⽂件作为客户机上的硬盘,⽽⽹络虚拟化需要依赖于内核协议栈进...