From: Andrew Deason Date: Wed, 24 Jun 2009 22:38:27 +0000 (+0000) Subject: DEVEL15-osol-solookup-20090624 X-Git-Url: http://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=eb252cea4afb758cc1627c218932d5d31c39a2f9 DEVEL15-osol-solookup-20090624 LICENSE IPL10 FIXES 124924 update for new opensolaris solookup function signature (cherry picked from commit ee72f251049ca361b095e813adce63216343afd8) --- diff --git a/acinclude.m4 b/acinclude.m4 index 4f3ba51..7edc290 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -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 index 0000000..c1cb309 --- /dev/null +++ b/src/cf/solaris-solookup.m4 @@ -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 +#include ], +[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 +]) diff --git a/src/rx/SOLARIS/rx_knet.c b/src/rx/SOLARIS/rx_knet.c index 3e973b5..450e7ce 100644 --- a/src/rx/SOLARIS/rx_knet.c +++ b/src/rx/SOLARIS/rx_knet.c @@ -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;