stat_fe.c (24776B)
1 /* 2 * 3 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 4 * 5 * Copyright 2007-2019 Broadcom Inc. All rights reserved. 6 */ 7 8 #include <soc/drv.h> 9 #include <soc/counter.h> 10 #include <soc/debug.h> 11 #include <shared/bsl.h> 12 #include <bcm/stat.h> 13 #include <bcm/error.h> 14 15 #include <bcm_int/esw/stat.h> 16 17 #include <bcm_int/esw_dispatch.h> 18 19 #define FE_CNTR(_fe) (_fe) 20 21 /* 22 * Function: 23 * _bcm_stat_fe_get 24 * Description: 25 * Get the specified statistic for a FE port or GE port in 10/100 Mb 26 * mode on the StrataSwitch family of devices. 27 * Parameters: 28 * unit - StrataSwitch PCI device unit number (driver internal). 29 * port - zero-based port number 30 * sync_mode - if 1 read hw counter else sw accumualated counter 31 * type - SNMP statistics type (see stat.h) 32 * val - (OUT) 64 bit statistic counter value 33 * Returns: 34 * BCM_E_NONE - Success. 35 * BCM_E_PARAM - Illegal parameter. 36 * BCM_E_INTERNAL - Chip access failure. 37 */ 38 int 39 _bcm_stat_fe_get_set(int unit, bcm_port_t port, int sync_mode, 40 int stat_op, bcm_stat_val_t type, uint64 *val) 41 { 42 uint64 count, count1; 43 int reg_op = (stat_op == _BCM_STAT_GET)? _BCM_STAT_REG_ADD: 44 _BCM_STAT_REG_CLEAR; 45 int reg_sub_op = (stat_op == _BCM_STAT_GET)? _BCM_STAT_REG_SUB: 46 _BCM_STAT_REG_CLEAR; 47 48 COMPILER_REFERENCE(&count); /* Work around PPC compiler bug */ 49 50 COMPILER_64_ZERO(count); 51 52 switch (type) { 53 /* *** RFC 1213 *** */ 54 55 case snmpIfInOctets: 56 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 57 FE_CNTR(RBYTr), &count); 58 break; 59 case snmpIfInUcastPkts: 60 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 61 FE_CNTR(RPKTr), &count); /* all pkts rcvd */ 62 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 63 FE_CNTR(RMCAr), &count); /* - multicast */ 64 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 65 FE_CNTR(RBCAr), &count); /* - broadcast */ 66 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 67 FE_CNTR(RALNr), &count); /* - bad FCS, dribble bit */ 68 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, FE_CNTR(RFCSr), 69 &count); /* - bad FCS, no dribble bit */ 70 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, FE_CNTR(RFLRr), 71 &count); /* - good FCS, bad length */ 72 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, FE_CNTR(RJBRr), 73 &count); /* - oversize, bad FCS */ 74 if (COUNT_OVR_ERRORS(unit)) { 75 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, FE_CNTR(ROVRr), 76 &count); /* - oversize, good FCS */ 77 } 78 break; 79 case snmpIfInNUcastPkts: /* Multicast frames plus broadcast frames */ 80 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 81 FE_CNTR(RMCAr), &count); 82 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 83 FE_CNTR(RBCAr), &count); 84 break; 85 case snmpIfInBroadcastPkts: /* broadcast frames */ 86 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 87 FE_CNTR(RBCAr), &count); 88 break; 89 case snmpIfInMulticastPkts: /* Multicast frames */ 90 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 91 FE_CNTR(RMCAr), &count); 92 break; 93 case snmpIfInDiscards: /* Dropped packets including aborted */ 94 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 95 FE_CNTR(RDISCr), &count); 96 break; 97 case snmpIfInErrors: /* received packts containing errors */ 98 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 99 FE_CNTR(RUNDr), &count); /* undersize, ok FCS */ 100 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 101 FE_CNTR(RFRGr), &count); /* ..., bad FCS */ 102 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 103 FE_CNTR(RFCSr), &count); /* FCS errors */ 104 if (COUNT_OVR_ERRORS(unit)) { 105 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 106 FE_CNTR(ROVRr), &count); /* oversize, ok FCS */ 107 } 108 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 109 FE_CNTR(RJBRr), &count); /* ..., bad FCS */ 110 break; 111 case snmpIfInUnknownProtos: 112 /* always 0 */ 113 break; 114 case snmpIfOutOctets: /* TX bytes */ 115 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 116 FE_CNTR(TBYTr), &count); 117 break; 118 case snmpIfOutUcastPkts: /* ALL - mcast - bcast */ 119 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 120 FE_CNTR(TPKTr), &count); 121 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 122 FE_CNTR(TMCAr), &count); 123 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 124 FE_CNTR(TBCAr), &count); 125 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 126 FE_CNTR(TFCSr), &count); /* bad FCS */ 127 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 128 FE_CNTR(TJBRr), &count); /* oversize, bad FCS */ 129 if (COUNT_OVR_ERRORS(unit)) { 130 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 131 FE_CNTR(TOVRr), &count); /* oversize, good FCS */ 132 } 133 break; 134 case snmpIfOutNUcastPkts: /* broadcast frames plus multicast frames */ 135 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 136 FE_CNTR(TMCAr), &count); 137 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 138 FE_CNTR(TBCAr), &count); 139 break; 140 case snmpIfOutBroadcastPkts: /* broadcast frames */ 141 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 142 FE_CNTR(TBCAr), &count); 143 break; 144 case snmpIfOutMulticastPkts: /* multicast frames */ 145 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 146 FE_CNTR(TMCAr), &count); 147 break; 148 case snmpIfOutDiscards: 149 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 150 FE_CNTR(TEDFr), &count); /* multiple deferral */ 151 _bcm_stat_counter_extra_get(unit, EGRDROPPKTCOUNTr, port, &count1); 152 COMPILER_64_ADD_64(count, count1); 153 /* other causes of discards? */ 154 break; 155 case snmpIfOutErrors: 156 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 157 FE_CNTR(TXCLr), &count); /* excessive coll */ 158 break; 159 case snmpIfOutQLen: { 160 uint32 qcount; 161 if (bcm_esw_port_queued_count_get(unit, port, &qcount) >= 0) { 162 COMPILER_64_ADD_32(count, qcount); 163 } 164 } 165 break; 166 case snmpIpInReceives: 167 /* XGS2 specific */ 168 break; 169 case snmpIpInHdrErrors: 170 break; 171 case snmpIpForwDatagrams: 172 /* XGS2 specific */ 173 break; 174 case snmpIpInDiscards: 175 /* XGS2 specific */ 176 break; 177 178 /* *** RFC 1493 *** */ 179 180 case snmpDot1dBasePortDelayExceededDiscards: 181 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 182 FE_CNTR(TEDFr), &count); /* multiple deferral */ 183 break; 184 case snmpDot1dBasePortMtuExceededDiscards: 185 if (COUNT_OVR_ERRORS(unit)) { 186 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 187 FE_CNTR(ROVRr), &count); 188 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 189 FE_CNTR(TOVRr), &count); 190 } 191 break; 192 case snmpDot1dTpPortInFrames: 193 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 194 FE_CNTR(RPKTr), &count); 195 break; 196 case snmpDot1dTpPortOutFrames: 197 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 198 FE_CNTR(TPKTr), &count); 199 break; 200 case snmpDot1dPortInDiscards: 201 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 202 FE_CNTR(RDISCr), &count); 203 break; 204 205 /* *** RFC 1757 *** */ 206 207 case snmpEtherStatsDropEvents: 208 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 209 FE_CNTR(RDISCr), &count); 210 break; 211 case snmpEtherStatsOctets: 212 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 213 FE_CNTR(RBYTr), &count); 214 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 215 FE_CNTR(TBYTr), &count); 216 break; 217 case snmpEtherStatsPkts: 218 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 219 FE_CNTR(RPKTr), &count); 220 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 221 FE_CNTR(TPKTr), &count); 222 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 223 FE_CNTR(RUNDr), &count); /* Runt packets */ 224 break; 225 case snmpEtherStatsBroadcastPkts: 226 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 227 FE_CNTR(RBCAr), &count); 228 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 229 FE_CNTR(TBCAr), &count); 230 break; 231 case snmpEtherStatsMulticastPkts: 232 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 233 FE_CNTR(RMCAr), &count); 234 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 235 FE_CNTR(TMCAr), &count); 236 break; 237 case snmpEtherStatsCRCAlignErrors: /* CRC errors + alignment errors */ 238 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 239 FE_CNTR(RFCSr), &count); 240 break; 241 case snmpEtherStatsUndersizePkts: /* Undersize frames */ 242 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 243 FE_CNTR(RUNDr), &count); 244 break; 245 case snmpEtherStatsOversizePkts: 246 if (soc_feature(unit, soc_feature_stat_jumbo_adj)) { 247 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 248 FE_CNTR(ROVRr), &count); 249 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 250 FE_CNTR(TOVRr), &count); 251 } else { 252 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 253 FE_CNTR(RJBRr), &count); 254 } 255 break; 256 case snmpEtherRxOversizePkts: 257 if (soc_feature(unit, soc_feature_stat_jumbo_adj)) { 258 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 259 FE_CNTR(ROVRr), &count); 260 } 261 break; 262 case snmpEtherTxOversizePkts: 263 if (soc_feature(unit, soc_feature_stat_jumbo_adj)) { 264 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 265 FE_CNTR(TOVRr), &count); 266 } 267 break; 268 case snmpEtherStatsFragments: 269 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 270 FE_CNTR(RFRGr), &count); 271 if (SOC_REG_IS_VALID(unit,TFRGr)) { 272 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 273 FE_CNTR(TFRGr), &count); 274 } 275 break; 276 case snmpEtherStatsJabbers: 277 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 278 FE_CNTR(RJBRr), &count); 279 break; 280 case snmpEtherStatsCollisions: 281 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 282 FE_CNTR(TNCLr), &count); 283 break; 284 case snmpEtherStatsPkts64Octets: 285 case snmpEtherStatsPkts65to127Octets: 286 case snmpEtherStatsPkts128to255Octets: 287 case snmpEtherStatsPkts256to511Octets: 288 case snmpEtherStatsPkts512to1023Octets: 289 /* XGS2 specific */ 290 break; 291 case snmpEtherStatsPkts1024to1518Octets: 292 break; 293 294 /* *** not actually in rfc1757 *** */ 295 296 case snmpBcmEtherStatsPkts1519to1522Octets: 297 case snmpBcmEtherStatsPkts1522to2047Octets: 298 case snmpBcmEtherStatsPkts2048to4095Octets: 299 case snmpBcmEtherStatsPkts4095to9216Octets: 300 case snmpBcmEtherStatsPkts9217to16383Octets: 301 case snmpBcmReceivedPkts64Octets: 302 case snmpBcmReceivedPkts65to127Octets: 303 case snmpBcmReceivedPkts128to255Octets: 304 case snmpBcmReceivedPkts256to511Octets: 305 case snmpBcmReceivedPkts512to1023Octets: 306 case snmpBcmReceivedPkts1024to1518Octets: 307 case snmpBcmReceivedPkts1519to2047Octets: 308 case snmpBcmReceivedPkts2048to4095Octets: 309 case snmpBcmReceivedPkts4095to9216Octets: 310 case snmpBcmReceivedPkts9217to16383Octets: 311 case snmpBcmTransmittedPkts64Octets: 312 case snmpBcmTransmittedPkts65to127Octets: 313 case snmpBcmTransmittedPkts128to255Octets: 314 case snmpBcmTransmittedPkts256to511Octets: 315 case snmpBcmTransmittedPkts512to1023Octets: 316 case snmpBcmTransmittedPkts1024to1518Octets: 317 case snmpBcmTransmittedPkts1519to2047Octets: 318 case snmpBcmTransmittedPkts2048to4095Octets: 319 case snmpBcmTransmittedPkts4095to9216Octets: 320 case snmpBcmTransmittedPkts9217to16383Octets: 321 break; 322 323 case snmpEtherStatsTXNoErrors: 324 /* TPKT - (TNCL + TOVR + TFRG + TUND) */ 325 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 326 FE_CNTR(TPKTr), &count); /* All Packets */ 327 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 328 FE_CNTR(TNCLr), &count); /* collision */ 329 if (COUNT_OVR_ERRORS(unit)) { 330 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 331 FE_CNTR(TOVRr), &count); /* Oversize */ 332 } 333 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 334 FE_CNTR(TFRGr), &count); /* Fragments */ 335 break; 336 case snmpEtherStatsRXNoErrors: 337 /* RPKT - ( RFCS + RXUO + ROVR + RFLR) */ 338 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 339 FE_CNTR(RPKTr), &count); 340 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 341 FE_CNTR(RFCSr), &count); 342 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 343 FE_CNTR(RXUOr), &count); 344 if (COUNT_OVR_ERRORS(unit)) { 345 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 346 FE_CNTR(ROVRr), &count); 347 } 348 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 349 FE_CNTR(RFLRr), &count); 350 break; 351 352 /* *** RFC 2665 *** */ 353 354 case snmpDot3StatsAlignmentErrors: 355 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 356 FE_CNTR(RALNr), &count); 357 break; 358 case snmpDot3StatsFCSErrors: 359 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 360 FE_CNTR(RFCSr), &count); 361 break; 362 case snmpDot3StatsSingleCollisionFrames: 363 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 364 FE_CNTR(TSCLr), &count); 365 break; 366 case snmpDot3StatsMultipleCollisionFrames: 367 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 368 FE_CNTR(TMCLr), &count); 369 break; 370 case snmpDot3StatsSQETTestErrors: 371 /* always 0 */ 372 break; 373 case snmpDot3StatsDeferredTransmissions: 374 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 375 FE_CNTR(TDFRr), &count); 376 break; 377 case snmpDot3StatsLateCollisions: 378 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 379 FE_CNTR(TLCLr), &count); 380 break; 381 case snmpDot3StatsExcessiveCollisions: 382 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 383 FE_CNTR(TXCLr), &count); 384 break; 385 case snmpDot3StatsInternalMacTransmitErrors: 386 /* always 0 */ 387 break; 388 case snmpDot3StatsCarrierSenseErrors: 389 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 390 FE_CNTR(RFCRr), &count); 391 break; 392 case snmpDot3StatsFrameTooLongs: 393 if (soc_feature(unit, soc_feature_stat_jumbo_adj)) { 394 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 395 FE_CNTR(ROVRr), &count); 396 } else { 397 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 398 FE_CNTR(RJBRr), &count); 399 } 400 break; 401 case snmpDot3StatsInternalMacReceiveErrors: 402 /* always 0 */ 403 break; 404 case snmpDot3StatsSymbolErrors: 405 /* XGS2 specific */ 406 break; 407 case snmpDot3ControlInUnknownOpcodes: 408 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 409 FE_CNTR(RXUOr), &count); 410 break; 411 case snmpDot3InPauseFrames: 412 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 413 FE_CNTR(RXPFr), &count); 414 break; 415 case snmpDot3OutPauseFrames: 416 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 417 FE_CNTR(TXPFr), &count); 418 break; 419 420 /* *** RFC 2233 high capacity versions of RFC1213 objects *** */ 421 422 case snmpIfHCInOctets: 423 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 424 FE_CNTR(RBYTr), &count); 425 break; 426 case snmpIfHCInUcastPkts: 427 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 428 FE_CNTR(RPKTr), &count); /* all pkts rcvd */ 429 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 430 FE_CNTR(RMCAr), &count); /* - multicast */ 431 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 432 FE_CNTR(RBCAr), &count); /* - broadcast */ 433 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 434 FE_CNTR(RALNr), &count); /* - bad FCS, dribble bit */ 435 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, FE_CNTR(RFCSr), 436 &count); /* - bad FCS, no dribble bit */ 437 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 438 FE_CNTR(RFLRr), &count); /* - good FCS, bad length */ 439 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 440 FE_CNTR(RJBRr), &count); /* - oversize, bad FCS */ 441 if (COUNT_OVR_ERRORS(unit)) { 442 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, FE_CNTR(ROVRr), 443 &count); /* - oversize, good FCS */ 444 } 445 break; 446 case snmpIfHCInMulticastPkts: 447 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 448 FE_CNTR(RMCAr), &count); 449 break; 450 case snmpIfHCInBroadcastPkts: 451 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 452 FE_CNTR(RBCAr), &count); 453 break; 454 case snmpIfHCOutOctets: 455 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 456 FE_CNTR(TBYTr), &count); 457 break; 458 case snmpIfHCOutUcastPkts: 459 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 460 FE_CNTR(TPKTr), &count); 461 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 462 FE_CNTR(TMCAr), &count); 463 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 464 FE_CNTR(TBCAr), &count); 465 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 466 FE_CNTR(TFCSr), &count); /* bad FCS */ 467 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 468 FE_CNTR(TJBRr), &count); /* oversize, bad FCS */ 469 if (COUNT_OVR_ERRORS(unit)) { 470 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 471 FE_CNTR(TOVRr), &count); /* oversize, good FCS */ 472 } 473 break; 474 case snmpIfHCOutMulticastPkts: 475 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 476 FE_CNTR(TMCAr), &count); 477 break; 478 case snmpIfHCOutBroadcastPckts: 479 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 480 FE_CNTR(TBCAr), &count); 481 break; 482 483 /* *** RFC 2465 *** */ 484 485 case snmpIpv6IfStatsInReceives: 486 case snmpIpv6IfStatsInHdrErrors: 487 case snmpIpv6IfStatsInAddrErrors: 488 case snmpIpv6IfStatsInDiscards: 489 case snmpIpv6IfStatsOutForwDatagrams: 490 case snmpIpv6IfStatsOutDiscards: 491 case snmpIpv6IfStatsInMcastPkts: 492 case snmpIpv6IfStatsOutMcastPkts: 493 break; 494 495 /* *** RFC 1284 - unsupported in XGS *** */ 496 case snmpDot3StatsInRangeLengthError: 497 break; 498 499 /* *** RFC 4837 - unsupported in XGS *** */ 500 case snmpDot3OmpEmulationCRC8Errors: 501 case snmpDot3MpcpRxGate: 502 case snmpDot3MpcpRxRegister: 503 case snmpDot3MpcpTxRegRequest: 504 case snmpDot3MpcpTxRegAck: 505 case snmpDot3MpcpTxReport: 506 case snmpDot3EponFecCorrectedBlocks: 507 case snmpDot3EponFecUncorrectableBlocks: 508 break; 509 510 /* IPMC counters (broadcom XGS2 specific) */ 511 case snmpBcmIPMCBridgedPckts: 512 case snmpBcmIPMCRoutedPckts: 513 case snmpBcmIPMCInDroppedPckts: 514 case snmpBcmIPMCOutDroppedPckts: 515 break; 516 517 /* EA (broadcom specific) - unsupported in XGS */ 518 case snmpBcmPonInDroppedOctets: 519 case snmpBcmPonOutDroppedOctets: 520 case snmpBcmPonInDelayedOctets: 521 case snmpBcmPonOutDelayedOctets: 522 case snmpBcmPonInDelayedHundredUs: 523 case snmpBcmPonOutDelayedHundredUs: 524 case snmpBcmPonInFrameErrors: 525 case snmpBcmPonInOamFrames: 526 case snmpBcmPonOutOamFrames: 527 case snmpBcmPonOutUnusedOctets: 528 break; 529 530 case snmpFcmPortClass3RxFrames: 531 if (soc_feature(unit, soc_feature_fcoe)) { 532 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC3r, &count); 533 } else { 534 return BCM_E_UNAVAIL; 535 } 536 break; 537 538 case snmpFcmPortClass3TxFrames: 539 if (soc_feature(unit, soc_feature_fcoe)) { 540 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC6r, &count); 541 } else { 542 return BCM_E_UNAVAIL; 543 } 544 break; 545 546 case snmpFcmPortClass3Discards: 547 if (soc_feature(unit, soc_feature_fcoe)) { 548 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC4r, &count); 549 } else { 550 return BCM_E_UNAVAIL; 551 } 552 break; 553 554 case snmpFcmPortClass2RxFrames: 555 if (soc_feature(unit, soc_feature_fcoe)) { 556 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC5r, &count); 557 } else { 558 return BCM_E_UNAVAIL; 559 } 560 break; 561 562 case snmpFcmPortClass2TxFrames: 563 if (soc_feature(unit, soc_feature_fcoe)) { 564 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC7r, &count); 565 } else { 566 return BCM_E_UNAVAIL; 567 } 568 break; 569 570 case snmpFcmPortClass2Discards: 571 if (soc_feature(unit, soc_feature_fcoe)) { 572 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC6r, &count); 573 } else { 574 return BCM_E_UNAVAIL; 575 } 576 break; 577 578 case snmpFcmPortInvalidCRCs: 579 if (soc_feature(unit, soc_feature_fcoe)) { 580 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 581 EGR_FCOE_INVALID_CRC_FRAMESr, &count); 582 } else { 583 return BCM_E_UNAVAIL; 584 } 585 break; 586 587 case snmpFcmPortDelimiterErrors: 588 if (soc_feature(unit, soc_feature_fcoe)) { 589 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 590 EGR_FCOE_DELIMITER_ERROR_FRAMESr, &count); 591 } else { 592 return BCM_E_UNAVAIL; 593 } 594 break; 595 596 case snmpBcmTxE2ECCControlFrames: 597 if (SOC_REG_IS_VALID(unit, XTHOLr)) { 598 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, XTHOLr, 599 &count); 600 } 601 break; 602 603 case snmpBcmRxDot3LengthMismatches: 604 if (SOC_REG_IS_VALID(unit, RFLRr)) { 605 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, FE_CNTR(RFLRr), 606 &count); /* Good FCS, bad length */ 607 } else { 608 return BCM_E_UNAVAIL; 609 } 610 break; 611 612 default: 613 if (type < snmpValCount) { 614 return BCM_E_UNAVAIL; 615 } 616 LOG_VERBOSE(BSL_LS_SOC_COMMON, 617 (BSL_META_U(unit, 618 "bcm_stat_get: Statistic not supported: %d\n"), type)); 619 return BCM_E_PARAM; 620 } 621 622 if (stat_op == _BCM_STAT_GET) { 623 *val = count; 624 } 625 626 return BCM_E_NONE; 627 }