xref: /illumos-gate/usr/src/cmd/mdb/common/modules/nfs/common.h (revision 86d949f9497332fe19be6b5d711d265eb957439f)
1*86d949f9SVitaliy Gusev /*
2*86d949f9SVitaliy Gusev  * This file and its contents are supplied under the terms of the
3*86d949f9SVitaliy Gusev  * Common Development and Distribution License ("CDDL"), version 1.0.
4*86d949f9SVitaliy Gusev  * You may only use this file in accordance with the terms of version
5*86d949f9SVitaliy Gusev  * 1.0 of the CDDL.
6*86d949f9SVitaliy Gusev  *
7*86d949f9SVitaliy Gusev  * A full copy of the text of the CDDL should have accompanied this
8*86d949f9SVitaliy Gusev  * source.  A copy of the CDDL is also available via the Internet at
9*86d949f9SVitaliy Gusev  * http://www.illumos.org/license/CDDL.
10*86d949f9SVitaliy Gusev  */
11*86d949f9SVitaliy Gusev /*
12*86d949f9SVitaliy Gusev  * Copyright 2021 Tintri by DDN, Inc. All rights reserved.
13*86d949f9SVitaliy Gusev  */
14*86d949f9SVitaliy Gusev 
15*86d949f9SVitaliy Gusev #ifndef _COMMON_H
16*86d949f9SVitaliy Gusev #define	_COMMON_H
17*86d949f9SVitaliy Gusev 
18*86d949f9SVitaliy Gusev #include <sys/zone.h>
19*86d949f9SVitaliy Gusev #include <sys/mutex.h>
20*86d949f9SVitaliy Gusev #include <sys/rwlock.h>
21*86d949f9SVitaliy Gusev #include <rpc/svc.h>
22*86d949f9SVitaliy Gusev #include <nfs/nfs.h>
23*86d949f9SVitaliy Gusev 
24*86d949f9SVitaliy Gusev extern int zoned_zsd_find_by_key(uintptr_t, zone_key_t, uintptr_t *);
25*86d949f9SVitaliy Gusev extern int zoned_get_nfs_globals(uintptr_t, uintptr_t *);
26*86d949f9SVitaliy Gusev extern int zoned_get_zsd(uintptr_t, char *, uintptr_t *);
27*86d949f9SVitaliy Gusev 
28*86d949f9SVitaliy Gusev extern const char *common_mutex(kmutex_t *);
29*86d949f9SVitaliy Gusev extern const char *common_rwlock(krwlock_t *);
30*86d949f9SVitaliy Gusev extern const char *common_netbuf_str(struct netbuf *);
31*86d949f9SVitaliy Gusev 
32*86d949f9SVitaliy Gusev /*
33*86d949f9SVitaliy Gusev  * Generic hash table walker
34*86d949f9SVitaliy Gusev  *
35*86d949f9SVitaliy Gusev  * Generic hash table is an array of head structures starting at address
36*86d949f9SVitaliy Gusev  * array_addr. The number of the head structures in the array is array_len.
37*86d949f9SVitaliy Gusev  * Size of the head structure is head_size. There is a pointer in the head
38*86d949f9SVitaliy Gusev  * structure called first_name with offset first_offset that points to the
39*86d949f9SVitaliy Gusev  * linked list of member structures. The member structure type name is stored
40*86d949f9SVitaliy Gusev  * in member_type_name.  Size of the member structure is member_size. The
41*86d949f9SVitaliy Gusev  * member structure have a pointer to the next member structure at offset
42*86d949f9SVitaliy Gusev  * next_offset.
43*86d949f9SVitaliy Gusev  *
44*86d949f9SVitaliy Gusev  * A pointer to the hash_table_walk_arg_t should be passed as walk_arg to the
45*86d949f9SVitaliy Gusev  * hash_table_walk_init().
46*86d949f9SVitaliy Gusev  */
47*86d949f9SVitaliy Gusev 
48*86d949f9SVitaliy Gusev typedef struct hash_table_walk_arg {
49*86d949f9SVitaliy Gusev 	uintptr_t array_addr;
50*86d949f9SVitaliy Gusev 	int array_len;
51*86d949f9SVitaliy Gusev 	size_t head_size;
52*86d949f9SVitaliy Gusev 	const char *first_name;
53*86d949f9SVitaliy Gusev 	size_t first_offset;
54*86d949f9SVitaliy Gusev 	const char *member_type_name;
55*86d949f9SVitaliy Gusev 	size_t member_size;
56*86d949f9SVitaliy Gusev 	size_t next_offset;
57*86d949f9SVitaliy Gusev } hash_table_walk_arg_t;
58*86d949f9SVitaliy Gusev 
59*86d949f9SVitaliy Gusev extern int hash_table_walk_init(mdb_walk_state_t *);
60*86d949f9SVitaliy Gusev extern int hash_table_walk_step(mdb_walk_state_t *);
61*86d949f9SVitaliy Gusev extern void hash_table_walk_fini(mdb_walk_state_t *);
62*86d949f9SVitaliy Gusev 
63*86d949f9SVitaliy Gusev #endif	/* _COMMON_H */
64