--- /dev/null
+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
+])
/*
* 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)
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;
}
}
#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;
so = sockfs_socreate(accessvp, AF_INET, SOCK_DGRAM, 0, SOV_STREAM, NULL,
&error);
+#endif /* SOLOOKUP_TAKES_SOCKPARAMS */
+
if (so == NULL) {
return NULL;
}
}
int
-osi_FreeSocket(register osi_socket *asocket)
+osi_FreeSocket(register osi_socket asocket)
{
extern int rxk_ListenerPid;
struct sonode *so = (struct sonode *)asocket;