Hi Stefan, Michael, Jason and everyone, Several days ago, I discussed with jason about "Vsock over Virtio-net". This idea has two advantages: First, it can use many great features of virtio-net, like batching, mergeable rx buffer and multiqueue, etc. Second, it can reduce many duplicate codes and make it easy to be maintained. Before the implement, I want to discuss with everyone again, and want to know everyone's suggestions. After the discussion, based on this point I will try to implement this idea, but I am not familiar with the virtio-net, that is a pity. :( -------------------------Simple idea------------------------------ 1. The packet layout will become as follows: +---------------------------------+ | Virtio-net header | |(struct virtio_net_hdr_mrg_rxbuf)| +---------------------------------+ | Vsock header | | (struct virtio_vsock_hdr) | +---------------------------------+ | payload | | (until end of packet) | +---------------------------------+ 2. The Guest->Host basic code flow as follow: +------------+ | Client | +------------+ | | +------------------------------------------------------------------+ |VSOCK Core Module | |ops->sendmsg; (vsock_stream_sendmsg) | | -> alloc_skb; /* it will packet a skb buffer, and include vsock | | * hdr and payload */ | | -> dev_queue_xmit(); /* it will call start_xmit(virtio-net.c) */| |vsock hdr and payload, and then call | +------------------------------------------------------------------+ | | +------------------------------------------------------------------+ |Virtio-net Module | |start_xmit | | -> add virtio_net_hdr and pack sg in ring desc, notify Host | +------------------------------------------------------------------+ | | +------------------------------------------------------------------+ |Vhost-net Module | |handle_tx | | -> get tx buffer, skip virtio_net_hdr and call Vsock function. | | /* This point has some differences, vhost-net use ->sendmsg to | | * forward information, however vsock only need to notify server | | * that data ready. */ | +------------------------------------------------------------------+ | | +------------------------------------------------------------------+ |VSOCK Core Module | |alloc_pkt, copy skb data to pkt. | |add pkt to rx_queue and notify server to get data. | +------------------------------------------------------------------+ 3. To Host->Guest I have a problem and difficult, mainly I know about virtio-net a little), because I have been doing work related with storage and file system. The problem as follows: we should monitor all of socket of vsock in handle_rx, when there are data coming, and copy data to vq desc. Vhost-net use ->recvmsg to get data, it is different with socket. To vsock, I think host will not call ->recvmsg when it need to send message to guest. To net, vhost-net only as forwarding layer. _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization