diff options
Diffstat (limited to 'lib/sockopt.c')
| -rw-r--r-- | lib/sockopt.c | 19 | 
1 files changed, 11 insertions, 8 deletions
| diff --git a/lib/sockopt.c b/lib/sockopt.c index ee10ac30..682b7397 100644 --- a/lib/sockopt.c +++ b/lib/sockopt.c @@ -272,28 +272,31 @@ getsockopt_ipv4_pktinfo_ifindex (struct msghdr *msgh)    int ifindex = 0;  #if defined (IP_PKTINFO)    struct in_pktinfo *pktinfo; -#elif defined (IP_REVCIF) +#elif defined (IP_RECVIF)  #ifndef SUNOS_5 +  /* RECVIF, but not SUNOS, so BSD */    struct sockaddr_dl *sdl;  #endif /* SUNOS_5 */ +  /* SUNOS_5 doesn't need a structure to extract ifindex */  #else /* IP_RECVIF */ -  char *pktinfo; +  /* XXX Neither, so we are going to lose. */  #endif /* IP_PKTINFO */  #ifdef IP_PKTINFO    pktinfo =       (struct in_pktinfo *)getsockopt_cmsg_data (msgh, IPPROTO_IP, IP_PKTINFO);  #elif defined (IP_RECVIF) -#ifdef SUNOS_5 -  ifindex = *(uint_t *)getsockopt_cmsg_data (msgh, IPPROTO_IP, IP_RECVIF); -#else -  pktinfo =  +#ifndef SUNOS_5 +  sdl =       (struct sockaddr_dl *)getsockopt_cmsg_data (msgh, IPPROTO_IP, IP_RECVIF); -  ifindex = pktinfo->sdl_index; +  ifindex = sdl->sdl_index; +#else +  ifindex = *(uint_t *)getsockopt_cmsg_data (msgh, IPPROTO_IP, IP_RECVIF);  #endif /* SUNOS_5 */  #else  #warning "getsockopt_ipv4_pktinfo_ifindex: dont have PKTINFO or RECVIF" -        ifindex = 0; +  /* XXX why not -1 - this is a failure condition. */ +  ifindex = 0;  #endif /* IP_PKTINFO */    return ifindex; | 
