xref: /onnv-gate/usr/src/cmd/vntsd/common.c (revision 8734:e35a6dc4dd5a)
11991Sheppo /*
21991Sheppo  * CDDL HEADER START
31991Sheppo  *
41991Sheppo  * The contents of this file are subject to the terms of the
51991Sheppo  * Common Development and Distribution License (the "License").
61991Sheppo  * You may not use this file except in compliance with the License.
71991Sheppo  *
81991Sheppo  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
91991Sheppo  * or http://www.opensolaris.org/os/licensing.
101991Sheppo  * See the License for the specific language governing permissions
111991Sheppo  * and limitations under the License.
121991Sheppo  *
131991Sheppo  * When distributing Covered Code, include this CDDL HEADER in each
141991Sheppo  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
151991Sheppo  * If applicable, add the following below this CDDL HEADER, with the
161991Sheppo  * fields enclosed by brackets "[]" replaced with your own identifying
171991Sheppo  * information: Portions Copyright [yyyy] [name of copyright owner]
181991Sheppo  *
191991Sheppo  * CDDL HEADER END
201991Sheppo  */
211991Sheppo 
221991Sheppo /*
23*8734SSriharsha.Basavapatna@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
241991Sheppo  * Use is subject to license terms.
251991Sheppo  */
261991Sheppo 
271991Sheppo /*
281991Sheppo  * supporting modules.
291991Sheppo  */
301991Sheppo 
311991Sheppo #include <stdio.h>
321991Sheppo #include <sys/types.h>
331991Sheppo #include <sys/ipc.h>
341991Sheppo #include <stdlib.h>
351991Sheppo #include <string.h>
361991Sheppo #include <unistd.h>
371991Sheppo #include <sys/socket.h>
381991Sheppo #include <sys/ipc.h>
391991Sheppo #include <sys/shm.h>
401991Sheppo #include <sys/sem.h>
411991Sheppo #include <sys/poll.h>
421991Sheppo #include <wait.h>
431991Sheppo #include <time.h>
441991Sheppo #include <netinet/in.h>
451991Sheppo #include <thread.h>
461991Sheppo #include <signal.h>
471991Sheppo #include <ctype.h>
481991Sheppo #include <langinfo.h>
491991Sheppo #include <libintl.h>
501991Sheppo #include <syslog.h>
511991Sheppo #include "vntsd.h"
521991Sheppo #include "chars.h"
531991Sheppo 
541991Sheppo /*  vntsd_write_line() - write a line to TCP client */
551991Sheppo int
vntsd_write_line(vntsd_client_t * clientp,char * line)561991Sheppo vntsd_write_line(vntsd_client_t *clientp, char *line)
571991Sheppo {
581991Sheppo 	int rv;
591991Sheppo 
601991Sheppo 	rv = vntsd_write_client(clientp, line, strlen(line));
611991Sheppo 	if (rv == VNTSD_SUCCESS) {
621991Sheppo 		rv = vntsd_write_client(clientp, vntsd_eol, VNTSD_EOL_LEN);
631991Sheppo 	}
641991Sheppo 
651991Sheppo 	return (rv);
661991Sheppo }
671991Sheppo 
681991Sheppo /*  vntsd_write_lines() write one or more lines to client.  */
691991Sheppo int
vntsd_write_lines(vntsd_client_t * clientp,char * lines)701991Sheppo vntsd_write_lines(vntsd_client_t *clientp, char *lines)
711991Sheppo {
721991Sheppo 	char	*buf;
731991Sheppo 	char	*line;
741991Sheppo 	char 	*endofline;
751991Sheppo 
761991Sheppo 	buf = strdup(lines);
771991Sheppo 	if (buf == NULL) {
781991Sheppo 		return (VNTSD_ERR_NO_MEM);
791991Sheppo 	}
801991Sheppo 
811991Sheppo 	line = buf;
821991Sheppo 
831991Sheppo 	while ((line != NULL) && (*line != '\0')) {
841991Sheppo 
851991Sheppo 		endofline = strchr(line, '\n');
861991Sheppo 		if (endofline != NULL) {
871991Sheppo 			*endofline = '\0';
881991Sheppo 		}
891991Sheppo 
901991Sheppo 		(void) vntsd_write_line(clientp, line);
911991Sheppo 
921991Sheppo 		if (endofline != NULL)
931991Sheppo 			line = endofline + 1;
941991Sheppo 		else
951991Sheppo 			line = NULL;
961991Sheppo 	}
971991Sheppo 
981991Sheppo 	free(buf);
991991Sheppo 	return (VNTSD_SUCCESS);
1001991Sheppo }
1011991Sheppo 
1021991Sheppo /* vntsd_get_yes_no() -  read in a "y" or "n" */
1031991Sheppo int
vntsd_get_yes_no(vntsd_client_t * clientp,char * msg,int * yes_no)1041991Sheppo vntsd_get_yes_no(vntsd_client_t *clientp, char *msg, int *yes_no)
1051991Sheppo {
1061991Sheppo 	char	c;
1071991Sheppo 	char	yesno[8];
1081991Sheppo 	int	rv;
1091991Sheppo 
1101991Sheppo 	/* create [y/n] prompt */
1111991Sheppo 	(void) snprintf(yesno, sizeof (yesno), "[%c/%c] ",
1121991Sheppo 	    *nl_langinfo(YESSTR), *nl_langinfo(NOSTR));
1131991Sheppo 
1141991Sheppo 	for (; ; ) {
1151991Sheppo 		if ((rv = vntsd_write_client(clientp, msg, strlen(msg)))
1161991Sheppo 		    != VNTSD_SUCCESS) {
1171991Sheppo 			return (rv);
1181991Sheppo 		}
1191991Sheppo 
1201991Sheppo 		if ((rv = vntsd_write_client(clientp, yesno, strlen(yesno))) !=
1211991Sheppo 		    VNTSD_SUCCESS) {
1221991Sheppo 			return (rv);
1231991Sheppo 		}
1241991Sheppo 
1251991Sheppo 		if ((rv = vntsd_read_data(clientp, &c))
1261991Sheppo 		    != VNTSD_SUCCESS) {
1271991Sheppo 			return (rv);
1281991Sheppo 		}
1291991Sheppo 
1301991Sheppo 		/* echo */
1311991Sheppo 		if ((rv = vntsd_write_client(clientp, &c, 1)) !=
1321991Sheppo 		    VNTSD_SUCCESS) {
1331991Sheppo 			return (rv);
1341991Sheppo 		}
1351991Sheppo 
1361991Sheppo 		if ((rv = vntsd_write_client(clientp, vntsd_eol,
137*8734SSriharsha.Basavapatna@Sun.COM 		    VNTSD_EOL_LEN)) != VNTSD_SUCCESS) {
1381991Sheppo 			return (rv);
1391991Sheppo 		}
1401991Sheppo 
1411991Sheppo 		c = tolower(c);
1421991Sheppo 
1431991Sheppo 		if (c == *nl_langinfo(YESSTR)) {
1441991Sheppo 			*yes_no = B_TRUE;
1451991Sheppo 			return (VNTSD_SUCCESS);
1461991Sheppo 		}
1471991Sheppo 
1481991Sheppo 		if (c == *nl_langinfo(NOSTR)) {
1491991Sheppo 			*yes_no = B_FALSE;
1501991Sheppo 			return (VNTSD_SUCCESS);
1511991Sheppo 		}
1521991Sheppo 
1531991Sheppo 		if ((rv = vntsd_write_line(clientp,
1541991Sheppo 		    gettext("Invalid response. Try again.")))
1551991Sheppo 		    != VNTSD_SUCCESS) {
1561991Sheppo 			return (rv);
1571991Sheppo 		}
1581991Sheppo 	}
1591991Sheppo 
1601991Sheppo 	/*NOTREACHED*/
1611991Sheppo 	return (0);
1621991Sheppo }
1631991Sheppo 
1641991Sheppo /* vntsd_open_vcc()  -  open a vcc port */
1651991Sheppo int
vntsd_open_vcc(char * dev_name,uint_t cons_no)1661991Sheppo vntsd_open_vcc(char *dev_name, uint_t cons_no)
1671991Sheppo {
1681991Sheppo 	int	drvfd;
1691991Sheppo 	int	sz;
1701991Sheppo 	char	*path;
1711991Sheppo 	sz = strlen(VCC_DEVICE_PATH) + strlen(dev_name)+1;
1721991Sheppo 
1731991Sheppo 	path = calloc(sz, 1);
1741991Sheppo 
1751991Sheppo 	if (path == NULL) {
1761991Sheppo 		return (-1);
1771991Sheppo 	}
1781991Sheppo 
1791991Sheppo 	(void) snprintf(path, sz-1, VCC_DEVICE_PATH, dev_name);
1801991Sheppo 
1811991Sheppo 	for (; ; ) {
1821991Sheppo 		drvfd = open(path, O_RDWR);
1831991Sheppo 
1841991Sheppo 		if ((drvfd < 0) && (errno == EAGAIN)) {
1851991Sheppo 			if (vntsd_vcc_ioctl(VCC_FORCE_CLOSE, cons_no, &cons_no)
186*8734SSriharsha.Basavapatna@Sun.COM 			    != VNTSD_SUCCESS) {
1871991Sheppo 				break;
188*8734SSriharsha.Basavapatna@Sun.COM 			}
1891991Sheppo 		} else {
1901991Sheppo 			break;
1911991Sheppo 		}
1921991Sheppo 	}
1931991Sheppo 
1941991Sheppo 
1951991Sheppo 	if (drvfd < 0) {
1961991Sheppo 		D1(stderr, "t@%d open_vcc@%s exit\n", thr_self(), dev_name);
1971991Sheppo 		free(path);
1981991Sheppo 		return (-1);
1991991Sheppo 	}
2001991Sheppo 
2011991Sheppo 	free(path);
2021991Sheppo 	return (drvfd);
2031991Sheppo }
2041991Sheppo 
2051991Sheppo /* vntsd_cons_by_consno() - match a console structure to cons no */
2061991Sheppo boolean_t
vntsd_cons_by_consno(vntsd_cons_t * consp,int * cons_id)2071991Sheppo vntsd_cons_by_consno(vntsd_cons_t *consp, int *cons_id)
2081991Sheppo {
2091991Sheppo 	if (consp->status & VNTSD_CONS_DELETED) {
2101991Sheppo 		return (B_FALSE);
2111991Sheppo 	}
2121991Sheppo 	return (consp->cons_no == *cons_id);
2131991Sheppo }
2141991Sheppo 
2151991Sheppo /* vntsd_write_client() write to telnet client */
2161991Sheppo int
vntsd_write_client(vntsd_client_t * client,char * buffer,size_t sz)2171991Sheppo vntsd_write_client(vntsd_client_t *client, char *buffer, size_t sz)
2181991Sheppo {
2191991Sheppo 	int rv;
2201991Sheppo 
2211991Sheppo 
2221991Sheppo 	/* write to client */
2231991Sheppo 	rv = vntsd_write_fd(client->sockfd, buffer, sz);
2241991Sheppo 
2251991Sheppo 	/* client has output, reset timer */
2261991Sheppo 	vntsd_reset_timer(client->cons_tid);
2271991Sheppo 
2281991Sheppo 	return (rv);
2291991Sheppo }
2301991Sheppo 
2311991Sheppo /* vntsd_write_fd() write to tcp socket file descriptor  */
2321991Sheppo int
vntsd_write_fd(int fd,void * buf,size_t sz)2331991Sheppo vntsd_write_fd(int fd, void *buf, size_t sz)
2341991Sheppo {
2351991Sheppo 	int n;
2361991Sheppo 
2371991Sheppo 	while (sz > 0) {
2381991Sheppo 		n = write(fd, buf, sz);
2391991Sheppo 		if (n < 0) {
2401991Sheppo 			if (errno == EINTR) {
2411991Sheppo 				return (VNTSD_STATUS_INTR);
2421991Sheppo 			}
2431991Sheppo 
2441991Sheppo 			return (VNTSD_STATUS_CLIENT_QUIT);
2451991Sheppo 		}
2461991Sheppo 
2471991Sheppo 		if (n == 0) {
2481991Sheppo 			return (VNTSD_STATUS_CLIENT_QUIT);
2491991Sheppo 		}
2501991Sheppo 
2511991Sheppo 		buf =  (caddr_t)buf + n;
2521991Sheppo 		sz -= n;
2531991Sheppo 	}
2541991Sheppo 	return (VNTSD_SUCCESS);
2551991Sheppo 
2561991Sheppo }
2571991Sheppo 
2581991Sheppo /*
2591991Sheppo  * vntsd_read_char() - read a char from TCP Clienti. Returns:
2601991Sheppo  * VNTSD_SUCCESS, VNTSD_STATUS_CLIENT_QUIT or VNTSD_STATUS_INTR
2611991Sheppo  */
2621991Sheppo int
vntsd_read_char(vntsd_client_t * clientp,char * c)2631991Sheppo vntsd_read_char(vntsd_client_t *clientp, char *c)
2641991Sheppo {
2651991Sheppo 	int		n;
2661991Sheppo 	vntsd_timeout_t tmo;
2671991Sheppo 	int		rv;
2681991Sheppo 
2691991Sheppo 	tmo.tid = thr_self();
2701991Sheppo 	tmo.minutes = 0;
2711991Sheppo 	tmo.clientp = clientp;
2721991Sheppo 
2731991Sheppo 	/* attach to timer */
2741991Sheppo 	if ((rv = vntsd_attach_timer(&tmo)) != VNTSD_SUCCESS) {
2751991Sheppo 		return (rv);
2761991Sheppo 	}
2771991Sheppo 
2781991Sheppo 	n = read(clientp->sockfd, c, 1);
2791991Sheppo 
2801991Sheppo 	/* detach from timer */
2811991Sheppo 	if ((rv = vntsd_detach_timer(&tmo)) != VNTSD_SUCCESS) {
2821991Sheppo 		return (rv);
2831991Sheppo 	}
2841991Sheppo 
2851991Sheppo 	if (n == 1) {
2861991Sheppo 		return (VNTSD_SUCCESS);
2871991Sheppo 	}
2881991Sheppo 
2891991Sheppo 	if (n == 0) {
2901991Sheppo 		return (VNTSD_STATUS_CLIENT_QUIT);
2911991Sheppo 	}
2921991Sheppo 
2931991Sheppo 	/*
2941991Sheppo 	 * read error or wake up by signal, either console is being removed or
2951991Sheppo 	 * timeout occurs.
2961991Sheppo 	 */
2971991Sheppo 	if (errno == EINTR) {
2981991Sheppo 		return (VNTSD_STATUS_INTR);
2991991Sheppo 	}
3001991Sheppo 
3011991Sheppo 	/* any other error, we close client */
3021991Sheppo 	return (VNTSD_STATUS_CLIENT_QUIT);
3031991Sheppo }
3041991Sheppo 
3051991Sheppo /*
3061991Sheppo  * vntsd_read_data() -  handle special commands
3071991Sheppo  * such as telnet, daemon and ctrl cmds. Returns:
3081991Sheppo  * from vntsd_read_char:
3091991Sheppo  *	    VNTSD_STATUS_CLIENT_QUIT
3101991Sheppo  *	    VNTSD_STATUS_INTR
3111991Sheppo  * from vnts_process_daemon_cmd:
3121991Sheppo  *	    VNTSD_STATUS_RESELECT_CONS
3131991Sheppo  *	    VNTSD_STATUS_MOV_CONS_FORWARD
3141991Sheppo  *	    VNTSD_STATUS_MOV_CONS_BACKWARD
3151991Sheppo  *	    VNTSD_STATUS_ACQURE_WRITER
3161991Sheppo  *	    VNTSD_STATUS_CONTINUE
3171991Sheppo  * from vntsd_telnet_cmd
3181991Sheppo  *	    VNTSD_STATUS_CONTINUE
3191991Sheppo  */
3201991Sheppo int
vntsd_read_data(vntsd_client_t * clientp,char * c)3211991Sheppo vntsd_read_data(vntsd_client_t *clientp, char *c)
3221991Sheppo {
3231991Sheppo 	int rv;
3241991Sheppo 
3251991Sheppo 	for (; ; ) {
3261991Sheppo 		if ((rv = vntsd_read_char(clientp, c)) != VNTSD_SUCCESS) {
327*8734SSriharsha.Basavapatna@Sun.COM 			return (rv);
3281991Sheppo 		}
3291991Sheppo 
3301991Sheppo 		/* daemon cmd? */
3311991Sheppo 		rv = vntsd_process_daemon_cmd(clientp, *c);
3321991Sheppo 
3331991Sheppo 		if (rv == VNTSD_SUCCESS) {
3341991Sheppo 			/* telnet cmd? */
3351991Sheppo 			rv = vntsd_telnet_cmd(clientp, *c);
3361991Sheppo 		}
3371991Sheppo 
3381991Sheppo 		if (rv == VNTSD_STATUS_CONTINUE) {
3395757Sdtse 			/*
3405757Sdtse 			 * either a daemon cmd or a telnet cmd
3415757Sdtse 			 * was processed.
3425757Sdtse 			 */
3435757Sdtse 			clientp->prev_char = 0;
3441991Sheppo 			continue;
3451991Sheppo 		}
3461991Sheppo 
3471991Sheppo 		return (rv);
3481991Sheppo 	}
3491991Sheppo 
3501991Sheppo 	/*NOTREACHED*/
3511991Sheppo 	return (0);
3521991Sheppo }
3531991Sheppo /* vntsd_read_line() -  read a line from TCP client */
3541991Sheppo int
vntsd_read_line(vntsd_client_t * clientp,char * buf,int * in_sz)3551991Sheppo vntsd_read_line(vntsd_client_t *clientp, char *buf, int *in_sz)
3561991Sheppo {
3571991Sheppo 	char	c;
3581991Sheppo 	int	rv;
3591991Sheppo 	int	out_sz = 0;
3601991Sheppo 
3611991Sheppo 
3621991Sheppo 	for (; ; ) {
3631991Sheppo 
3641991Sheppo 		if ((rv =  vntsd_read_data(clientp, &c)) !=  VNTSD_SUCCESS) {
365*8734SSriharsha.Basavapatna@Sun.COM 			return (rv);
3661991Sheppo 		}
3671991Sheppo 
3681991Sheppo 		if (c == BS) {
3691991Sheppo 			/* back */
3701991Sheppo 			if ((rv = vntsd_write_client(clientp, &c, 1)) !=
3711991Sheppo 			    VNTSD_SUCCESS) {
3721991Sheppo 				return (rv);
3731991Sheppo 			}
3741991Sheppo 
3751991Sheppo 			c = ' ';
3761991Sheppo 			if ((rv = vntsd_write_client(clientp, &c, 1)) !=
3771991Sheppo 			    VNTSD_SUCCESS) {
3781991Sheppo 				return (rv);
3791991Sheppo 			}
3801991Sheppo 
3811991Sheppo 			buf--;
3821991Sheppo 			out_sz--;
3831991Sheppo 			continue;
3841991Sheppo 		}
3851991Sheppo 		/* echo */
3861991Sheppo 		if ((rv = vntsd_write_client(clientp, &c, 1)) !=
3871991Sheppo 		    VNTSD_SUCCESS) {
3881991Sheppo 			return (rv);
3891991Sheppo 		}
3901991Sheppo 
3911991Sheppo 		*buf++ = c;
3921991Sheppo 		out_sz++;
3931991Sheppo 
3941991Sheppo 		if (c == CR) {
3951991Sheppo 			/* end of line */
3961991Sheppo 			*in_sz = out_sz;
3971991Sheppo 			return (VNTSD_SUCCESS);
3981991Sheppo 		}
3991991Sheppo 
4001991Sheppo 		if (out_sz == *in_sz) {
4011991Sheppo 			return (VNTSD_SUCCESS);
4021991Sheppo 		}
4031991Sheppo 	}
4041991Sheppo 
4051991Sheppo 	/*NOTREACHED*/
4061991Sheppo 	return (0);
4071991Sheppo }
4081991Sheppo 
4091991Sheppo /* free a client */
4101991Sheppo void
vntsd_free_client(vntsd_client_t * clientp)4111991Sheppo vntsd_free_client(vntsd_client_t *clientp)
4121991Sheppo {
4131991Sheppo 
4141991Sheppo 	if (clientp->sockfd != -1) {
4151991Sheppo 		(void) close(clientp->sockfd);
4161991Sheppo 	}
4171991Sheppo 
4181991Sheppo 	(void) mutex_destroy(&clientp->lock);
4191991Sheppo 
4201991Sheppo 	free(clientp);
4211991Sheppo }
4221991Sheppo 
4231991Sheppo 
4241991Sheppo /* check if a vcc console port still ok */
4251991Sheppo boolean_t
vntsd_vcc_cons_alive(vntsd_cons_t * consp)4261991Sheppo vntsd_vcc_cons_alive(vntsd_cons_t *consp)
4271991Sheppo {
4281991Sheppo 	vcc_console_t	vcc_cons;
4291991Sheppo 	int		rv;
4301991Sheppo 
4311991Sheppo 	assert(consp);
4321991Sheppo 	assert(consp->group);
4331991Sheppo 
4341991Sheppo 	/* construct current configuration */
4351991Sheppo 	(void) strncpy(vcc_cons.domain_name, consp->domain_name, MAXPATHLEN);
4361991Sheppo 	(void) strncpy(vcc_cons.group_name, consp->group->group_name,
4371991Sheppo 	    MAXPATHLEN);
4381991Sheppo 	vcc_cons.tcp_port = consp->group->tcp_port;
4391991Sheppo 	vcc_cons.cons_no   = consp->cons_no;
4401991Sheppo 
4411991Sheppo 	/* call vcc to verify */
4421991Sheppo 	rv = vntsd_vcc_ioctl(VCC_CONS_STATUS, consp->cons_no, &vcc_cons);
4431991Sheppo 	if (rv != VNTSD_SUCCESS) {
4441991Sheppo 		return (B_FALSE);
4451991Sheppo 	}
4461991Sheppo 
4471991Sheppo 	if (vcc_cons.cons_no == -1) {
4481991Sheppo 		/* port is gone */
4491991Sheppo 		return (B_FALSE);
4501991Sheppo 	}
4511991Sheppo 
4521991Sheppo 	/* port is ok */
4531991Sheppo 	return (B_TRUE);
4541991Sheppo 
4551991Sheppo }
4561991Sheppo 
4571991Sheppo /* add to total if a console is alive  */
4581991Sheppo static boolean_t
total_cons(vntsd_cons_t * consp,int * num_cons)4591991Sheppo total_cons(vntsd_cons_t *consp, int *num_cons)
4601991Sheppo {
4611991Sheppo 	int rv;
4621991Sheppo 
4631991Sheppo 	assert(consp->group);
4641991Sheppo 	rv = vntsd_vcc_err(consp);
4651991Sheppo 	if (rv == VNTSD_STATUS_CONTINUE) {
4661991Sheppo 		(*num_cons)++;
4671991Sheppo 	}
4681991Sheppo 	return (B_FALSE);
4691991Sheppo }
4701991Sheppo 
4711991Sheppo 
4721991Sheppo /* total alive consoles in a group  */
4731991Sheppo int
vntsd_chk_group_total_cons(vntsd_group_t * groupp)4741991Sheppo vntsd_chk_group_total_cons(vntsd_group_t *groupp)
4751991Sheppo {
4761991Sheppo 	uint_t num_cons = 0;
4771991Sheppo 
4781991Sheppo 	(void) vntsd_que_find(groupp->conspq, (compare_func_t)total_cons,
4791991Sheppo 	    &num_cons);
4801991Sheppo 	return (num_cons);
4811991Sheppo }
4821991Sheppo 
4831991Sheppo /* vntsd_log() log function for errors */
4841991Sheppo void
vntsd_log(vntsd_status_t status,char * msg)4851991Sheppo vntsd_log(vntsd_status_t status, char *msg)
4861991Sheppo {
4871991Sheppo 	char	*status_msg = NULL;
4881991Sheppo 	int	critical = 0;
4891991Sheppo 
4901991Sheppo 	switch (status) {
4911991Sheppo 
4921991Sheppo 	case VNTSD_SUCCESS:
4931991Sheppo 		status_msg = "STATUS_OK";
4941991Sheppo 		break;
4951991Sheppo 
4961991Sheppo 	case VNTSD_STATUS_CONTINUE:
4971991Sheppo 		status_msg = "CONTINUE";
4981991Sheppo 		break;
4991991Sheppo 
5001991Sheppo 	case VNTSD_STATUS_EXIT_SIG:
5011991Sheppo 		critical = 1;
5021991Sheppo 		status_msg = "KILL SIGNAL RECV";
5031991Sheppo 		break;
5041991Sheppo 
5051991Sheppo 	case VNTSD_STATUS_SIG:
5061991Sheppo 		status_msg = "SIG RECV";
5071991Sheppo 		break;
5081991Sheppo 
5091991Sheppo 	case VNTSD_STATUS_NO_HOST_NAME:
5101991Sheppo 		status_msg = "Warining NO HOST NAME";
5111991Sheppo 		break;
5121991Sheppo 
5131991Sheppo 	case VNTSD_STATUS_CLIENT_QUIT:
5141991Sheppo 		status_msg = "CLIENT CLOSED  GROUP CONNECTION";
5151991Sheppo 		break;
5161991Sheppo 
5171991Sheppo 	case VNTSD_STATUS_RESELECT_CONS:
5181991Sheppo 		status_msg = "CLIENT RESELECTS CONSOLE";
5191991Sheppo 		break;
5201991Sheppo 
5211991Sheppo 	case VNTSD_STATUS_VCC_IO_ERR:
5221991Sheppo 		status_msg = "CONSOLE WAS DELETED";
5231991Sheppo 		break;
5241991Sheppo 
5251991Sheppo 	case VNTSD_STATUS_MOV_CONS_FORWARD:
5261991Sheppo 		status_msg = "MOVE CONSOLE FORWARD";
5271991Sheppo 		break;
5281991Sheppo 
5291991Sheppo 	case VNTSD_STATUS_MOV_CONS_BACKWARD:
5301991Sheppo 		status_msg = "MOVE CONSOLE BACKWARD";
5311991Sheppo 		break;
5321991Sheppo 
5331991Sheppo 	case VNTSD_STATUS_ACQUIRE_WRITER:
5341991Sheppo 		status_msg = "FORCE CONSOLE WRITE";
5351991Sheppo 		break;
5361991Sheppo 
5371991Sheppo 	case VNTSD_STATUS_INTR:
5381991Sheppo 		status_msg = "RECV SIGNAL";
5391991Sheppo 		break;
5401991Sheppo 
5411991Sheppo 	case VNTSD_STATUS_DISCONN_CONS:
5421991Sheppo 		status_msg = "DELETING CONSOLE";
5431991Sheppo 		break;
5441991Sheppo 
5451991Sheppo 	case VNTSD_STATUS_NO_CONS:
5462748Slm66018 		status_msg = "All console(s) in the group have been deleted.";
5471991Sheppo 		break;
5481991Sheppo 
549*8734SSriharsha.Basavapatna@Sun.COM 	case VNTSD_STATUS_AUTH_ENABLED:
550*8734SSriharsha.Basavapatna@Sun.COM 		critical = 1;
551*8734SSriharsha.Basavapatna@Sun.COM 		status_msg = "VNTSD_STATUS_AUTH_ENABLED";
552*8734SSriharsha.Basavapatna@Sun.COM 		break;
553*8734SSriharsha.Basavapatna@Sun.COM 
5541991Sheppo 	case VNTSD_ERR_NO_MEM:
5551991Sheppo 		critical = 1;
5561991Sheppo 		status_msg = "NO MEMORY";
5571991Sheppo 		break;
5581991Sheppo 
5591991Sheppo 	case VNTSD_ERR_NO_DRV:
5601991Sheppo 		critical = 1;
5611991Sheppo 		status_msg = "NO VCC DRIVER";
5621991Sheppo 		break;
5631991Sheppo 
5641991Sheppo 	case VNTSD_ERR_WRITE_CLIENT:
5651991Sheppo 		status_msg  =  "WRITE CLIENT ERR";
5661991Sheppo 		break;
5671991Sheppo 
5681991Sheppo 	case VNTSD_ERR_EL_NOT_FOUND:
5691991Sheppo 		critical = 1;
5701991Sheppo 		status_msg = "ELEMENT_NOT_FOUND";
5711991Sheppo 		break;
5721991Sheppo 
5731991Sheppo 	case VNTSD_ERR_VCC_CTRL_DATA:
5741991Sheppo 		critical = 1;
5751991Sheppo 		status_msg = "VCC CTRL DATA  ERROR";
5761991Sheppo 		break;
5771991Sheppo 
5781991Sheppo 	case VNTSD_ERR_VCC_POLL:
5791991Sheppo 		critical = 1;
5801991Sheppo 		status_msg = "VCC POLL ERROR";
5811991Sheppo 		break;
5821991Sheppo 
5831991Sheppo 	case VNTSD_ERR_VCC_IOCTL:
5841991Sheppo 		critical = 1;
5851991Sheppo 		status_msg = "VCC IOCTL ERROR";
5861991Sheppo 		break;
5871991Sheppo 
5881991Sheppo 	case VNTSD_ERR_VCC_GRP_NAME:
5891991Sheppo 		critical = 1;
5901991Sheppo 		status_msg = "VCC GROUP NAME ERROR";
5911991Sheppo 		break;
5921991Sheppo 
5931991Sheppo 	case VNTSD_ERR_CREATE_LISTEN_THR:
5941991Sheppo 		critical = 1;
5951991Sheppo 		status_msg = "FAIL TO CREATE LISTEN THREAD";
5961991Sheppo 		break;
5971991Sheppo 
5981991Sheppo 	case VNTSD_ERR_CREATE_WR_THR:
5991991Sheppo 		critical = 1;
6001991Sheppo 		status_msg = "FAIL TO CREATE WRITE THREAD";
6011991Sheppo 		break;
6021991Sheppo 
6031991Sheppo 	case VNTSD_ERR_ADD_CONS_FAILED:
6041991Sheppo 		critical = 1;
6051991Sheppo 		status_msg = "FAIL TO ADD A CONSOLE";
6061991Sheppo 		break;
6071991Sheppo 
6081991Sheppo 	case VNTSD_ERR_LISTEN_SOCKET:
6091991Sheppo 		critical = 1;
6101991Sheppo 		status_msg = "LISTEN SOCKET ERROR";
6111991Sheppo 		break;
6121991Sheppo 
6131991Sheppo 	case VNTSD_ERR_LISTEN_OPTS:
6141991Sheppo 		critical = 1;
6151991Sheppo 		status_msg = "SET SOCKET OPTIONS ERROR";
6161991Sheppo 		break;
6171991Sheppo 
6181991Sheppo 	case VNTSD_ERR_LISTEN_BIND:
6191991Sheppo 		critical = 1;
6201991Sheppo 		status_msg = "BIND SOCKET ERROR";
6211991Sheppo 		break;
6221991Sheppo 
6231991Sheppo 	case VNTSD_STATUS_ACCEPT_ERR:
6241991Sheppo 		critical = 1;
6251991Sheppo 		status_msg = "LISTEN ACCEPT ERROR";
6261991Sheppo 		break;
6271991Sheppo 
6281991Sheppo 	case VNTSD_ERR_CREATE_CONS_THR:
6291991Sheppo 		critical = 1;
6301991Sheppo 		status_msg = "CREATE CONSOLE THREAD ERROR ";
6311991Sheppo 		break;
6321991Sheppo 
6331991Sheppo 	case VNTSD_ERR_SIG:
6341991Sheppo 		critical = 1;
6351991Sheppo 		status_msg = "RECV UNKNOWN SIG";
6361991Sheppo 		break;
6371991Sheppo 
6381991Sheppo 	case VNTSD_ERR_UNKNOWN_CMD:
6391991Sheppo 		critical = 1;
6401991Sheppo 		status_msg = "RECV UNKNOWN COMMAND";
6411991Sheppo 		break;
6421991Sheppo 
6431991Sheppo 	case VNTSD_ERR_CLIENT_TIMEOUT:
6441991Sheppo 		status_msg  =  "CLOSE CLIENT BECAUSE TIMEOUT";
6451991Sheppo 		break;
6461991Sheppo 	default:
6471991Sheppo 		status_msg = "Unknown status recv";
6481991Sheppo 		break;
6491991Sheppo 	}
6501991Sheppo 
6511991Sheppo 
6521991Sheppo 	if (critical) {
6531991Sheppo 		syslog(LOG_ERR, "%s: thread[%d] %s\n", status_msg,
6541991Sheppo 		    thr_self(), msg);
6551991Sheppo 	}
6561991Sheppo #ifdef DEBUG
657*8734SSriharsha.Basavapatna@Sun.COM 	DERR(stderr, "%s: thread[%d] %s\n", status_msg, thr_self(), msg);
6581991Sheppo 	syslog(LOG_ERR, "%s: thread[%d] %s\n", status_msg, thr_self(), msg);
6591991Sheppo #endif
6601991Sheppo }
661