From 23b9c61e5bb60d557b07dc1d7c4d7614f63dc009 Mon Sep 17 00:00:00 2001 From: paul Date: Fri, 22 Oct 2004 11:51:57 +0000 Subject: 2004-10-22 Paul Jakma * sockopt.c: (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). --- lib/sockopt.h | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) (limited to 'lib/sockopt.h') 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 *); -- cgit v1.2.1