Derive our primary interface and address by trying to connect to an
address in the TEST-NET-2 network as noted in RFC5737 instead of using the 1.1.1.1 address. Also, use port 7 (echo) for better style. Fixes PR bin/46758 thanks to Lloyd Parkes. While here, if we do fail to connect to the test address, don't spam this to the console as it's a common case during the boot sequence.
This commit is contained in:
parent
89f3ce7080
commit
58056b4c20
|
@ -92,7 +92,8 @@ mDNSlocal void mDNS_StatusCallback(mDNS *const m, mStatus result)
|
|||
static void Reconfigure(mDNS *m)
|
||||
{
|
||||
mDNSAddr DynDNSIP;
|
||||
const mDNSAddr dummy = { mDNSAddrType_IPv4, { { { 1, 1, 1, 1 } } } };;
|
||||
// Use a random address from TEST-NET-2 in RFC5737
|
||||
const mDNSAddr dummy = { mDNSAddrType_IPv4, { { { 198, 51, 100, 42 } } } };;
|
||||
mDNS_SetPrimaryInterfaceInfo(m, NULL, NULL, NULL);
|
||||
mDNS_Lock(m);
|
||||
if (ParseDNSServers(m, uDNS_SERVERS_FILE) < 0)
|
||||
|
|
|
@ -47,7 +47,7 @@ mDNSexport void mDNSPlatformSourceAddrForDest(mDNSAddr *const src, const mDNSAdd
|
|||
addr.a4.sin_len = inner_len;
|
||||
#endif
|
||||
addr.a4.sin_family = AF_INET;
|
||||
addr.a4.sin_port = 1; // Not important, any port will do
|
||||
addr.a4.sin_port = 7; // Not important, any port will do
|
||||
addr.a4.sin_addr.s_addr = dst->ip.v4.NotAnInteger;
|
||||
}
|
||||
else if (dst->type == mDNSAddrType_IPv6)
|
||||
|
@ -58,14 +58,26 @@ mDNSexport void mDNSPlatformSourceAddrForDest(mDNSAddr *const src, const mDNSAdd
|
|||
#endif
|
||||
addr.a6.sin6_family = AF_INET6;
|
||||
addr.a6.sin6_flowinfo = 0;
|
||||
addr.a6.sin6_port = 1; // Not important, any port will do
|
||||
addr.a6.sin6_port = 7; // Not important, any port will do
|
||||
addr.a6.sin6_addr = *(struct in6_addr*)&dst->ip.v6;
|
||||
addr.a6.sin6_scope_id = 0;
|
||||
}
|
||||
else return;
|
||||
|
||||
if ((connect(sock, &addr.s, inner_len)) < 0)
|
||||
{ LogMsg("mDNSPlatformSourceAddrForDest: connect %#a failed errno %d (%s)", dst, errno, strerror(errno)); goto exit; }
|
||||
{
|
||||
static mDNSv4Addr dummy = { 198, 51, 100, 42 };
|
||||
|
||||
// Don't spam if we can't connect to 198.51.100.42 to the console.
|
||||
// That is our test address to out which interfaces/address should be primary and is also
|
||||
// configured in mDNSPosix/PosixDaemon.c:Reconfigure()
|
||||
// Failing to connect to it with EADDRNOTAVAIL is a common situation, especially on boot up.
|
||||
if (dst->type == mDNSAddrType_IPv4 && dst->ip.v4.NotAnInteger == dummy.NotAnInteger && errno == EADDRNOTAVAIL)
|
||||
LogInfo("mDNSPlatformSourceAddrForDest: connect %#a failed errno %d (%s)", dst, errno, strerror(errno));
|
||||
else
|
||||
LogMsg("mDNSPlatformSourceAddrForDest: connect %#a failed errno %d (%s)", dst, errno, strerror(errno));
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if ((getsockname(sock, &addr.s, &len)) < 0)
|
||||
{ LogMsg("mDNSPlatformSourceAddrForDest: getsockname failed errno %d (%s)", errno, strerror(errno)); goto exit; }
|
||||
|
|
Loading…
Reference in New Issue