11ae08745Sheppo /* 21ae08745Sheppo * CDDL HEADER START 31ae08745Sheppo * 41ae08745Sheppo * The contents of this file are subject to the terms of the 51ae08745Sheppo * Common Development and Distribution License (the "License"). 61ae08745Sheppo * You may not use this file except in compliance with the License. 71ae08745Sheppo * 81ae08745Sheppo * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 91ae08745Sheppo * or http://www.opensolaris.org/os/licensing. 101ae08745Sheppo * See the License for the specific language governing permissions 111ae08745Sheppo * and limitations under the License. 121ae08745Sheppo * 131ae08745Sheppo * When distributing Covered Code, include this CDDL HEADER in each 141ae08745Sheppo * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 151ae08745Sheppo * If applicable, add the following below this CDDL HEADER, with the 161ae08745Sheppo * fields enclosed by brackets "[]" replaced with your own identifying 171ae08745Sheppo * information: Portions Copyright [yyyy] [name of copyright owner] 181ae08745Sheppo * 191ae08745Sheppo * CDDL HEADER END 201ae08745Sheppo */ 211ae08745Sheppo 221ae08745Sheppo /* 23*28b1e50eSSriharsha Basavapatna * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 241ae08745Sheppo * Use is subject to license terms. 251ae08745Sheppo */ 261ae08745Sheppo 271ae08745Sheppo /* 281ae08745Sheppo * supporting modules. 291ae08745Sheppo */ 301ae08745Sheppo 311ae08745Sheppo #include <stdio.h> 321ae08745Sheppo #include <sys/types.h> 331ae08745Sheppo #include <sys/ipc.h> 341ae08745Sheppo #include <stdlib.h> 351ae08745Sheppo #include <string.h> 361ae08745Sheppo #include <unistd.h> 371ae08745Sheppo #include <sys/socket.h> 381ae08745Sheppo #include <sys/ipc.h> 391ae08745Sheppo #include <sys/shm.h> 401ae08745Sheppo #include <sys/sem.h> 411ae08745Sheppo #include <sys/poll.h> 421ae08745Sheppo #include <wait.h> 431ae08745Sheppo #include <time.h> 441ae08745Sheppo #include <netinet/in.h> 451ae08745Sheppo #include <thread.h> 461ae08745Sheppo #include <signal.h> 471ae08745Sheppo #include <ctype.h> 481ae08745Sheppo #include <langinfo.h> 491ae08745Sheppo #include <libintl.h> 501ae08745Sheppo #include <syslog.h> 511ae08745Sheppo #include "vntsd.h" 521ae08745Sheppo #include "chars.h" 531ae08745Sheppo 541ae08745Sheppo /* vntsd_write_line() - write a line to TCP client */ 551ae08745Sheppo int 561ae08745Sheppo vntsd_write_line(vntsd_client_t *clientp, char *line) 571ae08745Sheppo { 581ae08745Sheppo int rv; 591ae08745Sheppo 601ae08745Sheppo rv = vntsd_write_client(clientp, line, strlen(line)); 611ae08745Sheppo if (rv == VNTSD_SUCCESS) { 621ae08745Sheppo rv = vntsd_write_client(clientp, vntsd_eol, VNTSD_EOL_LEN); 631ae08745Sheppo } 641ae08745Sheppo 651ae08745Sheppo return (rv); 661ae08745Sheppo } 671ae08745Sheppo 681ae08745Sheppo /* vntsd_write_lines() write one or more lines to client. */ 691ae08745Sheppo int 701ae08745Sheppo vntsd_write_lines(vntsd_client_t *clientp, char *lines) 711ae08745Sheppo { 721ae08745Sheppo char *buf; 731ae08745Sheppo char *line; 741ae08745Sheppo char *endofline; 751ae08745Sheppo 761ae08745Sheppo buf = strdup(lines); 771ae08745Sheppo if (buf == NULL) { 781ae08745Sheppo return (VNTSD_ERR_NO_MEM); 791ae08745Sheppo } 801ae08745Sheppo 811ae08745Sheppo line = buf; 821ae08745Sheppo 831ae08745Sheppo while ((line != NULL) && (*line != '\0')) { 841ae08745Sheppo 851ae08745Sheppo endofline = strchr(line, '\n'); 861ae08745Sheppo if (endofline != NULL) { 871ae08745Sheppo *endofline = '\0'; 881ae08745Sheppo } 891ae08745Sheppo 901ae08745Sheppo (void) vntsd_write_line(clientp, line); 911ae08745Sheppo 921ae08745Sheppo if (endofline != NULL) 931ae08745Sheppo line = endofline + 1; 941ae08745Sheppo else 951ae08745Sheppo line = NULL; 961ae08745Sheppo } 971ae08745Sheppo 981ae08745Sheppo free(buf); 991ae08745Sheppo return (VNTSD_SUCCESS); 1001ae08745Sheppo } 1011ae08745Sheppo 1021ae08745Sheppo /* vntsd_get_yes_no() - read in a "y" or "n" */ 1031ae08745Sheppo int 1041ae08745Sheppo vntsd_get_yes_no(vntsd_client_t *clientp, char *msg, int *yes_no) 1051ae08745Sheppo { 1061ae08745Sheppo char c; 1071ae08745Sheppo char yesno[8]; 1081ae08745Sheppo int rv; 1091ae08745Sheppo 1101ae08745Sheppo /* create [y/n] prompt */ 1111ae08745Sheppo (void) snprintf(yesno, sizeof (yesno), "[%c/%c] ", 1121ae08745Sheppo *nl_langinfo(YESSTR), *nl_langinfo(NOSTR)); 1131ae08745Sheppo 1141ae08745Sheppo for (; ; ) { 1151ae08745Sheppo if ((rv = vntsd_write_client(clientp, msg, strlen(msg))) 1161ae08745Sheppo != VNTSD_SUCCESS) { 1171ae08745Sheppo return (rv); 1181ae08745Sheppo } 1191ae08745Sheppo 1201ae08745Sheppo if ((rv = vntsd_write_client(clientp, yesno, strlen(yesno))) != 1211ae08745Sheppo VNTSD_SUCCESS) { 1221ae08745Sheppo return (rv); 1231ae08745Sheppo } 1241ae08745Sheppo 1251ae08745Sheppo if ((rv = vntsd_read_data(clientp, &c)) 1261ae08745Sheppo != VNTSD_SUCCESS) { 1271ae08745Sheppo return (rv); 1281ae08745Sheppo } 1291ae08745Sheppo 1301ae08745Sheppo /* echo */ 1311ae08745Sheppo if ((rv = vntsd_write_client(clientp, &c, 1)) != 1321ae08745Sheppo VNTSD_SUCCESS) { 1331ae08745Sheppo return (rv); 1341ae08745Sheppo } 1351ae08745Sheppo 1361ae08745Sheppo if ((rv = vntsd_write_client(clientp, vntsd_eol, 137*28b1e50eSSriharsha Basavapatna VNTSD_EOL_LEN)) != VNTSD_SUCCESS) { 1381ae08745Sheppo return (rv); 1391ae08745Sheppo } 1401ae08745Sheppo 1411ae08745Sheppo c = tolower(c); 1421ae08745Sheppo 1431ae08745Sheppo if (c == *nl_langinfo(YESSTR)) { 1441ae08745Sheppo *yes_no = B_TRUE; 1451ae08745Sheppo return (VNTSD_SUCCESS); 1461ae08745Sheppo } 1471ae08745Sheppo 1481ae08745Sheppo if (c == *nl_langinfo(NOSTR)) { 1491ae08745Sheppo *yes_no = B_FALSE; 1501ae08745Sheppo return (VNTSD_SUCCESS); 1511ae08745Sheppo } 1521ae08745Sheppo 1531ae08745Sheppo if ((rv = vntsd_write_line(clientp, 1541ae08745Sheppo gettext("Invalid response. Try again."))) 1551ae08745Sheppo != VNTSD_SUCCESS) { 1561ae08745Sheppo return (rv); 1571ae08745Sheppo } 1581ae08745Sheppo } 1591ae08745Sheppo 1601ae08745Sheppo /*NOTREACHED*/ 1611ae08745Sheppo return (0); 1621ae08745Sheppo } 1631ae08745Sheppo 1641ae08745Sheppo /* vntsd_open_vcc() - open a vcc port */ 1651ae08745Sheppo int 1661ae08745Sheppo vntsd_open_vcc(char *dev_name, uint_t cons_no) 1671ae08745Sheppo { 1681ae08745Sheppo int drvfd; 1691ae08745Sheppo int sz; 1701ae08745Sheppo char *path; 1711ae08745Sheppo sz = strlen(VCC_DEVICE_PATH) + strlen(dev_name)+1; 1721ae08745Sheppo 1731ae08745Sheppo path = calloc(sz, 1); 1741ae08745Sheppo 1751ae08745Sheppo if (path == NULL) { 1761ae08745Sheppo return (-1); 1771ae08745Sheppo } 1781ae08745Sheppo 1791ae08745Sheppo (void) snprintf(path, sz-1, VCC_DEVICE_PATH, dev_name); 1801ae08745Sheppo 1811ae08745Sheppo for (; ; ) { 1821ae08745Sheppo drvfd = open(path, O_RDWR); 1831ae08745Sheppo 1841ae08745Sheppo if ((drvfd < 0) && (errno == EAGAIN)) { 1851ae08745Sheppo if (vntsd_vcc_ioctl(VCC_FORCE_CLOSE, cons_no, &cons_no) 1861ae08745Sheppo != VNTSD_SUCCESS) { 1871ae08745Sheppo break; 1881ae08745Sheppo } 1891ae08745Sheppo } else { 1901ae08745Sheppo break; 1911ae08745Sheppo } 1921ae08745Sheppo } 1931ae08745Sheppo 1941ae08745Sheppo 1951ae08745Sheppo if (drvfd < 0) { 1961ae08745Sheppo D1(stderr, "t@%d open_vcc@%s exit\n", thr_self(), dev_name); 1971ae08745Sheppo free(path); 1981ae08745Sheppo return (-1); 1991ae08745Sheppo } 2001ae08745Sheppo 2011ae08745Sheppo free(path); 2021ae08745Sheppo return (drvfd); 2031ae08745Sheppo } 2041ae08745Sheppo 2051ae08745Sheppo /* vntsd_cons_by_consno() - match a console structure to cons no */ 2061ae08745Sheppo boolean_t 2071ae08745Sheppo vntsd_cons_by_consno(vntsd_cons_t *consp, int *cons_id) 2081ae08745Sheppo { 2091ae08745Sheppo if (consp->status & VNTSD_CONS_DELETED) { 2101ae08745Sheppo return (B_FALSE); 2111ae08745Sheppo } 2121ae08745Sheppo return (consp->cons_no == *cons_id); 2131ae08745Sheppo } 2141ae08745Sheppo 2151ae08745Sheppo /* vntsd_write_client() write to telnet client */ 2161ae08745Sheppo int 2171ae08745Sheppo vntsd_write_client(vntsd_client_t *client, char *buffer, size_t sz) 2181ae08745Sheppo { 2191ae08745Sheppo int rv; 2201ae08745Sheppo 2211ae08745Sheppo 2221ae08745Sheppo /* write to client */ 2231ae08745Sheppo rv = vntsd_write_fd(client->sockfd, buffer, sz); 2241ae08745Sheppo 2251ae08745Sheppo /* client has output, reset timer */ 2261ae08745Sheppo vntsd_reset_timer(client->cons_tid); 2271ae08745Sheppo 2281ae08745Sheppo return (rv); 2291ae08745Sheppo } 2301ae08745Sheppo 2311ae08745Sheppo /* vntsd_write_fd() write to tcp socket file descriptor */ 2321ae08745Sheppo int 2331ae08745Sheppo vntsd_write_fd(int fd, void *buf, size_t sz) 2341ae08745Sheppo { 2351ae08745Sheppo int n; 2361ae08745Sheppo 2371ae08745Sheppo while (sz > 0) { 2381ae08745Sheppo n = write(fd, buf, sz); 2391ae08745Sheppo if (n < 0) { 2401ae08745Sheppo if (errno == EINTR) { 2411ae08745Sheppo return (VNTSD_STATUS_INTR); 2421ae08745Sheppo } 2431ae08745Sheppo 2441ae08745Sheppo return (VNTSD_STATUS_CLIENT_QUIT); 2451ae08745Sheppo } 2461ae08745Sheppo 2471ae08745Sheppo if (n == 0) { 2481ae08745Sheppo return (VNTSD_STATUS_CLIENT_QUIT); 2491ae08745Sheppo } 2501ae08745Sheppo 2511ae08745Sheppo buf = (caddr_t)buf + n; 2521ae08745Sheppo sz -= n; 2531ae08745Sheppo } 2541ae08745Sheppo return (VNTSD_SUCCESS); 2551ae08745Sheppo 2561ae08745Sheppo } 2571ae08745Sheppo 2581ae08745Sheppo /* 2591ae08745Sheppo * vntsd_read_char() - read a char from TCP Clienti. Returns: 2601ae08745Sheppo * VNTSD_SUCCESS, VNTSD_STATUS_CLIENT_QUIT or VNTSD_STATUS_INTR 2611ae08745Sheppo */ 2621ae08745Sheppo int 2631ae08745Sheppo vntsd_read_char(vntsd_client_t *clientp, char *c) 2641ae08745Sheppo { 2651ae08745Sheppo int n; 2661ae08745Sheppo vntsd_timeout_t tmo; 2671ae08745Sheppo int rv; 2681ae08745Sheppo 2691ae08745Sheppo tmo.tid = thr_self(); 2701ae08745Sheppo tmo.minutes = 0; 2711ae08745Sheppo tmo.clientp = clientp; 2721ae08745Sheppo 2731ae08745Sheppo /* attach to timer */ 2741ae08745Sheppo if ((rv = vntsd_attach_timer(&tmo)) != VNTSD_SUCCESS) { 2751ae08745Sheppo return (rv); 2761ae08745Sheppo } 2771ae08745Sheppo 2781ae08745Sheppo n = read(clientp->sockfd, c, 1); 2791ae08745Sheppo 2801ae08745Sheppo /* detach from timer */ 2811ae08745Sheppo if ((rv = vntsd_detach_timer(&tmo)) != VNTSD_SUCCESS) { 2821ae08745Sheppo return (rv); 2831ae08745Sheppo } 2841ae08745Sheppo 2851ae08745Sheppo if (n == 1) { 2861ae08745Sheppo return (VNTSD_SUCCESS); 2871ae08745Sheppo } 2881ae08745Sheppo 2891ae08745Sheppo if (n == 0) { 2901ae08745Sheppo return (VNTSD_STATUS_CLIENT_QUIT); 2911ae08745Sheppo } 2921ae08745Sheppo 2931ae08745Sheppo /* 2941ae08745Sheppo * read error or wake up by signal, either console is being removed or 2951ae08745Sheppo * timeout occurs. 2961ae08745Sheppo */ 2971ae08745Sheppo if (errno == EINTR) { 2981ae08745Sheppo return (VNTSD_STATUS_INTR); 2991ae08745Sheppo } 3001ae08745Sheppo 3011ae08745Sheppo /* any other error, we close client */ 3021ae08745Sheppo return (VNTSD_STATUS_CLIENT_QUIT); 3031ae08745Sheppo } 3041ae08745Sheppo 3051ae08745Sheppo /* 3061ae08745Sheppo * vntsd_read_data() - handle special commands 3071ae08745Sheppo * such as telnet, daemon and ctrl cmds. Returns: 3081ae08745Sheppo * from vntsd_read_char: 3091ae08745Sheppo * VNTSD_STATUS_CLIENT_QUIT 3101ae08745Sheppo * VNTSD_STATUS_INTR 3111ae08745Sheppo * from vnts_process_daemon_cmd: 3121ae08745Sheppo * VNTSD_STATUS_RESELECT_CONS 3131ae08745Sheppo * VNTSD_STATUS_MOV_CONS_FORWARD 3141ae08745Sheppo * VNTSD_STATUS_MOV_CONS_BACKWARD 3151ae08745Sheppo * VNTSD_STATUS_ACQURE_WRITER 3161ae08745Sheppo * VNTSD_STATUS_CONTINUE 3171ae08745Sheppo * from vntsd_telnet_cmd 3181ae08745Sheppo * VNTSD_STATUS_CONTINUE 3191ae08745Sheppo */ 3201ae08745Sheppo int 3211ae08745Sheppo vntsd_read_data(vntsd_client_t *clientp, char *c) 3221ae08745Sheppo { 3231ae08745Sheppo int rv; 3241ae08745Sheppo 3251ae08745Sheppo for (; ; ) { 3261ae08745Sheppo if ((rv = vntsd_read_char(clientp, c)) != VNTSD_SUCCESS) { 3271ae08745Sheppo return (rv); 3281ae08745Sheppo } 3291ae08745Sheppo 3301ae08745Sheppo /* daemon cmd? */ 3311ae08745Sheppo rv = vntsd_process_daemon_cmd(clientp, *c); 3321ae08745Sheppo 3331ae08745Sheppo if (rv == VNTSD_SUCCESS) { 3341ae08745Sheppo /* telnet cmd? */ 3351ae08745Sheppo rv = vntsd_telnet_cmd(clientp, *c); 3361ae08745Sheppo } 3371ae08745Sheppo 3381ae08745Sheppo if (rv == VNTSD_STATUS_CONTINUE) { 339823fe29bSdtse /* 340823fe29bSdtse * either a daemon cmd or a telnet cmd 341823fe29bSdtse * was processed. 342823fe29bSdtse */ 343823fe29bSdtse clientp->prev_char = 0; 3441ae08745Sheppo continue; 3451ae08745Sheppo } 3461ae08745Sheppo 3471ae08745Sheppo return (rv); 3481ae08745Sheppo } 3491ae08745Sheppo 3501ae08745Sheppo /*NOTREACHED*/ 3511ae08745Sheppo return (0); 3521ae08745Sheppo } 3531ae08745Sheppo /* vntsd_read_line() - read a line from TCP client */ 3541ae08745Sheppo int 3551ae08745Sheppo vntsd_read_line(vntsd_client_t *clientp, char *buf, int *in_sz) 3561ae08745Sheppo { 3571ae08745Sheppo char c; 3581ae08745Sheppo int rv; 3591ae08745Sheppo int out_sz = 0; 3601ae08745Sheppo 3611ae08745Sheppo 3621ae08745Sheppo for (; ; ) { 3631ae08745Sheppo 3641ae08745Sheppo if ((rv = vntsd_read_data(clientp, &c)) != VNTSD_SUCCESS) { 3651ae08745Sheppo return (rv); 3661ae08745Sheppo } 3671ae08745Sheppo 3681ae08745Sheppo if (c == BS) { 3691ae08745Sheppo /* back */ 3701ae08745Sheppo if ((rv = vntsd_write_client(clientp, &c, 1)) != 3711ae08745Sheppo VNTSD_SUCCESS) { 3721ae08745Sheppo return (rv); 3731ae08745Sheppo } 3741ae08745Sheppo 3751ae08745Sheppo c = ' '; 3761ae08745Sheppo if ((rv = vntsd_write_client(clientp, &c, 1)) != 3771ae08745Sheppo VNTSD_SUCCESS) { 3781ae08745Sheppo return (rv); 3791ae08745Sheppo } 3801ae08745Sheppo 3811ae08745Sheppo buf--; 3821ae08745Sheppo out_sz--; 3831ae08745Sheppo continue; 3841ae08745Sheppo } 3851ae08745Sheppo /* echo */ 3861ae08745Sheppo if ((rv = vntsd_write_client(clientp, &c, 1)) != 3871ae08745Sheppo VNTSD_SUCCESS) { 3881ae08745Sheppo return (rv); 3891ae08745Sheppo } 3901ae08745Sheppo 3911ae08745Sheppo *buf++ = c; 3921ae08745Sheppo out_sz++; 3931ae08745Sheppo 3941ae08745Sheppo if (c == CR) { 3951ae08745Sheppo /* end of line */ 3961ae08745Sheppo *in_sz = out_sz; 3971ae08745Sheppo return (VNTSD_SUCCESS); 3981ae08745Sheppo } 3991ae08745Sheppo 4001ae08745Sheppo if (out_sz == *in_sz) { 4011ae08745Sheppo return (VNTSD_SUCCESS); 4021ae08745Sheppo } 4031ae08745Sheppo } 4041ae08745Sheppo 4051ae08745Sheppo /*NOTREACHED*/ 4061ae08745Sheppo return (0); 4071ae08745Sheppo } 4081ae08745Sheppo 4091ae08745Sheppo /* free a client */ 4101ae08745Sheppo void 4111ae08745Sheppo vntsd_free_client(vntsd_client_t *clientp) 4121ae08745Sheppo { 4131ae08745Sheppo 4141ae08745Sheppo if (clientp->sockfd != -1) { 4151ae08745Sheppo (void) close(clientp->sockfd); 4161ae08745Sheppo } 4171ae08745Sheppo 4181ae08745Sheppo (void) mutex_destroy(&clientp->lock); 4191ae08745Sheppo 4201ae08745Sheppo free(clientp); 4211ae08745Sheppo } 4221ae08745Sheppo 4231ae08745Sheppo 4241ae08745Sheppo /* check if a vcc console port still ok */ 4251ae08745Sheppo boolean_t 4261ae08745Sheppo vntsd_vcc_cons_alive(vntsd_cons_t *consp) 4271ae08745Sheppo { 4281ae08745Sheppo vcc_console_t vcc_cons; 4291ae08745Sheppo int rv; 4301ae08745Sheppo 4311ae08745Sheppo assert(consp); 4321ae08745Sheppo assert(consp->group); 4331ae08745Sheppo 4341ae08745Sheppo /* construct current configuration */ 4351ae08745Sheppo (void) strncpy(vcc_cons.domain_name, consp->domain_name, MAXPATHLEN); 4361ae08745Sheppo (void) strncpy(vcc_cons.group_name, consp->group->group_name, 4371ae08745Sheppo MAXPATHLEN); 4381ae08745Sheppo vcc_cons.tcp_port = consp->group->tcp_port; 4391ae08745Sheppo vcc_cons.cons_no = consp->cons_no; 4401ae08745Sheppo 4411ae08745Sheppo /* call vcc to verify */ 4421ae08745Sheppo rv = vntsd_vcc_ioctl(VCC_CONS_STATUS, consp->cons_no, &vcc_cons); 4431ae08745Sheppo if (rv != VNTSD_SUCCESS) { 4441ae08745Sheppo return (B_FALSE); 4451ae08745Sheppo } 4461ae08745Sheppo 4471ae08745Sheppo if (vcc_cons.cons_no == -1) { 4481ae08745Sheppo /* port is gone */ 4491ae08745Sheppo return (B_FALSE); 4501ae08745Sheppo } 4511ae08745Sheppo 4521ae08745Sheppo /* port is ok */ 4531ae08745Sheppo return (B_TRUE); 4541ae08745Sheppo 4551ae08745Sheppo } 4561ae08745Sheppo 4571ae08745Sheppo /* add to total if a console is alive */ 4581ae08745Sheppo static boolean_t 4591ae08745Sheppo total_cons(vntsd_cons_t *consp, int *num_cons) 4601ae08745Sheppo { 4611ae08745Sheppo int rv; 4621ae08745Sheppo 4631ae08745Sheppo assert(consp->group); 4641ae08745Sheppo rv = vntsd_vcc_err(consp); 4651ae08745Sheppo if (rv == VNTSD_STATUS_CONTINUE) { 4661ae08745Sheppo (*num_cons)++; 4671ae08745Sheppo } 4681ae08745Sheppo return (B_FALSE); 4691ae08745Sheppo } 4701ae08745Sheppo 4711ae08745Sheppo 4721ae08745Sheppo /* total alive consoles in a group */ 4731ae08745Sheppo int 4741ae08745Sheppo vntsd_chk_group_total_cons(vntsd_group_t *groupp) 4751ae08745Sheppo { 4761ae08745Sheppo uint_t num_cons = 0; 4771ae08745Sheppo 4781ae08745Sheppo (void) vntsd_que_find(groupp->conspq, (compare_func_t)total_cons, 4791ae08745Sheppo &num_cons); 4801ae08745Sheppo return (num_cons); 4811ae08745Sheppo } 4821ae08745Sheppo 4831ae08745Sheppo /* vntsd_log() log function for errors */ 4841ae08745Sheppo void 4851ae08745Sheppo vntsd_log(vntsd_status_t status, char *msg) 4861ae08745Sheppo { 4871ae08745Sheppo char *status_msg = NULL; 4881ae08745Sheppo int critical = 0; 4891ae08745Sheppo 4901ae08745Sheppo switch (status) { 4911ae08745Sheppo 4921ae08745Sheppo case VNTSD_SUCCESS: 4931ae08745Sheppo status_msg = "STATUS_OK"; 4941ae08745Sheppo break; 4951ae08745Sheppo 4961ae08745Sheppo case VNTSD_STATUS_CONTINUE: 4971ae08745Sheppo status_msg = "CONTINUE"; 4981ae08745Sheppo break; 4991ae08745Sheppo 5001ae08745Sheppo case VNTSD_STATUS_EXIT_SIG: 5011ae08745Sheppo critical = 1; 5021ae08745Sheppo status_msg = "KILL SIGNAL RECV"; 5031ae08745Sheppo break; 5041ae08745Sheppo 5051ae08745Sheppo case VNTSD_STATUS_SIG: 5061ae08745Sheppo status_msg = "SIG RECV"; 5071ae08745Sheppo break; 5081ae08745Sheppo 5091ae08745Sheppo case VNTSD_STATUS_NO_HOST_NAME: 5101ae08745Sheppo status_msg = "Warining NO HOST NAME"; 5111ae08745Sheppo break; 5121ae08745Sheppo 5131ae08745Sheppo case VNTSD_STATUS_CLIENT_QUIT: 5141ae08745Sheppo status_msg = "CLIENT CLOSED GROUP CONNECTION"; 5151ae08745Sheppo break; 5161ae08745Sheppo 5171ae08745Sheppo case VNTSD_STATUS_RESELECT_CONS: 5181ae08745Sheppo status_msg = "CLIENT RESELECTS CONSOLE"; 5191ae08745Sheppo break; 5201ae08745Sheppo 5211ae08745Sheppo case VNTSD_STATUS_VCC_IO_ERR: 5221ae08745Sheppo status_msg = "CONSOLE WAS DELETED"; 5231ae08745Sheppo break; 5241ae08745Sheppo 5251ae08745Sheppo case VNTSD_STATUS_MOV_CONS_FORWARD: 5261ae08745Sheppo status_msg = "MOVE CONSOLE FORWARD"; 5271ae08745Sheppo break; 5281ae08745Sheppo 5291ae08745Sheppo case VNTSD_STATUS_MOV_CONS_BACKWARD: 5301ae08745Sheppo status_msg = "MOVE CONSOLE BACKWARD"; 5311ae08745Sheppo break; 5321ae08745Sheppo 5331ae08745Sheppo case VNTSD_STATUS_ACQUIRE_WRITER: 5341ae08745Sheppo status_msg = "FORCE CONSOLE WRITE"; 5351ae08745Sheppo break; 5361ae08745Sheppo 5371ae08745Sheppo case VNTSD_STATUS_INTR: 5381ae08745Sheppo status_msg = "RECV SIGNAL"; 5391ae08745Sheppo break; 5401ae08745Sheppo 5411ae08745Sheppo case VNTSD_STATUS_DISCONN_CONS: 5421ae08745Sheppo status_msg = "DELETING CONSOLE"; 5431ae08745Sheppo break; 5441ae08745Sheppo 5451ae08745Sheppo case VNTSD_STATUS_NO_CONS: 5467636cb21Slm66018 status_msg = "All console(s) in the group have been deleted."; 5471ae08745Sheppo break; 5481ae08745Sheppo 549*28b1e50eSSriharsha Basavapatna case VNTSD_STATUS_AUTH_ENABLED: 550*28b1e50eSSriharsha Basavapatna critical = 1; 551*28b1e50eSSriharsha Basavapatna status_msg = "VNTSD_STATUS_AUTH_ENABLED"; 552*28b1e50eSSriharsha Basavapatna break; 553*28b1e50eSSriharsha Basavapatna 5541ae08745Sheppo case VNTSD_ERR_NO_MEM: 5551ae08745Sheppo critical = 1; 5561ae08745Sheppo status_msg = "NO MEMORY"; 5571ae08745Sheppo break; 5581ae08745Sheppo 5591ae08745Sheppo case VNTSD_ERR_NO_DRV: 5601ae08745Sheppo critical = 1; 5611ae08745Sheppo status_msg = "NO VCC DRIVER"; 5621ae08745Sheppo break; 5631ae08745Sheppo 5641ae08745Sheppo case VNTSD_ERR_WRITE_CLIENT: 5651ae08745Sheppo status_msg = "WRITE CLIENT ERR"; 5661ae08745Sheppo break; 5671ae08745Sheppo 5681ae08745Sheppo case VNTSD_ERR_EL_NOT_FOUND: 5691ae08745Sheppo critical = 1; 5701ae08745Sheppo status_msg = "ELEMENT_NOT_FOUND"; 5711ae08745Sheppo break; 5721ae08745Sheppo 5731ae08745Sheppo case VNTSD_ERR_VCC_CTRL_DATA: 5741ae08745Sheppo critical = 1; 5751ae08745Sheppo status_msg = "VCC CTRL DATA ERROR"; 5761ae08745Sheppo break; 5771ae08745Sheppo 5781ae08745Sheppo case VNTSD_ERR_VCC_POLL: 5791ae08745Sheppo critical = 1; 5801ae08745Sheppo status_msg = "VCC POLL ERROR"; 5811ae08745Sheppo break; 5821ae08745Sheppo 5831ae08745Sheppo case VNTSD_ERR_VCC_IOCTL: 5841ae08745Sheppo critical = 1; 5851ae08745Sheppo status_msg = "VCC IOCTL ERROR"; 5861ae08745Sheppo break; 5871ae08745Sheppo 5881ae08745Sheppo case VNTSD_ERR_VCC_GRP_NAME: 5891ae08745Sheppo critical = 1; 5901ae08745Sheppo status_msg = "VCC GROUP NAME ERROR"; 5911ae08745Sheppo break; 5921ae08745Sheppo 5931ae08745Sheppo case VNTSD_ERR_CREATE_LISTEN_THR: 5941ae08745Sheppo critical = 1; 5951ae08745Sheppo status_msg = "FAIL TO CREATE LISTEN THREAD"; 5961ae08745Sheppo break; 5971ae08745Sheppo 5981ae08745Sheppo case VNTSD_ERR_CREATE_WR_THR: 5991ae08745Sheppo critical = 1; 6001ae08745Sheppo status_msg = "FAIL TO CREATE WRITE THREAD"; 6011ae08745Sheppo break; 6021ae08745Sheppo 6031ae08745Sheppo case VNTSD_ERR_ADD_CONS_FAILED: 6041ae08745Sheppo critical = 1; 6051ae08745Sheppo status_msg = "FAIL TO ADD A CONSOLE"; 6061ae08745Sheppo break; 6071ae08745Sheppo 6081ae08745Sheppo case VNTSD_ERR_LISTEN_SOCKET: 6091ae08745Sheppo critical = 1; 6101ae08745Sheppo status_msg = "LISTEN SOCKET ERROR"; 6111ae08745Sheppo break; 6121ae08745Sheppo 6131ae08745Sheppo case VNTSD_ERR_LISTEN_OPTS: 6141ae08745Sheppo critical = 1; 6151ae08745Sheppo status_msg = "SET SOCKET OPTIONS ERROR"; 6161ae08745Sheppo break; 6171ae08745Sheppo 6181ae08745Sheppo case VNTSD_ERR_LISTEN_BIND: 6191ae08745Sheppo critical = 1; 6201ae08745Sheppo status_msg = "BIND SOCKET ERROR"; 6211ae08745Sheppo break; 6221ae08745Sheppo 6231ae08745Sheppo case VNTSD_STATUS_ACCEPT_ERR: 6241ae08745Sheppo critical = 1; 6251ae08745Sheppo status_msg = "LISTEN ACCEPT ERROR"; 6261ae08745Sheppo break; 6271ae08745Sheppo 6281ae08745Sheppo case VNTSD_ERR_CREATE_CONS_THR: 6291ae08745Sheppo critical = 1; 6301ae08745Sheppo status_msg = "CREATE CONSOLE THREAD ERROR "; 6311ae08745Sheppo break; 6321ae08745Sheppo 6331ae08745Sheppo case VNTSD_ERR_SIG: 6341ae08745Sheppo critical = 1; 6351ae08745Sheppo status_msg = "RECV UNKNOWN SIG"; 6361ae08745Sheppo break; 6371ae08745Sheppo 6381ae08745Sheppo case VNTSD_ERR_UNKNOWN_CMD: 6391ae08745Sheppo critical = 1; 6401ae08745Sheppo status_msg = "RECV UNKNOWN COMMAND"; 6411ae08745Sheppo break; 6421ae08745Sheppo 6431ae08745Sheppo case VNTSD_ERR_CLIENT_TIMEOUT: 6441ae08745Sheppo status_msg = "CLOSE CLIENT BECAUSE TIMEOUT"; 6451ae08745Sheppo break; 6461ae08745Sheppo default: 6471ae08745Sheppo status_msg = "Unknown status recv"; 6481ae08745Sheppo break; 6491ae08745Sheppo } 6501ae08745Sheppo 6511ae08745Sheppo 6521ae08745Sheppo if (critical) { 6531ae08745Sheppo syslog(LOG_ERR, "%s: thread[%d] %s\n", status_msg, 6541ae08745Sheppo thr_self(), msg); 6551ae08745Sheppo } 6561ae08745Sheppo #ifdef DEBUG 657*28b1e50eSSriharsha Basavapatna DERR(stderr, "%s: thread[%d] %s\n", status_msg, thr_self(), msg); 6581ae08745Sheppo syslog(LOG_ERR, "%s: thread[%d] %s\n", status_msg, thr_self(), msg); 6591ae08745Sheppo #endif 6601ae08745Sheppo } 661