| /* |
| * CDDL HEADER START |
| * |
| * The contents of this file are subject to the terms of the |
| * 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. |
| * See the License for the specific language governing permissions |
| * and limitations under the License. |
| * |
| * When distributing Covered Code, include this CDDL HEADER in each |
| * file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
| * If applicable, add the following below this CDDL HEADER, with the |
| * fields enclosed by brackets "[]" replaced with your own identifying |
| * information: Portions Copyright [yyyy] [name of copyright owner] |
| * |
| * CDDL HEADER END |
| */ |
| /* |
| * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. |
| */ |
| |
| #ifndef _NFS4_IDMAP_IMPL_H |
| #define _NFS4_IDMAP_IMPL_H |
| |
| #include <sys/list.h> |
| #include <sys/door.h> |
| #include <sys/pkp_hash.h> |
| |
| /* |
| * This is a private header file. Applications should not directly include |
| * this file. |
| */ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* |
| * Cache Entry Definitions |
| */ |
| #define NFSID_CACHE_ANCHORS PKP_HASH_SIZE |
| |
| typedef struct nfsidmap { |
| struct nfsidmap *id_chain[2]; /* must be first */ |
| time_t id_time; /* time stamp */ |
| uid_t id_no; /* uid/gid */ |
| utf8string id_str; /* user@domain string */ |
| } nfsidmap_t; |
| |
| #define id_forw id_chain[0] |
| #define id_back id_chain[1] |
| #define id_len id_str.utf8string_len |
| #define id_val id_str.utf8string_val |
| |
| typedef struct nfsidhq { |
| union { |
| struct nfsidhq *hq_head[2]; /* for empty queue */ |
| struct nfsidmap *hq_chain[2]; /* for LRU list */ |
| } hq_link; |
| kmutex_t hq_lock; /* protects hash queue */ |
| } nfsidhq_t; |
| |
| #define hq_que_forw hq_link.hq_head[0] |
| #define hq_que_back hq_link.hq_head[1] |
| #define hq_lru_forw hq_link.hq_chain[0] |
| #define hq_lru_back hq_link.hq_chain[1] |
| |
| typedef struct { |
| const char *name; /* cache name */ |
| nfsidhq_t *table; /* hash table */ |
| /* |
| * Since we need to know the status of nfsmapid from random functions |
| * that deal with idmap caches, we keep a pointer to the relevant fields |
| * in the zone's globals so we don't have to keep passing them around. |
| */ |
| door_handle_t *nfsidmap_daemon_dh; |
| } idmap_cache_info_t; |
| |
| typedef enum hash_stat { HQ_HASH_HINT, HQ_HASH_FIND } hash_stat; |
| |
| /* |
| * Per-zone modular globals |
| */ |
| struct nfsidmap_globals { |
| list_node_t nig_link; /* linkage into global list */ |
| enum clnt_stat nig_last_stat; /* status of last RPC call */ |
| int nig_msg_done; /* have we printed a message? */ |
| idmap_cache_info_t u2s_ci; /* table mapping uid-to-string */ |
| idmap_cache_info_t s2u_ci; /* table mapping string-to-uid */ |
| idmap_cache_info_t g2s_ci; /* table mapping groupid-to-string */ |
| idmap_cache_info_t s2g_ci; /* table mapping string-to-groupid */ |
| pid_t nfsidmap_pid; |
| kmutex_t nfsidmap_daemon_lock; |
| /* |
| * nfsidmap_daemon_lock protects the following: |
| * nfsidmap_daemon_dh |
| */ |
| door_handle_t nfsidmap_daemon_dh; |
| }; |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* _NFS4_IDMAP_IMPL_H */ |