From ee72f251049ca361b095e813adce63216343afd8 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Wed, 24 Jun 2009 22:38:15 +0000 Subject: [PATCH] osol-solookup-20090624 LICENSE IPL10 FIXES 124924 update for new opensolaris solookup function signature --- acinclude.m4 | 1 + src/cf/solaris-solookup.m4 | 17 +++++++++++++++++ src/rx/SOLARIS/rx_knet.c | 26 +++++++++++++++++++++++++- 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 src/cf/solaris-solookup.m4 diff --git a/acinclude.m4 b/acinclude.m4 index 9646ef6..5c508e5 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -424,6 +424,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; -- 1.9.4