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_eni.c,v 1.3.2.1 2000/07/01 06:02:14 ps Exp $
27 * @(#) $DragonFly: src/sbin/atm/atm/atm_eni.c,v 1.2 2003/06/17 04:27:32 dillon Exp $
31 * User configuration and display program
32 * --------------------------------------
34 * Routines for Efficient-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/hea/eni_stats.h>
65 #define SHOW_DRIVER 64
69 * Headers for statistics
71 #define ATM_STATS_HDR \
72 "%s ATM Layer Statistics\n\
75 #define AAL0_STATS_HDR \
76 "%s AAL 0 Statistics\n\
77 Cells In Cells Out Cell Drops\n"
79 #define AAL5_STATS_HDR \
80 "%s AAL 5 Statistics\n\
81 CRC/Len CRC Proto PDU\n\
82 Cells In Cells Out Errs Drops PDUs In PDUs Out Errs Errs Drops\n"
84 #define DRIVER_STATS_HDR_1 \
85 "%s Device Driver Statistics\n\
86 Buf Buf Buf Buf Can't VCC VCC No No No RX RX\n\
87 Req No No Alrdy Find PDU Range Resrc RX DMA Queue\n\
88 Size Descr Mem Free Descr Size Error In Bufs Room Full\n"
90 #define DRIVER_STATS_HDR_2 \
91 "%s Device Driver Statistics\n\
92 No ATM No RX No TX Seg Max No No No TX\n\
93 RX IntrQ DMA DMA Not Seg Seg TX Resrc DMA\n\
94 VCC Full Room Addr Align Pad Out Buf Out Room\n"
96 #define OC3_STATS_HDR \
97 "%s OC-3c Statistics\n\
98 Section Path Line Line Path Corr Uncorr\n\
99 BIP8 BIP8 BIP24 FEBE FEBE HCS HCS\n\
100 Errs Errs Errs Errs Errs Errs Errs\n"
104 * Process show ENI statistics command
106 * The statistics printed are vendor-specific, depending on the brand of
107 * the interface card.
110 * atm show stats interface [<interface-name> [phy | dev | atm |
111 aal0 | aal5 | driver ]]
114 * intf interface to print statistics for
115 * argc number of remaining arguments to command
116 * argv pointer to remaining argument strings
123 show_eni_stats(intf, argc, argv)
128 int buf_len, stats_type;
129 struct atminfreq air;
130 struct air_vinfo_rsp *stats;
133 * Get statistics type qualifier
135 if (!strcasecmp("phy", argv[0])) {
136 stats_type = SHOW_PHY;
137 } else if (!strcasecmp("atm", argv[0])) {
138 stats_type = SHOW_ATM;
139 } else if (!strcasecmp("aal0", argv[0])) {
140 stats_type = SHOW_AAL0;
141 } else if (!strcasecmp("aal5", argv[0])) {
142 stats_type = SHOW_AAL5;
143 } else if (!strcasecmp("driver", argv[0])) {
144 stats_type = SHOW_DRIVER;
146 fprintf(stderr, "%s: Illegal or unsupported statistics type\n", prog);
152 * Get vendor-specific statistics from the kernel
154 UM_ZERO(&air, sizeof(air));
155 air.air_opcode = AIOCS_INF_VST;
156 strcpy(air.air_vinfo_intf, intf);
157 buf_len = do_info_ioctl(&air, sizeof(struct air_vinfo_rsp) + 1024);
159 fprintf(stderr, "%s: ", prog);
163 perror("Internal error");
166 fprintf(stderr, "%s is not an ATM device\n",
170 perror("ioctl (AIOCINFO)");
175 stats = (struct air_vinfo_rsp *) air.air_buf_addr;
178 * Print the statistics
180 if (buf_len < sizeof(struct air_vinfo_rsp) +
186 switch (stats_type) {
188 print_eni_oc3(stats);
191 print_eni_atm(stats);
194 print_eni_aal0(stats);
197 print_eni_aal5(stats);
200 print_eni_driver(stats);
209 * Print ENI OC-3c statistics
212 * vi pointer to vendor-specific statistics to print
220 struct air_vinfo_rsp *vi;
225 * Bump stats pointer past header info
227 stats = (Eni_stats *)
228 ((u_long) vi + sizeof(struct air_vinfo_rsp));
233 printf(OC3_STATS_HDR, get_adapter_name(vi->avsp_intf));
236 * Print the OC-3c info
238 printf("%7ld %7ld %7ld %7ld %7ld %7ld %7ld\n",
239 stats->eni_st_oc3.oc3_sect_bip8,
240 stats->eni_st_oc3.oc3_path_bip8,
241 stats->eni_st_oc3.oc3_line_bip24,
242 stats->eni_st_oc3.oc3_line_febe,
243 stats->eni_st_oc3.oc3_path_febe,
244 stats->eni_st_oc3.oc3_hec_corr,
245 stats->eni_st_oc3.oc3_hec_uncorr);
250 * Print ENI ATM statistics
253 * vi pointer to vendor-specific statistics to print
261 struct air_vinfo_rsp *vi;
266 * Bump stats pointer past header info
268 stats = (Eni_stats *)
269 ((u_long) vi + sizeof(struct air_vinfo_rsp));
274 printf(ATM_STATS_HDR, get_adapter_name(vi->avsp_intf));
277 * Print the ATM layer info
279 printf("%10ld %10ld\n",
280 stats->eni_st_atm.atm_rcvd,
281 stats->eni_st_atm.atm_xmit);
286 * Print ENI AAL 0 statistics
289 * vi pointer to vendor-specific statistics to print
297 struct air_vinfo_rsp *vi;
302 * Bump stats pointer past header info
304 stats = (Eni_stats *)
305 ((u_long) vi + sizeof(struct air_vinfo_rsp));
310 printf(AAL0_STATS_HDR, get_adapter_name(vi->avsp_intf));
313 * Print the AAL 0 info
315 printf("%10ld %10ld %10ld\n",
316 stats->eni_st_aal0.aal0_rcvd,
317 stats->eni_st_aal0.aal0_xmit,
318 stats->eni_st_aal0.aal0_drops);
323 * Print ENI AAL 5 statistics
326 * vi pointer to vendor-specific statistics to print
334 struct air_vinfo_rsp *vi;
339 * Bump stats pointer past header info
341 stats = (Eni_stats *)
342 ((u_long) vi + sizeof(struct air_vinfo_rsp));
347 printf(AAL5_STATS_HDR, get_adapter_name(vi->avsp_intf));
350 * Print the AAL 5 info
352 printf("%10ld %10ld %5ld %5ld %9ld %9ld %5ld %5ld %5ld\n",
353 stats->eni_st_aal5.aal5_rcvd,
354 stats->eni_st_aal5.aal5_xmit,
355 stats->eni_st_aal5.aal5_crc_len,
356 stats->eni_st_aal5.aal5_drops,
357 stats->eni_st_aal5.aal5_pdu_rcvd,
358 stats->eni_st_aal5.aal5_pdu_xmit,
359 stats->eni_st_aal5.aal5_pdu_crc,
360 stats->eni_st_aal5.aal5_pdu_errs,
361 stats->eni_st_aal5.aal5_pdu_drops);
365 * Print Efficient device driver statistics
368 * vi pointer to vendor-specific statistics to print
376 struct air_vinfo_rsp *vi;
381 * Bump stats pointer past header info
383 stats = (Eni_stats *)
384 ((u_long) vi + sizeof(struct air_vinfo_rsp));
389 printf(DRIVER_STATS_HDR_1, get_adapter_name(vi->avsp_intf));
392 * Print the driver info
394 printf ( "%5ld %5ld %5ld %5ld %5ld %5ld %5ld %5ld %5ld %5ld %5ld\n",
395 stats->eni_st_drv.drv_mm_toobig,
396 stats->eni_st_drv.drv_mm_nodesc,
397 stats->eni_st_drv.drv_mm_nobuf,
398 stats->eni_st_drv.drv_mm_notuse,
399 stats->eni_st_drv.drv_mm_notfnd,
400 stats->eni_st_drv.drv_vc_maxpdu,
401 stats->eni_st_drv.drv_vc_badrng,
402 stats->eni_st_drv.drv_rv_norsc,
403 stats->eni_st_drv.drv_rv_nobufs,
404 stats->eni_st_drv.drv_rv_nodma,
405 stats->eni_st_drv.drv_rv_rxq
411 printf(DRIVER_STATS_HDR_2, get_adapter_name(vi->avsp_intf));
414 * Print the driver info
416 printf ( "%5ld %5ld %5ld %5ld %5ld %5ld %5ld %7ld %5ld %7ld\n",
417 stats->eni_st_drv.drv_rv_novcc,
418 stats->eni_st_drv.drv_rv_intrq,
419 stats->eni_st_drv.drv_rv_segdma,
420 stats->eni_st_drv.drv_xm_segdma,
421 stats->eni_st_drv.drv_xm_segnoal,
422 stats->eni_st_drv.drv_xm_seglen,
423 stats->eni_st_drv.drv_xm_maxpdu,
424 stats->eni_st_drv.drv_xm_nobuf,
425 stats->eni_st_drv.drv_xm_norsc,
426 stats->eni_st_drv.drv_xm_nodma