summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorpaul <paul>2004-10-22 11:51:57 +0000
committerpaul <paul>2004-10-22 11:51:57 +0000
commit23b9c61e5bb60d557b07dc1d7c4d7614f63dc009 (patch)
tree5780bf6f095f8eb65b8e698fa6193df88cdc66fd /lib
parent7d9c6e511597ee76d42bede782c9ddb9e1f83389 (diff)
2004-10-22 Paul Jakma <paul@dishone.st>
* 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).
Diffstat (limited to 'lib')
-rw-r--r--lib/ChangeLog8
-rw-r--r--lib/sockopt.c2
-rw-r--r--lib/sockopt.h38
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 *);