Description
Feature Request
https://docs.oasis-open.org/virtio/virtio/v1.2/csd01/virtio-v1.2-csd01.html
VIRTIO_VSOCK_F_SEQPACKET has been introduced as an option for virtio vsock. It would enable the use-case of VMs that are relaying datagrams over a vsock and need to keep the boundaries without a SOCK_STREAM combining them together.
Right now you can connect from the VM opening a vsock with SOCK_STREAM type, but not with SOCK_SEQPACKET. This would also mean that on the host side the created UDS needs to match the socket type of the vsock.
Describe the desired solution
This should work:
socketFd, err := unix.Socket(unix.AF_VSOCK, unix.SOCK_SEQPACKET, 0)
if err != nil {
return nil, 0, err
}
sockaddr := &unix.SockaddrVM{
CID: 2,
Port: 500,
}
if err := unix.Connect(socketFd, sockaddr); err != nil {
return nil, 0, err
}
And if the opened UDS on the host side doesn't match the sock type it should not go ahead with the connection.
Describe possible alternatives
I worked around this by implementing packet boundaries within the stream socket, but it's clearly a not very efficient solution and slow.
Checks
- Have you searched the Firecracker Issues database for similar requests?
- Have you read all the existing relevant Firecracker documentation?
- Have you read and understood Firecracker's core tenets?
I am curious if this is something the Firecracker team is interested in implementing for their vsock virtio component.