On Thu, May 06, 2021 at 04:56:48PM -0700, Cong Wang . wrote: > On Mon, Apr 26, 2021 at 9:07 AM Stefan Hajnoczi <stefanha@xxxxxxxxxx> wrote: > > > > On Wed, Apr 14, 2021 at 05:43:52PM -0700, Cong Wang . wrote: > > > On Wed, Mar 17, 2021 at 8:45 AM Stefan Hajnoczi <stefanha@xxxxxxxxxx> wrote: > > > > > > > > Please stick to UDP semantics as much as possible so that applications > > > > can be ported easily and developers aren't surprised by unexpected > > > > behavior. UDP packets sent to a destination that has no listen socket > > > > result in a Connection Refused error. vsock dgrams should behave in the > > > > same way. > > > > > > There is no connection refused error for UDP, as it is clearly connectionless. > > > What you suggested might be an ICMP unreachable error, however, vsock does > > > not have anything equivalent. So, I think there is no error returned > > > in this scenario > > > for vsock datagram. > > > > Yes, exactly. UDP uses ICMP unreachable: > > > > 16:55:40.380292 IP 127.0.0.1.41519 > 127.0.0.1.1234: UDP, length 5 > > 16:55:40.380308 IP 127.0.0.1 > 127.0.0.1: ICMP 127.0.0.1 udp port 1234 unreachable, length 41 > > > > This is mentioned a bit here: > > https://tools.ietf.org/html/rfc8085#section-5.2 > > > > Here is how Python's socket module produces an ConnectionRefused > > exception: > > > > socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 3 > > sendto(3, "hello", 5, 0, {sa_family=AF_INET, sin_port=htons(1234), sin_addr=inet_addr("127.0.0.1")}, 16) = 5 > > getsockname(3, {sa_family=AF_INET, sin_port=htons(41519), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0 > > getpeername(3, 0x7ffc43c99a20, [16]) = -1 ENOTCONN (Transport endpoint is not connected) > > Yes, we are all aware of these UDP behaviors. > > > > > UDP itself may not carry this information but applications do rely on > > the ICMP information as shown above. > > > > The Linux network stack implementation is here: > > net/ipv4/udp.c:__udp4_lib_err(). > > Sure, but applications using UDP when porting to vsock dgram, they > must be aware AF_VSOCK has totally different protocols from AF_INET, > hence behaves differently from AF_INET. Therefore, it is not necessary > to do everything UDP does here, particularly not necessary to mimic ICMP > in vsock. In short, I don't think there is any standard to enforce what > dgram sockets must behave, each address family should have its right > to behave reasonably differently. They can behave differently but at the cost of making it harder to port applications. Sending a RST packet in vsock is easy and allows applications to get the same behavior as with UDP/ICMP. I don't see a reason to avoid it. Stefan
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization