On Mon, Aug 02, 2021 at 08:07:16PM +0800, fuguancheng wrote: > This patchset enables the user to specify additional CIDS for host and > guest when booting up the guest machine. The guest's additional CIDS cannot > be repeated, and can be used to communicate with the host. The user can > also choose to specify a set of additional host cids, which can be > used to communicate with the guest who specify them. The original > CID(VHOST_DEFAULT_CID) is still available for host. The guest cid field is > deleted. > > To ensure that multiple guest CID maps to the same vhost_vsock struct, > a struct called vhost_vsock_ref is added. The function of vhost_vsock_ref > is simply used to allow multiple guest CIDS map to the > same vhost_vsock struct. > > If not specified, the host and guest will now use the first CID specified > in the array for connect operation. If the host or guest wants to use > one specific CID, the bind operation can be performed before the connect > operation so that the vsock_auto_bind operation can be avoided. > > Hypervisors such as qemu needs to be modified to use this feature. The > required changes including at least the following: > 1. Invoke the modified ioctl call with the request code > VHOST_VSOCK_SET_GUEST_CID. Also see struct multi_cid_message for > arguments used in this ioctl call. > 2. Write new arguments to the emulated device config space. > 3. Modify the layout of the data written to the device config space. > See struct virtio_vsock_config for reference. > > I have tested this setup with iperf3. The communication between host > and guest using original CID or additional CIDS worked normally. > Not tested in extreme conditions where memory is insufficient. > > Linux kernel newbies here, any suggestions are welcomed. > Thanks in advance! Could you supply a bit info about the motivation for this feature? I wonder whether it's be better to have multiple VQs instead of tweaking the CID in the message header. > fuguancheng (4): > VSOCK DRIVER: Add multi-cid support for guest > VSOCK DRIVER: support communication using additional guest cid > VSOCK DRIVER: support specifying additional cids for host > VSOCK DRIVER: support communication using host additional cids > > drivers/vhost/vsock.c | 338 ++++++++++++++++++++++++++++---- > include/net/af_vsock.h | 5 + > include/uapi/linux/vhost.h | 9 + > include/uapi/linux/virtio_vsock.h | 8 +- > net/vmw_vsock/af_vsock.c | 28 ++- > net/vmw_vsock/virtio_transport.c | 129 +++++++++++- > net/vmw_vsock/virtio_transport_common.c | 5 +- > net/vmw_vsock/vsock_loopback.c | 8 + > 8 files changed, 471 insertions(+), 59 deletions(-) > > -- > 2.11.0 > >