sender source IP address on UDP socket bound to INADDR_ANY in golang

Peter Jeremy peter at rulingia.com
Sun May 16 11:19:13 UTC 2021


Hi Patrick,

On 2021-May-14 23:40:04 +0200, "Patrick M. Hausen" <hausen at punkt.de> wrote:
>do you have some spare time and would you be so kind to look at our discussion
>here: https://github.com/AdguardTeam/AdGuardHome/issues/3015
>
>Andrey from the AdGuard team references this golang issue:
>https://github.com/golang/go/issues/8329
>
>Which references this FreeBSD issue:
>https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=193246

I've skimmed through all three issues.

>What I as a sysadmin can observe is that the test code Andrey gave me
>binds to *.53 on IPv4 and IPv6 although I start it with `-l 0.0.0.0` which is
>clearly an IPv4 "any" address.
>

>I am not 100% familiar with the API but as I understand you can treat
>IPv4 as IPv6 via the socket interface by using an IPv4-mapped IPv6
>address. So far so good.

Yes.

>But then of course you have an AF_INET6 socket and it seems that
>FreeBSD does not allow setting IPv4 specific options via setsockopt()
>because it's an IPv6 socket. Correct?

That's my reading of the FreeBSD issue.

>Why can you have a single socket on both address families, anyway?
>IPv4 and IPv6 are as "related" as IP and IPX - if you go dual stack,
>treat them both separately - no?

This is getting outside my expertise but my understanding is that
the idea behind using IPv4-mapped addressed is to simplify building
dual-stack applications, particularly during the early introduction
of IPv6.  The main benefit is that it made it possible to support
both IPv4 and IPv6 without needing 2 sockets - which means you
can stick to doing an accept() on a blocking socket, rather than
needing to use poll() or select() etc with a pair of non-blocking
sockets.

I'm not sure how to solve your problem, sorry.

-- 
Peter Jeremy
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 963 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-net/attachments/20210516/b261a354/attachment.sig>


More information about the freebsd-net mailing list