stat_clmib.c (27436B)
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 #include <bcm_int/esw/stat.h> 15 #include <bcm_int/esw_dispatch.h> 16 17 /* 18 * Function: 19 * bcmi_stat_clmib_get_set 20 * Description: 21 * Get the specified statistic for CL port with CLMIB counters. 22 * Parameters: 23 * unit - PCI device unit number (driver internal) 24 * port - zero-based port number 25 * sync_mode - if 1 read hw counter else sw accumualated counter 26 * type - SNMP statistics type (see stat.h) 27 * val - (OUT) 64 bit statistic counter value 28 * Returns: 29 * BCM_E_NONE - Success. 30 * BCM_E_PARAM - Illegal parameter. 31 * BCM_E_INTERNAL - Chip access failure. 32 */ 33 int 34 bcmi_stat_clmib_get_set(int unit, bcm_port_t port, 35 int sync_mode, int stat_op, 36 bcm_stat_val_t type, uint64 *val) 37 { 38 uint64 count, count1; 39 int reg_op = (stat_op == _BCM_STAT_GET)? _BCM_STAT_REG_ADD: 40 _BCM_STAT_REG_CLEAR; 41 int reg_sub_op = (stat_op == _BCM_STAT_GET)? _BCM_STAT_REG_SUB: 42 _BCM_STAT_REG_CLEAR; 43 44 COMPILER_REFERENCE(&count); /* Work around PPC compiler bug */ 45 COMPILER_64_ZERO(count); 46 47 switch (type) { 48 /* *** RFC 1213 *** */ 49 case snmpIfInOctets: 50 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RBYTr, &count); 51 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RRBYTr, &count); 52 break; 53 case snmpIfInUcastPkts: /* Unicast frames */ 54 if (COUNT_OVR_ERRORS(unit)) { 55 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 56 CLMIB_RUCAr, &count); /*unicast pkts rcvd */ 57 } else { 58 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 59 RUCr, &count); /* unicast pkts rcvd */ 60 } 61 break; 62 case snmpIfInNUcastPkts: /* Non-unicast frames */ 63 if (COUNT_OVR_ERRORS(unit)) { 64 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 65 CLMIB_RMCAr, &count); /* + multicast */ 66 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 67 CLMIB_RBCAr, &count); /* + broadcast */ 68 } else { 69 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 70 CLMIB_RUCAr, &count); /* + unicast excl */ 71 /* oversize */ 72 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 73 CLMIB_RMCAr, &count); /* + multicast */ 74 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 75 CLMIB_RBCAr, &count); /* + broadcast */ 76 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 77 CLMIB_ROVRr, &count); /* + oversize */ 78 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, 79 RUCr, &count); /* - unicast */ 80 } 81 break; 82 case snmpIfInBroadcastPkts: /* Broadcast frames */ 83 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RBCAr, &count); 84 break; 85 case snmpIfInMulticastPkts: /* Multicast frames */ 86 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RMCAr, &count); 87 break; 88 case snmpIfInDiscards: /* Dropped packets including aborted */ 89 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 90 RDBGC0r, &count); /* Ingress drop conditions */ 91 BCM_IF_ERROR_RETURN 92 (_bcm_stat_counter_non_dma_extra_get(unit, 93 SOC_COUNTER_NON_DMA_PORT_DROP_PKT_ING, 94 port, &count1)); 95 COMPILER_64_ADD_64(count, count1); 96 break; 97 case snmpIfInErrors: /* RX Errors or Receive packets - non-error frames */ 98 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RFCSr, &count); 99 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RJBRr, &count); 100 if (SOC_REG_IS_VALID(unit, CLMIB_RMTUEr)) { 101 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RMTUEr, &count); 102 } else if (COUNT_OVR_ERRORS(unit)) { 103 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_ROVRr, &count); 104 } 105 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RRPKTr, &count); 106 break; 107 case snmpIfInUnknownProtos: 108 break; 109 case snmpIfOutOctets: 110 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TBYTr, &count); 111 break; 112 case snmpIfOutUcastPkts: /* Unicast frames */ 113 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TUCAr, &count); 114 break; 115 case snmpIfOutNUcastPkts: /* Non-unicast frames */ 116 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 117 CLMIB_TMCAr, &count); /* + multicast */ 118 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 119 CLMIB_TBCAr, &count); /* + broadcast */ 120 break; 121 case snmpIfOutBroadcastPkts: /* Broadcast frames */ 122 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TBCAr, &count); 123 break; 124 case snmpIfOutMulticastPkts: /* Multicast frames */ 125 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TMCAr, &count); 126 break; 127 case snmpIfOutDiscards: /* Aged packet counter */ 128 if (SOC_REG_IS_VALID(unit, HOLDr)) { 129 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 130 HOLDr, &count); /* L2 MTU drops */ 131 } else if (SOC_REG_IS_VALID(unit, HOL_DROPr)) { 132 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, HOL_DROPr, &count); 133 } 134 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC3r, &count); 135 BCM_IF_ERROR_RETURN( 136 bcm_esw_cosq_stat_get(unit, port, BCM_COS_INVALID, 137 bcmCosqStatDroppedPackets, &count1)); 138 COMPILER_64_ADD_64(count, count1); 139 break; 140 case snmpIfOutErrors: /* Error packets could not be xmitted */ 141 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TERRr, &count); 142 break; 143 case snmpIfOutQLen: 144 { 145 uint32 qcount; 146 if (bcm_esw_port_queued_count_get(unit, port, &qcount) >= 0) { 147 COMPILER_64_ADD_32(count, qcount); 148 } 149 } 150 break; 151 case snmpIpInReceives: 152 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPC4r, &count); 153 break; 154 case snmpIpInHdrErrors: 155 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4r, &count); 156 break; 157 case snmpIpForwDatagrams: 158 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC4r, &count); 159 break; 160 case snmpIpInDiscards: 161 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE4r, &count); 162 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4r, &count); 163 break; 164 165 /* *** RFC 1493 *** */ 166 167 case snmpDot1dBasePortDelayExceededDiscards: 168 break; 169 case snmpDot1dBasePortMtuExceededDiscards: 170 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RMTUEr, &count); 171 break; 172 case snmpDot1dTpPortInFrames: 173 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPKTr, &count); 174 break; 175 case snmpDot1dTpPortOutFrames: 176 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TPKTr, &count); 177 break; 178 case snmpDot1dPortInDiscards: 179 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDISCr, &count); 180 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD4r, &count); 181 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count); 182 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RPORTDr, &count); 183 break; 184 185 /* *** RFC 1757 *** */ 186 187 case snmpEtherStatsDropEvents: 188 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDISCr, &count); 189 break; 190 case snmpEtherStatsOctets: 191 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RBYTr, &count); 192 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TBYTr, &count); 193 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 194 CLMIB_RRBYTr, &count); /* Runts bytes */ 195 break; 196 case snmpEtherStatsPkts: 197 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPKTr, &count); 198 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TPKTr, &count); 199 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 200 CLMIB_RRPKTr, &count); /* Runts */ 201 break; 202 case snmpEtherStatsBroadcastPkts: 203 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RBCAr, &count); 204 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TBCAr, &count); 205 break; 206 case snmpEtherStatsMulticastPkts: 207 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RMCAr, &count); 208 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TMCAr, &count); 209 break; 210 case snmpEtherStatsCRCAlignErrors: 211 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RFCSr, &count); 212 break; 213 case snmpEtherStatsUndersizePkts: 214 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RUNDr, &count); 215 break; 216 case snmpEtherStatsOversizePkts: 217 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_ROVRr, &count); 218 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TOVRr, &count); 219 break; 220 case snmpEtherRxOversizePkts: 221 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_ROVRr, &count); 222 break; 223 case snmpEtherTxOversizePkts: 224 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TOVRr, &count); 225 break; 226 case snmpEtherStatsFragments: 227 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RFRGr, &count); 228 break; 229 case snmpEtherStatsJabbers: 230 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RJBRr, &count); 231 break; 232 case snmpEtherStatsCollisions: 233 break; 234 235 /* *** rfc1757 definition counts receive packet only *** */ 236 237 case snmpEtherStatsPkts64Octets: 238 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R64r, &count); 239 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T64r, &count); 240 break; 241 case snmpEtherStatsPkts65to127Octets: 242 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R127r, &count); 243 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T127r, &count); 244 break; 245 case snmpEtherStatsPkts128to255Octets: 246 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R255r, &count); 247 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T255r, &count); 248 break; 249 case snmpEtherStatsPkts256to511Octets: 250 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R511r, &count); 251 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T511r, &count); 252 break; 253 case snmpEtherStatsPkts512to1023Octets: 254 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R1023r, &count); 255 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T1023r, &count); 256 break; 257 case snmpEtherStatsPkts1024to1518Octets: 258 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R1518r, &count); 259 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T1518r, &count); 260 break; 261 case snmpBcmEtherStatsPkts1519to1522Octets: /* not in rfc1757 */ 262 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RMGVr, &count); 263 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TMGVr, &count); 264 break; 265 case snmpBcmEtherStatsPkts1522to2047Octets: /* not in rfc1757 */ 266 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R2047r, &count); 267 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, CLMIB_RMGVr, &count); 268 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T2047r, &count); 269 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_sub_op, CLMIB_TMGVr, &count); 270 break; 271 case snmpBcmEtherStatsPkts2048to4095Octets: /* not in rfc1757 */ 272 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R4095r, &count); 273 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T4095r, &count); 274 break; 275 case snmpBcmEtherStatsPkts4095to9216Octets: /* not in rfc1757 */ 276 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R9216r, &count); 277 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T9216r, &count); 278 break; 279 case snmpBcmEtherStatsPkts9217to16383Octets: /* not in rfc1757 */ 280 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R16383r, &count); 281 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T16383r, &count); 282 break; 283 284 case snmpBcmReceivedPkts64Octets: 285 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R64r, &count); 286 break; 287 case snmpBcmReceivedPkts65to127Octets: 288 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R127r, &count); 289 break; 290 case snmpBcmReceivedPkts128to255Octets: 291 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R255r, &count); 292 break; 293 case snmpBcmReceivedPkts256to511Octets: 294 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R511r, &count); 295 break; 296 case snmpBcmReceivedPkts512to1023Octets: 297 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R1023r, &count); 298 break; 299 case snmpBcmReceivedPkts1024to1518Octets: 300 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R1518r, &count); 301 break; 302 case snmpBcmReceivedPkts1519to2047Octets: 303 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R2047r, &count); 304 break; 305 case snmpBcmReceivedPkts2048to4095Octets: 306 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R4095r, &count); 307 break; 308 case snmpBcmReceivedPkts4095to9216Octets: 309 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R9216r, &count); 310 break; 311 case snmpBcmReceivedPkts9217to16383Octets: 312 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_R16383r, &count); 313 break; 314 315 case snmpBcmTransmittedPkts64Octets: 316 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T64r, &count); 317 break; 318 case snmpBcmTransmittedPkts65to127Octets: 319 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T127r, &count); 320 break; 321 case snmpBcmTransmittedPkts128to255Octets: 322 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T255r, &count); 323 break; 324 case snmpBcmTransmittedPkts256to511Octets: 325 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T511r, &count); 326 break; 327 case snmpBcmTransmittedPkts512to1023Octets: 328 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T1023r, &count); 329 break; 330 case snmpBcmTransmittedPkts1024to1518Octets: 331 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T1518r, &count); 332 break; 333 case snmpBcmTransmittedPkts1519to2047Octets: 334 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T2047r, &count); 335 break; 336 case snmpBcmTransmittedPkts2048to4095Octets: 337 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T4095r, &count); 338 break; 339 case snmpBcmTransmittedPkts4095to9216Octets: 340 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T9216r, &count); 341 break; 342 case snmpBcmTransmittedPkts9217to16383Octets: 343 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_T16383r, &count); 344 break; 345 346 case snmpEtherStatsTXNoErrors: 347 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TPOKr, &count); 348 break; 349 case snmpEtherStatsRXNoErrors: 350 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPOKr, &count); 351 break; 352 353 /* *** RFC 2665 *** */ 354 355 case snmpDot3StatsAlignmentErrors: 356 break; 357 case snmpDot3StatsFCSErrors: 358 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RFCSr, &count); 359 break; 360 case snmpDot3StatsSingleCollisionFrames: 361 case snmpDot3StatsMultipleCollisionFrames: 362 case snmpDot3StatsSQETTestErrors: 363 case snmpDot3StatsDeferredTransmissions: 364 case snmpDot3StatsLateCollisions: 365 case snmpDot3StatsExcessiveCollisions: 366 break; 367 case snmpDot3StatsInternalMacTransmitErrors: 368 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TUFLr, &count); 369 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TERRr, &count); 370 break; 371 case snmpDot3StatsCarrierSenseErrors: 372 break; 373 case snmpDot3StatsFrameTooLongs: 374 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RMTUEr, &count); 375 break; 376 case snmpDot3StatsInternalMacReceiveErrors: 377 break; 378 case snmpDot3StatsSymbolErrors: 379 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RERPKTr, &count); 380 break; 381 case snmpDot3ControlInUnknownOpcodes: 382 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RXUOr, &count); 383 break; 384 case snmpDot3InPauseFrames: 385 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RXPFr, &count); 386 break; 387 case snmpDot3OutPauseFrames: 388 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TXPFr, &count); 389 break; 390 391 /* *** RFC 2233 high capacity versions of RFC1213 objects *** */ 392 393 case snmpIfHCInOctets: 394 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RBYTr, &count); 395 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RRBYTr, &count); 396 break; 397 case snmpIfHCInUcastPkts: 398 if (COUNT_OVR_ERRORS(unit)) { 399 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 400 CLMIB_RUCAr, &count); /* unicast pkts rcvd */ 401 } else { 402 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 403 RUCr, &count); /* unicast pkts rcvd */ 404 } 405 break; 406 case snmpIfHCInMulticastPkts: 407 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RMCAr, &count); 408 break; 409 case snmpIfHCInBroadcastPkts: 410 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RBCAr, &count); 411 break; 412 case snmpIfHCOutOctets: 413 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TBYTr, &count); 414 break; 415 case snmpIfHCOutUcastPkts: 416 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TUCAr, &count); 417 break; 418 case snmpIfHCOutMulticastPkts: 419 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TMCAr, &count); 420 break; 421 case snmpIfHCOutBroadcastPckts: 422 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TBCAr, &count); 423 break; 424 425 /* *** RFC 2465 *** */ 426 427 case snmpIpv6IfStatsInReceives: 428 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPC6r, &count); 429 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6r, &count); 430 break; 431 case snmpIpv6IfStatsInHdrErrors: 432 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count); 433 break; 434 case snmpIpv6IfStatsInAddrErrors: 435 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE6r, &count); 436 break; 437 case snmpIpv6IfStatsInDiscards: 438 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPHE6r, &count); 439 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RIPD6r, &count); 440 break; 441 case snmpIpv6IfStatsOutForwDatagrams: 442 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC0r, &count); 443 break; 444 case snmpIpv6IfStatsOutDiscards: 445 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC1r, &count); 446 break; 447 case snmpIpv6IfStatsInMcastPkts: 448 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6r, &count); 449 break; 450 case snmpIpv6IfStatsOutMcastPkts: 451 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC2r, &count); 452 break; 453 454 /* *** IEEE 802.1bb *** */ 455 case snmpIeee8021PfcRequests: 456 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TXPPr, &count); 457 break; 458 case snmpIeee8021PfcIndications: 459 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RXPPr, &count); 460 break; 461 462 /* *** RFC 1284 - unsupported in XGS *** */ 463 case snmpDot3StatsInRangeLengthError: 464 break; 465 466 /* *** RFC 4837 - unsupported in XGS *** */ 467 case snmpDot3OmpEmulationCRC8Errors: 468 case snmpDot3MpcpRxGate: 469 case snmpDot3MpcpRxRegister: 470 case snmpDot3MpcpTxRegRequest: 471 case snmpDot3MpcpTxRegAck: 472 case snmpDot3MpcpTxReport: 473 case snmpDot3EponFecCorrectedBlocks: 474 case snmpDot3EponFecUncorrectableBlocks: 475 break; 476 477 /* IPMC counters (broadcom specific) */ 478 479 case snmpBcmIPMCBridgedPckts: 480 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC1r, &count); 481 break; 482 case snmpBcmIPMCRoutedPckts: 483 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP4r, &count); 484 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, IMRP6r, &count); 485 break; 486 case snmpBcmIPMCInDroppedPckts: 487 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDBGC2r, &count); 488 break; 489 case snmpBcmIPMCOutDroppedPckts: 490 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDBGC5r, &count); 491 break; 492 493 /* EA (broadcom specific) - unsupported in XGS */ 494 case snmpBcmPonInDroppedOctets: 495 case snmpBcmPonOutDroppedOctets: 496 case snmpBcmPonInDelayedOctets: 497 case snmpBcmPonOutDelayedOctets: 498 case snmpBcmPonInDelayedHundredUs: 499 case snmpBcmPonOutDelayedHundredUs: 500 case snmpBcmPonInFrameErrors: 501 case snmpBcmPonInOamFrames: 502 case snmpBcmPonOutOamFrames: 503 case snmpBcmPonOutUnusedOctets: 504 break; 505 506 /* Vlan Tag Frame Counters */ 507 case snmpBcmRxVlanTagFrame: 508 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RVLNr, &count); 509 break; 510 case snmpBcmRxDoubleVlanTagFrame: 511 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, RDVLNr, &count); 512 break; 513 case snmpBcmTxVlanTagFrame: 514 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TVLNr, &count); 515 break; 516 case snmpBcmTxDoubleVlanTagFrame: 517 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, TDVLNr, &count); 518 break; 519 520 /* PFC Control Frame Counters */ 521 case snmpBcmRxPFCControlFrame: 522 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RXPPr, &count); 523 break; 524 525 case snmpBcmTxPFCControlFrame: 526 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TXPPr, &count); 527 break; 528 529 /* Receive PFC Frame Priority 0 XON to XOFF */ 530 case snmpBcmRxPFCFrameXonPriority0: 531 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPFCOFF0r, &count); 532 break; 533 534 case snmpBcmRxPFCFrameXonPriority1: 535 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPFCOFF1r, &count); 536 break; 537 538 case snmpBcmRxPFCFrameXonPriority2: 539 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPFCOFF2r, &count); 540 break; 541 542 case snmpBcmRxPFCFrameXonPriority3: 543 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPFCOFF3r, &count); 544 break; 545 546 case snmpBcmRxPFCFrameXonPriority4: 547 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPFCOFF4r, &count); 548 break; 549 550 case snmpBcmRxPFCFrameXonPriority5: 551 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPFCOFF5r, &count); 552 break; 553 554 case snmpBcmRxPFCFrameXonPriority6: 555 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPFCOFF6r, &count); 556 break; 557 558 case snmpBcmRxPFCFrameXonPriority7: 559 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPFCOFF7r, &count); 560 break; 561 562 /* Receive PFC Frame Priority */ 563 case snmpBcmRxPFCFramePriority0: 564 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPFC0r, &count); 565 break; 566 567 case snmpBcmRxPFCFramePriority1: 568 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPFC1r, &count); 569 break; 570 571 case snmpBcmRxPFCFramePriority2: 572 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPFC2r, &count); 573 break; 574 575 case snmpBcmRxPFCFramePriority3: 576 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPFC3r, &count); 577 break; 578 579 case snmpBcmRxPFCFramePriority4: 580 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPFC4r, &count); 581 break; 582 583 case snmpBcmRxPFCFramePriority5: 584 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPFC5r, &count); 585 break; 586 587 case snmpBcmRxPFCFramePriority6: 588 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPFC6r, &count); 589 break; 590 591 case snmpBcmRxPFCFramePriority7: 592 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_RPFC7r, &count); 593 break; 594 595 /* Transmit PFC Frame Priority */ 596 case snmpBcmTxPFCFramePriority0: 597 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TPFC0r, &count); 598 break; 599 600 case snmpBcmTxPFCFramePriority1: 601 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TPFC1r, &count); 602 break; 603 604 case snmpBcmTxPFCFramePriority2: 605 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TPFC2r, &count); 606 break; 607 608 case snmpBcmTxPFCFramePriority3: 609 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TPFC3r, &count); 610 break; 611 612 case snmpBcmTxPFCFramePriority4: 613 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TPFC4r, &count); 614 break; 615 616 case snmpBcmTxPFCFramePriority5: 617 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TPFC5r, &count); 618 break; 619 620 case snmpBcmTxPFCFramePriority6: 621 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TPFC6r, &count); 622 break; 623 624 case snmpBcmTxPFCFramePriority7: 625 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, CLMIB_TPFC7r, &count); 626 break; 627 628 case snmpFcmPortClass3RxFrames: 629 case snmpFcmPortClass3TxFrames: 630 case snmpFcmPortClass3Discards: 631 case snmpFcmPortClass2RxFrames: 632 case snmpFcmPortClass2TxFrames: 633 case snmpFcmPortClass2Discards: 634 case snmpFcmPortInvalidCRCs: 635 case snmpFcmPortDelimiterErrors: 636 if (!soc_feature(unit, soc_feature_fcoe)) { 637 return BCM_E_UNAVAIL; 638 } 639 break; 640 641 case snmpBcmRxDot3LengthMismatches: 642 if (SOC_REG_IS_VALID(unit, CLMIB_RFLRr)) { 643 BCM_STAT_REG_OPER(unit, port, sync_mode, reg_op, 644 CLMIB_RFLRr, &count); /* Good FCS, bad length */ 645 } else { 646 return BCM_E_UNAVAIL; 647 } 648 break; 649 650 default: 651 if (type < snmpValCount) { 652 return BCM_E_UNAVAIL; 653 } 654 LOG_VERBOSE(BSL_LS_SOC_COMMON, 655 (BSL_META_U(unit, 656 "bcmi_stat_clmib_get_set: Statistic not supported: %d\n"), type)); 657 return BCM_E_PARAM; 658 } 659 660 if (stat_op == _BCM_STAT_GET) { 661 *val = count; 662 } 663 664 return BCM_E_NONE; 665 }