firecracker-microvm / firecracker-microvm/firecracker

[Feature Request] Add SEQPACKET socket type for vsock

Open
#4,822 7 comments 3 reactions 1 assignee Claimed by @JackThomson2 View on GitHub
Priority: Low Status: Parked Type: Enhancement
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.