1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER START
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * The contents of this file are subject to the terms of the
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Common Development and Distribution License (the "License").
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * You may not use this file except in compliance with the License.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * or http://www.opensolaris.org/os/licensing.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * See the License for the specific language governing permissions
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * and limitations under the License.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * When distributing Covered Code, include this CDDL HEADER in each
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * If applicable, add the following below this CDDL HEADER, with the
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * fields enclosed by brackets "[]" replaced with your own identifying
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * information: Portions Copyright [yyyy] [name of copyright owner]
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER END
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
28b1e50e4eed7be353f9778497714aab53ef2a0dSriharsha Basavapatna * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Use is subject to license terms.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * supporting modules.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <stdio.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <sys/types.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <sys/ipc.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <stdlib.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <string.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <unistd.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <sys/socket.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <sys/ipc.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <sys/shm.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <sys/sem.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <sys/poll.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <wait.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <time.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <netinet/in.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <thread.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <signal.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <ctype.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <langinfo.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <libintl.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include <syslog.h>
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include "vntsd.h"
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#include "chars.h"
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* vntsd_write_line() - write a line to TCP client */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoint
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_write_line(vntsd_client_t *clientp, char *line)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo{
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo int rv;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo rv = vntsd_write_client(clientp, line, strlen(line));
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (rv == VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo rv = vntsd_write_client(clientp, vntsd_eol, VNTSD_EOL_LEN);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (rv);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* vntsd_write_lines() write one or more lines to client. */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoint
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_write_lines(vntsd_client_t *clientp, char *lines)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo{
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo char *buf;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo char *line;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo char *endofline;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo buf = strdup(lines);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (buf == NULL) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (VNTSD_ERR_NO_MEM);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo line = buf;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo while ((line != NULL) && (*line != '\0')) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo endofline = strchr(line, '\n');
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (endofline != NULL) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *endofline = '\0';
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo (void) vntsd_write_line(clientp, line);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (endofline != NULL)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo line = endofline + 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo else
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo line = NULL;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo free(buf);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (VNTSD_SUCCESS);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* vntsd_get_yes_no() - read in a "y" or "n" */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoint
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_get_yes_no(vntsd_client_t *clientp, char *msg, int *yes_no)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo{
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo char c;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo char yesno[8];
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo int rv;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* create [y/n] prompt */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo (void) snprintf(yesno, sizeof (yesno), "[%c/%c] ",
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *nl_langinfo(YESSTR), *nl_langinfo(NOSTR));
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo for (; ; ) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_write_client(clientp, msg, strlen(msg)))
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo != VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (rv);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_write_client(clientp, yesno, strlen(yesno))) !=
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (rv);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_read_data(clientp, &c))
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo != VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (rv);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* echo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_write_client(clientp, &c, 1)) !=
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (rv);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_write_client(clientp, vntsd_eol,
28b1e50e4eed7be353f9778497714aab53ef2a0dSriharsha Basavapatna VNTSD_EOL_LEN)) != VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (rv);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo c = tolower(c);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (c == *nl_langinfo(YESSTR)) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *yes_no = B_TRUE;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (VNTSD_SUCCESS);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (c == *nl_langinfo(NOSTR)) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *yes_no = B_FALSE;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (VNTSD_SUCCESS);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_write_line(clientp,
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo gettext("Invalid response. Try again.")))
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo != VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (rv);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /*NOTREACHED*/
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (0);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* vntsd_open_vcc() - open a vcc port */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoint
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_open_vcc(char *dev_name, uint_t cons_no)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo{
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo int drvfd;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo int sz;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo char *path;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo sz = strlen(VCC_DEVICE_PATH) + strlen(dev_name)+1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo path = calloc(sz, 1);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (path == NULL) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (-1);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo (void) snprintf(path, sz-1, VCC_DEVICE_PATH, dev_name);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo for (; ; ) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo drvfd = open(path, O_RDWR);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((drvfd < 0) && (errno == EAGAIN)) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (vntsd_vcc_ioctl(VCC_FORCE_CLOSE, cons_no, &cons_no)
28b1e50e4eed7be353f9778497714aab53ef2a0dSriharsha Basavapatna != VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
28b1e50e4eed7be353f9778497714aab53ef2a0dSriharsha Basavapatna }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo } else {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (drvfd < 0) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo D1(stderr, "t@%d open_vcc@%s exit\n", thr_self(), dev_name);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo free(path);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (-1);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo free(path);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (drvfd);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* vntsd_cons_by_consno() - match a console structure to cons no */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoboolean_t
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_cons_by_consno(vntsd_cons_t *consp, int *cons_id)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo{
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (consp->status & VNTSD_CONS_DELETED) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (B_FALSE);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (consp->cons_no == *cons_id);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* vntsd_write_client() write to telnet client */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoint
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_write_client(vntsd_client_t *client, char *buffer, size_t sz)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo{
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo int rv;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* write to client */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo rv = vntsd_write_fd(client->sockfd, buffer, sz);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* client has output, reset timer */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo vntsd_reset_timer(client->cons_tid);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (rv);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* vntsd_write_fd() write to tcp socket file descriptor */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoint
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_write_fd(int fd, void *buf, size_t sz)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo{
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo int n;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo while (sz > 0) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo n = write(fd, buf, sz);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (n < 0) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (errno == EINTR) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (VNTSD_STATUS_INTR);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (VNTSD_STATUS_CLIENT_QUIT);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (n == 0) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (VNTSD_STATUS_CLIENT_QUIT);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo buf = (caddr_t)buf + n;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo sz -= n;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (VNTSD_SUCCESS);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * vntsd_read_char() - read a char from TCP Clienti. Returns:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNTSD_SUCCESS, VNTSD_STATUS_CLIENT_QUIT or VNTSD_STATUS_INTR
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoint
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_read_char(vntsd_client_t *clientp, char *c)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo{
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo int n;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo vntsd_timeout_t tmo;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo int rv;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo tmo.tid = thr_self();
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo tmo.minutes = 0;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo tmo.clientp = clientp;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* attach to timer */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_attach_timer(&tmo)) != VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (rv);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo n = read(clientp->sockfd, c, 1);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* detach from timer */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_detach_timer(&tmo)) != VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (rv);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (n == 1) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (VNTSD_SUCCESS);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (n == 0) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (VNTSD_STATUS_CLIENT_QUIT);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * read error or wake up by signal, either console is being removed or
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * timeout occurs.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (errno == EINTR) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (VNTSD_STATUS_INTR);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* any other error, we close client */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (VNTSD_STATUS_CLIENT_QUIT);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/*
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * vntsd_read_data() - handle special commands
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * such as telnet, daemon and ctrl cmds. Returns:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * from vntsd_read_char:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNTSD_STATUS_CLIENT_QUIT
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNTSD_STATUS_INTR
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * from vnts_process_daemon_cmd:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNTSD_STATUS_RESELECT_CONS
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNTSD_STATUS_MOV_CONS_FORWARD
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNTSD_STATUS_MOV_CONS_BACKWARD
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNTSD_STATUS_ACQURE_WRITER
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNTSD_STATUS_CONTINUE
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * from vntsd_telnet_cmd
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * VNTSD_STATUS_CONTINUE
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoint
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_read_data(vntsd_client_t *clientp, char *c)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo{
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo int rv;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo for (; ; ) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_read_char(clientp, c)) != VNTSD_SUCCESS) {
28b1e50e4eed7be353f9778497714aab53ef2a0dSriharsha Basavapatna return (rv);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* daemon cmd? */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo rv = vntsd_process_daemon_cmd(clientp, *c);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (rv == VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* telnet cmd? */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo rv = vntsd_telnet_cmd(clientp, *c);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (rv == VNTSD_STATUS_CONTINUE) {
823fe29b97090ae4962ebcc65cdaf0a757eb4851dtse /*
823fe29b97090ae4962ebcc65cdaf0a757eb4851dtse * either a daemon cmd or a telnet cmd
823fe29b97090ae4962ebcc65cdaf0a757eb4851dtse * was processed.
823fe29b97090ae4962ebcc65cdaf0a757eb4851dtse */
823fe29b97090ae4962ebcc65cdaf0a757eb4851dtse clientp->prev_char = 0;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo continue;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (rv);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /*NOTREACHED*/
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (0);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* vntsd_read_line() - read a line from TCP client */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoint
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_read_line(vntsd_client_t *clientp, char *buf, int *in_sz)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo{
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo char c;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo int rv;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo int out_sz = 0;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo for (; ; ) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_read_data(clientp, &c)) != VNTSD_SUCCESS) {
28b1e50e4eed7be353f9778497714aab53ef2a0dSriharsha Basavapatna return (rv);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (c == BS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* back */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_write_client(clientp, &c, 1)) !=
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (rv);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo c = ' ';
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_write_client(clientp, &c, 1)) !=
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (rv);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo buf--;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo out_sz--;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo continue;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* echo */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rv = vntsd_write_client(clientp, &c, 1)) !=
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (rv);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *buf++ = c;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo out_sz++;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (c == CR) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* end of line */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo *in_sz = out_sz;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (VNTSD_SUCCESS);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (out_sz == *in_sz) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (VNTSD_SUCCESS);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /*NOTREACHED*/
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (0);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* free a client */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovoid
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_free_client(vntsd_client_t *clientp)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo{
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (clientp->sockfd != -1) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo (void) close(clientp->sockfd);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo (void) mutex_destroy(&clientp->lock);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo free(clientp);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* check if a vcc console port still ok */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoboolean_t
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_vcc_cons_alive(vntsd_cons_t *consp)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo{
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo vcc_console_t vcc_cons;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo int rv;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo assert(consp);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo assert(consp->group);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* construct current configuration */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo (void) strncpy(vcc_cons.domain_name, consp->domain_name, MAXPATHLEN);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo (void) strncpy(vcc_cons.group_name, consp->group->group_name,
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo MAXPATHLEN);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo vcc_cons.tcp_port = consp->group->tcp_port;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo vcc_cons.cons_no = consp->cons_no;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* call vcc to verify */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo rv = vntsd_vcc_ioctl(VCC_CONS_STATUS, consp->cons_no, &vcc_cons);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (rv != VNTSD_SUCCESS) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (B_FALSE);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (vcc_cons.cons_no == -1) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* port is gone */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (B_FALSE);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* port is ok */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (B_TRUE);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* add to total if a console is alive */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppostatic boolean_t
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppototal_cons(vntsd_cons_t *consp, int *num_cons)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo{
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo int rv;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo assert(consp->group);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo rv = vntsd_vcc_err(consp);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (rv == VNTSD_STATUS_CONTINUE) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo (*num_cons)++;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (B_FALSE);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* total alive consoles in a group */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoint
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_chk_group_total_cons(vntsd_group_t *groupp)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo{
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uint_t num_cons = 0;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo (void) vntsd_que_find(groupp->conspq, (compare_func_t)total_cons,
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo &num_cons);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (num_cons);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* vntsd_log() log function for errors */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovoid
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppovntsd_log(vntsd_status_t status, char *msg)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo{
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo char *status_msg = NULL;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo int critical = 0;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo switch (status) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_SUCCESS:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "STATUS_OK";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_STATUS_CONTINUE:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "CONTINUE";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_STATUS_EXIT_SIG:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo critical = 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "KILL SIGNAL RECV";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_STATUS_SIG:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "SIG RECV";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_STATUS_NO_HOST_NAME:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "Warining NO HOST NAME";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_STATUS_CLIENT_QUIT:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "CLIENT CLOSED GROUP CONNECTION";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_STATUS_RESELECT_CONS:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "CLIENT RESELECTS CONSOLE";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_STATUS_VCC_IO_ERR:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "CONSOLE WAS DELETED";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_STATUS_MOV_CONS_FORWARD:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "MOVE CONSOLE FORWARD";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_STATUS_MOV_CONS_BACKWARD:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "MOVE CONSOLE BACKWARD";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_STATUS_ACQUIRE_WRITER:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "FORCE CONSOLE WRITE";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_STATUS_INTR:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "RECV SIGNAL";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_STATUS_DISCONN_CONS:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "DELETING CONSOLE";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_STATUS_NO_CONS:
7636cb21f250f0485ca6052ffadc80ace93e6358lm status_msg = "All console(s) in the group have been deleted.";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
28b1e50e4eed7be353f9778497714aab53ef2a0dSriharsha Basavapatna case VNTSD_STATUS_AUTH_ENABLED:
28b1e50e4eed7be353f9778497714aab53ef2a0dSriharsha Basavapatna critical = 1;
28b1e50e4eed7be353f9778497714aab53ef2a0dSriharsha Basavapatna status_msg = "VNTSD_STATUS_AUTH_ENABLED";
28b1e50e4eed7be353f9778497714aab53ef2a0dSriharsha Basavapatna break;
28b1e50e4eed7be353f9778497714aab53ef2a0dSriharsha Basavapatna
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_ERR_NO_MEM:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo critical = 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "NO MEMORY";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_ERR_NO_DRV:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo critical = 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "NO VCC DRIVER";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_ERR_WRITE_CLIENT:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "WRITE CLIENT ERR";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_ERR_EL_NOT_FOUND:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo critical = 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "ELEMENT_NOT_FOUND";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_ERR_VCC_CTRL_DATA:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo critical = 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "VCC CTRL DATA ERROR";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_ERR_VCC_POLL:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo critical = 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "VCC POLL ERROR";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_ERR_VCC_IOCTL:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo critical = 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "VCC IOCTL ERROR";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_ERR_VCC_GRP_NAME:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo critical = 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "VCC GROUP NAME ERROR";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_ERR_CREATE_LISTEN_THR:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo critical = 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "FAIL TO CREATE LISTEN THREAD";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_ERR_CREATE_WR_THR:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo critical = 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "FAIL TO CREATE WRITE THREAD";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_ERR_ADD_CONS_FAILED:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo critical = 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "FAIL TO ADD A CONSOLE";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_ERR_LISTEN_SOCKET:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo critical = 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "LISTEN SOCKET ERROR";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_ERR_LISTEN_OPTS:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo critical = 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "SET SOCKET OPTIONS ERROR";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_ERR_LISTEN_BIND:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo critical = 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "BIND SOCKET ERROR";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_STATUS_ACCEPT_ERR:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo critical = 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "LISTEN ACCEPT ERROR";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_ERR_CREATE_CONS_THR:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo critical = 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "CREATE CONSOLE THREAD ERROR ";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_ERR_SIG:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo critical = 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "RECV UNKNOWN SIG";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_ERR_UNKNOWN_CMD:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo critical = 1;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "RECV UNKNOWN COMMAND";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo case VNTSD_ERR_CLIENT_TIMEOUT:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "CLOSE CLIENT BECAUSE TIMEOUT";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo default:
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo status_msg = "Unknown status recv";
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo break;
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (critical) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo syslog(LOG_ERR, "%s: thread[%d] %s\n", status_msg,
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo thr_self(), msg);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo }
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#ifdef DEBUG
28b1e50e4eed7be353f9778497714aab53ef2a0dSriharsha Basavapatna DERR(stderr, "%s: thread[%d] %s\n", status_msg, thr_self(), msg);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo syslog(LOG_ERR, "%s: thread[%d] %s\n", status_msg, thr_self(), msg);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#endif
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo}