1 /* $FreeBSD: src/share/examples/ses/srcs/chpmon.c,v 1.1 2000/02/29 05:44:16 mjacob Exp $ */
2 /* $DragonFly: src/share/examples/ses/srcs/chpmon.c,v 1.2 2003/06/17 04:36:58 dillon Exp $ */
4 * Copyright (c) 2000 by Matthew Jacob
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions, and the following disclaimer,
12 * without modification, immediately at the beginning of the file.
13 * 2. The name of the author may not be used to endorse or promote products
14 * derived from this software without specific prior written permission.
16 * Alternatively, this software may be distributed under the terms of the
17 * the GNU Public License ("GPL").
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
40 #include <sys/ioctl.h>
44 * Continuously monitor all named SES devices
45 * and turn all but INFO enclosure status
46 * values into CRITICAL enclosure status.
49 (SES_ENCSTAT_UNRECOV|SES_ENCSTAT_CRITICAL|SES_ENCSTAT_NONCRITICAL)
56 ses_encstat stat, *carray;
59 fprintf(stderr, "usage: %s polling-interval device "
60 "[ device ... ]\n", *v);
69 bzero((void *)carray, a);
72 for (dev = 2; dev < a; dev++) {
73 fd = open(v[dev], O_RDWR);
79 * First clear any enclosure status, in case it is
83 if (ioctl(fd, SESIOC_SETENCSTAT, (caddr_t) &stat) < 0) {
84 fprintf(stderr, "%s: SESIOC_SETENCSTAT1: %s\n",
85 v[dev], strerror(errno));
90 * Now get the actual current enclosure status.
92 if (ioctl(fd, SESIOC_GETENCSTAT, (caddr_t) &stat) < 0) {
93 fprintf(stderr, "%s: SESIOC_GETENCSTAT: %s\n",
94 v[dev], strerror(errno));
99 if ((stat & BADSTAT) == 0) {
101 fprintf(stdout, "%s: Clearing CRITICAL "
102 "condition\n", v[dev]);
109 fprintf(stdout, "%s: Setting CRITICAL from:", v[dev]);
110 if (stat & SES_ENCSTAT_UNRECOV)
111 fprintf(stdout, " UNRECOVERABLE");
113 if (stat & SES_ENCSTAT_CRITICAL)
114 fprintf(stdout, " CRITICAL");
116 if (stat & SES_ENCSTAT_NONCRITICAL)
117 fprintf(stdout, " NONCRITICAL");
119 stat = SES_ENCSTAT_CRITICAL;
120 if (ioctl(fd, SESIOC_SETENCSTAT, (caddr_t) &stat) < 0) {
121 fprintf(stderr, "%s: SESIOC_SETENCSTAT 2: %s\n",
122 v[dev], strerror(errno));