mirror of https://github.com/aria2/aria2
mingw: Ignore tunnel interface and address in 169.254.*
parent
80dbaf2566
commit
d671d8bf36
|
@ -1555,6 +1555,13 @@ bool ipv4AddrConfigured = true;
|
||||||
bool ipv6AddrConfigured = true;
|
bool ipv6AddrConfigured = true;
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
#ifdef __MINGW32__
|
||||||
|
namespace {
|
||||||
|
const uint32_t APIPA_IPV4_BEGIN = 2851995649u; // 169.254.0.1
|
||||||
|
const uint32_t APIPA_IPV4_END = 2852061183u; // 169.254.255.255
|
||||||
|
} // namespace
|
||||||
|
#endif // __MINGW32__
|
||||||
|
|
||||||
void checkAddrconfig()
|
void checkAddrconfig()
|
||||||
{
|
{
|
||||||
#ifdef __MINGW32__
|
#ifdef __MINGW32__
|
||||||
|
@ -1585,19 +1592,27 @@ void checkAddrconfig()
|
||||||
sockaddr_union ad;
|
sockaddr_union ad;
|
||||||
int rv;
|
int rv;
|
||||||
for(IP_ADAPTER_ADDRESSES* p = buf; p; p = p->Next) {
|
for(IP_ADAPTER_ADDRESSES* p = buf; p; p = p->Next) {
|
||||||
|
if(p->IfType == IF_TYPE_TUNNEL) {
|
||||||
|
// Skip tunnel interface because Windows7 automatically setup
|
||||||
|
// this for IPv6.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
PIP_ADAPTER_UNICAST_ADDRESS ucaddr = p->FirstUnicastAddress;
|
PIP_ADAPTER_UNICAST_ADDRESS ucaddr = p->FirstUnicastAddress;
|
||||||
if(ucaddr) {
|
if(ucaddr) {
|
||||||
for(PIP_ADAPTER_UNICAST_ADDRESS i = ucaddr; i; i = i->Next) {
|
for(PIP_ADAPTER_UNICAST_ADDRESS i = ucaddr; i; i = i->Next) {
|
||||||
bool found = false;
|
bool found = false;
|
||||||
switch(i->Address.iSockaddrLength) {
|
switch(i->Address.iSockaddrLength) {
|
||||||
case sizeof(sockaddr_in):
|
case sizeof(sockaddr_in): {
|
||||||
memcpy(&ad.storage, i->Address.lpSockaddr,
|
memcpy(&ad.storage, i->Address.lpSockaddr,
|
||||||
i->Address.iSockaddrLength);
|
i->Address.iSockaddrLength);
|
||||||
if(ad.in.sin_addr.s_addr != htonl(INADDR_LOOPBACK)) {
|
uint32_t haddr = ntohl(ad.in.sin_addr.s_addr);
|
||||||
|
if(haddr != INADDR_LOOPBACK &&
|
||||||
|
(haddr < APIPA_IPV4_BEGIN || APIPA_IPV4_END <= haddr)) {
|
||||||
ipv4AddrConfigured = true;
|
ipv4AddrConfigured = true;
|
||||||
found = true;
|
found = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case sizeof(sockaddr_in6):
|
case sizeof(sockaddr_in6):
|
||||||
memcpy(&ad.storage, i->Address.lpSockaddr,
|
memcpy(&ad.storage, i->Address.lpSockaddr,
|
||||||
i->Address.iSockaddrLength);
|
i->Address.iSockaddrLength);
|
||||||
|
|
Loading…
Reference in New Issue