miniupnpd/getifaddr.c: clean up and fix getifaddr_in6()
This commit is contained in:
parent
81fa1bcd57
commit
3ed3478398
|
@ -121,9 +121,13 @@ getifaddr(const char * ifname, char * buf, int len,
|
||||||
#ifdef ENABLE_PCP
|
#ifdef ENABLE_PCP
|
||||||
/* XXX I don't know if this function should return
|
/* XXX I don't know if this function should return
|
||||||
* IPv4 or IPv6 if both are enabled... */
|
* IPv4 or IPv6 if both are enabled... */
|
||||||
int getifaddr_in6(const char * ifname, struct in6_addr * addr){
|
int getifaddr_in6(const char * ifname, struct in6_addr * addr)
|
||||||
|
{
|
||||||
struct ifaddrs * ifap;
|
struct ifaddrs * ifap;
|
||||||
struct ifaddrs * ife;
|
struct ifaddrs * ife;
|
||||||
|
#ifdef ENABLE_IPV6
|
||||||
|
const struct sockaddr_in6 * tmpaddr;
|
||||||
|
#endif /* ENABLE_IPV6 */
|
||||||
int found = 0;
|
int found = 0;
|
||||||
|
|
||||||
if(!ifname || ifname[0]=='\0')
|
if(!ifname || ifname[0]=='\0')
|
||||||
|
@ -143,27 +147,25 @@ int getifaddr_in6(const char * ifname, struct in6_addr * addr){
|
||||||
switch(ife->ifa_addr->sa_family)
|
switch(ife->ifa_addr->sa_family)
|
||||||
{
|
{
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
#if 0
|
/* IPv4-mapped IPv6 address ::ffff:1.2.3.4 */
|
||||||
addr->s6_addr32[0]=0;
|
|
||||||
addr->s6_addr32[1]=0;
|
|
||||||
addr->s6_addr32[2]=htonl(0xffff);
|
|
||||||
addr->s6_addr32[3]=((struct sockaddr_in *)ife->ifa_addr)->sin_addr.s_addr;
|
|
||||||
#endif
|
|
||||||
memset(addr->s6_addr, 0, 10);
|
memset(addr->s6_addr, 0, 10);
|
||||||
addr->s6_addr[10] = 0xff;
|
addr->s6_addr[10] = 0xff;
|
||||||
addr->s6_addr[11] = 0xff;
|
addr->s6_addr[11] = 0xff;
|
||||||
memcpy(addr->s6_addr + 12, &(((struct sockaddr_in *)ife->ifa_addr)->sin_addr.s_addr), 4);
|
memcpy(addr->s6_addr + 12,
|
||||||
/*inet_ntop(ife->ifa_addr->sa_family,
|
&(((struct sockaddr_in *)ife->ifa_addr)->sin_addr.s_addr),
|
||||||
&((struct sockaddr_in *)ife->ifa_addr)->sin_addr,
|
4);
|
||||||
buf, len);*/
|
|
||||||
found = 1;
|
found = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef ENABLE_IPV6
|
#ifdef ENABLE_IPV6
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
if(!IN6_IS_ADDR_LOOPBACK(addr)
|
tmpaddr = (const struct sockaddr_in6 *)ife->ifa_addr;
|
||||||
&& !IN6_IS_ADDR_LINKLOCAL(addr)) {
|
if(!IN6_IS_ADDR_LOOPBACK(&tmpaddr->sin6_addr)
|
||||||
memcpy(addr->s6_addr, &((struct sockaddr_in6 *)ife->ifa_addr)->sin6_addr, 16);
|
&& !IN6_IS_ADDR_LINKLOCAL(&tmpaddr->sin6_addr))
|
||||||
|
{
|
||||||
|
memcpy(addr->s6_addr,
|
||||||
|
&tmpaddr->sin6_addr,
|
||||||
|
16);
|
||||||
found = 1;
|
found = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue