vsock: add multi-transports support
This patch adds the support of multiple transports in the VSOCK core. With the multi-transports support, we can use vsock with nested VMs (using also different hypervisors) loading both guest->host and host->guest transports at the same time. Major changes: - vsock core module can be loaded regardless of the transports - vsock_core_init() and vsock_core_exit() are renamed to vsock_core_register() and vsock_core_unregister() - vsock_core_register() has a feature parameter (H2G, G2H, DGRAM) to identify which directions the transport can handle and if it's support DGRAM (only vmci) - each stream socket is assigned to a transport when the remote CID is set (during the connect() or when we receive a connection request on a listener socket). The remote CID is used to decide which transport to use: - remote CID <= VMADDR_CID_HOST will use guest->host transport; - remote CID == local_cid (guest->host transport) will use guest->host transport for loopback (host->guest transports don't support loopback); - remote CID > VMADDR_CID_HOST will use host->guest transport; - listener sockets are not bound to any transports since no transport operations are done on it. In this way we can create a listener socket, also if the transports are not loaded or with VMADDR_CID_ANY to listen on all transports. - DGRAM sockets are handled as before, since only the vmci_transport provides this feature. Signed-off-by:Stefano Garzarella <sgarzare@redhat.com> Signed-off-by:
David S. Miller <davem@davemloft.net>
Showing
- drivers/vhost/vsock.c 3 additions, 2 deletionsdrivers/vhost/vsock.c
- include/net/af_vsock.h 12 additions, 6 deletionsinclude/net/af_vsock.h
- net/vmw_vsock/af_vsock.c 184 additions, 59 deletionsnet/vmw_vsock/af_vsock.c
- net/vmw_vsock/hyperv_transport.c 21 additions, 5 deletionsnet/vmw_vsock/hyperv_transport.c
- net/vmw_vsock/virtio_transport.c 4 additions, 3 deletionsnet/vmw_vsock/virtio_transport.c
- net/vmw_vsock/virtio_transport_common.c 44 additions, 19 deletionsnet/vmw_vsock/virtio_transport_common.c
- net/vmw_vsock/vmci_transport.c 29 additions, 3 deletionsnet/vmw_vsock/vmci_transport.c
Loading