On Fri, Dec 04, 2015 at 09:45:04AM +0200, Michael S. Tsirkin wrote:
On Wed, Dec 02, 2015 at 02:43:58PM +0800, Stefan Hajnoczi wrote:
quoted
1. The 3-way handshake isn't necessary over a reliable transport (virtqueue).
Spoofing packets is also impossible so the security aspects of the 3-way
handshake (including syn cookie) add nothing. The next version will have a
single operation to establish a connection.
It's hard to discuss without seeing the details, but we do need to
slow down guests that are flooding host with socket creation requests.
The handshake is a simple way for hypervisor to defer
such requests until it has resources without
breaking things.
I'll send an updated virtio-vsock device specification so we can discuss
it.
VMCI simply uses sk->sk_max_ack_backlog in
net/vmw_vsock/vmci_transport.c. If backlog (from listen(2)) is maxed
out then the connection is refused.
The same would work for virtio-vsock and there is no advantage to the
3-way handshake.
quoted
2. Credit-based flow control doesn't work for SOCK_DGRAM since multiple clients
can transmit to the same listen socket. There is no way for the clients to
coordinate buffer space with each other fairly. The next version will drop
credit-based flow control for SOCK_DGRAM and only rely on best-effort
delivery. SOCK_STREAM still has guaranteed delivery.
I suspect in the end we will need a measure of fairness even
if you drop packets. And recovering from packet loss is
hard enough that not many applications do it correctly.
I suggest disabling SOCK_DGRAM for now.
I'm not aware of a SOCK_DGRAM user at this time. Will disable it for
now.