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