firecracker-microvm / firecracker-microvm/firecracker
[Feature Request] Add SEQPACKET socket type for vsock
- Dominant language
- Rust
- Stars
- 36.7k
- Forks
- 2.6k
- Avg merge
- 3d 3h
- Merged PRs (30d)
- 58
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
- [x] Have you searched the Firecracker Issues database for similar requests?
- [x] Have you read all the existing relevant Firecracker documentation?
- [x] 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.
Contributor guide
Assessment
This issue has not been assessed yet.