From 39d3e1694f93ce0809fd2a99dd7fc32257c14da9 Mon Sep 17 00:00:00 2001 From: evanl Date: Fri, 9 Jun 2006 22:39:26 -0700 Subject: PSARC 2005/714 Automounter Scalability Enhancements 6224343 autofs should use doors to talk to automountd --HG-- rename : usr/src/cmd/fs.d/autofs/key_generic.c => deleted_files/usr/src/cmd/fs.d/autofs/key_generic.c --- usr/src/uts/common/sys/fs/autofs.h | 102 ++++++++++++++++++++++++++++++++----- 1 file changed, 88 insertions(+), 14 deletions(-) (limited to 'usr/src/uts/common/sys/fs') diff --git a/usr/src/uts/common/sys/fs/autofs.h b/usr/src/uts/common/sys/fs/autofs.h index 274e270a95..606377251e 100644 --- a/usr/src/uts/common/sys/fs/autofs.h +++ b/usr/src/uts/common/sys/fs/autofs.h @@ -2,9 +2,8 @@ * CDDL HEADER START * * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. @@ -20,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -29,21 +28,28 @@ #pragma ident "%Z%%M% %I% %E% SMI" -#include -#include +#include +#include +#include +#include +#include +#include #include #include -#include #include +#include +#include #include +#include +#include #ifdef __cplusplus extern "C" { #endif + #ifdef _KERNEL -struct action_list; /* * Tracing macro; expands to nothing for non-debug kernels. @@ -182,6 +188,7 @@ typedef struct fnnode { struct autofs_globals *fn_globals; /* global variables */ } fnnode_t; + #define vntofn(vp) ((struct fnnode *)((vp)->v_data)) #define fntovn(fnp) (((fnp)->fn_vnode)) #define vfstofni(vfsp) ((struct fninfo *)((vfsp)->vfs_data)) @@ -217,6 +224,12 @@ struct autofs_globals { int fng_unmount_threads; int fng_verbose; zoneid_t fng_zoneid; + pid_t fng_autofs_pid; + kmutex_t fng_autofs_daemon_lock; + /* + * autofs_daemon_lock protects fng_autofs_daemon_dh + */ + door_handle_t fng_autofs_daemon_dh; }; extern zone_key_t autofs_key; @@ -251,14 +264,15 @@ extern fnnode_t *auto_makefnnode(vtype_t, vfs_t *, char *, cred_t *, extern void auto_freefnnode(fnnode_t *); extern void auto_disconnect(fnnode_t *, fnnode_t *); extern void auto_do_unmount(struct autofs_globals *); -/*PRINTFLIKE3*/ -extern void auto_log(struct autofs_globals *, int level, const char *fmt, ...) - __KPRINTFLIKE(3); +/*PRINTFLIKE4*/ +extern void auto_log(int verbose, zoneid_t zoneid, int level, + const char *fmt, ...) + __KPRINTFLIKE(4); /*PRINTFLIKE2*/ extern void auto_dprint(int level, const char *fmt, ...) __KPRINTFLIKE(2); -extern int auto_calldaemon(fninfo_t *, rpcproc_t, xdrproc_t, void *, - xdrproc_t, void *, cred_t *, bool_t); +extern int auto_calldaemon(zoneid_t, int, xdrproc_t, void *, xdrproc_t, + void *, int, bool_t); extern int auto_lookup_aux(fnnode_t *, char *, cred_t *); extern void auto_new_mount_thread(fnnode_t *, char *, cred_t *); extern int auto_nobrowse_option(char *); @@ -273,6 +287,66 @@ extern bool_t xdr_uid_t(XDR *, uid_t *); #endif /* _KERNEL */ +/* + * autofs structures and defines needed for use with doors. + */ +#define AUTOFS_NULL 0 +#define AUTOFS_MOUNT 1 +#define AUTOFS_UNMOUNT 2 +#define AUTOFS_READDIR 3 +#define AUTOFS_LOOKUP 4 +#define AUTOFS_SRVINFO 5 +#define AUTOFS_MNTINFO 6 + +/* + * autofs_door_args is a generic structure used to grab the command + * from any of the argument structures passed in. + */ + +typedef struct { + int cmd; + int xdr_len; + char xdr_arg[1]; /* buffer holding xdr encoded data */ +} autofs_door_args_t; + + +typedef struct { + int res_status; + int xdr_len; + char xdr_res[1]; /* buffer holding xdr encoded data */ +} autofs_door_res_t; + +typedef enum autofs_res autofs_res_t; +typedef enum autofs_stat autofs_stat_t; +typedef enum autofs_action autofs_action_t; + +typedef struct { + void * atsd_buf; + size_t atsd_len; +} autofs_tsd_t; + +typedef struct sec_desdata { + int nd_sec_syncaddr_len; + int nd_sec_knc_semantics; + int nd_sec_netnamelen; + uint64_t nd_sec_knc_rdev; + int nd_sec_knc_unused[8]; +} sec_desdata_t; + +typedef struct sec_gssdata { + int element_length; + rpc_gss_service_t service; + char uname[MAX_NAME_LEN]; + char inst[MAX_NAME_LEN]; + char realm[MAX_NAME_LEN]; + uint_t qop; +} sec_gssdata_t; + +typedef struct nfs_secdata { + sec_desdata_t nfs_des_clntdata; + sec_gssdata_t nfs_gss_clntdata; +} nfs_secdata_t; + /* * Comma separated list of mntoptions which are inherited when the * "restrict" option is present. The RESTRICT option must be first! @@ -284,7 +358,7 @@ extern bool_t xdr_uid_t(XDR *, uid_t *); /* * AUTOFS syscall entry point */ -enum autofssys_op { AUTOFS_UNMOUNTALL }; +enum autofssys_op { AUTOFS_UNMOUNTALL, AUTOFS_SETDOOR }; #ifdef _KERNEL extern int autofssys(enum autofssys_op, uintptr_t); -- cgit v1.2.3