'\" te .\" .\" This file and its contents are supplied under the terms of the .\" Common Development and Distribution License ("CDDL"), version 1.0. .\" You may only use this file in accordance with the terms of version .\" 1.0 of the CDDL. .\" .\" A full copy of the text of the CDDL should have accompanied this .\" source. A copy of the CDDL is also available via the Internet at .\" http://www.illumos.org/license/CDDL. .\" .\" .\" Copyright (c) 2014, Joyent, Inc. All rights reserved. .\" .TH VND_CREATE 3VND "Feb 21, 2014" .SH NAME vnd_walk \- walk all vnd devices .SH SYNOPSIS .LP .nf cc [ flag... ] file... -lvnd [ library... ] #include typedef int (*vnd_walk_cb_f)(vnd_info_t *viip, void *cbarg); int vnd_walk(vnd_walk_cb_t cb, void *arg, vnd_errno_t *vnderr, int *syserr); .fi .SH DESCRIPTION .LP The vnd_walk() function fires the callback function cb once for every vnd device that is visible in the current zone. If the caller is in the global zone, then all vnd devices in all zones will be walked. If the caller is in a non-global zone, then only the devices in that zone will be visible. .LP The function cb will be called with two arguments. The first argument, viip, is a pointer to a structure that contains information about the link. The second argument to the function cb, cbarg, is the same argument that is passed to the function vnd_walk as arg. To continue the function cb should return zero. If the function cb returns non-zero the walk will terminate. .LP As the vnd_walk function does not have a handle, errors are returned in vnderr and syserr. Both vnderr and syserr are allowed to be NULL pointers. If either one is a NULL pointer, then error information for that class of error will not be returned. It is not recommended that consumers supply NULL pointers. .LP The vnd_info_t structure contains the following members: .in +2 .nf uint32_t vi_version zoneid_t vi_zone char vi_name[LIBVND_NAMELEN]; char vi_datalink[LIBVND_NAMELEN]; .fi .in -2 .LP The member vi_version is guaranteed to be the first member of the structure. This number indicates the current revision of the structure and is set to the integer value 1. More properties may be added in future releases. Those properties will be tied to a greater version number so software knows whether or not it is legal to access them. .LP The vi_zone field indicates the zone id that the vnd device exists in. The vi_name field is the name of the vnd device. If the vnd_device is not linked, the name field is set to "". The vi_datalink field is filled in with the name of the data link the vnd device is on top of. .SH RETURN VALUES .LP The vnd_walk function will return zero on success. If the consumer supplied callback function returned non-zero, then the vnd_walk function will return 1. If an error occurred, -1 is returned, and if vnderr and syserr are non-null, they are filled in with their respective error values. See vnd_errno(3VND) for more information on these errors. .SH EXAMPLES .LP Example 1 Walk all devices and print information about them .LP The following sample C program walks every vnd device and prints out information about them. .sp .in +2 .nf #include #include static int print_entry(vnd_info_t *viip, void *unused) { (void) printf("device %s over data link %s in zone %d\n", viip->vi_name, viip->vi_datalink, viip->vi_zone); return (0); } int main(void) { vnd_errno_t vnderr; int syserr; if (vnd_walk(print_entry, NULL, &vnderr, &syserr) != 0) { (void) fprintf(stderr, "failed to walk vnd devices: %s\n", vnderr != VND_E_SYS ? vnd_strerror(vnderr) : vnd_strsyserror(syserr)); return (1); } return (0); } .fi .in -2 .SH ATTRIBUTES .sp .LP See attributes(5) for descriptions of the following attributes: .sp .TS box; c | c l | l . ATTRIBUTE TYPE ATTRIBUTE VALUE _ Stability Committed _ MT-Level MT-Safe .TE .SH SEE ALSO libvnd(3VND), vnd_errno(3VND), attributes(5), zones(5)