quic: determine local address for connections

Properly handling path migration requires QUIC connections to know
both the address they are sending from and the address they are
sending to.

Determine the local address for a path by creating a temporary UDP
socket bound to the path; this sends no packets but lets us see
what address the kernel thinks should be used on the path.
(When using a non-*net.UDPConn connection, we don't attempt to do
this on the theory that our PacketConn likely doesn't use the real
network.)

Update fake-network tests to use valid source/destination addresses
for all datagrams.

Change-Id: Ia89f7daf479b10df4c1d23f3e64ad3726a6a6964
Reviewed-on: https://go-review.googlesource.com/c/net/+/832365
Reviewed-by: Nicholas Husin <nsh@golang.org>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Damien Neil <dneil@google.com>
Reviewed-by: Nicholas Husin <husin@google.com>
16 files changed
tree: 147ea8b2ac833cab675c871db2140b2052eab3b4
  1. bpf/
  2. context/
  3. dict/
  4. dns/
  5. html/
  6. http/
  7. http2/
  8. http3/
  9. icmp/
  10. idna/
  11. internal/
  12. ipv4/
  13. ipv6/
  14. lif/
  15. nettest/
  16. netutil/
  17. proxy/
  18. publicsuffix/
  19. quic/
  20. route/
  21. trace/
  22. webdav/
  23. websocket/
  24. xsrftoken/
  25. .gitattributes
  26. .gitignore
  27. codereview.cfg
  28. CONTRIBUTING.md
  29. go.mod
  30. go.sum
  31. LICENSE
  32. PATENTS
  33. README.md
README.md

Go Networking

Go Reference

This repository holds supplementary Go networking packages.

Report Issues / Send Patches

This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://go.dev/doc/contribute.

The git repository is https://go.googlesource.com/net.

The main issue tracker for the net repository is located at https://go.dev/issues. Prefix your issue with “x/net:” in the subject line, so it is easy to find.