911106dfb16696472af8c1b7b4c554a829354fa8jm * CDDL HEADER START
911106dfb16696472af8c1b7b4c554a829354fa8jm * The contents of this file are subject to the terms of the
911106dfb16696472af8c1b7b4c554a829354fa8jm * Common Development and Distribution License (the "License").
911106dfb16696472af8c1b7b4c554a829354fa8jm * You may not use this file except in compliance with the License.
911106dfb16696472af8c1b7b4c554a829354fa8jm * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
911106dfb16696472af8c1b7b4c554a829354fa8jm * See the License for the specific language governing permissions
911106dfb16696472af8c1b7b4c554a829354fa8jm * and limitations under the License.
911106dfb16696472af8c1b7b4c554a829354fa8jm * When distributing Covered Code, include this CDDL HEADER in each
911106dfb16696472af8c1b7b4c554a829354fa8jm * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
911106dfb16696472af8c1b7b4c554a829354fa8jm * If applicable, add the following below this CDDL HEADER, with the
911106dfb16696472af8c1b7b4c554a829354fa8jm * fields enclosed by brackets "[]" replaced with your own identifying
911106dfb16696472af8c1b7b4c554a829354fa8jm * information: Portions Copyright [yyyy] [name of copyright owner]
911106dfb16696472af8c1b7b4c554a829354fa8jm * CDDL HEADER END
bfc848c632c9eacb2a640246d96e198f1b185c03jm * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
911106dfb16696472af8c1b7b4c554a829354fa8jm * Use is subject to license terms.
911106dfb16696472af8c1b7b4c554a829354fa8jm#pragma ident "%Z%%M% %I% %E% SMI"
911106dfb16696472af8c1b7b4c554a829354fa8jm * Implementation of the vscan statistics interface
911106dfb16696472af8c1b7b4c554a829354fa8jm/* local data */
911106dfb16696472af8c1b7b4c554a829354fa8jmstatic pthread_mutex_t vs_stats_mutex = PTHREAD_MUTEX_INITIALIZER;
911106dfb16696472af8c1b7b4c554a829354fa8jm/* function prototype */
911106dfb16696472af8c1b7b4c554a829354fa8jmstatic int vs_stats_check_auth(void);
bfc848c632c9eacb2a640246d96e198f1b185c03jmstatic void vs_stats_reset(void);
911106dfb16696472af8c1b7b4c554a829354fa8jmstatic void vs_stats_door_call(void *, char *, size_t, door_desc_t *, uint_t);
911106dfb16696472af8c1b7b4c554a829354fa8jm * vs_stats_init
911106dfb16696472af8c1b7b4c554a829354fa8jm * Invoked on daemon load and unload
911106dfb16696472af8c1b7b4c554a829354fa8jm /* door initialization */
911106dfb16696472af8c1b7b4c554a829354fa8jm &vs_stats_door_cookie, (DOOR_UNREF | DOOR_REFUSE_DESC))) < 0) {
911106dfb16696472af8c1b7b4c554a829354fa8jm * vs_stats_fini
911106dfb16696472af8c1b7b4c554a829354fa8jm * Invoked on daemon unload
911106dfb16696472af8c1b7b4c554a829354fa8jm /* door termination */
911106dfb16696472af8c1b7b4c554a829354fa8jm * vs_stats_check_auth
911106dfb16696472af8c1b7b4c554a829354fa8jm * Returns: 0 caller authorized to reset stats
911106dfb16696472af8c1b7b4c554a829354fa8jm * -1 caller not authorized to reset stats
911106dfb16696472af8c1b7b4c554a829354fa8jm return (-1);
911106dfb16696472af8c1b7b4c554a829354fa8jm return (-1);
911106dfb16696472af8c1b7b4c554a829354fa8jm return (0);
911106dfb16696472af8c1b7b4c554a829354fa8jm * vs_stats_door_call
911106dfb16696472af8c1b7b4c554a829354fa8jm/* ARGSUSED */
911106dfb16696472af8c1b7b4c554a829354fa8jmstatic void
911106dfb16696472af8c1b7b4c554a829354fa8jmvs_stats_door_call(void *cookie, char *ptr, size_t size, door_desc_t *dp,
bfc848c632c9eacb2a640246d96e198f1b185c03jm /* LINTED E_BAD_PTR_CAST_ALIGN */
bfc848c632c9eacb2a640246d96e198f1b185c03jm (void) door_return((char *)&rsp, sizeof (vs_stats_rsp_t),
bfc848c632c9eacb2a640246d96e198f1b185c03jm * vs_stats_reset
bfc848c632c9eacb2a640246d96e198f1b185c03jm * Reset totals and per-engine statistics to 0
bfc848c632c9eacb2a640246d96e198f1b185c03jmstatic void
bfc848c632c9eacb2a640246d96e198f1b185c03jm for (i = 0; i < VS_SE_MAX; i++)
911106dfb16696472af8c1b7b4c554a829354fa8jm * vs_stats_set
911106dfb16696472af8c1b7b4c554a829354fa8jm * Update scan request stats
911106dfb16696472af8c1b7b4c554a829354fa8jm switch (retval) {
911106dfb16696472af8c1b7b4c554a829354fa8jm * vs_stats_eng_err
911106dfb16696472af8c1b7b4c554a829354fa8jm * Increment the error count stat for eng
911106dfb16696472af8c1b7b4c554a829354fa8jm for (i = 0; i < VS_SE_MAX; i++) {
911106dfb16696472af8c1b7b4c554a829354fa8jm if (strcmp(vscan_stats.vss_eng[i].vss_engid, engid) == 0) {
911106dfb16696472af8c1b7b4c554a829354fa8jm * vs_stats_config
911106dfb16696472af8c1b7b4c554a829354fa8jm (void) memset(&vscan_stats.vss_eng, 0, sizeof (vscan_stats.vss_eng));
911106dfb16696472af8c1b7b4c554a829354fa8jm for (i = 0; i < VS_SE_MAX; i++) {
911106dfb16696472af8c1b7b4c554a829354fa8jm if (*engid == 0)
911106dfb16696472af8c1b7b4c554a829354fa8jm /* find previous error count for engid */
911106dfb16696472af8c1b7b4c554a829354fa8jm for (j = 0; j < VS_SE_MAX; j++) {