diff options
| -rw-r--r-- | lib/ChangeLog | 8 | ||||
| -rw-r--r-- | lib/sockopt.c | 2 | ||||
| -rw-r--r-- | lib/sockopt.h | 38 | 
3 files changed, 24 insertions, 24 deletions
| diff --git a/lib/ChangeLog b/lib/ChangeLog index 79ba7143..66111963 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,7 +1,11 @@ -2004-10-13 Paul Jakma <paul@dishone.st> +2004-10-22 Paul Jakma <paul@dishone.st>  	* sockopt.c: (getsockopt_ipv4_ifindex) no ifindex should be 0, not -          -1. +          -1.  +          (setsockopt_pktinfo) unexported +	* sockopt.h: Cleanup SOCKOPT_CMSG defines a bit. Add a throwaway +          define for SOPT_SIZE_CMSG_IFINDEX_IPV4 for systems which have +          neither IP_RECVIF nor IP_PKTINFO (eg openbsd).  2004-10-19 Hasso Tepper <hasso at quagga.net> diff --git a/lib/sockopt.c b/lib/sockopt.c index d16c2beb..1d4063a6 100644 --- a/lib/sockopt.c +++ b/lib/sockopt.c @@ -260,7 +260,7 @@ setsockopt_ipv4_ifindex (int sock, int val)   * interface index.   * Not portable for IPv4, use only setsockopt_ifindex for v4.   */ -int  +static int   setsockopt_pktinfo (int af, int sock, int val)  {    int ret = -1; diff --git a/lib/sockopt.h b/lib/sockopt.h index f6a43158..63e915dd 100644 --- a/lib/sockopt.h +++ b/lib/sockopt.h @@ -48,34 +48,36 @@ int setsockopt_ipv6_multicast_loop (int, int);   */  #if defined (IP_PKTINFO)  /* Linux in_pktinfo. */ -#define SOPT_SIZE_CMSG_PKTINFO_IPV4()  (sizeof (struct in_pktinfo)) - +#define SOPT_SIZE_CMSG_PKTINFO_IPV4()  (CMSG_SPACE(sizeof (struct in_pktinfo)))  /* XXX This should perhaps be defined even if IP_PKTINFO is not. */  #define SOPT_SIZE_CMSG_PKTINFO(af) \    ((af == AF_INET) ? SOPT_SIZE_CMSG_PKTINFO_IPV4() \                     : SOPT_SIZE_CMSG_PKTINFO_IPV6() +#endif /* IP_PKTINFO */ -#define SOPT_SIZE_CMSG_IFINDEX_IPV4()	SOPT_SIZE_CMSG_PKTINFO_IPV4() - -#elif defined (IP_RECVIF) -/* BSD/Solaris.  Arguably these should say RECVIF rather than IFINDEX. */ +#if defined (IP_RECVIF) +/* BSD/Solaris */  #if defined (SUNOS_5) -#define SOPT_SIZE_CMSG_IFINDEX_IPV4()  (sizeof (uint_t)) +#define SOPT_SIZE_CMSG_RECVIF_IPV4()  (sizeof (uint_t))  #else -#define SOPT_SIZE_CMSG_IFINDEX_IPV4()	\ +#define SOPT_SIZE_CMSG_RECVIF_IPV4()	\  	__CMSG_ALIGN((sizeof (struct sockaddr_dl)))  #endif /* SUNOS_5 */ +#endif /* IP_RECVIF */ -#endif +/* SOPT_SIZE_CMSG_IFINDEX_IPV4 - portable type */ +#if defined (SOPT_SIZE_CMSG_PKTINFO) +#define SOPT_SIZE_CMSG_IFINDEX_IPV4() SOPT_SIZE_CMSG_PKTINFO_IPV4() +#elif defined (SOPT_SIZE_CMSG_RECVIF_IPV4) +#define SOPT_SIZE_CMSG_IFINDEX_IPV4() SOPT_SIZE_CMSG_RECVIF_IPV4() +#elif /* Nothing available */ +#define SOPT_SIZE_CMSG_IFINDEX_IPV4() (sizeof (char *)) +#endif /* SOPT_SIZE_CMSG_IFINDEX_IPV4 */ -/* - * AF-parameterized message size. - * XXX Why is this here?  Is it used?  The v6 case is not defined.  - */  #define SOPT_SIZE_CMSG_IFINDEX(af) \ -  ((af == AF_INET) ? SOPT_SIZE_CMSG_IFINDEX_IPV4() \ -                   : SOPT_SIZE_CMSG_IFINDEX_IPV6() +  (((af) == AF_INET) : SOPT_SIZE_CMSG_IFINDEX_IPV4() \ +                    ? SOPT_SIZE_CMSG_PKTINFO_IPV6())  int setsockopt_multicast_ipv4(int sock,   			     int optname,  @@ -83,12 +85,6 @@ int setsockopt_multicast_ipv4(int sock,  			     unsigned int mcast_addr,  			     unsigned int ifindex); -/* - * XXX Exactly what is this an interface to?  Specifically, what calls - * can be made after calling it? - */ -int setsockopt_pktinfo (int, int, int); -  /* Ask for, and get, ifindex, by whatever method is supported. */  int setsockopt_ifindex (int, int, int);  int getsockopt_ifindex (int, struct msghdr *); | 
