DEVEL15-osol-solookup-20090624
authorAndrew Deason <adeason@sinenomine.net>
Wed, 24 Jun 2009 22:38:27 +0000 (22:38 +0000)
committerDerrick Brashear <shadow@dementia.org>
Wed, 24 Jun 2009 22:38:27 +0000 (22:38 +0000)
LICENSE IPL10
FIXES 124924

update for new opensolaris solookup function signature

(cherry picked from commit ee72f251049ca361b095e813adce63216343afd8)

acinclude.m4
src/cf/solaris-solookup.m4 [new file with mode: 0644]
src/rx/SOLARIS/rx_knet.c

index 4f3ba51..7edc290 100644 (file)
@@ -441,6 +441,7 @@ case $system in
                SOLARIS_UFSVFS_HAS_DQRWLOCK
                SOLARIS_PROC_HAS_P_COREFILE
                SOLARIS_FS_HAS_FS_ROLLED
+               SOLARIS_SOLOOKUP_TAKES_SOCKPARAMS
                 ;;
         *-sunos*)
                MKAFS_OSTYPE=SUNOS
diff --git a/src/cf/solaris-solookup.m4 b/src/cf/solaris-solookup.m4
new file mode 100644 (file)
index 0000000..c1cb309
--- /dev/null
@@ -0,0 +1,17 @@
+AC_DEFUN([SOLARIS_SOLOOKUP_TAKES_SOCKPARAMS], [
+AC_MSG_CHECKING(whether solookup takes a sockparams)
+AC_CACHE_VAL(ac_cv_solaris_solookup_takes_sockparams,
+[
+AC_TRY_COMPILE(
+[#define _KERNEL
+#include <sys/systm.h>
+#include <sys/socketvar.h>],
+[struct sockparams *sp;
+(void) solookup(AF_INET, SOCK_DGRAM, 0, &sp);], 
+ac_cv_solaris_solookup_takes_sockparams=yes,
+ac_cv_solaris_solookup_takes_sockparams=no)])
+AC_MSG_RESULT($ac_cv_solaris_solookup_takes_sockparams)
+if test "$ac_cv_solaris_solookup_takes_sockparams" = "yes"; then
+  AC_DEFINE(SOLOOKUP_TAKES_SOCKPARAMS, 1, [define if solookup takes a sockparams**])
+fi
+])
index 3e973b5..450e7ce 100644 (file)
@@ -50,10 +50,17 @@ RCSID
 /*
  * Function pointers for kernel socket routines
  */
+#ifdef SOLOOKUP_TAKES_SOCKPARAMS
+struct sonode *(*sockfs_socreate)
+  (struct sockparams *, int, int, int, int, int *) = NULL;
+int (*sockfs_solookup)
+  (int, int, int, struct sockparams **) = NULL;
+#else
 struct sonode *(*sockfs_socreate)
   (vnode_t *, int, int, int, int, struct sonode *, int *) = NULL;
 struct vnode *(*sockfs_solookup)
   (int, int, int, char *, int *) = NULL;
+#endif /* SOLOOKUP_TAKES_SOCKPARAMS */
 int (*sockfs_sobind)
   (struct sonode *, struct sockaddr *, int, int, int) = NULL;
 int (*sockfs_sorecvmsg)
@@ -327,12 +334,19 @@ rxk_NewSocketHost(afs_uint32 ahost, short aport)
     struct sockaddr_in addr;
     int error;
     int len;
+#ifdef SOLOOKUP_TAKES_SOCKPARAMS
+    struct sockparams *sp;
+#endif
 
     AFS_STATCNT(osi_NewSocket);
 
     if (sockfs_solookup == NULL) {
        sockfs_solookup =
+#ifdef SOLOOKUP_TAKES_SOCKPARAMS
+           (int (*)())modlookup("sockfs", "solookup");
+#else
            (struct vnode * (*)())modlookup("sockfs", "solookup");
+#endif
        if (sockfs_solookup == NULL) {
            return NULL;
        }
@@ -381,6 +395,14 @@ rxk_NewSocketHost(afs_uint32 ahost, short aport)
     }
 #endif
 
+#ifdef SOLOOKUP_TAKES_SOCKPARAMS
+    error = sockfs_solookup(AF_INET, SOCK_DGRAM, 0, &sp);
+    if (error != 0) {
+       return NULL;
+    }
+
+    so = sockfs_socreate(sp, AF_INET, SOCK_DGRAM, 0, SOV_STREAM, &error);
+#else
     accessvp = sockfs_solookup(AF_INET, SOCK_DGRAM, 0, "/dev/udp", &error);
     if (accessvp == NULL) {
        return NULL;
@@ -388,6 +410,8 @@ rxk_NewSocketHost(afs_uint32 ahost, short aport)
 
     so = sockfs_socreate(accessvp, AF_INET, SOCK_DGRAM, 0, SOV_STREAM, NULL,
                         &error);
+#endif /* SOLOOKUP_TAKES_SOCKPARAMS */
+
     if (so == NULL) {
        return NULL;
     }
@@ -423,7 +447,7 @@ rxk_NewSocket(short aport)
 }
 
 int
-osi_FreeSocket(register osi_socket *asocket)
+osi_FreeSocket(register osi_socket asocket)
 {
     extern int rxk_ListenerPid;
     struct sonode *so = (struct sonode *)asocket;