fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi * This file and its contents are supplied under the terms of the
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0.
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi * You may only use this file in accordance with the terms of version
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi * 1.0 of the CDDL.
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi * A full copy of the text of the CDDL should have accompanied this
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi * source. A copy of the CDDL is also available via the Internet at
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi * Copyright (c) 2012 Joyent, Inc. All rights reserved.
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi * Use is subject to license terms.
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi return ("no error");
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi return ("out of memory");
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi return ("zone does not exist or is not using ipd");
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi return ("argument out of range");
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi return ("permission denied");
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi return ("bad pointer");
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi return ("internal library error");
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi return ("unknown error");
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchiipd_set_errno(ipd_errno_t e, const char *fmt, ...)
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi (void) vsnprintf(ipd_errmsg, sizeof (ipd_errmsg), fmt, ap);
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi "unable to open %s: %s", path, strerror(errno)));
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchiipd_status_read(int fd, ipd_stathdl_t *ispp)
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi "unable to retrieve ipd zone list: %s", strerror(errno)));
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi malloc(sizeof (ipd_ioc_info_t) * ipil.ipil_nzones);
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi "unable to retrieve ipd zone list: %s",
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi if ((isp = malloc(sizeof (struct ipd_stat))) == NULL) {
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi isp->is_zoneids = malloc(sizeof (zoneid_t) * ipil.ipil_nzones);
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi isp->is_configs = malloc(sizeof (struct ipd_config) * ipil.ipil_nzones);
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi isp->is_zoneids[i] = ipil.ipil_info[i].ipii_zoneid;
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi isp->is_configs[i].ic_corrupt = ipil.ipil_info[i].ipii_corrupt;
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi isp->is_configs[i].ic_drop = ipil.ipil_info[i].ipii_drop;
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi isp->is_configs[i].ic_delay = ipil.ipil_info[i].ipii_delay;
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi ((!!isp->is_configs[i].ic_corrupt) * IPDM_CORRUPT) |
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi ((!!isp->is_configs[i].ic_drop) * IPDM_DROP) |
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi ((!!isp->is_configs[i].ic_delay) * IPDM_DELAY);
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchiipd_status_foreach_zone(const ipd_stathdl_t hdl, ipd_status_cb_f f, void *arg)
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi f(isp->is_zoneids[i], &isp->is_configs[i], arg);
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchiipd_status_get_config(const ipd_stathdl_t hdl, zoneid_t z, ipd_config_t **icpp)
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi "zone %d does not exist or has no ipd configuration", z));
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchiipd_ctl(int fd, zoneid_t z, const ipd_config_t *icp)
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi if (ipip.ipip_arg != 0 && ioctl(fd, IPDIOC_REMOVE, &ipip) != 0) {
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi "unable to remove cleared ipd settings: %s",
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi if ((icp->ic_mask & IPDM_CORRUPT) && icp->ic_corrupt != 0) {
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi if (ioctl(fd, IPDIOC_CORRUPT, &ipip) != 0) {
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi "unable to set corruption rate to %d: %s",
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi if ((icp->ic_mask & IPDM_DELAY) && icp->ic_delay != 0) {
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi "unable to set delay time to %d: %s",
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi if ((icp->ic_mask & IPDM_DROP) && icp->ic_drop != 0) {
fe77cc0407fb667ddc04e1a8f2e203bb7b9c80e1Robert Mustacchi "unable to set drop probability to %d: %s",