03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER START
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * The contents of this file are subject to the terms of the
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Common Development and Distribution License, Version 1.0 only
03831d35f7499c87d51205817c93e9a8d42c4baestevel * (the "License"). You may not use this file except in compliance
03831d35f7499c87d51205817c93e9a8d42c4baestevel * with the License.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
03831d35f7499c87d51205817c93e9a8d42c4baestevel * or http://www.opensolaris.org/os/licensing.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * See the License for the specific language governing permissions
03831d35f7499c87d51205817c93e9a8d42c4baestevel * and limitations under the License.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * When distributing Covered Code, include this CDDL HEADER in each
03831d35f7499c87d51205817c93e9a8d42c4baestevel * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * If applicable, add the following below this CDDL HEADER, with the
03831d35f7499c87d51205817c93e9a8d42c4baestevel * fields enclosed by brackets "[]" replaced with your own identifying
03831d35f7499c87d51205817c93e9a8d42c4baestevel * information: Portions Copyright [yyyy] [name of copyright owner]
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER END
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Copyright 2002 Sun Microsystems, Inc. All rights reserved.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Use is subject to license terms.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#pragma ident "%Z%%M% %I% %E% SMI"
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * send_event.c: support for the scadm send_event option (send an event message
03831d35f7499c87d51205817c93e9a8d42c4baestevel * to the service processor)
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <libintl.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <stdio.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <string.h>
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include <time.h> /* required by librsc.h */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include "librsc.h"
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include "adm.h"
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelstatic void usage();
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baesteveltypedef union data_buffer {
03831d35f7499c87d51205817c93e9a8d42c4baestevel char DataBuffer[DP_MAX_MSGLEN];
03831d35f7499c87d51205817c93e9a8d42c4baestevel void *DataBuffer_p;
03831d35f7499c87d51205817c93e9a8d42c4baestevel} data_buffer_t;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelvoid
03831d35f7499c87d51205817c93e9a8d42c4baestevelADM_Process_send_event(int argc, char *argv[])
03831d35f7499c87d51205817c93e9a8d42c4baestevel{
03831d35f7499c87d51205817c93e9a8d42c4baestevel rscp_msg_t Message;
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct timespec Timeout;
03831d35f7499c87d51205817c93e9a8d42c4baestevel static data_buffer_t DataBuffer;
03831d35f7499c87d51205817c93e9a8d42c4baestevel dp_send_alert_t *Parms;
03831d35f7499c87d51205817c93e9a8d42c4baestevel char *Alert;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel if ((argc != 3) && (argc != 4)) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel usage();
03831d35f7499c87d51205817c93e9a8d42c4baestevel exit(-1);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (argc == 4) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (strcasecmp(argv[2], "-c") != 0) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel usage();
03831d35f7499c87d51205817c93e9a8d42c4baestevel exit(-1);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel ADM_Start();
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel Parms = (dp_send_alert_t *)&DataBuffer;
03831d35f7499c87d51205817c93e9a8d42c4baestevel Alert = (char *)(&((char *)Parms)[sizeof (dp_send_alert_t)]);
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (argc == 3) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel Parms->critical = 0;
03831d35f7499c87d51205817c93e9a8d42c4baestevel (void) strcpy(Alert, argv[2]);
03831d35f7499c87d51205817c93e9a8d42c4baestevel } else {
03831d35f7499c87d51205817c93e9a8d42c4baestevel Parms->critical = 1;
03831d35f7499c87d51205817c93e9a8d42c4baestevel (void) strcpy(Alert, argv[3]);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (strlen(Alert) > 80) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel (void) fprintf(stderr, "\n%s\n\n",
03831d35f7499c87d51205817c93e9a8d42c4baestevel gettext("scadm: event message can't exceed 80 characters"));
03831d35f7499c87d51205817c93e9a8d42c4baestevel exit(-1);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel Message.type = DP_SEND_ALERT;
03831d35f7499c87d51205817c93e9a8d42c4baestevel Message.len = sizeof (dp_send_alert_t) + strlen(Alert) + 1;
03831d35f7499c87d51205817c93e9a8d42c4baestevel Message.data = Parms;
03831d35f7499c87d51205817c93e9a8d42c4baestevel ADM_Send(&Message);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel Timeout.tv_nsec = 0;
03831d35f7499c87d51205817c93e9a8d42c4baestevel Timeout.tv_sec = ADM_TIMEOUT;
03831d35f7499c87d51205817c93e9a8d42c4baestevel ADM_Recv(&Message, &Timeout, DP_SEND_ALERT_R,
03831d35f7499c87d51205817c93e9a8d42c4baestevel sizeof (dp_send_alert_r_t));
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (*(int *)Message.data != 0) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel (void) fprintf(stderr, "\n%s\n\n",
03831d35f7499c87d51205817c93e9a8d42c4baestevel gettext("scadm: could not send alert"));
03831d35f7499c87d51205817c93e9a8d42c4baestevel exit(-1);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel ADM_Free(&Message);
03831d35f7499c87d51205817c93e9a8d42c4baestevel}
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelstatic void
03831d35f7499c87d51205817c93e9a8d42c4baestevelusage()
03831d35f7499c87d51205817c93e9a8d42c4baestevel{
03831d35f7499c87d51205817c93e9a8d42c4baestevel (void) fprintf(stderr, "\n%s\n\n",
03831d35f7499c87d51205817c93e9a8d42c4baestevel gettext("USAGE: scadm send_event [-c] \"message\""));
03831d35f7499c87d51205817c93e9a8d42c4baestevel}