kstat-2 - This API exposes v2 kernel statistics, or v2 kstats, to rad(8) clients.
#include <rad/client/2/kstat.h> cc [ flag... ] file... -lkstat2_client [ library... ] interface Kstat const char * uri ; (ro) rc_err_t kstat2_Kstat_getFlags(rc_instance_t *inst, unsigned int *result, kstat2_KstatError_t **error); rc_err_t kstat2_Kstat_getMap(rc_instance_t *inst, kstat2__rad_dict_string_Nv_t **result, kstat2_KstatError_t **error); rc_err_t kstat2_Kstat_getParent(rc_instance_t *inst, rc_instance_t **result, kstat2_KstatError_t **error); rc_err_t kstat2_Kstat_getMapMetadata(rc_instance_t *inst, kstat2_MapMeta_t **result, kstat2_KstatError_t **error); rc_err_t kstat2_Kstat_getNvMetadata(rc_instance_t *inst, kstat2__rad_dict_string_NvMeta_t **result, kstat2_KstatError_t **error); typedef void (*kstat2_Kstat_kstatEvent_cb_f)(rc_instance_t *inst, kstat2_KstatEvent_t *payload, struct timespec ts, void *arg); rc_err_t kstat2_Kstat_subscribe_kstatEvent(rc_instance_t *inst, kstat2_Kstat_kstatEvent_cb_f cb, void *arg); rc_err_t kstat2_Kstat_unsubscribe_kstatEvent(rc_instance_t *inst, void **arg); interface Control rc_err_t kstat2_Control_update(rc_instance_t *inst, kstat2_KstatError_t **error); Enumerated Types enum KstatErrorCode typedef enum kstat2_KstatErrorCode { K2KEC_KEC_NOT_FOUND = 0, K2KEC_KEC_MOD_ERR = 1, } kstat2_KstatErrorCode_t; enum KstatEventType typedef enum kstat2_KstatEventType { K2KET_KET_DATA_ADD = 0, K2KET_KET_DATA_REM = 1, } kstat2_KstatEventType_t; enum NvType typedef enum kstat2_NvType { K2NT_NVVT_STR = 0, K2NT_NVVT_STRS = 1, K2NT_NVVT_INT = 2, K2NT_NVVT_INTS = 3, K2NT_NVVT_KSTAT = 4, } kstat2_NvType_t; enum NvMetaType typedef enum kstat2_NvMetaType { K2NMT_NVMT_UNK = 0, K2NMT_NVMT_ID = 1, K2NMT_NVMT_CNT = 2, K2NMT_NVMT_T_EPOCH = 3, K2NMT_NVMT_T_REL = 4, K2NMT_NVMT_T_ACC = 5, K2NMT_NVMT_PCT = 6, K2NMT_NVMT_ADDR = 7, K2NMT_NVMT_TEMP_C = 8, K2NMT_NVMT_RPM = 9, K2NMT_NVMT_VOLT = 10, K2NMT_NVMT_WATT = 11, K2NMT_NVMT_CURR = 12, K2NMT_NVMT_BYTES = 13, K2NMT_NVMT_BITS = 14, K2NMT_NVMT_STATE = 15, K2NMT_NVMT_FREQ = 16, } kstat2_NvMetaType_t; enum MapMetaType typedef enum kstat2_MapMetaType { K2MMT_MMT_NONE = 0, K2MMT_MMT_QUEUE = 1, K2MMT_MMT_IO = 2, K2MMT_MMT_INTR = 3, K2MMT_MMT_TIMER = 4, K2MMT_MMT_HIST = 5, } kstat2_MapMetaType_t; Structured Types struct KstatError typedef struct kstat2_KstatError kstat2_KstatError_t; struct kstat2_KstatError { kstat2_KstatErrorCode_t kke_errorCode; char *kke_desc; }; void kstat2_KstatError_free(kstat2_KstatError_t *in); struct KstatEvent typedef struct kstat2_KstatEvent kstat2_KstatEvent_t; struct kstat2_KstatEvent { kstat2_KstatEventType_t kke_type; char *kke_uri; }; void kstat2_KstatEvent_free(kstat2_KstatEvent_t *in); struct Nv typedef struct kstat2_Nv kstat2_Nv_t; struct kstat2_Nv { char *kn_name; kstat2_NvType_t kn_type; unsigned int kn_flags; char *kn_string; char **kn_strings; int kn_strings_count; unsigned long long *kn_integer; unsigned long long *kn_integers; int kn_integers_count; rc_instance_t *kn_kstat; }; void kstat2_Nv_free(kstat2_Nv_t *in); struct NvMeta typedef struct kstat2_NvMeta kstat2_NvMeta_t; struct kstat2_NvMeta { kstat2_NvMetaType_t knm_type; unsigned int knm_flags; unsigned long long knm_scale; char *knm_desc; }; void kstat2_NvMeta_free(kstat2_NvMeta_t *in); struct MapMeta typedef struct kstat2_MapMeta kstat2_MapMeta_t; struct kstat2_MapMeta { kstat2_MapMetaType_t kmm_type; unsigned int kmm_flags; char *kmm_desc; }; void kstat2_MapMeta_free(kstat2_MapMeta_t *in); Dictionaries Dictionary { string : Nv } typedef struct base_rad_dict kstat2__rad_dict_string_Nv_t; Dictionary { string : NvMeta } typedef struct base_rad_dict kstat2__rad_dict_string_NvMeta_t;
KSTAT-2(3rad) RAD Module Definitions KSTAT-2(3rad) NAME kstat - This API exposes v2 kernel statistics, or v2 kstats, to rad(8) clients. SYNOPSIS #include <rad/client/2/kstat.h> cc [ flag... ] file... -lkstat2_client [ library... ] interface Kstat const char * uri ; (ro) rc_err_t kstat2_Kstat_getFlags(rc_instance_t *inst, unsigned int *result, kstat2_KstatError_t **error); rc_err_t kstat2_Kstat_getMap(rc_instance_t *inst, kstat2__rad_dict_string_Nv_t **result, kstat2_KstatError_t **error); rc_err_t kstat2_Kstat_getParent(rc_instance_t *inst, rc_instance_t **result, kstat2_KstatError_t **error); rc_err_t kstat2_Kstat_getMapMetadata(rc_instance_t *inst, kstat2_MapMeta_t **result, kstat2_KstatError_t **error); rc_err_t kstat2_Kstat_getNvMetadata(rc_instance_t *inst, kstat2__rad_dict_string_NvMeta_t **result, kstat2_KstatError_t **error); typedef void (*kstat2_Kstat_kstatEvent_cb_f)(rc_instance_t *inst, kstat2_KstatEvent_t *payload, struct timespec ts, void *arg); rc_err_t kstat2_Kstat_subscribe_kstatEvent(rc_instance_t *inst, kstat2_Kstat_kstatEvent_cb_f cb, void *arg); rc_err_t kstat2_Kstat_unsubscribe_kstatEvent(rc_instance_t *inst, void **arg); interface Control rc_err_t kstat2_Control_update(rc_instance_t *inst, kstat2_KstatError_t **error); Enumerated Types enum KstatErrorCode typedef enum kstat2_KstatErrorCode { K2KEC_KEC_NOT_FOUND = 0, K2KEC_KEC_MOD_ERR = 1, } kstat2_KstatErrorCode_t; enum KstatEventType typedef enum kstat2_KstatEventType { K2KET_KET_DATA_ADD = 0, K2KET_KET_DATA_REM = 1, } kstat2_KstatEventType_t; enum NvType typedef enum kstat2_NvType { K2NT_NVVT_STR = 0, K2NT_NVVT_STRS = 1, K2NT_NVVT_INT = 2, K2NT_NVVT_INTS = 3, K2NT_NVVT_KSTAT = 4, } kstat2_NvType_t; enum NvMetaType typedef enum kstat2_NvMetaType { K2NMT_NVMT_UNK = 0, K2NMT_NVMT_ID = 1, K2NMT_NVMT_CNT = 2, K2NMT_NVMT_T_EPOCH = 3, K2NMT_NVMT_T_REL = 4, K2NMT_NVMT_T_ACC = 5, K2NMT_NVMT_PCT = 6, K2NMT_NVMT_ADDR = 7, K2NMT_NVMT_TEMP_C = 8, K2NMT_NVMT_RPM = 9, K2NMT_NVMT_VOLT = 10, K2NMT_NVMT_WATT = 11, K2NMT_NVMT_CURR = 12, K2NMT_NVMT_BYTES = 13, K2NMT_NVMT_BITS = 14, K2NMT_NVMT_STATE = 15, K2NMT_NVMT_FREQ = 16, } kstat2_NvMetaType_t; enum MapMetaType typedef enum kstat2_MapMetaType { K2MMT_MMT_NONE = 0, K2MMT_MMT_QUEUE = 1, K2MMT_MMT_IO = 2, K2MMT_MMT_INTR = 3, K2MMT_MMT_TIMER = 4, K2MMT_MMT_HIST = 5, } kstat2_MapMetaType_t; Structured Types struct KstatError typedef struct kstat2_KstatError kstat2_KstatError_t; struct kstat2_KstatError { kstat2_KstatErrorCode_t kke_errorCode; char *kke_desc; }; void kstat2_KstatError_free(kstat2_KstatError_t *in); struct KstatEvent typedef struct kstat2_KstatEvent kstat2_KstatEvent_t; struct kstat2_KstatEvent { kstat2_KstatEventType_t kke_type; char *kke_uri; }; void kstat2_KstatEvent_free(kstat2_KstatEvent_t *in); struct Nv typedef struct kstat2_Nv kstat2_Nv_t; struct kstat2_Nv { char *kn_name; kstat2_NvType_t kn_type; unsigned int kn_flags; char *kn_string; char **kn_strings; int kn_strings_count; unsigned long long *kn_integer; unsigned long long *kn_integers; int kn_integers_count; rc_instance_t *kn_kstat; }; void kstat2_Nv_free(kstat2_Nv_t *in); struct NvMeta typedef struct kstat2_NvMeta kstat2_NvMeta_t; struct kstat2_NvMeta { kstat2_NvMetaType_t knm_type; unsigned int knm_flags; unsigned long long knm_scale; char *knm_desc; }; void kstat2_NvMeta_free(kstat2_NvMeta_t *in); struct MapMeta typedef struct kstat2_MapMeta kstat2_MapMeta_t; struct kstat2_MapMeta { kstat2_MapMetaType_t kmm_type; unsigned int kmm_flags; char *kmm_desc; }; void kstat2_MapMeta_free(kstat2_MapMeta_t *in); Dictionaries Dictionary { string : Nv } typedef struct base_rad_dict kstat2__rad_dict_string_Nv_t; Dictionary { string : NvMeta } typedef struct base_rad_dict kstat2__rad_dict_string_NvMeta_t; DESCRIPTION API com.oracle.solaris.rad.kstat [1] Two core interfaces are provided: 1. Kstat - an object that represents a v2 kstat. 2. Control - an administration object. INTERFACES interface Kstat Provide kstat information for a particular kstat. The kstat interface represents a kernel statistic. To retrieve a specific instance, lookup based on the kstat URI. Kstat Properties const char * uri (read-only) -- the uri for this kstat rc_err_t kstat2_Kstat_get_uri(rc_instance_t *inst, char **result); Get property value. Arguments: inst -- RAD instance result -- Property value returned Kstat Methods rc_err_t kstat2_Kstat_getFlags(rc_instance_t *inst, unsigned int *result, kstat2_KstatError_t **error); Returns the bitwise kstat map flags. o 0x01 - Kstat has become dormant Arguments: inst -- RAD instance result error rc_err_t kstat2_Kstat_getMap(rc_instance_t *inst, kstat2__rad_dict_string_Nv_t **result, kstat2_KstatError_t **error); Get the map containing the current kstat values Returns the map containing the current kstat values this instance is associated with. Arguments: inst -- RAD instance result error rc_err_t kstat2_Kstat_getParent(rc_instance_t *inst, rc_instance_t **result, kstat2_KstatError_t **error); Get the parent kstat Arguments: inst -- RAD instance result error rc_err_t kstat2_Kstat_getMapMetadata(rc_instance_t *inst, kstat2_MapMeta_t **result, kstat2_KstatError_t **error); Get the metadata for the kstat map Arguments: inst -- RAD instance result error rc_err_t kstat2_Kstat_getNvMetadata(rc_instance_t *inst, kstat2__rad_dict_string_NvMeta_t **result, kstat2_KstatError_t **error); Returns available metadata for name/value pairs. Arguments: inst -- RAD instance result error Kstat Retrieve rc_err_t kstat2_Kstat__rad_get_name(adr_name_t **result, int n, ...); Obtain RAD name of a Kstat object. Arguments: result -- RAD name n -- Number of key-value pairs provided as variadic arguments ... -- Optional key-value pairs that compose the primary key rc_err_t kstat2_Kstat__rad_lookup(rc_conn_t *c, boolean_t strict, rc_instance_t **result, int n, ...); Lookup a Kstat instance. Construct a RAD name for the interface based on the provided key-value pairs and perform a lookup. If successful, instance reference is returned in the result. Arguments: c -- RAD connection handle strict -- Strict (B_TRUE) or relaxed (B_FALSE) versioning result -- RAD instance n -- Number of key-value pairs provided as variadic arguments ... -- Optional key-value pairs that compose the primary key rc_err_t kstat2_Kstat__rad_list(rc_conn_t *c, boolean_t strict, adr_pattern_scheme_t scheme, adr_name_t ***result, int *result_count, int n, ...); List RAD names of a available Kstat instances. Returns an array and array size of matching object names. Arguments: c -- RAD connection handle strict -- Strict (B_TRUE) or relaxed (B_FALSE) versioning scheme -- Apply glob (NS_GLOB) or regex (NS_REGEX) matching result -- Array of RAD names result_count -- Number of names in result array n -- Number of key-value pairs provided as variadic arguments ... -- Optional key-value pairs that compose the primary key Kstat Events kstatEvent An event is generated when a kstat is added or removed from the system. The event will contain the type of event that occurred and the URI of the kstat it occurred on. An event listener may be registered to any kstat interface and will receive all events that occur on itself and any subinstance below it in the tree. typedef void (*kstat2_Kstat_kstatEvent_cb_f)(rc_instance_t *inst, kstat2_KstatEvent_t *payload, struct timespec ts, void *arg); Function invoked when event "kstatEvent" occurs. Arguments: inst -- RAD instance that generated the event payload -- Event payload ts -- Time stamp arg -- User data: custom parameter to invoke the function with rc_err_t kstat2_Kstat_subscribe_kstatEvent(rc_instance_t *inst, kstat2_Kstat_kstatEvent_cb_f cb, void *arg); Subscribe to event "kstatEvent". Arguments: inst -- RAD instance cb -- Event callback function arg -- User data: custom parameter to invoke the function with rc_err_t kstat2_Kstat_unsubscribe_kstatEvent(rc_instance_t *inst, void **arg); Unsubscribe from event "kstatEvent". Arguments: inst -- RAD instance arg -- User data returned interface Control Kstat administration interface. The Control interface provides an administrative API for the kstat v2 infrastructure. Control Methods rc_err_t kstat2_Control_update(rc_instance_t *inst, kstat2_KstatError_t **error); Update the kstat chain Attempts to update the kstat chain. This will refresh kstat values, ready for when the next snapshot is taken. Arguments: inst -- RAD instance error Control Retrieve rc_err_t kstat2_Control__rad_get_name(adr_name_t **result, int n, ...); Obtain RAD name of a Control object. Arguments: result -- RAD name n -- Number of key-value pairs provided as variadic arguments ... -- Optional key-value pairs that compose the primary key rc_err_t kstat2_Control__rad_lookup(rc_conn_t *c, boolean_t strict, rc_instance_t **result, int n, ...); Lookup a Control instance. Construct a RAD name for the interface based on the provided key-value pairs and perform a lookup. If successful, instance reference is returned in the result. Arguments: c -- RAD connection handle strict -- Strict (B_TRUE) or relaxed (B_FALSE) versioning result -- RAD instance n -- Number of key-value pairs provided as variadic arguments ... -- Optional key-value pairs that compose the primary key rc_err_t kstat2_Control__rad_list(rc_conn_t *c, boolean_t strict, adr_pattern_scheme_t scheme, adr_name_t ***result, int *result_count, int n, ...); List RAD names of a available Control instances. Returns an array and array size of matching object names. Arguments: c -- RAD connection handle strict -- Strict (B_TRUE) or relaxed (B_FALSE) versioning scheme -- Apply glob (NS_GLOB) or regex (NS_REGEX) matching result -- Array of RAD names result_count -- Number of names in result array n -- Number of key-value pairs provided as variadic arguments ... -- Optional key-value pairs that compose the primary key ENUMERATED TYPES enum KstatErrorCode typedef enum kstat2_KstatErrorCode { K2KEC_KEC_NOT_FOUND = 0, K2KEC_KEC_MOD_ERR = 1, } kstat2_KstatErrorCode_t; K2KEC_KEC_NOT_FOUND (0) -- The requested kstat object no longer exists. K2KEC_KEC_MOD_ERR (1) -- An unexpected error has occurred with this RAD module. enum KstatEventType typedef enum kstat2_KstatEventType { K2KET_KET_DATA_ADD = 0, K2KET_KET_DATA_REM = 1, } kstat2_KstatEventType_t; K2KET_KET_DATA_ADD (0) -- Kstat data added K2KET_KET_DATA_REM (1) -- Kstat data removed enum NvType -- Type of kstat value. typedef enum kstat2_NvType { K2NT_NVVT_STR = 0, K2NT_NVVT_STRS = 1, K2NT_NVVT_INT = 2, K2NT_NVVT_INTS = 3, K2NT_NVVT_KSTAT = 4, } kstat2_NvType_t; K2NT_NVVT_STR (0) -- Null-terminated C string. K2NT_NVVT_STRS (1) -- Array of null-terminated C strings. K2NT_NVVT_INT (2) -- 64-bit unsigned integer. K2NT_NVVT_INTS (3) -- Array of 64-bit unsigned integers. K2NT_NVVT_KSTAT (4) -- Nested Kstat instance. enum NvMetaType typedef enum kstat2_NvMetaType { K2NMT_NVMT_UNK = 0, K2NMT_NVMT_ID = 1, K2NMT_NVMT_CNT = 2, K2NMT_NVMT_T_EPOCH = 3, K2NMT_NVMT_T_REL = 4, K2NMT_NVMT_T_ACC = 5, K2NMT_NVMT_PCT = 6, K2NMT_NVMT_ADDR = 7, K2NMT_NVMT_TEMP_C = 8, K2NMT_NVMT_RPM = 9, K2NMT_NVMT_VOLT = 10, K2NMT_NVMT_WATT = 11, K2NMT_NVMT_CURR = 12, K2NMT_NVMT_BYTES = 13, K2NMT_NVMT_BITS = 14, K2NMT_NVMT_STATE = 15, K2NMT_NVMT_FREQ = 16, } kstat2_NvMetaType_t; K2NMT_NVMT_UNK (0) -- Unknown type K2NMT_NVMT_ID (1) -- Identifier, e.g. CPU type, CPU chip ID K2NMT_NVMT_CNT (2) -- Count, e.g. network packets, disk blocks K2NMT_NVMT_T_EPOCH (3) -- Time since UNIX epoch K2NMT_NVMT_T_REL (4) -- Time relative to boot K2NMT_NVMT_T_ACC (5) -- Accumulated time since boot K2NMT_NVMT_PCT (6) -- Percentage, 0-100 K2NMT_NVMT_ADDR (7) -- Memory address K2NMT_NVMT_TEMP_C (8) -- Temperature in centigrade K2NMT_NVMT_RPM (9) -- Revolutions per minute K2NMT_NVMT_VOLT (10) -- Voltage K2NMT_NVMT_WATT (11) -- Power consumption K2NMT_NVMT_CURR (12) -- Current K2NMT_NVMT_BYTES (13) -- Byte count K2NMT_NVMT_BITS (14) -- Bit count K2NMT_NVMT_STATE (15) -- State, e.g. CPU state K2NMT_NVMT_FREQ (16) -- Frequence (Hz) enum MapMetaType typedef enum kstat2_MapMetaType { K2MMT_MMT_NONE = 0, K2MMT_MMT_QUEUE = 1, K2MMT_MMT_IO = 2, K2MMT_MMT_INTR = 3, K2MMT_MMT_TIMER = 4, K2MMT_MMT_HIST = 5, } kstat2_MapMetaType_t; K2MMT_MMT_NONE (0) -- Map contains no specific data type K2MMT_MMT_QUEUE (1) -- Map contains queue data K2MMT_MMT_IO (2) -- Map contains IO data K2MMT_MMT_INTR (3) -- Map contains interrupt data K2MMT_MMT_TIMER (4) -- Map contains timer data K2MMT_MMT_HIST (5) -- Map contains histogram data STRUCTURED TYPES struct KstatError typedef struct kstat2_KstatError kstat2_KstatError_t; struct kstat2_KstatError { kstat2_KstatErrorCode_t kke_errorCode; char *kke_desc; }; void kstat2_KstatError_free(kstat2_KstatError_t *in); Fields: kke_errorCode -- Error code for the error that occurred. kke_desc -- Description of the error that occurred. struct KstatEvent typedef struct kstat2_KstatEvent kstat2_KstatEvent_t; struct kstat2_KstatEvent { kstat2_KstatEventType_t kke_type; char *kke_uri; }; void kstat2_KstatEvent_free(kstat2_KstatEvent_t *in); Fields: kke_type -- The type of event that occurred kke_uri -- The URI of the kstat the event is for struct Nv -- A kstat name/value pair. typedef struct kstat2_Nv kstat2_Nv_t; struct kstat2_Nv { char *kn_name; kstat2_NvType_t kn_type; unsigned int kn_flags; char *kn_string; char **kn_strings; int kn_strings_count; unsigned long long *kn_integer; unsigned long long *kn_integers; int kn_integers_count; rc_instance_t *kn_kstat; }; void kstat2_Nv_free(kstat2_Nv_t *in); Fields: kn_name -- The name of the value. kn_type -- The type of the name/value pair. kn_flags Bitwise nv_flags field. o 0x01 - Value is invalid kn_string -- The string value. kn_strings -- The array of string values. kn_strings_count kn_integer -- The integer value. kn_integers -- The array of integer values. kn_integers_count kn_kstat -- Reference to a nested Kstat instance struct NvMeta typedef struct kstat2_NvMeta kstat2_NvMeta_t; struct kstat2_NvMeta { kstat2_NvMetaType_t knm_type; unsigned int knm_flags; unsigned long long knm_scale; char *knm_desc; }; void kstat2_NvMeta_free(kstat2_NvMeta_t *in); Fields: knm_type -- Metadata type knm_flags Bitwise nv_meta_flags field. o 0x01 - Scale is a divisor not a multiplier o 0x02 - Value is immutable o 0x04 - Value is stable across Solaris releases knm_scale -- Scale of the value knm_desc -- Descriptive string struct MapMeta -- Metadata for the kstat map typedef struct kstat2_MapMeta kstat2_MapMeta_t; struct kstat2_MapMeta { kstat2_MapMetaType_t kmm_type; unsigned int kmm_flags; char *kmm_desc; }; void kstat2_MapMeta_free(kstat2_MapMeta_t *in); Fields: kmm_type -- Metadata type kmm_flags Bitwise map_meta_flags field. o 0x01 - Map is stable across solaris releases o 0x02 - Map has privileged read access kmm_desc -- Descriptive string DICTIONARIES Dictionary { string : Nv } Dictionary with a key type of string and a value type of Nv. typedef struct base_rad_dict kstat2__rad_dict_string_Nv_t; rc_err_t kstat2__rad_dict_string_Nv_get(kstat2__rad_dict_string_Nv_t *dict, const char *key, kstat2_Nv_t **result); Get the value for given key. Arguments: dict -- Dictionary key -- Key value result -- Value returned rc_err_t kstat2__rad_dict_string_Nv_put(kstat2__rad_dict_string_Nv_t *dict, const char *key, kstat2_Nv_t *value, kstat2_Nv_t **result); Put a key-value pair into the dictionary. Returns a previous value stored with the same key if one exists. Arguments: dict -- Dictionary key -- Key value value -- Value written result -- Original value for the key rc_err_t kstat2__rad_dict_string_Nv_contains(kstat2__rad_dict_string_Nv_t *dict, const char *key); Check whether a key exists in the dictionary. Returns RCE_OK when key exists, RCE_CLIENT_NOTFOUND otherwise. Arguments: dict -- Dictionary key -- Key value rc_err_t kstat2__rad_dict_string_Nv_remove(kstat2__rad_dict_string_Nv_t *dict, const char *key, kstat2_Nv_t **result); Remove key-value pair from the dictionary. Returns RCE_OK when key was sucessfully removed, RCE_CLIENT_NOTFOUND otherwise. Arguments: dict -- Dictionary key -- Key value result -- Original value for the key rc_err_t kstat2__rad_dict_string_Nv_keys(kstat2__rad_dict_string_Nv_t *dict, char ***result, int *count); Get list of keys from the dictionary. Memory associated with the result array should be freed by the user. Arguments: dict -- Dictionary result -- Array of dictionary keys count -- Number of items in result array rc_err_t kstat2__rad_dict_string_Nv_values(kstat2__rad_dict_string_Nv_t *dict, kstat2_Nv_t ***result, int *count); Get list of values from the dictionary. Memory associated with the result array should be freed by the user. Arguments: dict -- Dictionary result -- Array of dictionary values count -- Number of items in result array unsigned int kstat2__rad_dict_string_Nv_size(kstat2__rad_dict_string_Nv_t *dict); Get number of key-value pairs in the dictionary. Arguments: dict -- Dictionary kstat2__rad_dict_string_Nv_t * kstat2__rad_dict_string_Nv_create(const rc_instance_t *inst); Create a new, empty dictionary. Returns a pointer to the dictionary, or NULL on error. Arguments: inst -- RAD instance void kstat2__rad_dict_string_Nv_free(kstat2__rad_dict_string_Nv_t *dict); Destroy the dictionary and release the allocated memory. Arguments: dict -- Dictionary rc_err_t kstat2__rad_dict_string_Nv_map(kstat2__rad_dict_string_Nv_t *dict, rc_err_t(*func)(const char *, kstat2_Nv_t *, void *), void *arg); Invoke a function with each key-value pair in the dictionary. Arguments: dict -- Dictionary func -- Function to invoke The arguments are: key, value, user-data. arg -- User data: custom parameter to invoke the function with Dictionary { string : NvMeta } Dictionary with a key type of string and a value type of NvMeta. typedef struct base_rad_dict kstat2__rad_dict_string_NvMeta_t; rc_err_t kstat2__rad_dict_string_NvMeta_get(kstat2__rad_dict_string_NvMeta_t *dict, const char *key, kstat2_NvMeta_t **result); Get the value for given key. Arguments: dict -- Dictionary key -- Key value result -- Value returned rc_err_t kstat2__rad_dict_string_NvMeta_put(kstat2__rad_dict_string_NvMeta_t *dict, const char *key, kstat2_NvMeta_t *value, kstat2_NvMeta_t **result); Put a key-value pair into the dictionary. Returns a previous value stored with the same key if one exists. Arguments: dict -- Dictionary key -- Key value value -- Value written result -- Original value for the key rc_err_t kstat2__rad_dict_string_NvMeta_contains(kstat2__rad_dict_string_NvMeta_t *dict, const char *key); Check whether a key exists in the dictionary. Returns RCE_OK when key exists, RCE_CLIENT_NOTFOUND otherwise. Arguments: dict -- Dictionary key -- Key value rc_err_t kstat2__rad_dict_string_NvMeta_remove(kstat2__rad_dict_string_NvMeta_t *dict, const char *key, kstat2_NvMeta_t **result); Remove key-value pair from the dictionary. Returns RCE_OK when key was sucessfully removed, RCE_CLIENT_NOTFOUND otherwise. Arguments: dict -- Dictionary key -- Key value result -- Original value for the key rc_err_t kstat2__rad_dict_string_NvMeta_keys(kstat2__rad_dict_string_NvMeta_t *dict, char ***result, int *count); Get list of keys from the dictionary. Memory associated with the result array should be freed by the user. Arguments: dict -- Dictionary result -- Array of dictionary keys count -- Number of items in result array rc_err_t kstat2__rad_dict_string_NvMeta_values(kstat2__rad_dict_string_NvMeta_t *dict, kstat2_NvMeta_t ***result, int *count); Get list of values from the dictionary. Memory associated with the result array should be freed by the user. Arguments: dict -- Dictionary result -- Array of dictionary values count -- Number of items in result array unsigned int kstat2__rad_dict_string_NvMeta_size(kstat2__rad_dict_string_NvMeta_t *dict); Get number of key-value pairs in the dictionary. Arguments: dict -- Dictionary kstat2__rad_dict_string_NvMeta_t * kstat2__rad_dict_string_NvMeta_create(const rc_instance_t *inst); Create a new, empty dictionary. Returns a pointer to the dictionary, or NULL on error. Arguments: inst -- RAD instance void kstat2__rad_dict_string_NvMeta_free(kstat2__rad_dict_string_NvMeta_t *dict); Destroy the dictionary and release the allocated memory. Arguments: dict -- Dictionary rc_err_t kstat2__rad_dict_string_NvMeta_map(kstat2__rad_dict_string_NvMeta_t *dict, rc_err_t(*func)(const char *, kstat2_NvMeta_t *, void *), void *arg); Invoke a function with each key-value pair in the dictionary. Arguments: dict -- Dictionary func -- Function to invoke The arguments are: key, value, user-data. arg -- User data: custom parameter to invoke the function with VERSION 2.0 ATTRIBUTES See attributes(7) for descriptions of the following attributes: +--------------------+----------------------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +--------------------+----------------------------------------+ |Availability | system/management/rad/module/rad-kstat | +--------------------+----------------------------------------+ |Interface Stability | Private | +--------------------+----------------------------------------+ SEE ALSO rad(8) NOTES 1. Accessing Python documentation for this module: $ pydoc rad.bindings.com.oracle.solaris.rad.kstat_2 Solaris 11.4 2017-02-01 KSTAT-2(3rad)