dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * CDDL HEADER START
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * The contents of this file are subject to the terms of the
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Common Development and Distribution License (the "License").
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * You may not use this file except in compliance with the License.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * or http://www.opensolaris.org/os/licensing.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * See the License for the specific language governing permissions
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * and limitations under the License.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * When distributing Covered Code, include this CDDL HEADER in each
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * If applicable, add the following below this CDDL HEADER, with the
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * fields enclosed by brackets "[]" replaced with your own identifying
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * information: Portions Copyright [yyyy] [name of copyright owner]
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra *
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * CDDL HEADER END
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Use is subject to license terms.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <sys/types.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <sys/socket.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <sys/list.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <netinet/in.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <stdio.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <unistd.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <stdlib.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <strings.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <errno.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <ofmt.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include <libilb.h>
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#include "ilbadm.h"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraextern int optind, optopt, opterr;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraextern char *optarg;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misratypedef struct hc_export_arg {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra FILE *fp;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra} hc_export_arg_t;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* Maximum columns for printing hc output. */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define SHOW_HC_COLS 80
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* OFMT call back to print out a hc server result field. */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrastatic boolean_t print_hc_result(ofmt_arg_t *, char *, uint_t);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* ID to indicate which field to be printed. */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraenum hc_print_id {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra hc_of_rname, hc_of_hname, hc_of_sname, hc_of_status, hc_of_fail_cnt,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra hc_of_lasttime, hc_of_nexttime, hc_of_rtt,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra hc_of_name, hc_of_timeout, hc_of_count, hc_of_interval, hc_of_def_ping,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra hc_of_test
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra};
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Fields of a hc server result. The sum of all fields' width is SHOW_HC_COLS.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrastatic ofmt_field_t hc_results[] = {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {"RULENAME", 14, hc_of_rname, print_hc_result},
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {"HCNAME", 14, hc_of_hname, print_hc_result},
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {"SERVERID", 14, hc_of_sname, print_hc_result},
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {"STATUS", 9, hc_of_status, print_hc_result},
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {"FAIL", 5, hc_of_fail_cnt, print_hc_result},
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {"LAST", 9, hc_of_lasttime, print_hc_result},
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {"NEXT", 9, hc_of_nexttime, print_hc_result},
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {"RTT", 6, hc_of_rtt, print_hc_result},
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {NULL, 0, 0, NULL}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra};
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* OFMT call back to print out a hc info field. */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrastatic boolean_t print_hc(ofmt_arg_t *, char *, uint_t);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Fields of a hc info. The sume of all fields' width is SHOW_HC_COLS.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrastatic ofmt_field_t hc_fields[] = {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {"HCNAME", 14, hc_of_name, print_hc},
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {"TIMEOUT", 8, hc_of_timeout, print_hc},
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {"COUNT", 8, hc_of_count, print_hc},
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {"INTERVAL", 9, hc_of_interval, print_hc},
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {"DEF_PING", 9, hc_of_def_ping, print_hc},
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {"TEST", 32, hc_of_test, print_hc},
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {NULL, 0, 0, NULL}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra};
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrastatic boolean_t
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraprint_hc(ofmt_arg_t *of_arg, char *buf, uint_t bufsize)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra enum hc_print_id id = of_arg->ofmt_id;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_hc_info_t *info = (ilb_hc_info_t *)of_arg->ofmt_cbarg;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra switch (id) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case hc_of_name:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) strlcpy(buf, info->hci_name, bufsize);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case hc_of_timeout:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) snprintf(buf, bufsize, "%d", info->hci_timeout);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case hc_of_count:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) snprintf(buf, bufsize, "%d", info->hci_count);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case hc_of_interval:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) snprintf(buf, bufsize, "%d", info->hci_interval);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case hc_of_def_ping:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) snprintf(buf, bufsize, "%c",
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra info->hci_def_ping ? 'Y' : 'N');
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case hc_of_test:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) snprintf(buf, bufsize, "%s", info->hci_test);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (B_TRUE);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* Call back to ilb_walk_hc(). */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* ARGSUSED */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrastatic ilb_status_t
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailbadm_print_hc(ilb_handle_t h, ilb_hc_info_t *hc_info, void *arg)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ofmt_handle_t ofmt_h = arg;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ofmt_print(ofmt_h, hc_info);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ILB_STATUS_OK);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Print out health check objects given their name.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Or print out all health check objects if no name given.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* ARGSUSED */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailbadm_status_t
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailbadm_show_hc(int argc, char *argv[])
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_handle_t h = ILB_INVALID_HANDLE;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_status_t rclib;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ofmt_handle_t ofmt_h;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ofmt_status_t ofmt_ret;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if ((ofmt_ret = ofmt_open("all", hc_fields, 0, SHOW_HC_COLS,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra &ofmt_h)) != OFMT_SUCCESS) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra char err_buf[SHOW_HC_COLS];
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_err(gettext("ofmt_open failed: %s"),
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ofmt_strerror(ofmt_h, ofmt_ret, err_buf, SHOW_HC_COLS));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ILBADM_LIBERR);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra rclib = ilb_open(&h);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (rclib != ILB_STATUS_OK)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra goto out;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (argc == 1) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra rclib = ilb_walk_hc(h, ilbadm_print_hc, ofmt_h);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra } else {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_hc_info_t hc_info;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra int i;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra for (i = 1; i < argc; i++) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra rclib = ilb_get_hc_info(h, argv[i], &hc_info);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (rclib == ILB_STATUS_OK)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ofmt_print(ofmt_h, &hc_info);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra else
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraout:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ofmt_close(ofmt_h);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (h != ILB_INVALID_HANDLE)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) ilb_close(h);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (rclib != ILB_STATUS_OK) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_err(ilb_errstr(rclib));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ILBADM_LIBERR);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ILBADM_OK);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrastatic boolean_t
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraprint_hc_result(ofmt_arg_t *of_arg, char *buf, uint_t bufsize)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra enum hc_print_id id = of_arg->ofmt_id;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_hc_srv_t *srv = (ilb_hc_srv_t *)of_arg->ofmt_cbarg;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra struct tm tv;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra switch (id) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case hc_of_rname:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) strlcpy(buf, srv->hcs_rule_name, bufsize);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case hc_of_hname:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) strlcpy(buf, srv->hcs_hc_name, bufsize);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case hc_of_sname:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) strlcpy(buf, srv->hcs_ID, bufsize);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case hc_of_status:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra switch (srv->hcs_status) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILB_HCS_UNINIT:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) strlcpy(buf, "un-init", bufsize);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILB_HCS_UNREACH:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) strlcpy(buf, "unreach", bufsize);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILB_HCS_ALIVE:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) strlcpy(buf, "alive", bufsize);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILB_HCS_DEAD:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) strlcpy(buf, "dead", bufsize);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case ILB_HCS_DISABLED:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) strlcpy(buf, "disabled", bufsize);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case hc_of_fail_cnt:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) snprintf(buf, bufsize, "%u", srv->hcs_fail_cnt);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case hc_of_lasttime:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (localtime_r(&srv->hcs_lasttime, &tv) == NULL)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (B_FALSE);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) snprintf(buf, bufsize, "%02d:%02d:%02d", tv.tm_hour,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra tv.tm_min, tv.tm_sec);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case hc_of_nexttime:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (srv->hcs_status == ILB_HCS_DISABLED)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (localtime_r(&srv->hcs_nexttime, &tv) == NULL)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (B_FALSE);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) snprintf(buf, bufsize, "%02d:%02d:%02d", tv.tm_hour,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra tv.tm_min, tv.tm_sec);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra case hc_of_rtt:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) snprintf(buf, bufsize, "%u", srv->hcs_rtt);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (B_TRUE);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* Call back to ilbd_walk_hc_srvs(). */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* ARGSUSED */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrastatic ilb_status_t
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailbadm_print_hc_result(ilb_handle_t h, ilb_hc_srv_t *srv, void *arg)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ofmt_handle_t ofmt_h = arg;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ofmt_print(ofmt_h, srv);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ILB_STATUS_OK);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Output hc result of a specified rule or all rules.
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailbadm_status_t
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailbadm_show_hc_result(int argc, char *argv[])
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_handle_t h = ILB_INVALID_HANDLE;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_status_t rclib = ILB_STATUS_OK;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra int i;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ofmt_handle_t ofmt_h;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ofmt_status_t ofmt_ret;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /* ilbadm show-hc-result [rule-name] */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (argc < 1) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_err(gettext("usage: ilbadm show-hc-result"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra " [rule-name]"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ILBADM_LIBERR);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if ((ofmt_ret = ofmt_open("all", hc_results, 0, SHOW_HC_COLS,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra &ofmt_h)) != OFMT_SUCCESS) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra char err_buf[SHOW_HC_COLS];
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_err(gettext("ofmt_open failed: %s"),
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ofmt_strerror(ofmt_h, ofmt_ret, err_buf, SHOW_HC_COLS));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ILBADM_LIBERR);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra rclib = ilb_open(&h);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (rclib != ILB_STATUS_OK)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra goto out;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /* If no rule name is given, show results for all rules. */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (argc == 1) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra rclib = ilb_walk_hc_srvs(h, ilbadm_print_hc_result, NULL,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ofmt_h);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra } else {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra for (i = 1; i < argc; i++) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra rclib = ilb_walk_hc_srvs(h, ilbadm_print_hc_result,
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra argv[i], ofmt_h);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (rclib != ILB_STATUS_OK)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraout:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ofmt_close(ofmt_h);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (h != ILB_INVALID_HANDLE)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) ilb_close(h);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (rclib != ILB_STATUS_OK) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_err(ilb_errstr(rclib));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ILBADM_LIBERR);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ILBADM_OK);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILBADM_DEF_HC_COUNT 3
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILBADM_DEF_HC_INTERVAL 30 /* in sec */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra#define ILBADM_DEF_HC_TIMEOUT 5 /* in sec */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrastatic ilbadm_key_name_t hc_parse_keys[] = {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {ILB_KEY_HC_TEST, "hc-test", "hc-test"},
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {ILB_KEY_HC_COUNT, "hc-count", "hc-count"},
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {ILB_KEY_HC_TIMEOUT, "hc-timeout", "hc-tout"},
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {ILB_KEY_HC_INTERVAL, "hc-interval", "hc-intl"},
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra {ILB_KEY_BAD, "", ""}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra};
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrastatic ilbadm_status_t
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailbadm_hc_parse_arg(char *arg, ilb_hc_info_t *hc)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_status_t ret;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /* set default value for count, interval, timeout */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra hc->hci_count = ILBADM_DEF_HC_COUNT;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra hc->hci_interval = ILBADM_DEF_HC_INTERVAL;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra hc->hci_timeout = ILBADM_DEF_HC_TIMEOUT;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra hc->hci_test[0] = '\0';
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ret = i_parse_optstring(arg, hc, hc_parse_keys, 0, NULL);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (ret != ILBADM_OK && ret != ILBADM_LIBERR) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_err(ilbadm_errstr(ret));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ILBADM_LIBERR);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (hc->hci_test[0] == '\0' && ret != ILBADM_LIBERR) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_err("hc-test: missing");
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ILBADM_LIBERR);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ret);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* ARGSUSED */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailbadm_status_t
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailbadm_create_hc(int argc, char *argv[])
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_handle_t h = ILB_INVALID_HANDLE;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_hc_info_t hc_info;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_status_t ret = ILBADM_OK;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_status_t rclib;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra char c;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra hc_info.hci_def_ping = B_TRUE;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra while ((c = getopt(argc, argv, ":h:n")) != -1) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (c == 'h') {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ret = ilbadm_hc_parse_arg(optarg, &hc_info);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (ret != ILBADM_OK)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ret);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra } else if (c == 'n') {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra hc_info.hci_def_ping = B_FALSE;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra } else {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_err(gettext("bad argument %c"), c);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ILBADM_LIBERR);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (optind >= argc) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_err(gettext("usage: ilbadm"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra " create-healthcheck [-n] -h"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra " hc-test=val[,hc-timeout=val][,hc-count=va]"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra "[,hc-interval=val] hc-name"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ILBADM_FAIL);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (strlen(argv[optind]) > ILBD_NAMESZ - 1) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_err(gettext("health check object name %s is too long - "
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra "must not exceed %d chars"), argv[optind],
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ILBD_NAMESZ - 1);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ILBADM_FAIL);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (((strcasecmp(hc_info.hci_test, ILB_HC_STR_UDP) == 0) ||
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (strcasecmp(hc_info.hci_test, ILB_HC_STR_PING) == 0)) &&
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra !(hc_info.hci_def_ping)) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_err(gettext("cannot disable default PING"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra " for this test"));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ILBADM_LIBERR);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra rclib = ilb_open(&h);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (rclib != ILB_STATUS_OK)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra goto out;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) strlcpy(hc_info.hci_name, argv[optind],
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra sizeof (hc_info.hci_name));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra rclib = ilb_create_hc(h, &hc_info);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraout:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (h != ILB_INVALID_HANDLE)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) ilb_close(h);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (rclib != ILB_STATUS_OK) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_err(ilb_errstr(rclib));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ret = ILBADM_LIBERR;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ret);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailbadm_status_t
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailbadm_destroy_hc(int argc, char *argv[])
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_handle_t h = ILB_INVALID_HANDLE;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_status_t rclib;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_status_t ret = ILBADM_OK;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra int i;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (argc < 2) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_err(gettext("usage: ilbadm"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra " delete-healthcheck hc-name ..."));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ILBADM_LIBERR);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra rclib = ilb_open(&h);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (rclib != ILB_STATUS_OK)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra goto out;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra for (i = 1; i < argc; i++) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra rclib = ilb_destroy_hc(h, argv[i]);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (rclib != ILB_STATUS_OK)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra break;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraout:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (h != ILB_INVALID_HANDLE)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) ilb_close(h);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (rclib != ILB_STATUS_OK) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_err(ilb_errstr(rclib));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ret = ILBADM_LIBERR;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ret);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * Since this function is used by libilb function, it
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * must return libilb errors
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra/* ARGSUSED */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailb_status_t
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailbadm_export_hcinfo(ilb_handle_t h, ilb_hc_info_t *hc_info, void *arg)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra FILE *fp = ((hc_export_arg_t *)arg)->fp;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra int count = 0;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra int ret;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * a test name "PING" implies "no default ping", so we only
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * print -n if the test is NOT "PING"
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (hc_info->hci_def_ping == B_FALSE &&
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra strncasecmp(hc_info->hci_test, "PING", 5) != 0)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) fprintf(fp, "create-healthcheck -n -h ");
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra else
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) fprintf(fp, "create-healthcheck -h ");
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (*hc_info->hci_test != '\0') {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) fprintf(fp, "hc-test=%s", hc_info->hci_test);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra count++;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (hc_info->hci_timeout != 0) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (count++ > 0)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) fprintf(fp, ",");
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) fprintf(fp, "hc-timeout=%d", hc_info->hci_timeout);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (hc_info->hci_count != 0) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (count++ > 0)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) fprintf(fp, ",");
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) fprintf(fp, "hc-count=%d", hc_info->hci_count);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (hc_info->hci_interval != 0) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (count > 0)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) fprintf(fp, ",");
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra (void) fprintf(fp, "hc-interval=%d", hc_info->hci_interval);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra /*
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * if any of the above writes fails, then, we assume, so will
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra * this one; so it's sufficient to test once
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra */
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ret = fprintf(fp, " %s\n", hc_info->hci_name);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (ret < 0)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra goto out_fail;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ret = fflush(fp);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misraout_fail:
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (ret < 0)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ILB_STATUS_WRITE);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ILB_STATUS_OK);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailbadm_status_t
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misrailbadm_export_hc(ilb_handle_t h, FILE *fp)
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra{
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilb_status_t rclib;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_status_t ret = ILBADM_OK;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra hc_export_arg_t arg;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra arg.fp = fp;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra rclib = ilb_walk_hc(h, ilbadm_export_hcinfo, (void *)&arg);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra if (rclib != ILB_STATUS_OK) {
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ilbadm_err(ilb_errstr(rclib));
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra ret = ILBADM_LIBERR;
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra }
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra return (ret);
dbed73cbda2229fd1aa6dc5743993cae7f0a7ee9Sangeeta Misra}