/* $NetBSD: istat.c,v 1.6 2008/04/28 20:24:16 martin Exp $ */ /*- * Copyright (c) 2002 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation * by Martin Husemann . * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include #include #define LOG 1 #define MEMR 2 #define MEMW 3 #define IOR 4 #define IOW 5 #define B1TEST 6 #define B2TEST 7 #define BTESTOFF 8 #define DSIG_STATS 9 #define B_CH_STATS 10 #define D_CH_STATS 11 #define BL1_STATS 12 #define BL1_STATS_C 13 #define DVERSION 14 #define OK 0xff #define MORE_EVENTS 0xfe #define NO_EVENT 1 struct DSigStruc { u_int8_t rc; u_int8_t Id; u_int8_t u; u_int8_t listen; u_int8_t active; u_int8_t sin[3]; u_int8_t bc[6]; u_int8_t llc[6]; u_int8_t hlc[6]; u_int8_t oad[20]; }; struct BL1Struc { u_int8_t rc; u_int32_t cx_b1; u_int32_t cx_b2; u_int32_t cr_b1; u_int32_t cr_b2; u_int32_t px_b1; u_int32_t px_b2; u_int32_t pr_b1; u_int32_t pr_b2; u_int16_t er_b1; u_int16_t er_b2; }; struct L2Struc { u_int8_t rc; u_int32_t XTotal; u_int32_t RTotal; u_int16_t XError; u_int16_t RError; }; static void printIE(u_int8_t *ie); void istat(int fd, int controller); void xversion(int fd, int controller); void istat(int fd, int controller) { struct isdn_diagnostic_request req; printf("istat:\n"); memset(&req, 0, sizeof(req)); req.controller = controller; /* dump d-channel signaling tasks */ { struct DSigStruc r; int ok = 1; req.cmd = DSIG_STATS; req.out_param_len = sizeof(r); req.out_param = &r; printf("D-Channel Signaling Entities\n"); printf("============================\n"); while (ok) { if (ioctl(fd, I4B_ACTIVE_DIAGNOSTIC, &req) == -1) { perror("ioctl(I4B_ACTIVE_DIAGNOSTIC)"); return; } if (r.rc == OK) /* last entry */ ok = 0; if (r.Id) { switch (r.sin[1]) { case 0: printf("Any Service Task"); break; case 1: printf("Voice Task"); break; case 2: printf("a/b Task"); break; case 3: printf("X.21 Task"); break; case 4: printf("Fax G4 Task"); break; case 5: printf("Videotex Task"); break; case 7: printf("Transparent Data Task"); break; case 9: printf("Teletex 64 Task"); break; } printf(", Id = %02X, State = %i\n", r.Id,r.u); printf("\t"); printf(" BC ="); printIE(r.bc); printf(" LLC ="); printIE(r.llc); printf(" HLC ="); printIE(r.hlc); printf("\n"); } } } } static void printIE(ie) u_int8_t *ie; { int i; for (i = 0; i < ie[0]; i++) printf(" %02X", ie[i+1]); } void xversion(int fd, int controller) { struct isdn_diagnostic_request req; char rcversion[50]; memset(&req, 0, sizeof(req)); req.controller = controller; req.cmd = DVERSION; req.out_param_len = 49; req.out_param = &rcversion; if (ioctl(fd, I4B_ACTIVE_DIAGNOSTIC, &req) == -1) { perror(""); return; } rcversion[49] = '\0'; printf("controller %d is running '%s'\n", controller, rcversion+1); }