Commit graph

14 commits

Author SHA1 Message Date
Sebastien Boeuf
c3506d3bc0 vhost-user: Make number of queues configurable
We need the vhost-user protocol crate to be more generic to allow
communication with a configurable amount of virtqueues.

This is a workaround for the virtio-fs backend. According to the
vhost-user specification, the master should issue get_queue_num()
to get the maximum number of queues supported by the slave. With
current virtio-fs implementations, it needs multiple virtques, but
it doesn't support the get_queue_num() request and not set the MQ
feature bit too. So this is a workaround to hard-code the max_queue_num
on the master side.

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
2020-09-04 17:59:53 +03:00
Liu Jiang
0c1edfc628 Add tests for vhost-user
Signed-off-by: Liu Jiang <gerry@linux.alibaba.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
2020-09-04 17:59:53 +03:00
Daniel Prilik
883e6f6557 Initial support for handling slave requests
Not all slave requests are implemented, only the subset of messages
used by virtio-fs.

The SlaveReqHandler struct creates the slave-master socketpair, and
handles all incoming / outgoing message validation and handler
routing. SlaveReqHandler::new accepts a struct that implements
VhostUserSlaveReqHandler, overriding the default handlers for
relevant slave requests.  SlaveReqHandler::new also returns a
UnixStream that must be sent to the slave via
Master::set_slave_request_fd.

As both Master and Slave requests share the same wire-format,
it could be easy to mix up the two when handling requests,
so this commit introduces PhantomData markers to Endpoints
and VhostUserMsgHeader that specify if they operate on
MasterReqs or SlaveReqs.

Lastly, some library internals, notably the Listener and Endpoint
structs, have been marked as pub(crate). This necessitates a small
refactor of how Slaves are constructed, introducing a SlaveListener
struct which returns a valid Slave when the socket accepts a
connection.

Signed-off-by: Daniel Prilik <danielprilik@gmail.com>
Signed-off-by: Liu Jiang <gerry@linux.alibaba.com>
2020-09-04 17:59:53 +03:00
Liu Jiang
7c1cd619eb Implement vhost-user slave side endpoint
Signed-off-by: Liu Jiang <gerry@linux.alibaba.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Daniel Prilik <daniel@prilik.com>
2020-09-04 17:59:53 +03:00
Liu Jiang
ac2c67a6ae Implement vhost-user master side endpoint
Signed-off-by: Liu Jiang <gerry@linux.alibaba.com>
Signed-off-by: Daniel Prilik <daniel@prilik.com>
2020-09-04 17:59:53 +03:00
Liu Jiang
36c283d523 Implement unix domain socket based comm channel
Implement unix domain socket based communication channel for vhost-user,
which could pass file decriptors between processes.

Signed-off-by: Liu Jiang <gerry@linux.alibaba.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Daniel Prilik <daniel@prilik.com>
2020-09-04 17:59:53 +03:00
Liu Jiang
560a28589c Define communication messages of vhost-user spec
Only basic messages are defined, and the vhost-user spec is also under
development. So feel free to add needed messages.

Signed-off-by: Liu Jiang <gerry@linux.alibaba.com>
Signed-off-by: Daniel Prilik <daniel@prilik.com>
2020-09-04 17:59:53 +03:00
Liu Jiang
4f0ca8c860 Enable support of the in-kernel vhost-vsock driver
Implement vhost_kern::Vsock to control the in-kernel vhost-vsock driver.
The implementation is derived from the crosvm project.

Signed-off-by: Liu Jiang <gerry@linux.alibaba.com>
2020-09-04 17:59:53 +03:00
Liu Jiang
8663025a80 Enable support of in-kernel vhost driver
The implementation is derived from the crosvm project.

Signed-off-by: Liu Jiang <gerry@linux.alibaba.com>
2020-09-04 17:59:53 +03:00
Liu Jiang
f697910ec2 Simplify the auto-generated vhost binding
The auto-generated vhost binding is small, it would be better
to include it into the vhost crate instead of building another
dedicated crate for it.

Signed-off-by: Liu Jiang <gerry@linux.alibaba.com>
2020-09-04 17:59:53 +03:00
Liu Jiang
bcbbaaabb3 Add traits to support vhost backend devices
These interfaces are derived from the firecracker and crosvm projects.
They may be extended when enable support of vhost-user protocol.

Signed-off-by: Liu Jiang <gerry@linux.alibaba.com>
2020-09-04 17:59:53 +03:00
Liu Jiang
5d61e36bda Add license files for BSD-Alibaba, BSD-Google
Signed-off-by: Liu Jiang <gerry@linux.alibaba.com>
2020-09-04 17:59:53 +03:00
Samuel Ortiz
8cb0b09bec CODEOWNERS: Make PullAssigner the default owner
The PullAssigner bot [1] will pick 2 github handles from the gate
keepers list [2] and assign them for reviewing any new PR.
The bot goes uses a round robin algorithm to select handles from the
list.

What happens when the CODEOWNERS file gets populated with real
owners? Following the PR review and approval process [3], the
PullAssigner bot will either pick only one or zero reviewers from the
gate keepers list, if the CODEOWNERS file points to exactly one or more
than one actual ownwer, respectively.

[1] https://pullpanda.com/assigner
[2] https://github.com/rust-vmm/community/blob/master/GATEKEEPERS.md
[3] https://github.com/rust-vmm/community#pr-review-and-approval

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-09-10 13:59:28 +08:00
Liu Jiang
e0ee5887f7 Initial commit 2019-04-03 14:38:29 +08:00