2 * stat.c from Access Point SNMP Utils for Linux
4 * Copyright (c) 2002 Roman Festchook <roma at polesye dot net>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License Version 2 from
8 * June 1991 as published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29 #define ETH_STAT _("Ethernet Statistics")
30 #define W_STAT _("Wireless Statistics")
32 extern WINDOW *main_sub;
38 struct EthRxStatistics_s *EthRxStat = NULL;
39 struct EthTxStatistics_s *EthTxStat = NULL;
41 char EthRxStatistics[] = {
42 0x2B, 0x06, 0x01, 0x04, 0x01, 0x83, 0x1A, 0x01, 0x01, 0x07, 0x01, 0x00
44 char EthTxStatistics[] = {
45 0x2B, 0x06, 0x01, 0x04, 0x01, 0x83, 0x1A, 0x01, 0x01, 0x07, 0x02, 0x00
52 if (ap_type == ATMEL12350) {
53 EthRxStatistics[5] = 0xE0;
54 EthRxStatistics[6] = 0x3E;
55 EthTxStatistics[5] = 0xE0;
56 EthTxStatistics[6] = 0x3E;
59 print_top(wait_mode == WAIT_TIMEOUT ? POLL_ON : POLL_OFF, ETH_STAT);
62 if (wait_mode == WAIT_TIMEOUT)
65 varbinds[0].oid = EthRxStatistics;
66 varbinds[0].len_oid = sizeof(EthRxStatistics);
67 varbinds[1].oid = EthTxStatistics;
68 varbinds[1].len_oid = sizeof(EthTxStatistics);
71 // varbinds[0].value = EthRxStatistics;
72 varbinds[0].len_val = 0;
73 varbinds[0].type = NULL_VALUE;
74 // varbinds[1].value = EthTxStatistics;
75 varbinds[1].len_val = 0;
76 varbinds[1].type = NULL_VALUE;
78 if (wait_mode == WAIT_FOREVER)
81 if (snmp(varbinds, 2, GET) < 2) {
82 print_helperr(ERR_RET);
87 if (wait_mode == WAIT_FOREVER)
90 if (varbinds[0].len_val == 64) {
94 (struct EthRxStatistics_s *) malloc(varbinds[0].
96 memcpy(EthRxStat, varbinds[0].value, varbinds[0].len_val);
98 print_helperr(_("EthRxStat packet error. Press any key."));
103 if (varbinds[1].len_val == 56) {
107 (struct EthTxStatistics_s *) malloc(varbinds[1].
109 memcpy(EthTxStat, varbinds[1].value, varbinds[1].len_val);
111 print_helperr(_("EthTxStat packet error. Press any key."));
115 mvwaddstr(main_sub, 1, 2, _("Received:"));
116 mvwaddstr(main_sub, 1, 30, _("Transmitted:"));
117 sprintf(message, "TotalBytes %10u TotalBytes %10u",
118 swap4(EthRxStat->TotalBytesRx),
119 swap4(EthTxStat->TotalBytesTx));
120 mvwaddstr(main_sub, 3, 2, message);
121 sprintf(message, "TotalPackets %10u TotalPackets %10u",
122 swap4(EthRxStat->TotalPacketsRx),
123 swap4(EthTxStat->TotalPacketsTx));
124 mvwaddstr(main_sub, 4, 2, message);
125 sprintf(message, "PacketCRCError %10u PacketCRCError %10u",
126 swap4(EthRxStat->PacketCRCErrorRx),
127 swap4(EthTxStat->PacketCRCErrorTx));
128 mvwaddstr(main_sub, 5, 2, message);
129 sprintf(message, "FalseCarrier %10u",
130 swap4(EthRxStat->FalseCarrierRx));
131 mvwaddstr(main_sub, 6, 2, message);
133 sprintf(message, "MulticastPacket %10u MulticastPacket %10u",
134 swap4(EthRxStat->MulticastPacketRx),
135 swap4(EthTxStat->MulticastPacketTx));
136 mvwaddstr(main_sub, 7, 2, message);
137 sprintf(message, "BroadcastPacket %10u BroadcastPacket %10u",
138 swap4(EthRxStat->BroadcastPacketRx),
139 swap4(EthTxStat->BroadcastPacketTx));
140 mvwaddstr(main_sub, 8, 2, message);
142 sprintf(message, "ControlFrames %10u UnicastPacket %10u",
143 swap4(EthRxStat->ControlFramesRx),
144 swap4(EthTxStat->UnicastPacketTx));
145 mvwaddstr(main_sub, 9, 2, message);
146 sprintf(message, "PauseFrames %10u PauseFrames %10u",
147 swap4(EthRxStat->PauseFramesRx),
148 swap4(EthTxStat->PauseFramesTx));
149 mvwaddstr(main_sub, 10, 2, message);
151 sprintf(message, "UnknownOPCode %10u SingleDeferPacket %10u",
152 swap4(EthRxStat->UnknownOPCodeRx),
153 swap4(EthTxStat->SingleDeferPacketTx));
154 mvwaddstr(main_sub, 11, 2, message);
155 sprintf(message, "AlignmentError %10u MultiDeferPackets %10u",
156 swap4(EthRxStat->AlignmentRxError),
157 swap4(EthTxStat->MultiDeferPacketsTx));
158 mvwaddstr(main_sub, 12, 2, message);
159 sprintf(message, "LengthOutOfRange %10u",
160 swap4(EthRxStat->LengthOutOfRangeRx));
161 mvwaddstr(main_sub, 13, 2, message);
162 sprintf(message, "CodeError %10u SingleCollisions %10u",
163 swap4(EthRxStat->CodeErrorRx),
164 swap4(EthTxStat->SingleCollisionsTx));
165 mvwaddstr(main_sub, 14, 2, message);
166 sprintf(message, "TotalFragments %10u MultiCollisions %10u",
167 swap4(EthRxStat->TotalFragmentsRx),
168 swap4(EthTxStat->MultiCollisionsTx));
169 mvwaddstr(main_sub, 15, 2, message);
170 sprintf(message, "OversizePackets %10u LateCollisions %10u",
171 swap4(EthRxStat->OversizePacketsRx),
172 swap4(EthTxStat->LateCollisionsTx));
173 mvwaddstr(main_sub, 16, 2, message);
174 sprintf(message, "UndersizePackets %10u ExcessiveCollision %10u",
175 swap4(EthRxStat->UndersizePacketsRx),
176 swap4(EthTxStat->ExcessiveCollisionTx));
177 mvwaddstr(main_sub, 17, 2, message);
178 sprintf(message, "TotalJabber %10u TotalCollisions %10u",
179 swap4(EthRxStat->TotalJabberRx),
180 swap4(EthTxStat->TotalCollisionsTx));
181 mvwaddstr(main_sub, 18, 2, message);
194 wait_mode = (wait_mode == WAIT_FOREVER ?
195 WAIT_TIMEOUT : WAIT_FOREVER);
196 print_top(wait_mode == WAIT_TIMEOUT ? POLL_ON : POLL_OFF,
200 /* either timeout for user input (i == 0) or invalid key => continue */
210 print_top(NULL, NULL);
217 struct wirelessStatistics_s *WirelessStat = NULL;
219 char wirelessStatistics[] = {
220 0x2B, 0x06, 0x01, 0x04, 0x01, 0x83, 0x1A, 0x01, 0x02, 0x03, 0x01, 0x00
227 if (ap_type == ATMEL12350) {
228 wirelessStatistics[5] = 0xE0;
229 wirelessStatistics[6] = 0x3E;
232 print_top(wait_mode == WAIT_TIMEOUT ? POLL_ON : POLL_OFF, W_STAT);
235 if (wait_mode == WAIT_TIMEOUT)
238 varbinds[0].oid = wirelessStatistics;
239 varbinds[0].len_oid = sizeof(wirelessStatistics);
242 varbinds[0].value = wirelessStatistics;
243 varbinds[0].len_val = 0;
244 varbinds[0].type = NULL_VALUE;
246 if (wait_mode == WAIT_FOREVER)
247 print_help(WAIT_RET);
249 if (snmp(varbinds, 1, GET) <= 0) {
250 print_helperr(ERR_RET);
255 if (wait_mode == WAIT_FOREVER)
258 if (varbinds[0].len_val == 88 || varbinds[0].len_val == 104) {
260 * 88 ... using traditional ATMEL 12350 MIB
261 * 104 .. using functionally enhanced ATMEL 12350 MIB by EZYNET
266 (struct wirelessStatistics_s *) malloc(varbinds[0].len_val);
267 memcpy(WirelessStat, varbinds[0].value, varbinds[0].len_val);
270 (_("WirelessStat packet error. Press any key."));
276 "UnicastPacketsTx %10u UnicastPacketsRx %10u",
277 swap4(WirelessStat->UnicastTransmittedPackets),
278 swap4(WirelessStat->UnicastReceivedPackets));
279 mvwaddstr(main_sub, 1, 1, message);
281 "BroadcastPacketsTx %10u BroadcastPacketsRx %10u",
282 swap4(WirelessStat->BroadcastTransmittedPackets),
283 swap4(WirelessStat->BroadcastReceivedPackets));
284 mvwaddstr(main_sub, 2, 1, message);
286 "MulticastPacketsTx %10u MulticastPacketsRx %10u",
287 swap4(WirelessStat->MulticastTransmittedPackets),
288 swap4(WirelessStat->MulticastReceivedPackets));
289 mvwaddstr(main_sub, 3, 1, message);
291 "BeaconTx %10u BeaconRx %10u",
292 swap4(WirelessStat->TransmittedBeacon),
293 swap4(WirelessStat->ReceivedBeacon));
294 mvwaddstr(main_sub, 4, 1, message);
296 "ACKTx %10u ACKRx %10u",
297 swap4(WirelessStat->TransmittedACK),
298 swap4(WirelessStat->ReceivedACK));
299 mvwaddstr(main_sub, 5, 1, message);
301 "RTSTx %10u RTSRx %10u",
302 swap4(WirelessStat->TransmittedRTS),
303 swap4(WirelessStat->ReceivedRTS));
304 mvwaddstr(main_sub, 6, 1, message);
306 "CTSTx %10u CTSRx %10u",
307 swap4(WirelessStat->TransmittedCTS),
308 swap4(WirelessStat->ReceivedCTS));
309 mvwaddstr(main_sub, 7, 1, message);
310 sprintf(message, "ACKFailure %10u",
311 swap4(WirelessStat->ACKFailure));
312 mvwaddstr(main_sub, 8, 1, message);
313 sprintf(message, "CTSFailure %10u",
314 swap4(WirelessStat->CTSFailure));
315 mvwaddstr(main_sub, 9, 1, message);
316 sprintf(message, "RetryPackets %10u",
317 swap4(WirelessStat->RetryPackets));
318 mvwaddstr(main_sub, 10, 1, message);
319 sprintf(message, "ReceivedDuplicate %10u",
320 swap4(WirelessStat->ReceivedDuplicate));
321 mvwaddstr(main_sub, 11, 1, message);
322 sprintf(message, "FailedPackets %10u",
323 swap4(WirelessStat->FailedPackets));
324 mvwaddstr(main_sub, 12, 1, message);
325 sprintf(message, "AgedPackets %10u",
326 swap4(WirelessStat->AgedPackets));
327 mvwaddstr(main_sub, 13, 1, message);
328 sprintf(message, "FCSError %10u",
329 swap4(WirelessStat->FCSError));
330 mvwaddstr(main_sub, 14, 1, message);
331 sprintf(message, "InvalidPLCP %10u",
332 swap4(WirelessStat->InvalidPLCP));
333 mvwaddstr(main_sub, 15, 1, message);
335 /* ATMEL12350 MIB EZYNET modification has in addition the following */
336 if (varbinds[0].len_val == 104) {
337 mvwaddstr(main_sub, 16, 1, "TransmittedPackets:");
338 sprintf(message, "* at 11 Mbps %10u",
339 swap4(WirelessStat->TransmittedPackets_11Mbps));
340 mvwaddstr(main_sub, 17, 1, message);
341 sprintf(message, "* at 5.5 Mbps %10u",
342 swap4(WirelessStat->TransmittedPackets_55Mbps));
343 mvwaddstr(main_sub, 18, 1, message);
344 sprintf(message, "* at 2 Mbps %10u",
345 swap4(WirelessStat->TransmittedPackets_2Mbps));
346 mvwaddstr(main_sub, 19, 1, message);
347 sprintf(message, "* at 1 Mbps %10u",
348 swap4(WirelessStat->TransmittedPackets_1Mbps));
349 mvwaddstr(main_sub, 20, 1, message);
363 wait_mode = (wait_mode == WAIT_FOREVER ?
364 WAIT_TIMEOUT : WAIT_FOREVER);
365 print_top(wait_mode == WAIT_TIMEOUT ? POLL_ON : POLL_OFF,
369 /* either timeout for user input (i == 0) or invalid key => continue */
376 print_top(NULL, NULL);
381 void nwn_wireless_stat()
383 char oid_dot11TransmittedFragmentCount[] =
384 { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x02, 0x02, 0x01, 0x01, 0x01 };
385 char oid_dot11MulticastTransmittedFrameCount[] =
386 { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x02, 0x02, 0x01, 0x02, 0x01 };
387 char oid_dot11FailedCount[] =
388 { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x02, 0x02, 0x01, 0x03, 0x01 };
389 char oid_dot11RetryCount[] =
390 { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x02, 0x02, 0x01, 0x04, 0x01 };
391 char oid_dot11MultipleRetryCount[] =
392 { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x02, 0x02, 0x01, 0x05, 0x01 };
393 char oid_dot11FrameDuplicateCount[] =
394 { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x02, 0x02, 0x01, 0x06, 0x01 };
395 char oid_dot11RTSSuccessCount[] =
396 { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x02, 0x02, 0x01, 0x07, 0x01 };
397 char oid_dot11RTSFailureCount[] =
398 { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x02, 0x02, 0x01, 0x08, 0x01 };
399 char oid_dot11ACKFailureCount[] =
400 { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x02, 0x02, 0x01, 0x09, 0x01 };
401 char oid_dot11ReceivedFragmentCount[] =
402 { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x02, 0x02, 0x01, 0x0a, 0x01 };
403 char oid_dot11MulticastReceivedFrameCount[] =
404 { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x02, 0x02, 0x01, 0x0b, 0x01 };
405 char oid_dot11FCSErrorCount[] =
406 { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x02, 0x02, 0x01, 0x0c, 0x01 };
407 char oid_dot11TransmittedFrameCount[] =
408 { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x02, 0x02, 0x01, 0x0d, 0x01 };
409 char oid_dot11WEPUndecryptableCount[] =
410 { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x02, 0x02, 0x01, 0x0e, 0x01 };
411 char oid_dot11WEPICVErrorCount[] =
412 { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x01, 0x05, 0x01, 0x05, 0x01 };
413 char oid_dot11WEPExcludedCount[] =
414 { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x01, 0x05, 0x01, 0x06, 0x01 };
419 varbind varbinds[16];
422 print_top(wait_mode == WAIT_TIMEOUT ? POLL_ON : POLL_OFF, W_STAT);
425 if (wait_mode == WAIT_TIMEOUT)
428 varbinds[0].oid = oid_dot11TransmittedFragmentCount;
429 varbinds[0].len_oid = sizeof(oid_dot11TransmittedFragmentCount);
430 varbinds[1].oid = oid_dot11MulticastTransmittedFrameCount;
431 varbinds[1].len_oid = sizeof(oid_dot11MulticastTransmittedFrameCount);
432 varbinds[2].oid = oid_dot11FailedCount;
433 varbinds[2].len_oid = sizeof(oid_dot11FailedCount);
434 varbinds[3].oid = oid_dot11RetryCount;
435 varbinds[3].len_oid = sizeof(oid_dot11RetryCount);
436 varbinds[4].oid = oid_dot11MultipleRetryCount;
437 varbinds[4].len_oid = sizeof(oid_dot11MultipleRetryCount);
438 varbinds[5].oid = oid_dot11FrameDuplicateCount;
439 varbinds[5].len_oid = sizeof(oid_dot11FrameDuplicateCount);
440 varbinds[6].oid = oid_dot11RTSSuccessCount;
441 varbinds[6].len_oid = sizeof(oid_dot11RTSSuccessCount);
442 varbinds[7].oid = oid_dot11RTSFailureCount;
443 varbinds[7].len_oid = sizeof(oid_dot11RTSFailureCount);
444 varbinds[8].oid = oid_dot11ACKFailureCount;
445 varbinds[8].len_oid = sizeof(oid_dot11ACKFailureCount);
446 varbinds[9].oid = oid_dot11ReceivedFragmentCount;
447 varbinds[9].len_oid = sizeof(oid_dot11ReceivedFragmentCount);
448 varbinds[10].oid = oid_dot11MulticastReceivedFrameCount;
449 varbinds[10].len_oid = sizeof(oid_dot11MulticastReceivedFrameCount);
450 varbinds[11].oid = oid_dot11FCSErrorCount;
451 varbinds[11].len_oid = sizeof(oid_dot11FCSErrorCount);
452 varbinds[12].oid = oid_dot11TransmittedFrameCount;
453 varbinds[12].len_oid = sizeof(oid_dot11TransmittedFrameCount);
454 varbinds[13].oid = oid_dot11WEPUndecryptableCount;
455 varbinds[13].len_oid = sizeof(oid_dot11WEPUndecryptableCount);
456 varbinds[14].oid = oid_dot11WEPICVErrorCount;
457 varbinds[14].len_oid = sizeof(oid_dot11WEPICVErrorCount);
458 varbinds[15].oid = oid_dot11WEPExcludedCount;
459 varbinds[15].len_oid = sizeof(oid_dot11WEPExcludedCount);
462 for (i = 0; i < 16; i++) {
463 varbinds[i].value = oid_dot11TransmittedFragmentCount;
464 varbinds[i].len_val = 0;
465 varbinds[i].type = 0x05;
468 if (wait_mode == WAIT_FOREVER)
469 print_help(WAIT_RET);
471 if (snmp(varbinds, 16, GET) < 16) {
472 print_helperr(ERR_RET);
477 if (wait_mode == WAIT_FOREVER)
480 sprintf(message, "FragmentTx %10lu FragmentRx %10lu",
481 (long) swap4(*varbinds[0].value), (long) swap4(*varbinds[9].value));
482 mvwaddstr(main_sub, 1, 1, message);
483 sprintf(message, "TransmittedFrame %10lu",
484 (long) swap4(*varbinds[12].value));
485 mvwaddstr(main_sub, 2, 1, message);
486 sprintf(message, "MulticasFrameTx %10lu MulticastFrameRx %10lu",
487 (long) swap4(*varbinds[1].value), (long) swap4(*varbinds[10].value));
488 mvwaddstr(main_sub, 3, 1, message);
489 sprintf(message, "WEPUndecryptable %10lu WEPExcluded %10lu",
490 (long) swap4(*varbinds[13].value), (long) swap4(*varbinds[15].value));
491 mvwaddstr(main_sub, 4, 1, message);
492 sprintf(message, "RTSSuccess %10lu RTSFailure %10lu",
493 (long) swap4(*varbinds[6].value), (long) swap4(*varbinds[7].value));
494 mvwaddstr(main_sub, 5, 1, message);
495 sprintf(message, "ACKFailure %10lu",
496 (long) swap4(*varbinds[8].value));
497 mvwaddstr(main_sub, 6, 1, message);
498 sprintf(message, "Retry %10lu MultipleRetry %10lu",
499 (long) swap4(*varbinds[3].value), (long) swap4(*varbinds[4].value));
500 mvwaddstr(main_sub, 7, 1, message);
501 sprintf(message, "FrameDuplicate %10lu",
502 (long) swap4(*varbinds[5].value));
503 mvwaddstr(main_sub, 8, 1, message);
504 sprintf(message, "Failed %10lu",
505 (long) swap4(*varbinds[2].value));
506 mvwaddstr(main_sub, 9, 1, message);
507 sprintf(message, "FCSError %10lu WEPICVError %10lu",
508 (long) swap4(*(varbinds[11].value)),
509 (long) swap4(*(varbinds[14].value)));
510 mvwaddstr(main_sub, 10, 1, message);
523 wait_mode = (wait_mode == WAIT_FOREVER ?
524 WAIT_TIMEOUT : WAIT_FOREVER);
525 print_top(wait_mode == WAIT_TIMEOUT ? POLL_ON : POLL_OFF,
529 /* either timeout for user input (i == 0) or invalid key => continue */
534 print_top(NULL, NULL);