From c21e8198259e55cdb2c22253ad32eb778ee33db1 Mon Sep 17 00:00:00 2001 From: mjacob Date: Tue, 29 Feb 2000 05:44:19 +0000 Subject: Update SES userland examples to something out of the toy stage. Approved: jkh --- share/examples/ses/Makefile | 32 ++---- share/examples/ses/Makefile.inc | 48 +++++++++ share/examples/ses/chpmon.c | 126 ---------------------- share/examples/ses/eltsub.c | 163 ---------------------------- share/examples/ses/getencstat.c | 153 -------------------------- share/examples/ses/getencstat/Makefile | 39 +++++++ share/examples/ses/getencstat/getencstat.0 | 78 ++++++++++++++ share/examples/ses/getnobj.c | 64 ----------- share/examples/ses/getobjmap.c | 85 --------------- share/examples/ses/getobjstat.c | 74 ------------- share/examples/ses/inienc.c | 59 ---------- share/examples/ses/sesd/Makefile | 39 +++++++ share/examples/ses/sesd/sesd.0 | 84 +++++++++++++++ share/examples/ses/setencstat.c | 82 -------------- share/examples/ses/setencstat/Makefile | 39 +++++++ share/examples/ses/setencstat/setencstat.0 | 72 +++++++++++++ share/examples/ses/setobjstat.c | 81 -------------- share/examples/ses/setobjstat/Makefile | 39 +++++++ share/examples/ses/setobjstat/setobjstat.0 | 67 ++++++++++++ share/examples/ses/srcs/chpmon.c | 128 ++++++++++++++++++++++ share/examples/ses/srcs/eltsub.c | 167 +++++++++++++++++++++++++++++ share/examples/ses/srcs/getencstat.c | 155 ++++++++++++++++++++++++++ share/examples/ses/srcs/getnobj.c | 66 ++++++++++++ share/examples/ses/srcs/getobjmap.c | 87 +++++++++++++++ share/examples/ses/srcs/getobjstat.c | 76 +++++++++++++ share/examples/ses/srcs/inienc.c | 61 +++++++++++ share/examples/ses/srcs/sesd.c | 165 ++++++++++++++++++++++++++++ share/examples/ses/srcs/setencstat.c | 68 ++++++++++++ share/examples/ses/srcs/setobjstat.c | 83 ++++++++++++++ 29 files changed, 1567 insertions(+), 913 deletions(-) create mode 100644 share/examples/ses/Makefile.inc delete mode 100644 share/examples/ses/chpmon.c delete mode 100644 share/examples/ses/eltsub.c delete mode 100644 share/examples/ses/getencstat.c create mode 100644 share/examples/ses/getencstat/Makefile create mode 100644 share/examples/ses/getencstat/getencstat.0 delete mode 100644 share/examples/ses/getnobj.c delete mode 100644 share/examples/ses/getobjmap.c delete mode 100644 share/examples/ses/getobjstat.c delete mode 100644 share/examples/ses/inienc.c create mode 100644 share/examples/ses/sesd/Makefile create mode 100644 share/examples/ses/sesd/sesd.0 delete mode 100644 share/examples/ses/setencstat.c create mode 100644 share/examples/ses/setencstat/Makefile create mode 100644 share/examples/ses/setencstat/setencstat.0 delete mode 100644 share/examples/ses/setobjstat.c create mode 100644 share/examples/ses/setobjstat/Makefile create mode 100644 share/examples/ses/setobjstat/setobjstat.0 create mode 100644 share/examples/ses/srcs/chpmon.c create mode 100644 share/examples/ses/srcs/eltsub.c create mode 100644 share/examples/ses/srcs/getencstat.c create mode 100644 share/examples/ses/srcs/getnobj.c create mode 100644 share/examples/ses/srcs/getobjmap.c create mode 100644 share/examples/ses/srcs/getobjstat.c create mode 100644 share/examples/ses/srcs/inienc.c create mode 100644 share/examples/ses/srcs/sesd.c create mode 100644 share/examples/ses/srcs/setencstat.c create mode 100644 share/examples/ses/srcs/setobjstat.c (limited to 'share/examples') diff --git a/share/examples/ses/Makefile b/share/examples/ses/Makefile index 5473de2..2a332d5 100644 --- a/share/examples/ses/Makefile +++ b/share/examples/ses/Makefile @@ -1,3 +1,5 @@ +# $NetBSD: $ +# $OpenBSD: $ # $FreeBSD$ # # Copyright (c) 2000 by Matthew Jacob @@ -32,30 +34,8 @@ # mjacob@feral.com # -CFLAGS = -O +UNUSED = getobjmap getnobj getobjstat +SUBDIR = getencstat setencstat setobjstat sesd -SUB = eltsub.o -ALL = getnobj getobjmap getencstat inienc setencstat \ - setobjstat getobjstat chpmon - -all: ${ALL} ${SUB} - -getnobj: getnobj.o ${SUB} - $(CC) -o $@ $@.o ${SUB} - -getobjmap: getobjmap.o ${SUB} - $(CC) -o $@ $@.o ${SUB} - -getencstat: getencstat.o ${SUB} - $(CC) -o $@ $@.o ${SUB} - -inienc: inienc.o ${SUB} - $(CC) -o $@ $@.o ${SUB} - -chpmon: chpmon.o ${SUB} - $(CC) -o $@ $@.o ${SUB} - - - -clean: - -rm -f *.o ${ALL} +.include +.include diff --git a/share/examples/ses/Makefile.inc b/share/examples/ses/Makefile.inc new file mode 100644 index 0000000..9e1e4cb --- /dev/null +++ b/share/examples/ses/Makefile.inc @@ -0,0 +1,48 @@ +# $NetBSD: $ +# $OpenBSD: $ +# $FreeBSD$ +# +# Copyright (c) 2000 by Matthew Jacob +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions, and the following disclaimer, +# without modification, immediately at the beginning of the file. +# 2. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# Alternatively, this software may be distributed under the terms of the +# the GNU Public License ("GPL"). +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# Matthew Jacob +# Feral Software +# mjacob@feral.com +# + +SYS != uname -s + +.if ${SYS} == OpenBSD +COPTS += -I/usr/include/scsi -DSESINC="" +.elif ${SYS} == NetBSD +COPTS += -I/usr/include/dev/scsipi -DSESINC="" +.else +COPTS += -I/usr/include/cam/scsi -DSESINC="" +.endif +BINDIR ?= ${DESTDIR}/usr/sbin + +.PATH: ../srcs diff --git a/share/examples/ses/chpmon.c b/share/examples/ses/chpmon.c deleted file mode 100644 index 793f3b3..0000000 --- a/share/examples/ses/chpmon.c +++ /dev/null @@ -1,126 +0,0 @@ -/* $FreeBSD$ */ -/* - * Copyright (c) 2000 by Matthew Jacob - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * Alternatively, this software may be distributed under the terms of the - * the GNU Public License ("GPL"). - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Matthew Jacob - * Feral Software - * mjacob@feral.com - */ -#include -#include -#include -#include -#include -#include -#include - -/* - * Continuously monitor all named SES devices - * and turn all but INFO enclosure status - * values into CRITICAL enclosure status. - */ -#define BADSTAT \ - (SES_ENCSTAT_UNRECOV|SES_ENCSTAT_CRITICAL|SES_ENCSTAT_NONCRITICAL) -int -main(int a, char **v) -{ - int fd, delay, dev; - ses_encstat stat, *carray; - - if (a < 3) { - fprintf(stderr, "usage: %s polling-interval device " - "[ device ... ]\n", *v); - return (1); - } - delay = atoi(v[1]); - carray = malloc(a); - if (carray == NULL) { - perror("malloc"); - return (1); - } - memset(carray, 0, a); - - for (;;) { - for (dev = 2; dev < a; dev++) { - fd = open(v[dev], O_RDWR); - if (fd < 0) { - perror(v[dev]); - continue; - } - /* - * First clear any enclosure status, in case it is - * a latched status. - */ - stat = 0; - if (ioctl(fd, SESIOC_SETENCSTAT, (caddr_t) &stat) < 0) { - fprintf(stderr, "%s: SESIOC_SETENCSTAT1: %s\n", - v[dev], strerror(errno)); - (void) close(fd); - continue; - } - /* - * Now get the actual current enclosure status. - */ - if (ioctl(fd, SESIOC_GETENCSTAT, (caddr_t) &stat) < 0) { - fprintf(stderr, "%s: SESIOC_GETENCSTAT: %s\n", - v[dev], strerror(errno)); - (void) close(fd); - continue; - } - - if ((stat & BADSTAT) == 0) { - if (carray[dev]) { - fprintf(stdout, "%s: Clearing CRITICAL " - "condition\n", v[dev]); - carray[dev] = 0; - } - (void) close(fd); - continue; - } - carray[dev] = 1; - fprintf(stdout, "%s: Setting CRITICAL from:", v[dev]); - if (stat & SES_ENCSTAT_UNRECOV) - fprintf(stdout, " UNRECOVERABLE"); - - if (stat & SES_ENCSTAT_CRITICAL) - fprintf(stdout, " CRITICAL"); - - if (stat & SES_ENCSTAT_NONCRITICAL) - fprintf(stdout, " NONCRITICAL"); - putchar('\n'); - stat = SES_ENCSTAT_CRITICAL; - if (ioctl(fd, SESIOC_SETENCSTAT, (caddr_t) &stat) < 0) { - fprintf(stderr, "%s: SESIOC_SETENCSTAT 2: %s\n", - v[dev], strerror(errno)); - } - (void) close(fd); - } - sleep(delay); - } - /* NOTREACHED */ -} diff --git a/share/examples/ses/eltsub.c b/share/examples/ses/eltsub.c deleted file mode 100644 index 7b101e0..0000000 --- a/share/examples/ses/eltsub.c +++ /dev/null @@ -1,163 +0,0 @@ -/* $FreeBSD$ */ -/* - * Copyright (c) 2000 by Matthew Jacob - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * Alternatively, this software may be distributed under the terms of the - * the GNU Public License ("GPL"). - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Matthew Jacob - * Feral Software - * mjacob@feral.com - */ - -#include -#include -#include -#include -#include - -char * -geteltnm(int type) -{ - static char rbuf[132]; - - switch (type) { - case SESTYP_UNSPECIFIED: - sprintf(rbuf, "Unspecified"); - break; - case SESTYP_DEVICE: - sprintf(rbuf, "Device"); - break; - case SESTYP_POWER: - sprintf(rbuf, "Power supply"); - break; - case SESTYP_FAN: - sprintf(rbuf, "Cooling element"); - break; - case SESTYP_THERM: - sprintf(rbuf, "Temperature sensors"); - break; - case SESTYP_DOORLOCK: - sprintf(rbuf, "Door Lock"); - break; - case SESTYP_ALARM: - sprintf(rbuf, "Audible alarm"); - break; - case SESTYP_ESCC: - sprintf(rbuf, "Enclosure services controller electronics"); - break; - case SESTYP_SCC: - sprintf(rbuf, "SCC controller electronics"); - break; - case SESTYP_NVRAM: - sprintf(rbuf, "Nonvolatile cache"); - break; - case SESTYP_UPS: - sprintf(rbuf, "Uninterruptible power supply"); - break; - case SESTYP_DISPLAY: - sprintf(rbuf, "Display"); - break; - case SESTYP_KEYPAD: - sprintf(rbuf, "Key pad entry device"); - break; - case SESTYP_SCSIXVR: - sprintf(rbuf, "SCSI port/transceiver"); - break; - case SESTYP_LANGUAGE: - sprintf(rbuf, "Language"); - break; - case SESTYP_COMPORT: - sprintf(rbuf, "Communication Port"); - break; - case SESTYP_VOM: - sprintf(rbuf, "Voltage Sensor"); - break; - case SESTYP_AMMETER: - sprintf(rbuf, "Current Sensor"); - break; - case SESTYP_SCSI_TGT: - sprintf(rbuf, "SCSI target port"); - break; - case SESTYP_SCSI_INI: - sprintf(rbuf, "SCSI initiator port"); - break; - case SESTYP_SUBENC: - sprintf(rbuf, "Simple sub-enclosure"); - break; - default: - (void) sprintf(rbuf, "", type); - break; - } - return (rbuf); -} - -static char * -scode2ascii(u_char code) -{ - static char rbuf[32]; - switch (code & 0xf) { - case SES_OBJSTAT_UNSUPPORTED: - sprintf(rbuf, "status not supported"); - break; - case SES_OBJSTAT_OK: - sprintf(rbuf, "ok"); - break; - case SES_OBJSTAT_CRIT: - sprintf(rbuf, "critical"); - break; - case SES_OBJSTAT_NONCRIT: - sprintf(rbuf, "non-critical"); - break; - case SES_OBJSTAT_UNRECOV: - sprintf(rbuf, "unrecoverable"); - break; - case SES_OBJSTAT_NOTINSTALLED: - sprintf(rbuf, "not installed"); - break; - case SES_OBJSTAT_UNKNOWN: - sprintf(rbuf, "unknown status"); - break; - case SES_OBJSTAT_NOTAVAIL: - sprintf(rbuf, "status not available"); - break; - default: - sprintf(rbuf, "unknown status code %x", code & 0xf); - break; - } - return (rbuf); -} - - -char * -stat2ascii(int eletype, u_char *cstat) -{ - static char ebuf[256], *scode; - - scode = scode2ascii(cstat[0]); - sprintf(ebuf, "Status=%s (bytes=0x%02x 0x%02x 0x%02x 0x%02x)", - scode, cstat[0], cstat[1], cstat[2], cstat[3]); - return (ebuf); -} diff --git a/share/examples/ses/getencstat.c b/share/examples/ses/getencstat.c deleted file mode 100644 index 2a4bb1f..0000000 --- a/share/examples/ses/getencstat.c +++ /dev/null @@ -1,153 +0,0 @@ -/* $FreeBSD$ */ -/* - * Copyright (c) 2000 by Matthew Jacob - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * Alternatively, this software may be distributed under the terms of the - * the GNU Public License ("GPL"). - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Matthew Jacob - * Feral Software - * mjacob@feral.com - */ - -#include -#include -#include -#include -#include -#include - -extern char *geteltnm(int); -extern char *stat2ascii(int, u_char *); - -int -main(int a, char **v) -{ - ses_object *objp; - ses_objstat ob; - int fd, nobj, f, i, verbose, quiet, errors; - u_char estat; - - if (a < 2) { - fprintf(stderr, "usage: %s [ -v ] device [ device ... ]\n", *v); - return (1); - } - errors = quiet = verbose = 0; - if (strcmp(v[1], "-V") == 0) { - verbose = 2; - v++; - } else if (strcmp(v[1], "-v") == 0) { - verbose = 1; - v++; - } else if (strcmp(v[1], "-q") == 0) { - quiet = 1; - verbose = 0; - v++; - } - while (*++v) { - - fd = open(*v, O_RDONLY); - if (fd < 0) { - perror(*v); - continue; - } - if (ioctl(fd, SESIOC_GETNOBJ, (caddr_t) &nobj) < 0) { - perror("SESIOC_GETNOBJ"); - (void) close(fd); - continue; - } - if (ioctl(fd, SESIOC_GETENCSTAT, (caddr_t) &estat) < 0) { - perror("SESIOC_GETENCSTAT"); - (void) close(fd); - continue; - } - if ((verbose == 0 || quiet == 1) && estat == 0) { - if (quiet == 0) - fprintf(stdout, "%s: Enclosure OK\n", *v); - (void) close(fd); - continue; - } - fprintf(stdout, "%s: Enclosure Status ", *v); - if (estat == 0) { - fprintf(stdout, "\n"); - objp = calloc(nobj, sizeof (ses_object)); - if (objp == NULL) { - perror("calloc"); - (void) close(fd); - continue; - } - if (ioctl(fd, SESIOC_GETOBJMAP, (caddr_t) objp) < 0) { - perror("SESIOC_GETOBJMAP"); - (void) close(fd); - continue; - } - for (i = 0; i < nobj; i++) { - ob.obj_id = objp[i].obj_id; - if (ioctl(fd, SESIOC_GETOBJSTAT, (caddr_t) &ob) < 0) { - perror("SESIOC_GETOBJSTAT"); - (void) close(fd); - break; - } - if ((ob.cstat[0] & 0xf) == SES_OBJSTAT_OK) { - if (verbose) { - fprintf(stdout, - "%s Element(%x): OK (%s)\n", - geteltnm(objp[i].object_type), - ob.obj_id, - stat2ascii(objp[i].object_type, - ob.cstat)); - } - continue; - } - fprintf(stdout, "%s Element(%x): %s\n", - geteltnm(objp[i].object_type), ob.obj_id, - stat2ascii(objp[i].object_type, ob.cstat)); - } - free(objp); - (void) close(fd); - } - return (errors); -} diff --git a/share/examples/ses/getencstat/Makefile b/share/examples/ses/getencstat/Makefile new file mode 100644 index 0000000..ac3fdad --- /dev/null +++ b/share/examples/ses/getencstat/Makefile @@ -0,0 +1,39 @@ +# $FreeBSD$ +# +# Copyright (c) 2000 by Matthew Jacob +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions, and the following disclaimer, +# without modification, immediately at the beginning of the file. +# 2. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# Alternatively, this software may be distributed under the terms of the +# the GNU Public License ("GPL"). +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# Matthew Jacob +# Feral Software +# mjacob@feral.com +# + +MAN8 = getencstat.0 +SRCS = getencstat.c eltsub.c +PROG = getencstat + +.include diff --git a/share/examples/ses/getencstat/getencstat.0 b/share/examples/ses/getencstat/getencstat.0 new file mode 100644 index 0000000..fa95be0 --- /dev/null +++ b/share/examples/ses/getencstat/getencstat.0 @@ -0,0 +1,78 @@ +.\" $FreeBSD$ +.\" +.\" Copyright (c) 2000 Matthew Jacob +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions, and the following disclaimer, +.\" without modification, immediately at the beginning of the file. +.\" 2. The name of the author may not be used to endorse or promote products +.\" derived from this software without specific prior written permission. +.\" +.\" Alternatively, this software may be distributed under the terms of the +.\" the GNU Public License ("GPL"). +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR +.\" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" Matthew Jacob +.\" Feral Software +.\" mjacob@feral.com +.Dd February 21, 2000 +.Dt GETENCSTAT 8 +.Os +.Sh NAME +.Nm getencstat +.Nd get SCSI Environmental Services Device enclosure status +.Sh SYNOPSIS +.Nm +.Op Fl v +.Ar device +.Op Ar device ... +.Sh DESCRIPTION +.Nm +gets summary and detailed SCSI Environmental Services (or SAF-TE) device +enclosure status. The overall status is printed out. If the overall status +is considered okay, nothing else is printed out (unless the the +.Fl v +option is used). +.Pp +A SCSI Environmental Services device enclosure may be either in the state +of being \fBOK\fR, or in one or more of the states of \fBINFORMATIONAL\fR, +\fBNON-CRITICAL\fR, \fBCRITICAL\fB or \fBUNRECOVERABLE\fR states. These +overall states reflect a summary of the states of each object within +such a device (such as power supplies or disk drives). +.Pp +With the +.Fl v +option, the status of all objects within the device is printed, whether +\fBOK\fR or not. Along with the status of each object is the object identifier. +.Pp +The user may then use +.Xr setencstat 8 +to try and clear overall device status, or may use +.Xr setobjstat 8 +to set specific object status. +.Sh FILES +.Bl -tag -width /dev/sesN -compact +.It Pa /dev/ses\fIN\fR +SCSI Environmental Services Devices +.El +.Sh SEE ALSO +.Xr ses 4 , +.Xr sesd 8 , +.Xr setencstat 8 , +.Xr setobjstat 8 +.Sh BUGS diff --git a/share/examples/ses/getnobj.c b/share/examples/ses/getnobj.c deleted file mode 100644 index 3fd32c9..0000000 --- a/share/examples/ses/getnobj.c +++ /dev/null @@ -1,64 +0,0 @@ -/* $FreeBSD$ */ -/* - * Copyright (c) 2000 by Matthew Jacob - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * Alternatively, this software may be distributed under the terms of the - * the GNU Public License ("GPL"). - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Matthew Jacob - * Feral Software - * mjacob@feral.com - */ - -#include -#include -#include -#include -#include -#include -#include - -int -main(int argc, char **argv) -{ - unsigned int nobj; - int fd; - - while (*++argv != NULL) { - char *name = *argv; - fd = open(name, O_RDONLY); - if (fd < 0) { - perror(name); - continue; - } - if (ioctl(fd, SESIOC_GETNOBJ, (caddr_t) &nobj) < 0) { - perror("SESIOC_GETNOBJ"); - } else { - fprintf(stdout, "%s: %d objects\n", name, nobj); - } - close (fd); - } - return (0); -} diff --git a/share/examples/ses/getobjmap.c b/share/examples/ses/getobjmap.c deleted file mode 100644 index fbafdc8..0000000 --- a/share/examples/ses/getobjmap.c +++ /dev/null @@ -1,85 +0,0 @@ -/* $FreeBSD$ */ -/* - * Copyright (c) 2000 by Matthew Jacob - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * Alternatively, this software may be distributed under the terms of the - * the GNU Public License ("GPL"). - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Matthew Jacob - * Feral Software - * mjacob@feral.com - */ - -#include -#include -#include -#include -#include -#include - -extern char *geteltnm(int); - -int -main(int a, char **v) -{ - ses_object *objp; - int nobj, fd, i; - - while (*++v) { - fd = open(*v, O_RDONLY); - if (fd < 0) { - perror(*v); - continue; - } - if (ioctl(fd, SESIOC_GETNOBJ, (caddr_t) &nobj) < 0) { - perror("SESIOC_GETNOBJ"); - (void) close(fd); - continue; - } - fprintf(stdout, "%s: %d objects\n", *v, nobj); - if (nobj == 0) { - (void) close(fd); - continue; - } - objp = calloc(nobj, sizeof (ses_object)); - if (objp == NULL) { - perror("calloc"); - (void) close(fd); - continue; - } - if (ioctl(fd, SESIOC_GETOBJMAP, (caddr_t) objp) < 0) { - perror("SESIOC_GETOBJMAP"); - (void) close(fd); - continue; - } - for (i = 0; i < nobj; i++) { - printf(" Object %d: ID 0x%x Type '%s'\n", i, - objp[i].obj_id, geteltnm((int)objp[i].object_type)); - } - free(objp); - (void) close(fd); - } - return (0); -} diff --git a/share/examples/ses/getobjstat.c b/share/examples/ses/getobjstat.c deleted file mode 100644 index c2cd3e7..0000000 --- a/share/examples/ses/getobjstat.c +++ /dev/null @@ -1,74 +0,0 @@ -/* $FreeBSD$ */ -/* - * Copyright (c) 2000 by Matthew Jacob - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * Alternatively, this software may be distributed under the terms of the - * the GNU Public License ("GPL"). - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Matthew Jacob - * Feral Software - * mjacob@feral.com - */ -#include -#include -#include -#include -#include -#include - -int -main(int a, char **v) -{ - int fd; - int i; - ses_objstat obj; - long cvt; - char *x; - - if (a != 3) { -usage: - fprintf(stderr, "usage: %s device objectid\n", *v); - return (1); - } - fd = open(v[1], O_RDONLY); - if (fd < 0) { - perror(v[1]); - return (1); - } - x = v[2]; - cvt = strtol(v[2], &x, 0); - if (x == v[2]) { - goto usage; - } - obj.obj_id = cvt; - if (ioctl(fd, SESIOC_GETOBJSTAT, (caddr_t) &obj) < 0) { - perror("SESIOC_GETOBJSTAT"); - return (1); - } - fprintf(stdout, "Object 0x%x: 0x%x 0x%x 0x%x 0x%x\n", obj.obj_id, - obj.cstat[0], obj.cstat[1], obj.cstat[2], obj.cstat[3]); - (void) close(fd); - return (0); -} diff --git a/share/examples/ses/inienc.c b/share/examples/ses/inienc.c deleted file mode 100644 index 7ca018e..0000000 --- a/share/examples/ses/inienc.c +++ /dev/null @@ -1,59 +0,0 @@ -/* $FreeBSD$ */ -/* - * Copyright (c) 2000 by Matthew Jacob - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * Alternatively, this software may be distributed under the terms of the - * the GNU Public License ("GPL"). - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Matthew Jacob - * Feral Software - * mjacob@feral.com - */ - -#include -#include -#include -#include -#include -#include - -int -main(int a, char **v) -{ - int fd; - - while (*++v) { - fd = open(*v, O_RDWR); - if (fd < 0) { - perror(*v); - continue; - } - if (ioctl(fd, SESIOC_INIT, NULL) < 0) { - perror("SESIOC_GETNOBJ"); - } - (void) close(fd); - } - return (0); -} diff --git a/share/examples/ses/sesd/Makefile b/share/examples/ses/sesd/Makefile new file mode 100644 index 0000000..3f12cbf --- /dev/null +++ b/share/examples/ses/sesd/Makefile @@ -0,0 +1,39 @@ +# $FreeBSD$ +# +# Copyright (c) 2000 by Matthew Jacob +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions, and the following disclaimer, +# without modification, immediately at the beginning of the file. +# 2. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# Alternatively, this software may be distributed under the terms of the +# the GNU Public License ("GPL"). +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# Matthew Jacob +# Feral Software +# mjacob@feral.com +# + +MAN8 = sesd.0 +SRCS = sesd.c eltsub.c +PROG = sesd + +.include diff --git a/share/examples/ses/sesd/sesd.0 b/share/examples/ses/sesd/sesd.0 new file mode 100644 index 0000000..a2c9310 --- /dev/null +++ b/share/examples/ses/sesd/sesd.0 @@ -0,0 +1,84 @@ +.\" $FreeBSD$ +.\" +.\" Copyright (c) 2000 Matthew Jacob +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions, and the following disclaimer, +.\" without modification, immediately at the beginning of the file. +.\" 2. The name of the author may not be used to endorse or promote products +.\" derived from this software without specific prior written permission. +.\" +.\" Alternatively, this software may be distributed under the terms of the +.\" the GNU Public License ("GPL"). +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR +.\" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" Matthew Jacob +.\" Feral Software +.\" mjacob@feral.com +.Dd February 21, 2000 +.Dt SESD 8 +.Os +.Sh NAME +.Nm sesd +.Nd monitor SCSI Environmental Services Devices +.Sh SYNOPSIS +.Nm +.Op Fl d +.Op Fl t Ar poll-interval +.Ar device +.Op Ar device ... +.Sh DESCRIPTION +.Nm +monitors SCSI Environmental Services (or SAF-TE) devices for changes +in state and logs such changes changes to the system error logger +(see +.Xr syslogd 8 ) . +At least one device must be specified. +When no other options are supplied, +.Nm +detached becomes a daemon, by default waking up every 30 seconds to +poll each device for a change in state. +.Pp +The following options may be used: +.Bl -tag -width Ds +.It Fl p Ar poll-interval +Change the interval of polling from the default 30 seconds to the number +of seconds specified. +.It Fl d +Instead of detaching and becoming a daemon, stay attached to the +controlling terminal and log changes there as well as via the system +logger. +.El +.Pp +The user may then use +.Xr getencstat 8 +to get more detailed information about the state of the over enclosure device +or objects within the enclosure device. +.Sh FILES +.Bl -tag -width /dev/sesN -compact +.It Pa /dev/ses\fIN\fR +SCSI Environmental Services Devices +.El +.Sh SEE ALSO +.Xr ses 4 , +.Xr syslogd 8 , +.Xr getencstat 8 , +.Xr setencstat 8 , +.Xr setobjstat 8 +.Sh BUGS +This is something of a toy, but it is better than nothing. diff --git a/share/examples/ses/setencstat.c b/share/examples/ses/setencstat.c deleted file mode 100644 index c10cc83..0000000 --- a/share/examples/ses/setencstat.c +++ /dev/null @@ -1,82 +0,0 @@ -/* $FreeBSD$ */ -/* - * Copyright (c) 2000 by Matthew Jacob - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * Alternatively, this software may be distributed under the terms of the - * the GNU Public License ("GPL"). - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Matthew Jacob - * Feral Software - * mjacob@feral.com - */ - -#include -#include -#include -#include -#include -#include - -int -main(int a, char **v) -{ - int fd; - u_char stat; - - if (a != 3) { - fprintf(stderr, "usage: %s device {enclosure_status|-p}\n", *v); - return (1); - } - fd = open(v[1], O_RDWR); - if (fd < 0) { - perror(v[1]); - return (1); - } - if (strcmp(v[2], "-p") == 0) { - /* - * First clear any enclosure status, in case it is - * a latched status. - */ - stat = 0; - if (ioctl(fd, SESIOC_SETENCSTAT, (caddr_t) &stat) < 0) { - perror("SESIOC_SETENCSTAT (pre)"); - return (1); - } - /* - * Now get the actual current enclosure status. - */ - if (ioctl(fd, SESIOC_GETENCSTAT, (caddr_t) &stat) < 0) { - perror("SESIOC_GETENCSTAT"); - return (1); - } - } else { - stat = atoi(v[2]); - } - if (ioctl(fd, SESIOC_SETENCSTAT, (caddr_t) &stat) < 0) { - perror("SESIOC_SETENCSTAT"); - } - (void) close(fd); - return (0); -} diff --git a/share/examples/ses/setencstat/Makefile b/share/examples/ses/setencstat/Makefile new file mode 100644 index 0000000..99609fb --- /dev/null +++ b/share/examples/ses/setencstat/Makefile @@ -0,0 +1,39 @@ +# $FreeBSD$ +# +# Copyright (c) 2000 by Matthew Jacob +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions, and the following disclaimer, +# without modification, immediately at the beginning of the file. +# 2. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# Alternatively, this software may be distributed under the terms of the +# the GNU Public License ("GPL"). +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# Matthew Jacob +# Feral Software +# mjacob@feral.com +# + +MAN8 = setencstat.0 +SRCS = setencstat.c eltsub.c +PROG = setencstat + +.include diff --git a/share/examples/ses/setencstat/setencstat.0 b/share/examples/ses/setencstat/setencstat.0 new file mode 100644 index 0000000..31449cb --- /dev/null +++ b/share/examples/ses/setencstat/setencstat.0 @@ -0,0 +1,72 @@ +.\" $FreeBSD$ +.\" +.\" Copyright (c) 2000 Matthew Jacob +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions, and the following disclaimer, +.\" without modification, immediately at the beginning of the file. +.\" 2. The name of the author may not be used to endorse or promote products +.\" derived from this software without specific prior written permission. +.\" +.\" Alternatively, this software may be distributed under the terms of the +.\" the GNU Public License ("GPL"). +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR +.\" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" Matthew Jacob +.\" Feral Software +.\" mjacob@feral.com +.Dd February 21, 2000 +.Dt SETENCSTAT 8 +.Os +.Sh NAME +.Nm setencstat +.Nd set SCSI Environmental Services Device enclosure status +.Sh SYNOPSIS +.Nm +.Ar device enclosure_status +.Sh DESCRIPTION +.Nm +sets summary status for a SCSI Environmental Services (or SAF-TE) device. +The enclosure status argument may take on the values: +.Bl -tag -width Ds +.It 0 +Set the status to an \fBOK\fR state. +.It 1 +Set the status to an \fBUNRECOVERABLE\fR state. +.It 2 +Set the status to an \fBCRITICAL\fR state. +.It 4 +Set the status to an \fBNON-CRITICAL\fR state. +.It 8 +Set the status to an \fBINFORMATIONAL\fR state. +.El +.Pp +All the non-zero options may be combined. +.Pp +Note that devices may simply and silently ignore the setting of these values. +.Sh FILES +.Bl -tag -width /dev/sesN -compact +.It Pa /dev/ses\fIN\fR +SCSI Environmental Services Devices +.El +.Sh SEE ALSO +.Xr ses 4 , +.Xr sesd 8 , +.Xr getencstat 8 , +.Xr setobjstat 8 +.Sh BUGS diff --git a/share/examples/ses/setobjstat.c b/share/examples/ses/setobjstat.c deleted file mode 100644 index 9dc4b65..0000000 --- a/share/examples/ses/setobjstat.c +++ /dev/null @@ -1,81 +0,0 @@ -/* $FreeBSD$ */ -/* - * Copyright (c) 2000 by Matthew Jacob - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * Alternatively, this software may be distributed under the terms of the - * the GNU Public License ("GPL"). - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Matthew Jacob - * Feral Software - * mjacob@feral.com - */ - -#include -#include -#include -#include -#include -#include - -int -main(int a, char **v) -{ - int fd; - int i; - ses_objstat obj; - long cvt; - char *x; - - if (a != 7) { -usage: - fprintf(stderr, - "usage: %s device objectid stat0 stat1 stat2 stat3\n", *v); - return (1); - } - fd = open(v[1], O_RDWR); - if (fd < 0) { - perror(v[1]); - return (1); - } - x = v[2]; - cvt = strtol(v[2], &x, 0); - if (x == v[2]) { - goto usage; - } - obj.obj_id = cvt; - for (i = 0; i < 4; i++) { - x = v[3 + i]; - cvt = strtol(v[3 + i], &x, 0); - if (x == v[3 + i]) { - goto usage; - } - obj.cstat[i] = cvt; - } - if (ioctl(fd, SESIOC_SETOBJSTAT, (caddr_t) &obj) < 0) { - perror("SESIOC_SETOBJSTAT"); - } - (void) close(fd); - return (0); -} diff --git a/share/examples/ses/setobjstat/Makefile b/share/examples/ses/setobjstat/Makefile new file mode 100644 index 0000000..d2cbd69 --- /dev/null +++ b/share/examples/ses/setobjstat/Makefile @@ -0,0 +1,39 @@ +# $FreeBSD$ +# +# Copyright (c) 2000 by Matthew Jacob +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions, and the following disclaimer, +# without modification, immediately at the beginning of the file. +# 2. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# Alternatively, this software may be distributed under the terms of the +# the GNU Public License ("GPL"). +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# Matthew Jacob +# Feral Software +# mjacob@feral.com +# + +MAN8 = setobjstat.0 +SRCS = setobjstat.c eltsub.c +PROG = setobjstat + +.include diff --git a/share/examples/ses/setobjstat/setobjstat.0 b/share/examples/ses/setobjstat/setobjstat.0 new file mode 100644 index 0000000..d03aa76 --- /dev/null +++ b/share/examples/ses/setobjstat/setobjstat.0 @@ -0,0 +1,67 @@ +.\" $FreeBSD$ +.\" +.\" Copyright (c) 2000 Matthew Jacob +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions, and the following disclaimer, +.\" without modification, immediately at the beginning of the file. +.\" 2. The name of the author may not be used to endorse or promote products +.\" derived from this software without specific prior written permission. +.\" +.\" Alternatively, this software may be distributed under the terms of the +.\" the GNU Public License ("GPL"). +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR +.\" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" Matthew Jacob +.\" Feral Software +.\" mjacob@feral.com +.Dd February 21, 2000 +.Dt SETOBJSTAT 8 +.Os +.Sh NAME +.Nm setobjstat +.Nd set SCSI Environmental Services Device object status +.Sh SYNOPSIS +.Nm +.Ar device objectid stat0 stat1 stat2 stat3 +.Sh DESCRIPTION +.Nm +sets the object status for a SCSI Environmental Services (or SAF-TE) device. +The +.Ar objectid +argument may be determined by running +.Xr getencstat 8 . +.Pp +The status fields are partially common (first byte only, which must +have a value of 0x80 contained in it), but otherwise quite device +specific. A complete discussion of the possible values is impractical +here. Please refer to the ANSI SCSI specification (available on +the FTP site ftp.t10.org). +.Pp +Note that devices may simply and silently ignore the setting of these values. +.Sh FILES +.Bl -tag -width /dev/sesN -compact +.It Pa /dev/ses\fIN\fR +SCSI Environmental Services Devices +.El +.Sh SEE ALSO +.Xr ses 4 , +.Xr sesd 8 , +.Xr getencstat 8 , +.Xr setencstat 8 +.Sh BUGS diff --git a/share/examples/ses/srcs/chpmon.c b/share/examples/ses/srcs/chpmon.c new file mode 100644 index 0000000..1b537c7 --- /dev/null +++ b/share/examples/ses/srcs/chpmon.c @@ -0,0 +1,128 @@ +/* $FreeBSD$ */ +/* + * Copyright (c) 2000 by Matthew Jacob + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification, immediately at the beginning of the file. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * Alternatively, this software may be distributed under the terms of the + * the GNU Public License ("GPL"). + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Matthew Jacob + * Feral Software + * mjacob@feral.com + */ +#include +#include +#include +#include +#include +#include +#include "ses.h" + +/* + * Continuously monitor all named SES devices + * and turn all but INFO enclosure status + * values into CRITICAL enclosure status. + */ +#define BADSTAT \ + (SES_ENCSTAT_UNRECOV|SES_ENCSTAT_CRITICAL|SES_ENCSTAT_NONCRITICAL) +int +main(a, v) + int a; + char **v; +{ + int fd, delay, dev; + ses_encstat stat, *carray; + + if (a < 3) { + fprintf(stderr, "usage: %s polling-interval device " + "[ device ... ]\n", *v); + return (1); + } + delay = atoi(v[1]); + carray = malloc(a); + if (carray == NULL) { + perror("malloc"); + return (1); + } + bzero((void *)carray, a); + + for (;;) { + for (dev = 2; dev < a; dev++) { + fd = open(v[dev], O_RDWR); + if (fd < 0) { + perror(v[dev]); + continue; + } + /* + * First clear any enclosure status, in case it is + * a latched status. + */ + stat = 0; + if (ioctl(fd, SESIOC_SETENCSTAT, (caddr_t) &stat) < 0) { + fprintf(stderr, "%s: SESIOC_SETENCSTAT1: %s\n", + v[dev], strerror(errno)); + (void) close(fd); + continue; + } + /* + * Now get the actual current enclosure status. + */ + if (ioctl(fd, SESIOC_GETENCSTAT, (caddr_t) &stat) < 0) { + fprintf(stderr, "%s: SESIOC_GETENCSTAT: %s\n", + v[dev], strerror(errno)); + (void) close(fd); + continue; + } + + if ((stat & BADSTAT) == 0) { + if (carray[dev]) { + fprintf(stdout, "%s: Clearing CRITICAL " + "condition\n", v[dev]); + carray[dev] = 0; + } + (void) close(fd); + continue; + } + carray[dev] = 1; + fprintf(stdout, "%s: Setting CRITICAL from:", v[dev]); + if (stat & SES_ENCSTAT_UNRECOV) + fprintf(stdout, " UNRECOVERABLE"); + + if (stat & SES_ENCSTAT_CRITICAL) + fprintf(stdout, " CRITICAL"); + + if (stat & SES_ENCSTAT_NONCRITICAL) + fprintf(stdout, " NONCRITICAL"); + putchar('\n'); + stat = SES_ENCSTAT_CRITICAL; + if (ioctl(fd, SESIOC_SETENCSTAT, (caddr_t) &stat) < 0) { + fprintf(stderr, "%s: SESIOC_SETENCSTAT 2: %s\n", + v[dev], strerror(errno)); + } + (void) close(fd); + } + sleep(delay); + } + /* NOTREACHED */ +} diff --git a/share/examples/ses/srcs/eltsub.c b/share/examples/ses/srcs/eltsub.c new file mode 100644 index 0000000..5fae665 --- /dev/null +++ b/share/examples/ses/srcs/eltsub.c @@ -0,0 +1,167 @@ +/* $FreeBSD$ */ +/* + * Copyright (c) 2000 by Matthew Jacob + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification, immediately at the beginning of the file. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * Alternatively, this software may be distributed under the terms of the + * the GNU Public License ("GPL"). + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Matthew Jacob + * Feral Software + * mjacob@feral.com + */ + +#include +#include +#include +#include +#include SESINC + +char * +geteltnm(type) + int type; +{ + static char rbuf[132]; + + switch (type) { + case SESTYP_UNSPECIFIED: + sprintf(rbuf, "Unspecified"); + break; + case SESTYP_DEVICE: + sprintf(rbuf, "Device"); + break; + case SESTYP_POWER: + sprintf(rbuf, "Power supply"); + break; + case SESTYP_FAN: + sprintf(rbuf, "Cooling element"); + break; + case SESTYP_THERM: + sprintf(rbuf, "Temperature sensors"); + break; + case SESTYP_DOORLOCK: + sprintf(rbuf, "Door Lock"); + break; + case SESTYP_ALARM: + sprintf(rbuf, "Audible alarm"); + break; + case SESTYP_ESCC: + sprintf(rbuf, "Enclosure services controller electronics"); + break; + case SESTYP_SCC: + sprintf(rbuf, "SCC controller electronics"); + break; + case SESTYP_NVRAM: + sprintf(rbuf, "Nonvolatile cache"); + break; + case SESTYP_UPS: + sprintf(rbuf, "Uninterruptible power supply"); + break; + case SESTYP_DISPLAY: + sprintf(rbuf, "Display"); + break; + case SESTYP_KEYPAD: + sprintf(rbuf, "Key pad entry device"); + break; + case SESTYP_SCSIXVR: + sprintf(rbuf, "SCSI port/transceiver"); + break; + case SESTYP_LANGUAGE: + sprintf(rbuf, "Language"); + break; + case SESTYP_COMPORT: + sprintf(rbuf, "Communication Port"); + break; + case SESTYP_VOM: + sprintf(rbuf, "Voltage Sensor"); + break; + case SESTYP_AMMETER: + sprintf(rbuf, "Current Sensor"); + break; + case SESTYP_SCSI_TGT: + sprintf(rbuf, "SCSI target port"); + break; + case SESTYP_SCSI_INI: + sprintf(rbuf, "SCSI initiator port"); + break; + case SESTYP_SUBENC: + sprintf(rbuf, "Simple sub-enclosure"); + break; + default: + (void) sprintf(rbuf, "", type); + break; + } + return (rbuf); +} + +static char * +scode2ascii(code) + u_char code; +{ + static char rbuf[32]; + switch (code & 0xf) { + case SES_OBJSTAT_UNSUPPORTED: + sprintf(rbuf, "status not supported"); + break; + case SES_OBJSTAT_OK: + sprintf(rbuf, "ok"); + break; + case SES_OBJSTAT_CRIT: + sprintf(rbuf, "critical"); + break; + case SES_OBJSTAT_NONCRIT: + sprintf(rbuf, "non-critical"); + break; + case SES_OBJSTAT_UNRECOV: + sprintf(rbuf, "unrecoverable"); + break; + case SES_OBJSTAT_NOTINSTALLED: + sprintf(rbuf, "not installed"); + break; + case SES_OBJSTAT_UNKNOWN: + sprintf(rbuf, "unknown status"); + break; + case SES_OBJSTAT_NOTAVAIL: + sprintf(rbuf, "status not available"); + break; + default: + sprintf(rbuf, "unknown status code %x", code & 0xf); + break; + } + return (rbuf); +} + + +char * +stat2ascii(eletype, cstat) + int eletype; + u_char *cstat; +{ + static char ebuf[256], *scode; + + scode = scode2ascii(cstat[0]); + sprintf(ebuf, "Status=%s (bytes=0x%02x 0x%02x 0x%02x 0x%02x)", + scode, cstat[0], cstat[1], cstat[2], cstat[3]); + return (ebuf); +} diff --git a/share/examples/ses/srcs/getencstat.c b/share/examples/ses/srcs/getencstat.c new file mode 100644 index 0000000..bf45e57 --- /dev/null +++ b/share/examples/ses/srcs/getencstat.c @@ -0,0 +1,155 @@ +/* $FreeBSD$ */ +/* + * Copyright (c) 2000 by Matthew Jacob + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification, immediately at the beginning of the file. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * Alternatively, this software may be distributed under the terms of the + * the GNU Public License ("GPL"). + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Matthew Jacob + * Feral Software + * mjacob@feral.com + */ + +#include +#include +#include +#include +#include +#include SESINC + +extern char *geteltnm __P((int)); +extern char *stat2ascii __P((int, u_char *)); + +int +main(a, v) + int a; + char **v; +{ + ses_object *objp; + ses_objstat ob; + int fd, nobj, f, i, verbose, quiet, errors; + u_char estat; + + if (a < 2) { + fprintf(stderr, "usage: %s [ -v ] device [ device ... ]\n", *v); + return (1); + } + errors = quiet = verbose = 0; + if (strcmp(v[1], "-V") == 0) { + verbose = 2; + v++; + } else if (strcmp(v[1], "-v") == 0) { + verbose = 1; + v++; + } else if (strcmp(v[1], "-q") == 0) { + quiet = 1; + verbose = 0; + v++; + } + while (*++v) { + + fd = open(*v, O_RDONLY); + if (fd < 0) { + perror(*v); + continue; + } + if (ioctl(fd, SESIOC_GETNOBJ, (caddr_t) &nobj) < 0) { + perror("SESIOC_GETNOBJ"); + (void) close(fd); + continue; + } + if (ioctl(fd, SESIOC_GETENCSTAT, (caddr_t) &estat) < 0) { + perror("SESIOC_GETENCSTAT"); + (void) close(fd); + continue; + } + if ((verbose == 0 || quiet == 1) && estat == 0) { + if (quiet == 0) + fprintf(stdout, "%s: Enclosure OK\n", *v); + (void) close(fd); + continue; + } + fprintf(stdout, "%s: Enclosure Status ", *v); + if (estat == 0) { + fprintf(stdout, "\n"); + objp = calloc(nobj, sizeof (ses_object)); + if (objp == NULL) { + perror("calloc"); + (void) close(fd); + continue; + } + if (ioctl(fd, SESIOC_GETOBJMAP, (caddr_t) objp) < 0) { + perror("SESIOC_GETOBJMAP"); + (void) close(fd); + continue; + } + for (i = 0; i < nobj; i++) { + ob.obj_id = objp[i].obj_id; + if (ioctl(fd, SESIOC_GETOBJSTAT, (caddr_t) &ob) < 0) { + perror("SESIOC_GETOBJSTAT"); + (void) close(fd); + break; + } + if ((ob.cstat[0] & 0xf) == SES_OBJSTAT_OK) { + if (verbose) { + fprintf(stdout, + "Element 0x%x: %s OK (%s)\n", + ob.obj_id, + geteltnm(objp[i].object_type), + stat2ascii(objp[i].object_type, + ob.cstat)); + } + continue; + } + fprintf(stdout, "Element 0x%x: %s, %s\n", + ob.obj_id, geteltnm(objp[i].object_type), + stat2ascii(objp[i].object_type, ob.cstat)); + } + free(objp); + (void) close(fd); + } + return (errors); +} diff --git a/share/examples/ses/srcs/getnobj.c b/share/examples/ses/srcs/getnobj.c new file mode 100644 index 0000000..680a6cd --- /dev/null +++ b/share/examples/ses/srcs/getnobj.c @@ -0,0 +1,66 @@ +/* $FreeBSD$ */ +/* + * Copyright (c) 2000 by Matthew Jacob + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification, immediately at the beginning of the file. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * Alternatively, this software may be distributed under the terms of the + * the GNU Public License ("GPL"). + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Matthew Jacob + * Feral Software + * mjacob@feral.com + */ + +#include +#include +#include +#include +#include +#include +#include SESINC + +int +main(argc, argv) + int argc; + char **argv; +{ + unsigned int nobj; + int fd; + + while (*++argv != NULL) { + char *name = *argv; + fd = open(name, O_RDONLY); + if (fd < 0) { + perror(name); + continue; + } + if (ioctl(fd, SESIOC_GETNOBJ, (caddr_t) &nobj) < 0) { + perror("SESIOC_GETNOBJ"); + } else { + fprintf(stdout, "%s: %d objects\n", name, nobj); + } + close (fd); + } + return (0); +} diff --git a/share/examples/ses/srcs/getobjmap.c b/share/examples/ses/srcs/getobjmap.c new file mode 100644 index 0000000..7f4d1b7 --- /dev/null +++ b/share/examples/ses/srcs/getobjmap.c @@ -0,0 +1,87 @@ +/* $FreeBSD$ */ +/* + * Copyright (c) 2000 by Matthew Jacob + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification, immediately at the beginning of the file. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * Alternatively, this software may be distributed under the terms of the + * the GNU Public License ("GPL"). + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Matthew Jacob + * Feral Software + * mjacob@feral.com + */ + +#include +#include +#include +#include +#include +#include SESINC + +extern char *geteltnm __P((int)); + +int +main(a, v) + int a; + char **v; +{ + ses_object *objp; + int nobj, fd, i; + + while (*++v) { + fd = open(*v, O_RDONLY); + if (fd < 0) { + perror(*v); + continue; + } + if (ioctl(fd, SESIOC_GETNOBJ, (caddr_t) &nobj) < 0) { + perror("SESIOC_GETNOBJ"); + (void) close(fd); + continue; + } + fprintf(stdout, "%s: %d objects\n", *v, nobj); + if (nobj == 0) { + (void) close(fd); + continue; + } + objp = calloc(nobj, sizeof (ses_object)); + if (objp == NULL) { + perror("calloc"); + (void) close(fd); + continue; + } + if (ioctl(fd, SESIOC_GETOBJMAP, (caddr_t) objp) < 0) { + perror("SESIOC_GETOBJMAP"); + (void) close(fd); + continue; + } + for (i = 0; i < nobj; i++) { + printf(" Object %d: ID 0x%x Type '%s'\n", i, + objp[i].obj_id, geteltnm((int)objp[i].object_type)); + } + free(objp); + (void) close(fd); + } + return (0); +} diff --git a/share/examples/ses/srcs/getobjstat.c b/share/examples/ses/srcs/getobjstat.c new file mode 100644 index 0000000..bf703cf --- /dev/null +++ b/share/examples/ses/srcs/getobjstat.c @@ -0,0 +1,76 @@ +/* $FreeBSD$ */ +/* + * Copyright (c) 2000 by Matthew Jacob + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification, immediately at the beginning of the file. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * Alternatively, this software may be distributed under the terms of the + * the GNU Public License ("GPL"). + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Matthew Jacob + * Feral Software + * mjacob@feral.com + */ +#include +#include +#include +#include +#include +#include SESINC + +int +main(a, v) + int a; + char **v; +{ + int fd; + int i; + ses_objstat obj; + long cvt; + char *x; + + if (a != 3) { +usage: + fprintf(stderr, "usage: %s device objectid\n", *v); + return (1); + } + fd = open(v[1], O_RDONLY); + if (fd < 0) { + perror(v[1]); + return (1); + } + x = v[2]; + cvt = strtol(v[2], &x, 0); + if (x == v[2]) { + goto usage; + } + obj.obj_id = cvt; + if (ioctl(fd, SESIOC_GETOBJSTAT, (caddr_t) &obj) < 0) { + perror("SESIOC_GETOBJSTAT"); + return (1); + } + fprintf(stdout, "Object 0x%x: 0x%x 0x%x 0x%x 0x%x\n", obj.obj_id, + obj.cstat[0], obj.cstat[1], obj.cstat[2], obj.cstat[3]); + (void) close(fd); + return (0); +} diff --git a/share/examples/ses/srcs/inienc.c b/share/examples/ses/srcs/inienc.c new file mode 100644 index 0000000..d6fb262 --- /dev/null +++ b/share/examples/ses/srcs/inienc.c @@ -0,0 +1,61 @@ +/* $FreeBSD$ */ +/* + * Copyright (c) 2000 by Matthew Jacob + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification, immediately at the beginning of the file. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * Alternatively, this software may be distributed under the terms of the + * the GNU Public License ("GPL"). + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Matthew Jacob + * Feral Software + * mjacob@feral.com + */ + +#include +#include +#include +#include +#include +#include SESINC + +int +main(a, v) + int a; + char **v; +{ + int fd; + + while (*++v) { + fd = open(*v, O_RDWR); + if (fd < 0) { + perror(*v); + continue; + } + if (ioctl(fd, SESIOC_INIT, NULL) < 0) { + perror("SESIOC_GETNOBJ"); + } + (void) close(fd); + } + return (0); +} diff --git a/share/examples/ses/srcs/sesd.c b/share/examples/ses/srcs/sesd.c new file mode 100644 index 0000000..5262b63 --- /dev/null +++ b/share/examples/ses/srcs/sesd.c @@ -0,0 +1,165 @@ +/* $FreeBSD$ */ +/* + * Copyright (c) 2000 by Matthew Jacob + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification, immediately at the beginning of the file. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * Alternatively, this software may be distributed under the terms of the + * the GNU Public License ("GPL"). + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Matthew Jacob + * Feral Software + * mjacob@feral.com + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include SESINC + +#define ALLSTAT (SES_ENCSTAT_UNRECOV | SES_ENCSTAT_CRITICAL | \ + SES_ENCSTAT_NONCRITICAL | SES_ENCSTAT_INFO) + +/* + * Monitor named SES devices and note (via syslog) any changes in status. + */ + +int +main(a, v) + int a; + char **v; +{ + static char *usage = + "usage: %s [ -d ] [ -t pollinterval ] device [ device ]\n"; + int fd, polltime, dev, devbase, nodaemon, bpri; + ses_encstat stat, *carray; + + if (a < 2) { + fprintf(stderr, usage, *v); + return (1); + } + + devbase = 1; + + if (strcmp(v[1], "-d") == 0) { + nodaemon = 1; + devbase++; + } else { + nodaemon = 0; + } + + if (a > 2 && strcmp(v[2], "-t") == 0) { + devbase += 2; + polltime = atoi(v[3]); + } else { + polltime = 30; + } + + carray = malloc(a); + if (carray == NULL) { + perror("malloc"); + return (1); + } + for (dev = devbase; dev < a; dev++) + carray[dev] = (ses_encstat) -1; + + /* + * Check to make sure we can open all devices + */ + for (dev = devbase; dev < a; dev++) { + fd = open(v[dev], O_RDWR); + if (fd < 0) { + perror(v[dev]); + return (1); + } + if (ioctl(fd, SESIOC_INIT, NULL) < 0) { + fprintf(stderr, "%s: SESIOC_INIT fails- %s\n", + v[dev], strerror(errno)); + return (1); + } + (void) close(fd); + } + if (nodaemon == 0) { + if (daemon(0, 0) < 0) { + perror("daemon"); + return (1); + } + openlog("sesd", LOG_CONS, LOG_USER); + } else { + openlog("sesd", LOG_CONS|LOG_PERROR, LOG_USER); + } + + for (;;) { + for (dev = devbase; dev < a; dev++) { + char buf[128]; + fd = open(v[dev], O_RDWR); + if (fd < 0) { + syslog(LOG_ERR, "%s: %m", v[dev]); + continue; + } + + /* + * Get the actual current enclosure status. + */ + if (ioctl(fd, SESIOC_GETENCSTAT, (caddr_t) &stat) < 0) { + syslog(LOG_ERR, + "%s: SESIOC_GETENCSTAT- %m", v[dev]); + (void) close(fd); + continue; + } + (void) close(fd); + + if (stat == carray[dev]) + continue; + + carray[dev] = stat; + if ((stat & ALLSTAT) == 0) { + syslog(LOG_NOTICE, + "%s: Enclosure Status OK", v[dev]); + } + if (stat & SES_ENCSTAT_INFO) { + syslog(LOG_INFO, + "%s: Enclosure Status Has Information", + v[dev]); + } + if (stat & SES_ENCSTAT_NONCRITICAL) { + syslog(LOG_WARNING, + "%s: Enclosure Non-Critical", v[dev]); + } + if (stat & SES_ENCSTAT_CRITICAL) { + syslog(LOG_CRIT, + "%s: Enclosure Critical", v[dev]); + } + if (stat & SES_ENCSTAT_UNRECOV) { + syslog(LOG_ALERT, + "%s: Enclosure Unrecoverable", v[dev]); + } + } + sleep(polltime); + } + /* NOTREACHED */ +} diff --git a/share/examples/ses/srcs/setencstat.c b/share/examples/ses/srcs/setencstat.c new file mode 100644 index 0000000..58e0daf --- /dev/null +++ b/share/examples/ses/srcs/setencstat.c @@ -0,0 +1,68 @@ +/* $FreeBSD$ */ +/* + * Copyright (c) 2000 by Matthew Jacob + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification, immediately at the beginning of the file. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * Alternatively, this software may be distributed under the terms of the + * the GNU Public License ("GPL"). + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Matthew Jacob + * Feral Software + * mjacob@feral.com + */ + +#include +#include +#include +#include +#include +#include SESINC + +int +main(a, v) + int a; + char **v; +{ + int fd; + long val; + ses_encstat stat; + + if (a != 3) { + fprintf(stderr, "usage: %s device enclosure_status\n", *v); + return (1); + } + fd = open(v[1], O_RDWR); + if (fd < 0) { + perror(v[1]); + return (1); + } + + val = strtol(v[2], NULL, 0); + stat = (ses_encstat) val; + if (ioctl(fd, SESIOC_SETENCSTAT, (caddr_t) &stat) < 0) { + perror("SESIOC_SETENCSTAT"); + } + (void) close(fd); + return (0); +} diff --git a/share/examples/ses/srcs/setobjstat.c b/share/examples/ses/srcs/setobjstat.c new file mode 100644 index 0000000..34e8ea6 --- /dev/null +++ b/share/examples/ses/srcs/setobjstat.c @@ -0,0 +1,83 @@ +/* $FreeBSD$ */ +/* + * Copyright (c) 2000 by Matthew Jacob + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification, immediately at the beginning of the file. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * Alternatively, this software may be distributed under the terms of the + * the GNU Public License ("GPL"). + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Matthew Jacob + * Feral Software + * mjacob@feral.com + */ + +#include +#include +#include +#include +#include +#include SESINC + +int +main(a, v) + int a; + char **v; +{ + int fd; + int i; + ses_objstat obj; + long cvt; + char *x; + + if (a != 7) { +usage: + fprintf(stderr, + "usage: %s device objectid stat0 stat1 stat2 stat3\n", *v); + return (1); + } + fd = open(v[1], O_RDWR); + if (fd < 0) { + perror(v[1]); + return (1); + } + x = v[2]; + cvt = strtol(v[2], &x, 0); + if (x == v[2]) { + goto usage; + } + obj.obj_id = cvt; + for (i = 0; i < 4; i++) { + x = v[3 + i]; + cvt = strtol(v[3 + i], &x, 0); + if (x == v[3 + i]) { + goto usage; + } + obj.cstat[i] = cvt; + } + if (ioctl(fd, SESIOC_SETOBJSTAT, (caddr_t) &obj) < 0) { + perror("SESIOC_SETOBJSTAT"); + } + (void) close(fd); + return (0); +} -- cgit v1.1