]> git.puffer.fish Git - mirror/frr.git/commitdiff
2004-10-22 Paul Jakma <paul@dishone.st>
authorpaul <paul>
Fri, 22 Oct 2004 11:51:57 +0000 (11:51 +0000)
committerpaul <paul>
Fri, 22 Oct 2004 11:51:57 +0000 (11:51 +0000)
        * 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/ChangeLog
lib/sockopt.c
lib/sockopt.h

index 79ba7143c8f32ae93392ad9da94546fbf62820b2..66111963a6cf5049b9dce0c7ed3df42211fd6076 100644 (file)
@@ -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>
 
index d16c2bebf4ca6d443b6444571fb87dc7b21a6a26..1d4063a615e004dab64f7d5c96ad75951d94616e 100644 (file)
@@ -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;
index f6a43158eba996cd0bef59b944118028da140c12..63e915ddb48b04cd160774cb8ff5ea8064be6816 100644 (file)
@@ -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 *);