3 * ===================================
4 * HARP | Host ATM Research Platform
5 * ===================================
8 * This Host ATM Research Platform ("HARP") file (the "Software") is
9 * made available by Network Computing Services, Inc. ("NetworkCS")
10 * "AS IS". NetworkCS does not provide maintenance, improvements or
11 * support of any kind.
13 * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
14 * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
15 * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
16 * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
17 * In no event shall NetworkCS be responsible for any damages, including
18 * but not limited to consequential damages, arising from or relating to
19 * any use of the Software or related support.
21 * Copyright 1994-1998 Network Computing Services, Inc.
23 * Copies of this Software may be made, however, the above copyright
24 * notice must be reproduced on all copies.
26 * @(#) $FreeBSD: src/sbin/atm/atm/atm_fore200.c,v 1.3.2.1 2000/07/01 06:02:14 ps Exp $
27 * @(#) $DragonFly: src/sbin/atm/atm/atm_fore200.c,v 1.4 2003/09/28 14:39:16 hmp Exp $
31 * User configuration and display program
32 * --------------------------------------
34 * Routines for Fore SBA-200-specific subcommands
38 #include <sys/param.h>
39 #include <sys/socket.h>
41 #include <netinet/in.h>
42 #include <netatm/port.h>
43 #include <netatm/atm.h>
44 #include <netatm/atm_if.h>
45 #include <netatm/atm_sap.h>
46 #include <netatm/atm_sys.h>
47 #include <netatm/atm_ioctl.h>
48 #include <dev/atm/hfa/fore_aali.h>
49 #include <dev/atm/hfa/fore_slave.h>
50 #include <dev/atm/hfa/fore_stats.h>
69 #define SHOW_DRIVER 64
73 * Headers for statistics
75 #define TAXI_STATS_HDR \
76 "%s TAXI Statistics\n\
77 CRC Errs Framing Errs\n"
79 #define DEV_STATS_HDR \
80 "%s Device Statistics\n\
81 Type 1 Type 1 Type 2 Type 2\n\
82 Small Buff Large Buff Small Buff Large Buff Receive Receive\n\
83 Alloc Fail Alloc Fail Alloc Fail Alloc Fail Queue Full Carrier\n"
85 #define ATM_STATS_HDR \
86 "%s ATM Layer Statistics\n\
87 Cells In Cells Out VPI Range VPI NoConn VCI Range VCI NoConn\n"
89 #define AAL0_STATS_HDR \
90 "%s AAL 0 Statistics\n\
91 Cells In Cells Out Cell Drops\n"
93 #define AAL4_STATS_HDR \
94 "%s AAL 4 Statistics\n\
95 CRC Proto Cell PDU PDU\n\
96 Cells In Cells Out Errs Errs Drops PDUs In PDUs Out Errs Drops\n"
98 #define AAL5_STATS_HDR \
99 "%s AAL 5 Statistics\n\
100 CRC/Len CRC Proto PDU\n\
101 Cells In Cells Out Errs Drops PDUs In PDUs Out Errs Errs Drops\n"
103 #define DRIVER_STATS_HDR \
104 "%s Device Driver Statistics\n\
105 No Xmit Max Seg No No No IQ No Cmd No\n\
106 VCC Queue Seg Not Seg DMA VCC No Mbuf Full DMA Queue DMA\n\
107 Out Full Size Align Pad Out In Buff In In Sup Full Cmd\n"
109 #define OC3_STATS_HDR \
110 "%s OC-3c Statistics\n\
111 Section Path Line Line Path Corr Uncorr\n\
112 BIP8 BIP8 BIP24 FEBE FEBE HCS HCS\n\
113 Errs Errs Errs Errs Errs Errs Errs\n"
117 * Process show Fore SBA-200 statistics command
119 * The statistics printed are vendor-specific, depending on the brand of
120 * the interface card.
123 * atm show stats interface [<interface-name> [phy | dev | atm |
124 * aal0 | aal4 | aal5 | driver]]
127 * intf interface statistics are for
128 * argc number of remaining arguments to command
129 * argv pointer to remaining argument strings
136 show_fore200_stats(char *intf, int argc, char **argv)
138 int buf_len, stats_type;
139 struct air_cfg_rsp *cfg;
140 struct air_vinfo_rsp *stats;
141 struct atminfreq air;
144 * Get statistics type qualifier
146 if (!strcasecmp("phy", argv[0])) {
147 stats_type = SHOW_PHY;
148 } else if (!strcasecmp("dev", argv[0])) {
149 stats_type = SHOW_DEV;
150 } else if (!strcasecmp("atm", argv[0])) {
151 stats_type = SHOW_ATM;
152 } else if (!strcasecmp("aal0", argv[0])) {
153 stats_type = SHOW_AAL0;
154 } else if (!strcasecmp("aal4", argv[0])) {
155 stats_type = SHOW_AAL4;
156 } else if (!strcasecmp("aal5", argv[0])) {
157 stats_type = SHOW_AAL5;
158 } else if (!strcasecmp("driver", argv[0])) {
159 stats_type = SHOW_DRIVER;
161 fprintf(stderr, "%s: Illegal statistics type\n", prog);
167 * Get adapter configuration from the kernel
169 UM_ZERO(&air, sizeof(air));
170 air.air_opcode = AIOCS_INF_CFG;
171 strcpy(air.air_cfg_intf, intf);
172 buf_len = do_info_ioctl(&air, sizeof(struct air_cfg_rsp));
174 fprintf(stderr, "%s: ", prog);
178 perror("Internal error");
181 fprintf(stderr, "%s is not an ATM device\n",
185 perror("ioctl (AIOCINFO)");
190 cfg = (struct air_cfg_rsp *) air.air_buf_addr;
193 * Get vendor-specific statistics from the kernel
195 UM_ZERO(&air, sizeof(air));
196 air.air_opcode = AIOCS_INF_VST;
197 strcpy(air.air_vinfo_intf, intf);
198 buf_len = do_info_ioctl(&air, sizeof(struct air_vinfo_rsp) + 1024);
200 fprintf(stderr, "%s: ", prog);
204 perror("Internal error");
207 fprintf(stderr, "%s is not an ATM device\n",
211 perror("ioctl (AIOCINFO)");
216 stats = (struct air_vinfo_rsp *) air.air_buf_addr;
219 * Print the statistics
221 if (buf_len < sizeof(struct air_vinfo_rsp) +
222 sizeof(Fore_stats)) {
228 switch (stats_type) {
230 switch (cfg->acp_media) {
233 print_fore200_taxi(stats);
236 print_fore200_oc3(stats);
245 print_fore200_dev(stats);
248 print_fore200_atm(stats);
251 print_fore200_aal0(stats);
254 print_fore200_aal4(stats);
257 print_fore200_aal5(stats);
260 print_fore200_driver(stats);
270 * Print Fore ASX-200 TAXI statistics
273 * vi pointer to vendor-specific statistics to print
280 print_fore200_taxi(struct air_vinfo_rsp *vi)
285 * Bump stats pointer past header info
287 stats = (Fore_stats *)
288 ((u_long) vi + sizeof(struct air_vinfo_rsp));
293 printf(TAXI_STATS_HDR, get_adapter_name(vi->avsp_intf));
296 * Print the physical layer info
298 printf("%10ld %12ld\n",
299 stats->st_taxi.taxi_bad_crc,
300 stats->st_taxi.taxi_framing);
305 * Print Fore ASX-200 OC-3c statistics
308 * vi pointer to vendor-specific statistics to print
315 print_fore200_oc3(struct air_vinfo_rsp *vi)
320 * Bump stats pointer past header info
322 stats = (Fore_stats *)
323 ((u_long) vi + sizeof(struct air_vinfo_rsp));
328 printf(OC3_STATS_HDR, get_adapter_name(vi->avsp_intf));
331 * Print the OC-3c info
333 printf("%7ld %7ld %7ld %7ld %7ld %7ld %7ld\n",
334 stats->st_oc3.oc3_sect_bip8,
335 stats->st_oc3.oc3_path_bip8,
336 stats->st_oc3.oc3_line_bip24,
337 stats->st_oc3.oc3_line_febe,
338 stats->st_oc3.oc3_path_febe,
339 stats->st_oc3.oc3_hec_corr,
340 stats->st_oc3.oc3_hec_uncorr);
345 * Print Fore ASX-200 device statistics
348 * vi pointer to vendor-specific statistics to print
355 print_fore200_dev(struct air_vinfo_rsp *vi)
360 * Bump stats pointer past header info
362 stats = (Fore_stats *)
363 ((u_long) vi + sizeof(struct air_vinfo_rsp));
368 printf(DEV_STATS_HDR, get_adapter_name(vi->avsp_intf));
371 * Print the device info
373 printf("%10ld %10ld %10ld %10ld %10ld %s\n",
374 stats->st_misc.buf1_sm_fail,
375 stats->st_misc.buf1_lg_fail,
376 stats->st_misc.buf2_sm_fail,
377 stats->st_misc.buf2_lg_fail,
378 stats->st_misc.rcvd_pdu_fail,
379 (stats->st_misc.carrier_status ? "On" : "Off"));
384 * Print Fore ASX-200 ATM statistics
387 * vi pointer to vendor-specific statistics to print
394 print_fore200_atm(struct air_vinfo_rsp *vi)
399 * Bump stats pointer past header info
401 stats = (Fore_stats *)
402 ((u_long) vi + sizeof(struct air_vinfo_rsp));
407 printf(ATM_STATS_HDR, get_adapter_name(vi->avsp_intf));
410 * Print the ATM layer info
412 printf("%10ld %10ld %10ld %10ld %10ld %10ld\n",
413 stats->st_atm.atm_rcvd,
414 stats->st_atm.atm_xmit,
415 stats->st_atm.atm_vpi_range,
416 stats->st_atm.atm_vpi_noconn,
417 stats->st_atm.atm_vci_range,
418 stats->st_atm.atm_vci_noconn);
423 * Print Fore ASX-200 AAL 0 statistics
426 * vi pointer to vendor-specific statistics to print
433 print_fore200_aal0(struct air_vinfo_rsp *vi)
438 * Bump stats pointer past header info
440 stats = (Fore_stats *)
441 ((u_long) vi + sizeof(struct air_vinfo_rsp));
446 printf(AAL0_STATS_HDR, get_adapter_name(vi->avsp_intf));
449 * Print the AAL 0 info
451 printf("%10ld %10ld %10ld\n",
452 stats->st_aal0.aal0_rcvd,
453 stats->st_aal0.aal0_xmit,
454 stats->st_aal0.aal0_drops);
459 * Print Fore ASX-200 AAL 4 statistics
462 * vi pointer to vendor-specific statistics to print
469 print_fore200_aal4(struct air_vinfo_rsp *vi)
474 * Bump stats pointer past header info
476 stats = (Fore_stats *)
477 ((u_long) vi + sizeof(struct air_vinfo_rsp));
482 printf(AAL4_STATS_HDR, get_adapter_name(vi->avsp_intf));
485 * Print the AAL 4 info
487 printf("%10ld %10ld %5ld %5ld %5ld %9ld %9ld %5ld %5ld\n",
488 stats->st_aal4.aal4_rcvd,
489 stats->st_aal4.aal4_xmit,
490 stats->st_aal4.aal4_crc,
491 stats->st_aal4.aal4_sar_cs,
492 stats->st_aal4.aal4_drops,
493 stats->st_aal4.aal4_pdu_rcvd,
494 stats->st_aal4.aal4_pdu_xmit,
495 stats->st_aal4.aal4_pdu_errs,
496 stats->st_aal4.aal4_pdu_drops);
501 * Print Fore ASX-200 AAL 5 statistics
504 * vi pointer to vendor-specific statistics to print
511 print_fore200_aal5(struct air_vinfo_rsp *vi)
516 * Bump stats pointer past header info
518 stats = (Fore_stats *)
519 ((u_long) vi + sizeof(struct air_vinfo_rsp));
524 printf(AAL5_STATS_HDR, get_adapter_name(vi->avsp_intf));
527 * Print the AAL 5 info
529 printf("%10ld %10ld %5ld %5ld %9ld %9ld %5ld %5ld %5ld\n",
530 stats->st_aal5.aal5_rcvd,
531 stats->st_aal5.aal5_xmit,
532 stats->st_aal5.aal5_crc_len,
533 stats->st_aal5.aal5_drops,
534 stats->st_aal5.aal5_pdu_rcvd,
535 stats->st_aal5.aal5_pdu_xmit,
536 stats->st_aal5.aal5_pdu_crc,
537 stats->st_aal5.aal5_pdu_errs,
538 stats->st_aal5.aal5_pdu_drops);
543 * Print Fore ASX-200 device driver statistics
546 * vi pointer to vendor-specific statistics to print
553 print_fore200_driver(struct air_vinfo_rsp *vi)
558 * Bump stats pointer past header info
560 stats = (Fore_stats *)
561 ((u_long) vi + sizeof(struct air_vinfo_rsp));
566 printf(DRIVER_STATS_HDR, get_adapter_name(vi->avsp_intf));
569 * Print the driver info
571 printf("%4ld %4ld %4ld %4ld %4ld %4ld %4ld %4ld %4ld %4ld %4ld %4ld %4ld\n",
572 stats->st_drv.drv_xm_notact,
573 stats->st_drv.drv_xm_full,
574 stats->st_drv.drv_xm_maxpdu,
575 stats->st_drv.drv_xm_segnoal,
576 stats->st_drv.drv_xm_seglen,
577 stats->st_drv.drv_xm_segdma,
578 stats->st_drv.drv_rv_novcc,
579 stats->st_drv.drv_rv_nosbf,
580 stats->st_drv.drv_rv_nomb,
581 stats->st_drv.drv_rv_ifull,
582 stats->st_drv.drv_bf_segdma,
583 stats->st_drv.drv_cm_full,
584 stats->st_drv.drv_cm_nodma);