portfwd: create separate gRPC streams for each UDP client #3724
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The UDP port forwarder previously used a single gRPC stream for all clients, which could cause responses from the guest to be sent to the wrong client on the host.
This occurred because the stream was created before client connections were demultiplexed by
gvisor-tap-vsock
'sUDPProxy
.The root cause is the interaction with
gvisor-tap-vsock
'sUDPProxy
, which handles client demultiplexing internally based on the source address of incoming datagrams. It expects itsdialer
function to return a newnet.Conn
for each new client it detects.This commit moves the gRPC stream creation into the
UDPProxy
dialer function. This ensures a new, dedicated stream is created for each new client, fixing the incorrect response routing.