|
Kernel Functions for Drivers | nvlist_alloc(9F) |
| nvlist_alloc, nvlist_free, nvlist_size, nvlist_pack, nvlist_unpack, nvlist_dup - manage a name-value pair list |
SYNOPSIS
|
#include <sys/nvpair.h> int nvlist_alloc(nvlist_t **nvlp, uint_t nvflag, int kmflag); |
| void nvlist_free(nvlist_t *nvl); |
| int nvlist_size(nvlist_t *nvl, size_t *size, int encoding); |
| int nvlist_pack(nvlist_t *nvl, char **bufp, size_t *buflen, int encoding, int kmflag); |
| int nvlist_unpack(char *buf, size_t buflen, nvlist_t **nvlp, int kmflag); |
| int nvlist_dup(nvlist_t *nvl, nvlist_t **nvlp, int kmflag); |
|
Solaris DDI specific (Solaris DDI)
|
|
-
nvlp
- Address of a pointer to list of name-value pairs (nvlist_t).
-
nvflag
- Specify bit fields defining nvlist_t properties:
-
NV_UNIQUE_NAME
- The nvpair names are unique.
-
NV_UNIQUE_NAME_TYPE
- Name-data type combination is unique
-
kmflag
- Kernel memory allocation policy, either KM_SLEEP or KM_NOSLEEP.
-
nvl
- The nvlist_t to be processed.
-
size
- Pointer to buffer to contain the encoded size.
-
bufp
- Address of buffer to pack nvlist into. Must be 8-byte aligned. If NULL, library will allocate memory.
-
buf
- Buffer containing packed nvlist_t.
-
buflen
- Size of buffer bufp or buf points to.
-
encoding
- Encoding method for packing.
|
|
The nvlist_alloc() function allocates a new name-value pair list and updates nvlp to point to the handle. The argument nvflag specifies nvlist_t properties to remain persistent across packing, unpacking,
and duplication.
The nvlist_free() function frees a name-value pair list.
The nvlist_size() function returns the minimum size of a contiguous buffer large enough to pack nvl. The encoding parameter specifies the method of encoding when packing nvl. Supported encoding methods
are:
-
NV_ENCODE_NATIVE
- Straight bcopy() as described in bcopy(9F).
-
NV_ENCODE_XDR
- Use XDR encoding, suitable for sending to another host.
The nvlist_pack() function packs nvl into contiguous memory starting at *bufp. The encoding parameter specifies the method of encoding (see above).
- If *bufp is not NULL, *bufp is expected to be a caller-allocated buffer of size *buflen. The kmflag argument is ignored.
- If *bufp is NULL, the library will allocate memory and update *bufp to point to the memory and update *buflen to contain the size of the allocated memory. The value of kmflag indicates the memory
allocation policy
The nvlist_unpack() function takes a buffer with a packed nvlist_t and unpacks it into a searchable nvlist_t. The library allocates memory for nvlist_t. The caller is responsible for freeing the memory by calling nvlist_free().
The nvlist_dup() function makes a copy of nvl and updates nvlp to point to the copy.
|
|
For nvlist_alloc(), nvlist_dup():
-
0
- success
-
EINVAL
- invalid argument
-
ENOMEM
- insufficient memory
For nvlist_pack(), nvlist_unpack():
-
0
- success
-
EINVAL
- invalid argument
-
ENOMEM
- insufficient memory
-
EFAULT
- encode/decode error
-
ENOTSUP
- encode/decode method not supported
For nvlist_size():
-
0
- success
-
EINVAL
- invalid argument
|
|
The nvlist_alloc(), nvlist_pack(), nvlist_unpack(), and nvlist_dup() functions can be called from interrupt context only if the KM_NOSLEEP flag is set. They can be called from user context with any valid
flag.
|
| |