├── .github └── workflows │ └── codeql.yml ├── .gitignore ├── COPYRIGHT ├── LICENSE ├── Makefile ├── README.md ├── drv_amazon.cc ├── drv_bcm.cc ├── drv_emulex.cc ├── drv_generic.cc ├── drv_intel.cc ├── drv_mellanox.cc ├── drv_nxp.cc ├── drv_sfc.cc ├── drv_virtio.cc ├── drv_vmware.cc ├── ethq.cc ├── ethq_test.cc ├── ethtool++.cc ├── ethtool++.h ├── interface.cc ├── interface.h ├── optval.h ├── parser.cc ├── parser.h ├── tests ├── be2net ├── bnx2 ├── bnx2x ├── bnxt_en ├── e1000e ├── ena ├── fsl_dpaa2_eth ├── i40e ├── i40e-v2.3.2k ├── iavf ├── ice ├── mlx5_core ├── r8169 ├── sfc ├── tg3 ├── virtio_net └── vmxnet3 ├── util.cc └── util.h /.github/workflows/codeql.yml: -------------------------------------------------------------------------------- 1 | name: "CodeQL" 2 | 3 | on: 4 | push: 5 | branches: [ "master" ] 6 | pull_request: 7 | branches: [ "master" ] 8 | schedule: 9 | - cron: "37 16 * * 0" 10 | 11 | jobs: 12 | analyze: 13 | name: Analyze 14 | runs-on: ubuntu-latest 15 | permissions: 16 | actions: read 17 | contents: read 18 | security-events: write 19 | 20 | strategy: 21 | fail-fast: false 22 | matrix: 23 | language: [ cpp ] 24 | 25 | steps: 26 | - name: Checkout 27 | uses: actions/checkout@v3 28 | 29 | - name: Initialize CodeQL 30 | uses: github/codeql-action/init@v2 31 | with: 32 | languages: ${{ matrix.language }} 33 | queries: +security-and-quality 34 | 35 | - name: Autobuild 36 | uses: github/codeql-action/autobuild@v2 37 | 38 | - name: Perform CodeQL Analysis 39 | uses: github/codeql-action/analyze@v2 40 | with: 41 | category: "/language:${{ matrix.language }}" 42 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # a basic gitignore file 2 | 3 | # some backup editor file extensions 4 | *~ 5 | *.bak 6 | 7 | # compiled files 8 | *.o 9 | ethq 10 | ethq_test 11 | -------------------------------------------------------------------------------- /COPYRIGHT: -------------------------------------------------------------------------------- 1 | 2 | Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC") 3 | 4 | This Source Code Form is subject to the terms of the Mozilla Public 5 | License, v. 2.0. If a copy of the MPL was not distributed with this 6 | file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Mozilla Public License, version 2.0 2 | 3 | 1. Definitions 4 | 5 | 1.1. "Contributor" 6 | 7 | means each individual or legal entity that creates, contributes to the 8 | creation of, or owns Covered Software. 9 | 10 | 1.2. "Contributor Version" 11 | 12 | means the combination of the Contributions of others (if any) used by a 13 | Contributor and that particular Contributor's Contribution. 14 | 15 | 1.3. "Contribution" 16 | 17 | means Covered Software of a particular Contributor. 18 | 19 | 1.4. "Covered Software" 20 | 21 | means Source Code Form to which the initial Contributor has attached the 22 | notice in Exhibit A, the Executable Form of such Source Code Form, and 23 | Modifications of such Source Code Form, in each case including portions 24 | thereof. 25 | 26 | 1.5. "Incompatible With Secondary Licenses" 27 | means 28 | 29 | a. that the initial Contributor has attached the notice described in 30 | Exhibit B to the Covered Software; or 31 | 32 | b. that the Covered Software was made available under the terms of 33 | version 1.1 or earlier of the License, but not also under the terms of 34 | a Secondary License. 35 | 36 | 1.6. "Executable Form" 37 | 38 | means any form of the work other than Source Code Form. 39 | 40 | 1.7. "Larger Work" 41 | 42 | means a work that combines Covered Software with other material, in a 43 | separate file or files, that is not Covered Software. 44 | 45 | 1.8. "License" 46 | 47 | means this document. 48 | 49 | 1.9. "Licensable" 50 | 51 | means having the right to grant, to the maximum extent possible, whether 52 | at the time of the initial grant or subsequently, any and all of the 53 | rights conveyed by this License. 54 | 55 | 1.10. "Modifications" 56 | 57 | means any of the following: 58 | 59 | a. any file in Source Code Form that results from an addition to, 60 | deletion from, or modification of the contents of Covered Software; or 61 | 62 | b. any new file in Source Code Form that contains any Covered Software. 63 | 64 | 1.11. "Patent Claims" of a Contributor 65 | 66 | means any patent claim(s), including without limitation, method, 67 | process, and apparatus claims, in any patent Licensable by such 68 | Contributor that would be infringed, but for the grant of the License, 69 | by the making, using, selling, offering for sale, having made, import, 70 | or transfer of either its Contributions or its Contributor Version. 71 | 72 | 1.12. "Secondary License" 73 | 74 | means either the GNU General Public License, Version 2.0, the GNU Lesser 75 | General Public License, Version 2.1, the GNU Affero General Public 76 | License, Version 3.0, or any later versions of those licenses. 77 | 78 | 1.13. "Source Code Form" 79 | 80 | means the form of the work preferred for making modifications. 81 | 82 | 1.14. "You" (or "Your") 83 | 84 | means an individual or a legal entity exercising rights under this 85 | License. For legal entities, "You" includes any entity that controls, is 86 | controlled by, or is under common control with You. For purposes of this 87 | definition, "control" means (a) the power, direct or indirect, to cause 88 | the direction or management of such entity, whether by contract or 89 | otherwise, or (b) ownership of more than fifty percent (50%) of the 90 | outstanding shares or beneficial ownership of such entity. 91 | 92 | 93 | 2. License Grants and Conditions 94 | 95 | 2.1. Grants 96 | 97 | Each Contributor hereby grants You a world-wide, royalty-free, 98 | non-exclusive license: 99 | 100 | a. under intellectual property rights (other than patent or trademark) 101 | Licensable by such Contributor to use, reproduce, make available, 102 | modify, display, perform, distribute, and otherwise exploit its 103 | Contributions, either on an unmodified basis, with Modifications, or 104 | as part of a Larger Work; and 105 | 106 | b. under Patent Claims of such Contributor to make, use, sell, offer for 107 | sale, have made, import, and otherwise transfer either its 108 | Contributions or its Contributor Version. 109 | 110 | 2.2. Effective Date 111 | 112 | The licenses granted in Section 2.1 with respect to any Contribution 113 | become effective for each Contribution on the date the Contributor first 114 | distributes such Contribution. 115 | 116 | 2.3. Limitations on Grant Scope 117 | 118 | The licenses granted in this Section 2 are the only rights granted under 119 | this License. No additional rights or licenses will be implied from the 120 | distribution or licensing of Covered Software under this License. 121 | Notwithstanding Section 2.1(b) above, no patent license is granted by a 122 | Contributor: 123 | 124 | a. for any code that a Contributor has removed from Covered Software; or 125 | 126 | b. for infringements caused by: (i) Your and any other third party's 127 | modifications of Covered Software, or (ii) the combination of its 128 | Contributions with other software (except as part of its Contributor 129 | Version); or 130 | 131 | c. under Patent Claims infringed by Covered Software in the absence of 132 | its Contributions. 133 | 134 | This License does not grant any rights in the trademarks, service marks, 135 | or logos of any Contributor (except as may be necessary to comply with 136 | the notice requirements in Section 3.4). 137 | 138 | 2.4. Subsequent Licenses 139 | 140 | No Contributor makes additional grants as a result of Your choice to 141 | distribute the Covered Software under a subsequent version of this 142 | License (see Section 10.2) or under the terms of a Secondary License (if 143 | permitted under the terms of Section 3.3). 144 | 145 | 2.5. Representation 146 | 147 | Each Contributor represents that the Contributor believes its 148 | Contributions are its original creation(s) or it has sufficient rights to 149 | grant the rights to its Contributions conveyed by this License. 150 | 151 | 2.6. Fair Use 152 | 153 | This License is not intended to limit any rights You have under 154 | applicable copyright doctrines of fair use, fair dealing, or other 155 | equivalents. 156 | 157 | 2.7. Conditions 158 | 159 | Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in 160 | Section 2.1. 161 | 162 | 163 | 3. Responsibilities 164 | 165 | 3.1. Distribution of Source Form 166 | 167 | All distribution of Covered Software in Source Code Form, including any 168 | Modifications that You create or to which You contribute, must be under 169 | the terms of this License. You must inform recipients that the Source 170 | Code Form of the Covered Software is governed by the terms of this 171 | License, and how they can obtain a copy of this License. You may not 172 | attempt to alter or restrict the recipients' rights in the Source Code 173 | Form. 174 | 175 | 3.2. Distribution of Executable Form 176 | 177 | If You distribute Covered Software in Executable Form then: 178 | 179 | a. such Covered Software must also be made available in Source Code Form, 180 | as described in Section 3.1, and You must inform recipients of the 181 | Executable Form how they can obtain a copy of such Source Code Form by 182 | reasonable means in a timely manner, at a charge no more than the cost 183 | of distribution to the recipient; and 184 | 185 | b. You may distribute such Executable Form under the terms of this 186 | License, or sublicense it under different terms, provided that the 187 | license for the Executable Form does not attempt to limit or alter the 188 | recipients' rights in the Source Code Form under this License. 189 | 190 | 3.3. Distribution of a Larger Work 191 | 192 | You may create and distribute a Larger Work under terms of Your choice, 193 | provided that You also comply with the requirements of this License for 194 | the Covered Software. If the Larger Work is a combination of Covered 195 | Software with a work governed by one or more Secondary Licenses, and the 196 | Covered Software is not Incompatible With Secondary Licenses, this 197 | License permits You to additionally distribute such Covered Software 198 | under the terms of such Secondary License(s), so that the recipient of 199 | the Larger Work may, at their option, further distribute the Covered 200 | Software under the terms of either this License or such Secondary 201 | License(s). 202 | 203 | 3.4. Notices 204 | 205 | You may not remove or alter the substance of any license notices 206 | (including copyright notices, patent notices, disclaimers of warranty, or 207 | limitations of liability) contained within the Source Code Form of the 208 | Covered Software, except that You may alter any license notices to the 209 | extent required to remedy known factual inaccuracies. 210 | 211 | 3.5. Application of Additional Terms 212 | 213 | You may choose to offer, and to charge a fee for, warranty, support, 214 | indemnity or liability obligations to one or more recipients of Covered 215 | Software. However, You may do so only on Your own behalf, and not on 216 | behalf of any Contributor. You must make it absolutely clear that any 217 | such warranty, support, indemnity, or liability obligation is offered by 218 | You alone, and You hereby agree to indemnify every Contributor for any 219 | liability incurred by such Contributor as a result of warranty, support, 220 | indemnity or liability terms You offer. You may include additional 221 | disclaimers of warranty and limitations of liability specific to any 222 | jurisdiction. 223 | 224 | 4. Inability to Comply Due to Statute or Regulation 225 | 226 | If it is impossible for You to comply with any of the terms of this License 227 | with respect to some or all of the Covered Software due to statute, 228 | judicial order, or regulation then You must: (a) comply with the terms of 229 | this License to the maximum extent possible; and (b) describe the 230 | limitations and the code they affect. Such description must be placed in a 231 | text file included with all distributions of the Covered Software under 232 | this License. Except to the extent prohibited by statute or regulation, 233 | such description must be sufficiently detailed for a recipient of ordinary 234 | skill to be able to understand it. 235 | 236 | 5. Termination 237 | 238 | 5.1. The rights granted under this License will terminate automatically if You 239 | fail to comply with any of its terms. However, if You become compliant, 240 | then the rights granted under this License from a particular Contributor 241 | are reinstated (a) provisionally, unless and until such Contributor 242 | explicitly and finally terminates Your grants, and (b) on an ongoing 243 | basis, if such Contributor fails to notify You of the non-compliance by 244 | some reasonable means prior to 60 days after You have come back into 245 | compliance. Moreover, Your grants from a particular Contributor are 246 | reinstated on an ongoing basis if such Contributor notifies You of the 247 | non-compliance by some reasonable means, this is the first time You have 248 | received notice of non-compliance with this License from such 249 | Contributor, and You become compliant prior to 30 days after Your receipt 250 | of the notice. 251 | 252 | 5.2. If You initiate litigation against any entity by asserting a patent 253 | infringement claim (excluding declaratory judgment actions, 254 | counter-claims, and cross-claims) alleging that a Contributor Version 255 | directly or indirectly infringes any patent, then the rights granted to 256 | You by any and all Contributors for the Covered Software under Section 257 | 2.1 of this License shall terminate. 258 | 259 | 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user 260 | license agreements (excluding distributors and resellers) which have been 261 | validly granted by You or Your distributors under this License prior to 262 | termination shall survive termination. 263 | 264 | 6. Disclaimer of Warranty 265 | 266 | Covered Software is provided under this License on an "as is" basis, 267 | without warranty of any kind, either expressed, implied, or statutory, 268 | including, without limitation, warranties that the Covered Software is free 269 | of defects, merchantable, fit for a particular purpose or non-infringing. 270 | The entire risk as to the quality and performance of the Covered Software 271 | is with You. Should any Covered Software prove defective in any respect, 272 | You (not any Contributor) assume the cost of any necessary servicing, 273 | repair, or correction. This disclaimer of warranty constitutes an essential 274 | part of this License. No use of any Covered Software is authorized under 275 | this License except under this disclaimer. 276 | 277 | 7. Limitation of Liability 278 | 279 | Under no circumstances and under no legal theory, whether tort (including 280 | negligence), contract, or otherwise, shall any Contributor, or anyone who 281 | distributes Covered Software as permitted above, be liable to You for any 282 | direct, indirect, special, incidental, or consequential damages of any 283 | character including, without limitation, damages for lost profits, loss of 284 | goodwill, work stoppage, computer failure or malfunction, or any and all 285 | other commercial damages or losses, even if such party shall have been 286 | informed of the possibility of such damages. This limitation of liability 287 | shall not apply to liability for death or personal injury resulting from 288 | such party's negligence to the extent applicable law prohibits such 289 | limitation. Some jurisdictions do not allow the exclusion or limitation of 290 | incidental or consequential damages, so this exclusion and limitation may 291 | not apply to You. 292 | 293 | 8. Litigation 294 | 295 | Any litigation relating to this License may be brought only in the courts 296 | of a jurisdiction where the defendant maintains its principal place of 297 | business and such litigation shall be governed by laws of that 298 | jurisdiction, without reference to its conflict-of-law provisions. Nothing 299 | in this Section shall prevent a party's ability to bring cross-claims or 300 | counter-claims. 301 | 302 | 9. Miscellaneous 303 | 304 | This License represents the complete agreement concerning the subject 305 | matter hereof. If any provision of this License is held to be 306 | unenforceable, such provision shall be reformed only to the extent 307 | necessary to make it enforceable. Any law or regulation which provides that 308 | the language of a contract shall be construed against the drafter shall not 309 | be used to construe this License against a Contributor. 310 | 311 | 312 | 10. Versions of the License 313 | 314 | 10.1. New Versions 315 | 316 | Mozilla Foundation is the license steward. Except as provided in Section 317 | 10.3, no one other than the license steward has the right to modify or 318 | publish new versions of this License. Each version will be given a 319 | distinguishing version number. 320 | 321 | 10.2. Effect of New Versions 322 | 323 | You may distribute the Covered Software under the terms of the version 324 | of the License under which You originally received the Covered Software, 325 | or under the terms of any subsequent version published by the license 326 | steward. 327 | 328 | 10.3. Modified Versions 329 | 330 | If you create software not governed by this License, and you want to 331 | create a new license for such software, you may create and use a 332 | modified version of this License if you rename the license and remove 333 | any references to the name of the license steward (except to note that 334 | such modified license differs from this License). 335 | 336 | 10.4. Distributing Source Code Form that is Incompatible With Secondary 337 | Licenses If You choose to distribute Source Code Form that is 338 | Incompatible With Secondary Licenses under the terms of this version of 339 | the License, the notice described in Exhibit B of this License must be 340 | attached. 341 | 342 | Exhibit A - Source Code Form License Notice 343 | 344 | This Source Code Form is subject to the 345 | terms of the Mozilla Public License, v. 346 | 2.0. If a copy of the MPL was not 347 | distributed with this file, You can 348 | obtain one at 349 | http://mozilla.org/MPL/2.0/. 350 | 351 | If it is not possible or desirable to put the notice in a particular file, 352 | then You may include the notice in a location (such as a LICENSE file in a 353 | relevant directory) where a recipient would be likely to look for such a 354 | notice. 355 | 356 | You may add additional accurate notices of copyright ownership. 357 | 358 | Exhibit B - "Incompatible With Secondary Licenses" Notice 359 | 360 | This Source Code Form is "Incompatible 361 | With Secondary Licenses", as defined by 362 | the Mozilla Public License, v. 2.0. 363 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | CXXFLAGS = -O3 -std=c++11 -Wall -Werror -ffat-lto-objects 2 | 3 | LDFLAGS = -s 4 | 5 | LIBS_CURSES = -lncurses -ltinfo 6 | 7 | TARGETS = ethq ethq_test 8 | 9 | DRIVER_OBJS = drv_generic.o \ 10 | drv_bcm.o drv_emulex.o drv_intel.o drv_mellanox.o \ 11 | drv_amazon.o drv_virtio.o drv_vmware.o drv_sfc.o \ 12 | drv_nxp.o 13 | 14 | all: $(TARGETS) 15 | 16 | ethq: ethq.o ethtool++.o interface.o parser.o util.o $(DRIVER_OBJS) 17 | $(CXX) -o $@ $^ $(CXXFLAGS) $(LDFLAGS) $(LIBS_CURSES) 18 | 19 | ethq_test: ethq_test.o parser.o util.o $(DRIVER_OBJS) 20 | $(CXX) -o $@ $^ $(CXXFLAGS) $(LDFLAGS) 21 | 22 | clean: 23 | $(RM) $(TARGETS) *.o 24 | 25 | ethq.o: interface.h util.h 26 | ethq_test.o: parser.h util.h 27 | parser.o: parser.h 28 | ethtool++.o: ethtool++.h util.h 29 | interface.o: interface.h 30 | interface.h: parser.h optval.h optval.h 31 | util.o: util.h 32 | $(DRIVER_OBJS): parser.h 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | EthQ 2 | ==== 3 | 4 | Displays an auto-updating per-second count of the number of packets 5 | and bytes being handled by each specified NIC, and on multi-queue NICs 6 | shows the per-queue statistics too. 7 | 8 | Usage: `ethq [-g] [-t] [interface ...]`. 9 | 10 | With `-t` specified the display just scrolls on the terminal, otherwise 11 | it runs in an auto-refreshing window. 12 | 13 | For information about the `-g` flag see "NIC Support", below. 14 | 15 | Requirements 16 | ------------ 17 | 18 | This software only runs on Linux. It requires a C++11 compiler and 19 | the NCurses library. 20 | 21 | NIC Support 22 | ----------- 23 | 24 | The format of the names of the statistics values from a NIC is highly 25 | driver specific. 26 | 27 | The code currently supports the output from the following NIC drivers: 28 | 29 | - Amazon AWS `ena` 30 | - Broadcom `bnx2`, `bnx2x`, `tg3`, `bnxt_en` 31 | - Emulex `be2net` 32 | - Intel `e1000e`, `igb`, `ixgbe`, `i40e`, `iavf`, `ice` 33 | - Mellanox `mlx5_core`, `mlx4_en` 34 | - NXP `fsl_dpaa2_eth` 35 | - RealTek `r8169` 36 | - Solarflare `sfc` 37 | - Virtio `virtio_net` 38 | - VMware `vmxnet3` 39 | 40 | The `-g` flag allows for fallback to a generic driver that knows how 41 | to parse statistics in this format: 42 | 43 | ``` 44 | rx_packets: 567425 45 | tx_packets: 274383 46 | rx_bytes: 703224479 47 | tx_bytes: 31313190 48 | ``` 49 | 50 | To request support for additional NICs, please raise a github issue and 51 | include the output of `ethtool -i` and attach the output of `ethtool -S` 52 | for your interface. 53 | -------------------------------------------------------------------------------- /drv_amazon.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #include "parser.h" 13 | 14 | static RegexParser amazon_ena( 15 | { "ena" }, 16 | RegexParser::total_nomatch(), 17 | { "^queue_(\\d+)_(rx|tx)_(bytes|cnt)$", { 2, 3, 1 } } 18 | ); 19 | -------------------------------------------------------------------------------- /drv_bcm.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #include "parser.h" 13 | 14 | static RegexParser bnxt_en( 15 | { "bnxt_en" }, 16 | { "^(rx|tx)_(bytes|[bum]cast_frames)$", { 1, 2 } }, 17 | { "^\\[(\\d+)\\]: (rx|tx)_(bytes|[bum]cast_packets)$", { 2, 3, 1 } } 18 | ); 19 | 20 | static RegexParser bnx2( 21 | { "bnx2" }, 22 | { "^(rx|tx)_(bytes|[bum]cast_packets)$", { 1, 2 } }, 23 | { "^\\[(\\d+)\\]: (rx|tx)_(bytes|[bum]cast_packets)$", { 2, 3, 1 } } 24 | ); 25 | 26 | static RegexParser bnx2x( 27 | { "bnx2x" }, 28 | { "^(rx|tx)_(bytes|[bum]cast_packets)$", { 1, 2 } }, 29 | RegexParser::queue_nomatch() 30 | ); 31 | 32 | static RegexParser tg3( 33 | { "tg3" }, 34 | { "^(rx|tx)_(octets|[bum]cast_packets)$", { 1, 2 } }, 35 | RegexParser::queue_nomatch() 36 | ); 37 | -------------------------------------------------------------------------------- /drv_emulex.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #include "parser.h" 13 | 14 | static RegexParser emulex_be2net ( 15 | { "be2net" }, 16 | RegexParser::total_nomatch(), 17 | { "^(rx|tx)q(\\d+): \\1_(bytes|pkts)$", { 1, 3, 2 } } 18 | ); 19 | -------------------------------------------------------------------------------- /drv_generic.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #include "parser.h" 13 | 14 | static RegexParser generic( 15 | { "generic", "r8169", "e1000e" }, 16 | RegexParser::total_generic(), 17 | RegexParser::queue_nomatch() 18 | ); 19 | -------------------------------------------------------------------------------- /drv_intel.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #include "parser.h" 13 | 14 | static RegexParser intel_generic( 15 | { "ixgbe", "igb" }, 16 | RegexParser::total_nomatch(), 17 | { "^(rx|tx)_queue_(\\d+)_(bytes|packets)$", { 1, 3, 2 } } 18 | ); 19 | 20 | static RegexParser intel_ice( 21 | { "ice" }, 22 | { "^(rx|tx)_(bytes|unicast|broadcast|multicast)$", { 1, 2 } }, 23 | { "^(rx|tx)_queue_(\\d+)_(bytes|packets)$", { 1, 3, 2 } } 24 | ); 25 | 26 | static RegexParser intel_i40e( 27 | { "i40e" }, 28 | RegexParser::total_generic(), 29 | { "^(rx|tx)-(\\d+)\\.(?:\\1_)?(bytes|packets)$", { 1, 3, 2 } } 30 | ); 31 | 32 | static RegexParser intel_iavf( 33 | { "iavf" }, 34 | { "^(rx|tx)_(bytes|unicast|broadcast|multicast)$", { 1, 2 } }, 35 | { "^(rx|tx)-(\\d+)\\.(?:\\1_)?(bytes|packets)$", { 1, 3, 2 } } 36 | ); 37 | -------------------------------------------------------------------------------- /drv_mellanox.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #include "parser.h" 13 | 14 | static RegexParser mellanox_mlx5_core( 15 | { "mlx5_core", "mlx4_en" }, 16 | RegexParser::total_generic(), 17 | { "^(rx|tx)(\\d+)_(?:0_)?(bytes|packets)$", { 1, 3, 2 } } 18 | ); 19 | -------------------------------------------------------------------------------- /drv_nxp.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #include "parser.h" 13 | 14 | static RegexParser nxp_daap2( 15 | { "fsl_dpaa2_eth" }, 16 | { "^\\[hw\\] (rx|tx) (bytes|frames)$", { 1, 2 } }, 17 | RegexParser::queue_nomatch() 18 | ); 19 | -------------------------------------------------------------------------------- /drv_sfc.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #include "parser.h" 13 | 14 | static RegexParser solarflare_sfc( 15 | { "sfc" }, 16 | { "^port_(rx|tx)_(bytes|packets)$", { 1, 2 } }, 17 | { "^(rx|tx)-(\\d+)\\.(?:\\1)_(bytes|packets)$", { 1, 3, 2 } } 18 | ); 19 | -------------------------------------------------------------------------------- /drv_virtio.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #include "parser.h" 13 | 14 | static RegexParser virtio_net( 15 | { "virtio_net" }, 16 | RegexParser::total_nomatch(), 17 | { "^(rx|tx)_queue_(\\d+)_(bytes|packets)$", { 1, 3, 2 } } 18 | ); 19 | -------------------------------------------------------------------------------- /drv_vmware.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #include "parser.h" 13 | 14 | class VMXNet3Parser : public StringsetParser { 15 | 16 | private: 17 | std::regex re1; 18 | std::regex re2; 19 | std::smatch ma; 20 | 21 | std::string ms(size_t n) { 22 | return std::ssub_match(ma[n]).str(); 23 | } 24 | 25 | private: 26 | size_t queue = 0; 27 | bool rx = false; 28 | 29 | public: 30 | VMXNet3Parser(const driverlist_t& drivers) 31 | : StringsetParser(drivers) 32 | { 33 | re1.assign("^(Rx|Tx) Queue#$"); 34 | re2.assign("^\\s*[bum]cast (pkts|bytes) (rx|tx)$"); 35 | } 36 | 37 | virtual ~VMXNet3Parser() = default; 38 | 39 | bool match_queue(const std::string& key, size_t value, bool& rx, bool& bytes, size_t& queue) { 40 | 41 | // check for match againt queue number 42 | if (std::regex_match(key, ma, re1)) { 43 | this->queue = value; 44 | this->rx = (ms(1) == "Rx"); 45 | return false; 46 | } 47 | 48 | // check for data entry 49 | bool found = std::regex_match(key, ma, re2); 50 | if (found) { 51 | bytes = (ms(1) == "bytes"); 52 | queue = this->queue; 53 | rx = this->rx; 54 | } 55 | 56 | return found; 57 | } 58 | }; 59 | 60 | static VMXNet3Parser vmxnet3( 61 | { "vmxnet3" } 62 | ); 63 | -------------------------------------------------------------------------------- /ethq.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | 20 | #include 21 | #include 22 | 23 | #include "interface.h" 24 | #include "util.h" 25 | 26 | // 27 | // main application wrapper class 28 | // 29 | class EthQApp { 30 | 31 | private: // command line parameters 32 | bool winmode = true; 33 | 34 | private: // network state 35 | std::vector> ifaces; 36 | 37 | private: // time handling 38 | timespec now; 39 | timespec interval = { 1, 0 }; 40 | clockid_t clock = CLOCK_REALTIME; 41 | char timebuf[9]; 42 | 43 | void time_get(); 44 | void time_wait(); 45 | 46 | private: // text mode handling 47 | void textmode_redraw(); 48 | 49 | private: // curses mode handling 50 | void winmode_redraw(); 51 | void winmode_init(); 52 | bool winmode_should_exit(); 53 | void winmode_exit(); 54 | 55 | public: 56 | EthQApp(int argc, char *argv[]); 57 | ~EthQApp(); 58 | 59 | void run(); 60 | }; 61 | 62 | static void usage(int status = EXIT_SUCCESS) 63 | { 64 | using namespace std; 65 | 66 | cerr << "usage: ethq [-g] [-t] [interface ...]" << endl; 67 | cerr << " -g : attempt generic driver fallback" << endl; 68 | cerr << " -t : use text mode" << endl; 69 | 70 | exit(status); 71 | } 72 | 73 | static std::array cols = { IFNAMSIZ, 8, 8, 10, 10, 10, 10 }; 74 | 75 | static std::string out_hdr(const std::array& hdrs) 76 | { 77 | using namespace std; 78 | 79 | ostringstream out; 80 | for (size_t n = 0; n < cols.size(); ++n) { 81 | out << setw(cols[n]) << hdrs[n]; 82 | if (n != cols.size() - 1) { 83 | out << " "; 84 | } 85 | } 86 | 87 | return out.str(); 88 | } 89 | 90 | static std::string out_data(const std::string& label, const Interface::ifstats_t& stats, const timespec& interval) 91 | { 92 | using namespace std; 93 | 94 | ostringstream out; 95 | out << setw(cols[0]) << label << " "; 96 | 97 | auto& q = stats.counts; 98 | for (size_t n = 1; n < 5; ++n) { 99 | out << setw(cols[n]) << q[n - 1].to_string() << " "; 100 | } 101 | 102 | for (size_t n = 5; n < 7; ++n) { 103 | out << setw(cols[n]) << fixed << setprecision(3); 104 | const auto& bps = q[n - 3]; 105 | if (bps) { 106 | auto mbps = static_cast(bps) * 8 / 1e6; 107 | mbps /= (interval.tv_sec + interval.tv_nsec / 1e9); 108 | out << mbps; 109 | } else { 110 | out << "-"; 111 | } 112 | if (n != cols.size() - 1) { 113 | out << " "; 114 | } 115 | } 116 | 117 | return out.str(); 118 | } 119 | 120 | void EthQApp::winmode_redraw() 121 | { 122 | static auto header = out_hdr({ "NIC", "TX pkts", "RX pkts", "TX bytes", "RX bytes", "TX Mbps", "RX Mbps" }); 123 | auto w = stdscr; 124 | 125 | // output clamped to screen size 126 | auto wstr = [&](const std::string& s, bool pad = false) { 127 | auto maxx = getmaxx(w); 128 | auto maxy = getmaxy(w); 129 | auto curx = getcurx(w); 130 | auto cury = getcury(w); 131 | if (cury < maxy) { 132 | waddnstr(w, s.c_str(), maxx); 133 | if (pad) { 134 | while (curx++ < maxx) { 135 | waddch(w, ' '); 136 | } 137 | } 138 | wmove(w, cury + 1, 0); 139 | } 140 | }; 141 | 142 | // reset screen 143 | werase(w); 144 | 145 | // show time and header 146 | wattron(w, A_REVERSE); 147 | wstr(header, true); 148 | mvwaddstr(w, 0, 2, timebuf); 149 | wattroff(w, A_REVERSE); 150 | wmove(w, 1, 0); 151 | 152 | for (auto& iface: ifaces) { 153 | // show totals 154 | wattron(w, A_BOLD); 155 | wstr(out_data(iface->name(), iface->total_stats(), interval)); 156 | wattroff(w, A_BOLD); 157 | 158 | // show per-queue data 159 | for (size_t i = 0, n = iface->queue_count(); i < n; ++i) { 160 | wstr(out_data(std::to_string(i), iface->queue_stats(i), interval)); 161 | } 162 | } 163 | 164 | wrefresh(w); 165 | } 166 | 167 | void EthQApp::textmode_redraw() 168 | { 169 | static auto header = out_hdr({ "nic", "txp", "rxp", "txb", "rxb", "txmbps", "rxmbps" }); 170 | 171 | std::cout << header << std::endl; 172 | 173 | for (auto& iface: ifaces) { 174 | std::cout << out_data(iface->name(), iface->total_stats(), interval); 175 | std::cout << std::endl; 176 | for (size_t i = 0, n = iface->queue_count(); i < n; ++i) { 177 | std::cout << out_data(std::to_string(i), iface->queue_stats(i), interval); 178 | std::cout << std::endl; 179 | } 180 | } 181 | 182 | std::cout << std::endl; 183 | } 184 | 185 | void EthQApp::time_get() 186 | { 187 | clock_gettime(clock, &now); 188 | } 189 | 190 | void EthQApp::time_wait() 191 | { 192 | now.tv_nsec += interval.tv_nsec; 193 | if (now.tv_nsec >= 1e9) { 194 | now.tv_nsec -= 1e9; 195 | now.tv_sec += 1; 196 | } 197 | now.tv_sec += interval.tv_sec; 198 | 199 | while (true) { 200 | auto res = clock_nanosleep(clock, TIMER_ABSTIME, &now, nullptr); 201 | if (res == 0) { 202 | break; 203 | } else if (res == EINTR) { 204 | continue; 205 | } else { 206 | errno = res; 207 | throw_errno("clock_nanosleep"); 208 | } 209 | } 210 | strftime(timebuf, sizeof timebuf, "%T", gmtime(&now.tv_sec)); 211 | } 212 | 213 | bool EthQApp::winmode_should_exit() 214 | { 215 | auto ch = ::getch(); 216 | return (ch == 'q' || ch == 'Q'); 217 | } 218 | 219 | void EthQApp::winmode_init() 220 | { 221 | initscr(); 222 | cbreak(); 223 | noecho(); 224 | nonl(); 225 | nodelay(stdscr, TRUE); 226 | intrflush(stdscr, FALSE); 227 | keypad(stdscr, TRUE); 228 | curs_set(0); 229 | } 230 | 231 | void EthQApp::winmode_exit() 232 | { 233 | endwin(); 234 | } 235 | 236 | void EthQApp::run() 237 | { 238 | time_get(); 239 | 240 | while (true) { 241 | if (winmode && winmode_should_exit()) break; 242 | time_wait(); 243 | for (auto& iface: ifaces) { 244 | iface->refresh(); 245 | } 246 | 247 | if (winmode) { 248 | winmode_redraw(); 249 | } else { 250 | textmode_redraw(); 251 | } 252 | } 253 | } 254 | 255 | EthQApp::EthQApp(int argc, char *argv[]) 256 | { 257 | int opt; 258 | bool generic = false; 259 | 260 | while ((opt = getopt(argc, argv, "ght")) != -1) { 261 | switch (opt) { 262 | case 'g': 263 | generic = true; 264 | break; 265 | case 't': 266 | winmode = false; 267 | break; 268 | case 'h': 269 | usage(); 270 | default: 271 | usage(EXIT_FAILURE); 272 | } 273 | } 274 | 275 | // connect to the interface(s) 276 | while (optind < argc) { 277 | ifaces.emplace_back(std::make_shared(argv[optind++], generic)); 278 | } 279 | 280 | if (ifaces.size() == 0) { 281 | usage(EXIT_FAILURE); 282 | } 283 | 284 | // set up display mode 285 | if (winmode) { 286 | winmode_init(); 287 | } 288 | } 289 | 290 | EthQApp::~EthQApp() 291 | { 292 | if (winmode) { 293 | winmode_exit(); 294 | } 295 | } 296 | 297 | int main(int argc, char *argv[]) 298 | { 299 | setlocale(LC_ALL, ""); 300 | int res = EXIT_SUCCESS; 301 | 302 | try { 303 | EthQApp app(argc, argv); 304 | app.run(); 305 | } catch (const std::exception& e) { 306 | std::cerr << "error: " << e.what() << std::endl; 307 | res = EXIT_FAILURE; 308 | } 309 | 310 | return res; 311 | } 312 | -------------------------------------------------------------------------------- /ethq_test.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | 18 | #include "parser.h" 19 | #include "util.h" 20 | 21 | void test(StringsetParser* parser, std::istream& is) 22 | { 23 | size_t lineno = 0; 24 | 25 | std::regex re("^\\s*(.*?): (\\d+)$"); 26 | std::smatch ma; 27 | 28 | while (!is.eof()) { 29 | 30 | size_t queue = 0; 31 | bool rx, bytes; 32 | 33 | // parse input 34 | std::string line; 35 | std::getline(is, line); 36 | 37 | bool valid = std::regex_match(line, ma, re); 38 | if (!valid) continue; 39 | 40 | std::string key = std::ssub_match(ma[1]).str(); 41 | size_t value = std::stoull(std::ssub_match(ma[2]).str()); 42 | 43 | // test the input 44 | bool match_total = parser->match_total(key, value, rx, bytes); 45 | bool match_queue = parser->match_queue(key, value, rx, bytes, queue); 46 | 47 | // generate output 48 | std::cout << std::setw(3) << lineno++ << " | "; 49 | if (match_total || match_queue) { 50 | std::cout << std::setw(3); 51 | if (match_queue) { 52 | std::cout << queue; 53 | } else { 54 | std::cout << ""; 55 | } 56 | std::cout << (match_total ? "=" : " "); 57 | std::cout << " " << (rx ? "rx" : "tx"); 58 | std::cout << " " << (bytes ? "b" : "p"); 59 | std::cout << " "; 60 | } else { 61 | std::cout << " "; 62 | } 63 | std::cout << "| " << line << std::endl; 64 | } 65 | } 66 | 67 | int main(int argc, char *argv[]) 68 | { 69 | // parse command line args 70 | if (argc < 2 || argc > 3) { 71 | std::cerr << "usage: ethq_test [infile]" << std::endl; 72 | return EXIT_FAILURE; 73 | } 74 | 75 | std::string driver = argv[1]; 76 | std::string infile = (argc == 3) ? argv[2] : "-"; 77 | 78 | try { 79 | auto parser = StringsetParser::find(driver); 80 | if (!parser) { 81 | throw std::runtime_error("couldn't find specified driver"); 82 | } 83 | 84 | if (infile == "-") { 85 | test(parser, std::cin); 86 | } else { 87 | auto input = std::ifstream(infile); 88 | if (input.fail()) { 89 | throw_errno("file open"); 90 | } 91 | test(parser, input); 92 | } 93 | 94 | } catch (const std::exception& e) { 95 | std::cerr << "error: " << e.what() << std::endl; 96 | return EXIT_FAILURE; 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /ethtool++.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #include 13 | #include 14 | 15 | #include 16 | #include 17 | #include 18 | #include 19 | 20 | #include 21 | 22 | #include "ethtool++.h" 23 | #include "util.h" 24 | 25 | void Ethtool::ioctl(void* data) 26 | { 27 | ifr.ifr_data = reinterpret_cast(data); 28 | if (::ioctl(fd, SIOCETHTOOL, &ifr, sizeof(ifr)) < 0) { 29 | throw_errno("ioctl(SIOCETHTOOL)"); 30 | } 31 | } 32 | 33 | size_t Ethtool::stringset_size(ethtool_stringset ss) 34 | { 35 | // memoize the table 36 | auto iter = sizes.find(ss); 37 | if (iter != sizes.end()) { 38 | return iter->second; 39 | } 40 | 41 | // allocate memory on stack 42 | auto size = sizeof(ethtool_sset_info) + sizeof(__u32); 43 | auto p = reinterpret_cast(alloca(size)); 44 | if (!p) { 45 | throw_errno("alloca"); 46 | } 47 | std::fill(p, p + size, 0); 48 | 49 | // shadow the allocation 50 | auto& sset_info = *reinterpret_cast(p); 51 | 52 | // get the data 53 | sset_info.cmd = ETHTOOL_GSSET_INFO; 54 | sset_info.reserved = 0; 55 | sset_info.sset_mask = (1 << ss); 56 | ioctl(&sset_info); 57 | 58 | auto result = sset_info.data[0]; 59 | sizes[ss] = result; 60 | 61 | return result; 62 | } 63 | 64 | Ethtool::stringset_t Ethtool::stringset(ethtool_stringset ss) 65 | { 66 | // determine size 67 | size_t count = stringset_size(ss); 68 | 69 | // allocate sufficient memory on stack 70 | auto size = sizeof(ethtool_gstrings) + count * ETH_GSTRING_LEN; 71 | auto p = reinterpret_cast(alloca(size)); 72 | if (!p) { 73 | throw_errno("alloca"); 74 | } 75 | std::fill(p, p + size, 0); 76 | 77 | // shadow the allocation 78 | auto& gstrings = *reinterpret_cast(p); 79 | 80 | // get the data 81 | gstrings.cmd = ETHTOOL_GSTRINGS; 82 | gstrings.string_set = ss; 83 | ioctl(&gstrings); 84 | 85 | // build the result set 86 | stringset_t result; 87 | result.reserve(count); 88 | for (unsigned int i = 0; i < gstrings.len; ++i) { 89 | auto p = reinterpret_cast(gstrings.data) + i * ETH_GSTRING_LEN; 90 | result.emplace_back(p); // assume NUL terminated 91 | } 92 | 93 | return result; 94 | } 95 | 96 | Ethtool::stats_t Ethtool::stats() 97 | { 98 | size_t count = stringset_size(ETH_SS_STATS); 99 | 100 | // allocate memory on stack 101 | auto size = sizeof(ethtool_stats) + count * sizeof(__u64); 102 | auto p = reinterpret_cast(alloca(size)); 103 | if (!p) { 104 | throw_errno("alloca"); 105 | } 106 | std::fill(p, p + size, 0); 107 | 108 | // shadow the allocation 109 | auto& stats = *reinterpret_cast(p); 110 | 111 | // get the data 112 | stats.cmd = ETHTOOL_GSTATS; 113 | ioctl(&stats); 114 | 115 | // build the result set 116 | stats_t result(count); 117 | std::copy(stats.data, stats.data + stats.n_stats, result.begin()); 118 | 119 | return result; 120 | } 121 | 122 | Ethtool::Ethtool(const std::string& ifname) 123 | { 124 | fd = ::socket(AF_INET, SOCK_DGRAM, 0); 125 | if (fd < 0) { 126 | throw_errno("socket"); 127 | } 128 | 129 | stpncpy(ifr.ifr_name, ifname.c_str(), IFNAMSIZ); 130 | 131 | // retrieve the driver information 132 | drvinfo.cmd = ETHTOOL_GDRVINFO; 133 | ioctl(&drvinfo); 134 | } 135 | 136 | Ethtool::~Ethtool() 137 | { 138 | ::close(fd); 139 | } 140 | -------------------------------------------------------------------------------- /ethtool++.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #pragma once 13 | 14 | #include 15 | #include 16 | #include 17 | 18 | #include 19 | #include 20 | 21 | class Ethtool { 22 | 23 | public: 24 | typedef std::vector stringset_t; 25 | typedef std::vector<__u64> stats_t; 26 | typedef std::map stringset_size_t; 27 | 28 | private: 29 | int fd; 30 | ifreq ifr; 31 | stringset_size_t sizes; 32 | ethtool_drvinfo drvinfo; 33 | 34 | private: 35 | void ioctl(void *data); 36 | 37 | public: 38 | Ethtool(const std::string& ifname); 39 | ~Ethtool(); 40 | 41 | public: 42 | size_t stringset_size(ethtool_stringset ss); 43 | stringset_t stringset(ethtool_stringset); 44 | stats_t stats(); 45 | 46 | std::string driver() { return std::string(drvinfo.driver); }; 47 | std::string version() { return std::string(drvinfo.version); }; 48 | }; 49 | -------------------------------------------------------------------------------- /interface.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #include 13 | #include "interface.h" 14 | #include "parser.h" 15 | 16 | Interface::Interface(const std::string& name, bool generic) 17 | : _name(name) 18 | { 19 | ethtool = new Ethtool(name); 20 | state = ethtool->stats(); 21 | 22 | // find the right code to parse this NIC's stats output 23 | auto driver = ethtool->driver(); 24 | const auto info = driver + ":" + name; 25 | 26 | auto parser = StringsetParser::find(driver); 27 | if (!parser) { 28 | if (!generic) { 29 | throw std::runtime_error("Unsupported NIC driver " + info); 30 | } 31 | 32 | parser = StringsetParser::find("generic"); 33 | if (!generic) { 34 | throw std::runtime_error("Failed fallback from " + info + " to generic"); 35 | } 36 | } 37 | 38 | // parse the list of stats strings 39 | build_stats_map(parser); 40 | if (tmap.size() == 0 && qmap.size() == 0) { 41 | throw std::runtime_error("couldn't parse NIC stats for " + info); 42 | } 43 | } 44 | 45 | Interface::~Interface() 46 | { 47 | delete ethtool; 48 | } 49 | 50 | const std::string Interface::name() const 51 | { 52 | return _name; 53 | } 54 | 55 | void Interface::refresh() 56 | { 57 | auto stats = ethtool->stats(); 58 | 59 | // reset total counters 60 | for (size_t i = 0; i < 4; ++i) { 61 | tstats.counts[i].reset(); 62 | } 63 | 64 | // reset queue counters 65 | for (auto& stats: qstats) { 66 | for (size_t i = 0; i < 4; ++i) { 67 | stats.counts[i].reset(); 68 | } 69 | } 70 | 71 | // accumulate total counters 72 | for (const auto& pair: tmap) { 73 | 74 | auto index = pair.first; 75 | auto offset = pair.second; 76 | 77 | uint64_t prev = state[index]; 78 | uint64_t current = stats[index]; 79 | 80 | // record the difference in value 81 | uint64_t delta = (current > prev) ? (current - prev) : 0; 82 | tstats.counts[offset] += delta; 83 | } 84 | 85 | // accumulate queue counters 86 | for (const auto& pair: qmap) { 87 | 88 | auto index = pair.first; 89 | const auto& entry = pair.second; 90 | auto queue = entry.first; 91 | auto offset = entry.second; 92 | 93 | uint64_t prev = state[index]; 94 | uint64_t current = stats[index]; 95 | 96 | // record the difference in value 97 | uint64_t delta = (current > prev) ? (current - prev) : 0; 98 | qstats[queue].counts[offset] += delta; 99 | 100 | // auto-copy into the total if there's no explicit map of total fields 101 | if (tmap.size() == 0) { 102 | tstats.counts[offset] += delta; 103 | } 104 | } 105 | 106 | std::swap(stats, state); 107 | } 108 | 109 | size_t Interface::queue_count() const 110 | { 111 | return qstats.size(); 112 | } 113 | 114 | const Interface::ifstats_t& Interface::queue_stats(size_t n) const 115 | { 116 | return qstats[n]; 117 | } 118 | 119 | const Interface::ifstats_t& Interface::total_stats() const 120 | { 121 | return tstats; 122 | } 123 | 124 | size_t get_offset(bool rx, bool bytes) 125 | { 126 | return rx + 2 * bytes; 127 | } 128 | 129 | void Interface::build_stats_map(StringsetParser* parser) 130 | { 131 | size_t qcount = 0; 132 | auto names = ethtool->stringset(ETH_SS_STATS); 133 | 134 | // 135 | // iterate through all of the stats looking for names that 136 | // match the recognised strings 137 | // 138 | for (size_t i = 0, n = names.size(); i < n; ++i) { 139 | 140 | size_t queue = -1; 141 | auto rx = false; 142 | auto bytes = false; 143 | 144 | // 145 | // try to map the stringset entry to a NIC total 146 | // 147 | bool total_found = parser->match_total(names[i], state[i], rx, bytes); 148 | if (total_found) { 149 | // save offset into the four entry structure 150 | tmap[i] = get_offset(rx, bytes); 151 | } 152 | 153 | // 154 | // try to map the stringset entry to a queue - pass the initially 155 | // read value too, for those drivers (e.g. vmxnet3) that store the 156 | // queue number in a key-value pair 157 | // 158 | bool queue_found = parser->match_queue(names[i], state[i], rx, bytes, queue); 159 | 160 | // 161 | // remember the individual rows that make up the four stats 162 | // values for each NIC queue 163 | // 164 | if (queue_found && (state[i] > 0)) { // ignore zero-counters 165 | 166 | // calculate offset into the four entry structure 167 | auto offset = get_offset(rx, bytes); 168 | 169 | // and populate it 170 | qmap[i] = queue_entry_t { queue, offset }; 171 | 172 | // count the number of queues 173 | qcount = std::max(queue + 1, qcount); 174 | } 175 | } 176 | 177 | qstats.resize(qcount); 178 | } 179 | -------------------------------------------------------------------------------- /interface.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #pragma once 13 | 14 | #include 15 | #include 16 | #include 17 | 18 | #include "ethtool++.h" 19 | #include "parser.h" 20 | #include "optval.h" 21 | 22 | class Interface { 23 | 24 | public: 25 | // 26 | // the four combinations of rx/tx and packets/bytes 27 | // are stored in this structure thus: 28 | // 0 : tx packets 29 | // 1 : rx packets 30 | // 2 : tx bytes 31 | // 3 : rx bytes 32 | // 33 | typedef struct { 34 | OptVal counts[4]; 35 | } ifstats_t; 36 | 37 | private: 38 | // index to queue table, offset to value within 39 | typedef std::pair queue_entry_t; 40 | 41 | // string entry number -> queue_entry_t 42 | typedef std::map queue_map_t; 43 | typedef std::map total_map_t; 44 | 45 | private: 46 | std::string _name; 47 | Ethtool* ethtool = nullptr; 48 | Ethtool::stats_t state; 49 | 50 | ifstats_t tstats; 51 | std::vector qstats; 52 | 53 | total_map_t tmap; 54 | queue_map_t qmap; 55 | 56 | private: 57 | void build_stats_map(StringsetParser *parser); 58 | 59 | public: 60 | Interface(const std::string& name, bool generic = false); 61 | ~Interface(); 62 | 63 | public: 64 | const std::string name() const; 65 | void refresh(); 66 | 67 | size_t queue_count() const; 68 | const ifstats_t& queue_stats(size_t n) const; 69 | const ifstats_t& total_stats() const; 70 | }; 71 | -------------------------------------------------------------------------------- /optval.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #include 13 | #include 14 | 15 | class OptVal { 16 | 17 | typedef uint64_t value_t; 18 | 19 | private: 20 | value_t value; 21 | bool set; 22 | 23 | public: 24 | OptVal() : 25 | value(0), set(false) 26 | { 27 | } 28 | 29 | OptVal(value_t value) : 30 | value(value), set(true) 31 | { 32 | } 33 | 34 | void reset() 35 | { 36 | value = 0; 37 | set = false; 38 | } 39 | 40 | operator bool() const { 41 | return set; 42 | } 43 | 44 | operator uint64_t() const { 45 | if (set) { 46 | return value; 47 | } else { 48 | throw std::runtime_error("unset optional value unwrapped"); 49 | } 50 | } 51 | 52 | value_t operator =(value_t rhs) { 53 | set = true; 54 | value = rhs; 55 | return value; 56 | } 57 | 58 | value_t operator +=(value_t rhs) { 59 | set = true; 60 | value += rhs; 61 | return value; 62 | } 63 | 64 | std::string to_string() const 65 | { 66 | if (set) { 67 | return std::to_string(value); 68 | } else { 69 | return "-"; 70 | } 71 | } 72 | }; 73 | -------------------------------------------------------------------------------- /parser.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #include 13 | #include "parser.h" 14 | 15 | StringsetParser::parsermap_t *StringsetParser::parsers = nullptr; 16 | 17 | StringsetParser::StringsetParser(const driverlist_t& drivers) 18 | { 19 | save(drivers); 20 | } 21 | 22 | void StringsetParser::save(const driverlist_t& drivers) { 23 | for (const auto& driver: drivers) { 24 | save(driver); 25 | } 26 | } 27 | 28 | void StringsetParser::save(const std::string& name) { 29 | if (!parsers) { 30 | parsers = new parsermap_t(); 31 | } 32 | 33 | (*parsers)[name] = this; 34 | } 35 | 36 | StringsetParser::ptr_t StringsetParser::find(const std::string& driver) { 37 | auto iter = parsers->find(driver); 38 | if (iter != parsers->end()) { 39 | return iter->second; 40 | } else { 41 | return nullptr; 42 | } 43 | } 44 | 45 | // parser for the most common generic output format 46 | RegexParser::total_str_t RegexParser::total_generic() { 47 | return total_str_t { "^(rx|tx)_(bytes|packets)$", { 1, 2 } }; 48 | } 49 | 50 | // parsers used when the driver does not support total counters or per-queue counters 51 | RegexParser::total_str_t RegexParser::total_nomatch() { 52 | return total_str_t { "", { 0, 0 } }; 53 | } 54 | RegexParser::queue_str_t RegexParser::queue_nomatch() { 55 | return queue_str_t { "", { 0, 0, 0 } }; 56 | } 57 | 58 | RegexParser::RegexParser( 59 | const driverlist_t& drivers, 60 | const total_str_t& total, 61 | const queue_str_t& queue 62 | ) : StringsetParser(drivers), 63 | total(std::regex(total.first), total.second), 64 | queue(std::regex(queue.first), queue.second) 65 | { 66 | } 67 | 68 | std::string RegexParser::ms(size_t n) { 69 | return std::ssub_match(ma[n]).str(); 70 | } 71 | 72 | bool RegexParser::match_total(const std::string& key, size_t value, bool& rx, bool& bytes) 73 | { 74 | // ignore blank REs 75 | if (total.first.mark_count() == 0) return false; 76 | 77 | // transform key to lower case 78 | std::string lower(key); 79 | std::transform(lower.begin(), lower.end(), lower.begin(), ::tolower); 80 | 81 | auto found = std::regex_match(lower, ma, total.first); 82 | if (found) { 83 | auto& order = total.second; 84 | 85 | // extract direction and type 86 | auto direction = ms(order[0]); 87 | auto type = ms(order[1]); 88 | 89 | rx = (direction == "rx"); 90 | bytes = (type == "bytes") || (type == "octets"); 91 | } 92 | return found; 93 | } 94 | 95 | bool RegexParser::match_queue(const std::string& key, size_t value, bool& rx, bool& bytes, size_t& qnum) 96 | { 97 | // ignore blank REs 98 | if (queue.first.mark_count() == 0) return false; 99 | 100 | // transform key to lower case 101 | std::string lower(key); 102 | std::transform(lower.begin(), lower.end(), lower.begin(), ::tolower); 103 | 104 | auto found = std::regex_match(lower, ma, queue.first); 105 | if (found) { 106 | auto& order = queue.second; 107 | 108 | // extract direction and type 109 | auto direction = ms(order[0]); 110 | auto type = ms(order[1]); 111 | auto qstr = ms(order[2]); 112 | 113 | rx = (direction == "rx"); 114 | bytes = (type == "bytes") || (type == "octets"); 115 | qnum = std::stoi(qstr); 116 | } 117 | return found; 118 | } 119 | -------------------------------------------------------------------------------- /parser.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #pragma once 13 | 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | 21 | // 22 | // abstract base class for stats string parsers, includes a static 23 | // registry that maps from NIC driver names to parsers 24 | // 25 | 26 | class StringsetParser { 27 | 28 | public: 29 | typedef StringsetParser* ptr_t; 30 | typedef std::map parsermap_t; 31 | typedef std::vector driverlist_t; 32 | 33 | private: 34 | static parsermap_t *parsers; 35 | 36 | protected: 37 | void save(const std::string& driver); 38 | void save(const driverlist_t& drivers); 39 | 40 | public: 41 | StringsetParser(const driverlist_t& drivers); 42 | virtual ~StringsetParser() = default; 43 | 44 | virtual bool match_total(const std::string& key, size_t value, bool& rx, bool& bytes) { 45 | return false; 46 | } 47 | 48 | virtual bool match_queue(const std::string& key, size_t value, bool& rx, bool& bytes, size_t& queue) { 49 | return false; 50 | } 51 | 52 | public: 53 | static ptr_t find(const std::string& driver); 54 | }; 55 | 56 | // 57 | // concrete class that knows how to extract the three fields 58 | // from groups in a regex 59 | // 60 | // the `order` table specifies the order in which the three 61 | // fields (direction, queue number, metric type) appear as 62 | // groups within the regex 63 | // 64 | // NB: match on "direction" requires an exact match for "rx" 65 | // 66 | // match on "type" requires an exact match for "bytes" 67 | // or "octets" 68 | // 69 | class RegexParser : public StringsetParser { 70 | 71 | public: 72 | typedef std::array total_order_t; 73 | typedef std::array queue_order_t; 74 | 75 | typedef std::pair total_t; 76 | typedef std::pair queue_t; 77 | 78 | typedef std::pair total_str_t; 79 | typedef std::pair queue_str_t; 80 | 81 | public: 82 | static total_str_t total_generic(void); 83 | static total_str_t total_nomatch(void); 84 | static queue_str_t queue_nomatch(void); 85 | 86 | protected: 87 | std::smatch ma; 88 | total_t total; 89 | queue_t queue; 90 | std::string ms(size_t n); 91 | 92 | public: 93 | RegexParser(const driverlist_t& drivers, 94 | const total_str_t& total, 95 | const queue_str_t& queue); 96 | 97 | virtual ~RegexParser() = default; 98 | 99 | virtual bool match_total(const std::string& key, size_t value, bool& rx, bool& bytes); 100 | virtual bool match_queue(const std::string& key, size_t value, bool& rx, bool& bytes, size_t& qnum); 101 | }; 102 | -------------------------------------------------------------------------------- /tests/be2net: -------------------------------------------------------------------------------- 1 | rx_crc_errors: 0 2 | rx_alignment_symbol_errors: 0 3 | rx_pause_frames: 0 4 | rx_control_frames: 0 5 | rx_in_range_errors: 0 6 | rx_out_range_errors: 0 7 | rx_frame_too_long: 0 8 | rx_address_filtered: 5164994 9 | rx_dropped_too_small: 10 10 | rx_dropped_too_short: 5710 11 | rx_dropped_header_too_small: 1096 12 | rx_dropped_tcp_length: 603 13 | rx_dropped_runt: 0 14 | rxpp_fifo_overflow_drop: 0 15 | rx_input_fifo_overflow_drop: 0 16 | rx_ip_checksum_errs: 12655 17 | rx_tcp_checksum_errs: 93915 18 | rx_udp_checksum_errs: 8890 19 | tx_pauseframes: 0 20 | tx_controlframes: 0 21 | rx_priority_pause_frames: 0 22 | tx_priority_pauseframes: 0 23 | pmem_fifo_overflow_drop: 0 24 | jabber_events: 0 25 | rx_drops_no_pbuf: 0 26 | rx_drops_no_erx_descr: 0 27 | rx_drops_no_tpre_descr: 0 28 | rx_drops_too_many_frags: 0 29 | forwarded_packets: 0 30 | rx_drops_mtu: 0 31 | dma_map_errors: 0 32 | eth_red_drops: 0 33 | rx_roce_bytes_lsd: 0 34 | rx_roce_bytes_msd: 0 35 | rx_roce_frames: 0 36 | roce_drops_payload_len: 0 37 | roce_drops_crc: 0 38 | rxq0: rx_bytes: 2439792269 39 | rxq0: rx_pkts: 6743082 40 | rxq0: rx_vxlan_offload_pkts: 0 41 | rxq0: rx_compl: 6743082 42 | rxq0: rx_compl_err: 0 43 | rxq0: rx_mcast_pkts: 0 44 | rxq0: rx_post_fail: 0 45 | rxq0: rx_drops_no_skbs: 0 46 | rxq0: rx_drops_no_frags: 0 47 | rxq1: rx_bytes: 2882162456 48 | rxq1: rx_pkts: 6697989 49 | rxq1: rx_vxlan_offload_pkts: 0 50 | rxq1: rx_compl: 6697989 51 | rxq1: rx_compl_err: 0 52 | rxq1: rx_mcast_pkts: 0 53 | rxq1: rx_post_fail: 0 54 | rxq1: rx_drops_no_skbs: 0 55 | rxq1: rx_drops_no_frags: 0 56 | rxq2: rx_bytes: 2667781824 57 | rxq2: rx_pkts: 6547278 58 | rxq2: rx_vxlan_offload_pkts: 0 59 | rxq2: rx_compl: 6547278 60 | rxq2: rx_compl_err: 0 61 | rxq2: rx_mcast_pkts: 0 62 | rxq2: rx_post_fail: 0 63 | rxq2: rx_drops_no_skbs: 0 64 | rxq2: rx_drops_no_frags: 0 65 | rxq3: rx_bytes: 2851384999 66 | rxq3: rx_pkts: 6783756 67 | rxq3: rx_vxlan_offload_pkts: 0 68 | rxq3: rx_compl: 6783756 69 | rxq3: rx_compl_err: 0 70 | rxq3: rx_mcast_pkts: 0 71 | rxq3: rx_post_fail: 0 72 | rxq3: rx_drops_no_skbs: 0 73 | rxq3: rx_drops_no_frags: 0 74 | rxq4: rx_bytes: 4819001070 75 | rxq4: rx_pkts: 14584601 76 | rxq4: rx_vxlan_offload_pkts: 0 77 | rxq4: rx_compl: 14584601 78 | rxq4: rx_compl_err: 0 79 | rxq4: rx_mcast_pkts: 0 80 | rxq4: rx_post_fail: 0 81 | rxq4: rx_drops_no_skbs: 0 82 | rxq4: rx_drops_no_frags: 0 83 | rxq5: rx_bytes: 2671333598 84 | rxq5: rx_pkts: 6861110 85 | rxq5: rx_vxlan_offload_pkts: 0 86 | rxq5: rx_compl: 6861110 87 | rxq5: rx_compl_err: 0 88 | rxq5: rx_mcast_pkts: 0 89 | rxq5: rx_post_fail: 0 90 | rxq5: rx_drops_no_skbs: 0 91 | rxq5: rx_drops_no_frags: 0 92 | rxq6: rx_bytes: 2800767716 93 | rxq6: rx_pkts: 7428055 94 | rxq6: rx_vxlan_offload_pkts: 0 95 | rxq6: rx_compl: 7428055 96 | rxq6: rx_compl_err: 0 97 | rxq6: rx_mcast_pkts: 0 98 | rxq6: rx_post_fail: 0 99 | rxq6: rx_drops_no_skbs: 0 100 | rxq6: rx_drops_no_frags: 0 101 | rxq7: rx_bytes: 2764715460 102 | rxq7: rx_pkts: 7267267 103 | rxq7: rx_vxlan_offload_pkts: 0 104 | rxq7: rx_compl: 7267267 105 | rxq7: rx_compl_err: 0 106 | rxq7: rx_mcast_pkts: 0 107 | rxq7: rx_post_fail: 0 108 | rxq7: rx_drops_no_skbs: 0 109 | rxq7: rx_drops_no_frags: 0 110 | rxq8: rx_bytes: 837069219 111 | rxq8: rx_pkts: 11437669 112 | rxq8: rx_vxlan_offload_pkts: 0 113 | rxq8: rx_compl: 11437669 114 | rxq8: rx_compl_err: 93862 115 | rxq8: rx_mcast_pkts: 1219229 116 | rxq8: rx_post_fail: 0 117 | rxq8: rx_drops_no_skbs: 0 118 | rxq8: rx_drops_no_frags: 0 119 | txq0: tx_compl: 7456829 120 | txq0: tx_hdr_parse_err: 0 121 | txq0: tx_dma_err: 0 122 | txq0: tx_spoof_check_err: 0 123 | txq0: tx_tso_err: 0 124 | txq0: tx_qinq_err: 0 125 | txq0: tx_internal_parity_err: 0 126 | txq0: tx_bytes: 1481166547 127 | txq0: tx_pkts: 7694961 128 | txq0: tx_vxlan_offload_pkts: 0 129 | txq0: tx_reqs: 7456829 130 | txq0: tx_stops: 0 131 | txq0: tx_drv_drops: 0 132 | txq1: tx_compl: 7343651 133 | txq1: tx_hdr_parse_err: 0 134 | txq1: tx_dma_err: 0 135 | txq1: tx_spoof_check_err: 0 136 | txq1: tx_tso_err: 0 137 | txq1: tx_qinq_err: 0 138 | txq1: tx_internal_parity_err: 0 139 | txq1: tx_bytes: 1537975832 140 | txq1: tx_pkts: 7626886 141 | txq1: tx_vxlan_offload_pkts: 0 142 | txq1: tx_reqs: 7343651 143 | txq1: tx_stops: 0 144 | txq1: tx_drv_drops: 0 145 | txq2: tx_compl: 7267281 146 | txq2: tx_hdr_parse_err: 0 147 | txq2: tx_dma_err: 0 148 | txq2: tx_spoof_check_err: 0 149 | txq2: tx_tso_err: 0 150 | txq2: tx_qinq_err: 0 151 | txq2: tx_internal_parity_err: 0 152 | txq2: tx_bytes: 1492760836 153 | txq2: tx_pkts: 7527778 154 | txq2: tx_vxlan_offload_pkts: 0 155 | txq2: tx_reqs: 7267281 156 | txq2: tx_stops: 0 157 | txq2: tx_drv_drops: 0 158 | txq3: tx_compl: 7435127 159 | txq3: tx_hdr_parse_err: 0 160 | txq3: tx_dma_err: 0 161 | txq3: tx_spoof_check_err: 0 162 | txq3: tx_tso_err: 0 163 | txq3: tx_qinq_err: 0 164 | txq3: tx_internal_parity_err: 0 165 | txq3: tx_bytes: 1503631982 166 | txq3: tx_pkts: 7690089 167 | txq3: tx_vxlan_offload_pkts: 0 168 | txq3: tx_reqs: 7435127 169 | txq3: tx_stops: 0 170 | txq3: tx_drv_drops: 0 171 | txq4: tx_compl: 14684227 172 | txq4: tx_hdr_parse_err: 0 173 | txq4: tx_dma_err: 0 174 | txq4: tx_spoof_check_err: 0 175 | txq4: tx_tso_err: 0 176 | txq4: tx_qinq_err: 0 177 | txq4: tx_internal_parity_err: 0 178 | txq4: tx_bytes: 2214385049 179 | txq4: tx_pkts: 14979301 180 | txq4: tx_vxlan_offload_pkts: 0 181 | txq4: tx_reqs: 14684227 182 | txq4: tx_stops: 0 183 | txq4: tx_drv_drops: 0 184 | txq5: tx_compl: 7754245 185 | txq5: tx_hdr_parse_err: 0 186 | txq5: tx_dma_err: 0 187 | txq5: tx_spoof_check_err: 0 188 | txq5: tx_tso_err: 0 189 | txq5: tx_qinq_err: 0 190 | txq5: tx_internal_parity_err: 0 191 | txq5: tx_bytes: 1558800218 192 | txq5: tx_pkts: 8025418 193 | txq5: tx_vxlan_offload_pkts: 0 194 | txq5: tx_reqs: 7754245 195 | txq5: tx_stops: 0 196 | txq5: tx_drv_drops: 0 197 | txq6: tx_compl: 8531252 198 | txq6: tx_hdr_parse_err: 0 199 | txq6: tx_dma_err: 0 200 | txq6: tx_spoof_check_err: 0 201 | txq6: tx_tso_err: 0 202 | txq6: tx_qinq_err: 0 203 | txq6: tx_internal_parity_err: 0 204 | txq6: tx_bytes: 1604539166 205 | txq6: tx_pkts: 8783170 206 | txq6: tx_vxlan_offload_pkts: 0 207 | txq6: tx_reqs: 8531252 208 | txq6: tx_stops: 0 209 | txq6: tx_drv_drops: 0 210 | txq7: tx_compl: 8695318 211 | txq7: tx_hdr_parse_err: 0 212 | txq7: tx_dma_err: 0 213 | txq7: tx_spoof_check_err: 0 214 | txq7: tx_tso_err: 0 215 | txq7: tx_qinq_err: 0 216 | txq7: tx_internal_parity_err: 0 217 | txq7: tx_bytes: 1616405368 218 | txq7: tx_pkts: 8958932 219 | txq7: tx_vxlan_offload_pkts: 0 220 | txq7: tx_reqs: 8695318 221 | txq7: tx_stops: 0 222 | txq7: tx_drv_drops: 0 223 | -------------------------------------------------------------------------------- /tests/bnx2: -------------------------------------------------------------------------------- 1 | rx_bytes: 12532335371359 2 | rx_error_bytes: 0 3 | tx_bytes: 48799173902667 4 | tx_error_bytes: 0 5 | rx_ucast_packets: 19363870912 6 | rx_mcast_packets: 4826228 7 | rx_bcast_packets: 38192715 8 | tx_ucast_packets: 41213192818 9 | tx_mcast_packets: 442756 10 | tx_bcast_packets: 101 11 | tx_mac_errors: 0 12 | tx_carrier_errors: 0 13 | rx_crc_errors: 0 14 | rx_align_errors: 0 15 | tx_single_collisions: 0 16 | tx_multi_collisions: 0 17 | tx_deferred: 0 18 | tx_excess_collisions: 0 19 | tx_late_collisions: 0 20 | tx_total_collisions: 0 21 | rx_fragments: 0 22 | rx_jabbers: 0 23 | rx_undersize_packets: 0 24 | rx_oversize_packets: 0 25 | rx_64_byte_packets: 47903542 26 | rx_65_to_127_byte_packets: 213204013 27 | rx_128_to_255_byte_packets: 1496176960 28 | rx_256_to_511_byte_packets: 807022245 29 | rx_512_to_1023_byte_packets: 674619050 30 | rx_1024_to_1522_byte_packets: 3283062157 31 | rx_1523_to_9022_byte_packets: 0 32 | tx_64_byte_packets: 7144408 33 | tx_65_to_127_byte_packets: 289112807 34 | tx_128_to_255_byte_packets: 2252555245 35 | tx_256_to_511_byte_packets: 1927965455 36 | tx_512_to_1023_byte_packets: 1593313487 37 | tx_1024_to_1522_byte_packets: 783806543 38 | tx_1523_to_9022_byte_packets: 0 39 | rx_xon_frames: 0 40 | rx_xoff_frames: 0 41 | tx_xon_frames: 306 42 | tx_xoff_frames: 332 43 | rx_mac_ctrl_frames: 0 44 | rx_filtered_packets: 20991495 45 | rx_ftq_discards: 0 46 | rx_discards: 0 47 | rx_fw_discards: 0 48 | -------------------------------------------------------------------------------- /tests/bnx2x: -------------------------------------------------------------------------------- 1 | [0]: rx_bytes: 209487403324 2 | [0]: rx_ucast_packets: 194386668 3 | [0]: rx_mcast_packets: 1977213 4 | [0]: rx_bcast_packets: 1314918 5 | [0]: rx_discards: 0 6 | [0]: rx_phy_ip_err_discards: 0 7 | [0]: rx_skb_alloc_discard: 0 8 | [0]: rx_csum_offload_errors: 0 9 | [0]: tx_exhaustion_events: 0 10 | [0]: tx_bytes: 58683687716 11 | [0]: tx_ucast_packets: 156650762 12 | [0]: tx_mcast_packets: 0 13 | [0]: tx_bcast_packets: 0 14 | [0]: tpa_aggregations: 11302917 15 | [0]: tpa_aggregated_frames: 133512833 16 | [0]: tpa_bytes: 202404822780 17 | [0]: driver_filtered_tx_pkt: 0 18 | [1]: rx_bytes: 207561754146 19 | [1]: rx_ucast_packets: 170492982 20 | [1]: rx_mcast_packets: 90 21 | [1]: rx_bcast_packets: 1447 22 | [1]: rx_discards: 0 23 | [1]: rx_phy_ip_err_discards: 0 24 | [1]: rx_skb_alloc_discard: 0 25 | [1]: rx_csum_offload_errors: 0 26 | [1]: tx_exhaustion_events: 0 27 | [1]: tx_bytes: 48398427765 28 | [1]: tx_ucast_packets: 132407943 29 | [1]: tx_mcast_packets: 0 30 | [1]: tx_bcast_packets: 8249 31 | [1]: tpa_aggregations: 11421208 32 | [1]: tpa_aggregated_frames: 134227250 33 | [1]: tpa_bytes: 203487947080 34 | [1]: driver_filtered_tx_pkt: 0 35 | [2]: rx_bytes: 212140089057 36 | [2]: rx_ucast_packets: 201407420 37 | [2]: rx_mcast_packets: 1 38 | [2]: rx_bcast_packets: 524 39 | [2]: rx_discards: 0 40 | [2]: rx_phy_ip_err_discards: 0 41 | [2]: rx_skb_alloc_discard: 0 42 | [2]: rx_csum_offload_errors: 0 43 | [2]: tx_exhaustion_events: 0 44 | [2]: tx_bytes: 71080622533 45 | [2]: tx_ucast_packets: 183556192 46 | [2]: tx_mcast_packets: 0 47 | [2]: tx_bcast_packets: 0 48 | [2]: tpa_aggregations: 11449751 49 | [2]: tpa_aggregated_frames: 135160862 50 | [2]: tpa_bytes: 204905584810 51 | [2]: driver_filtered_tx_pkt: 0 52 | [3]: rx_bytes: 216656736913 53 | [3]: rx_ucast_packets: 205324415 54 | [3]: rx_mcast_packets: 23 55 | [3]: rx_bcast_packets: 10217 56 | [3]: rx_discards: 0 57 | [3]: rx_phy_ip_err_discards: 0 58 | [3]: rx_skb_alloc_discard: 0 59 | [3]: rx_csum_offload_errors: 0 60 | [3]: tx_exhaustion_events: 0 61 | [3]: tx_bytes: 51308357737 62 | [3]: tx_ucast_packets: 136112258 63 | [3]: tx_mcast_packets: 0 64 | [3]: tx_bcast_packets: 0 65 | [3]: tpa_aggregations: 11825182 66 | [3]: tpa_aggregated_frames: 138209122 67 | [3]: tpa_bytes: 209260584817 68 | [3]: driver_filtered_tx_pkt: 0 69 | [4]: rx_bytes: 209590722446 70 | [4]: rx_ucast_packets: 192984335 71 | [4]: rx_mcast_packets: 35 72 | [4]: rx_bcast_packets: 13045 73 | [4]: rx_discards: 0 74 | [4]: rx_phy_ip_err_discards: 0 75 | [4]: rx_skb_alloc_discard: 0 76 | [4]: rx_csum_offload_errors: 0 77 | [4]: tx_exhaustion_events: 0 78 | [4]: tx_bytes: 54280967548 79 | [4]: tx_ucast_packets: 146022916 80 | [4]: tx_mcast_packets: 7 81 | [4]: tx_bcast_packets: 0 82 | [4]: tpa_aggregations: 11363112 83 | [4]: tpa_aggregated_frames: 134029807 84 | [4]: tpa_bytes: 203193652200 85 | [4]: driver_filtered_tx_pkt: 0 86 | [5]: rx_bytes: 227582912666 87 | [5]: rx_ucast_packets: 253934780 88 | [5]: rx_mcast_packets: 76 89 | [5]: rx_bcast_packets: 136 90 | [5]: rx_discards: 0 91 | [5]: rx_phy_ip_err_discards: 0 92 | [5]: rx_skb_alloc_discard: 0 93 | [5]: rx_csum_offload_errors: 0 94 | [5]: tx_exhaustion_events: 0 95 | [5]: tx_bytes: 58078471224 96 | [5]: tx_ucast_packets: 152287571 97 | [5]: tx_mcast_packets: 5 98 | [5]: tx_bcast_packets: 0 99 | [5]: tpa_aggregations: 11762192 100 | [5]: tpa_aggregated_frames: 137031734 101 | [5]: tpa_bytes: 207580859167 102 | [5]: driver_filtered_tx_pkt: 0 103 | [6]: rx_bytes: 210804597840 104 | [6]: rx_ucast_packets: 206503753 105 | [6]: rx_mcast_packets: 0 106 | [6]: rx_bcast_packets: 112231 107 | [6]: rx_discards: 0 108 | [6]: rx_phy_ip_err_discards: 0 109 | [6]: rx_skb_alloc_discard: 0 110 | [6]: rx_csum_offload_errors: 0 111 | [6]: tx_exhaustion_events: 0 112 | [6]: tx_bytes: 48621710603 113 | [6]: tx_ucast_packets: 132087428 114 | [6]: tx_mcast_packets: 0 115 | [6]: tx_bcast_packets: 0 116 | [6]: tpa_aggregations: 11346578 117 | [6]: tpa_aggregated_frames: 133823738 118 | [6]: tpa_bytes: 202868018893 119 | [6]: driver_filtered_tx_pkt: 0 120 | [7]: rx_bytes: 209770669380 121 | [7]: rx_ucast_packets: 178090659 122 | [7]: rx_mcast_packets: 6 123 | [7]: rx_bcast_packets: 12588 124 | [7]: rx_discards: 0 125 | [7]: rx_phy_ip_err_discards: 0 126 | [7]: rx_skb_alloc_discard: 0 127 | [7]: rx_csum_offload_errors: 0 128 | [7]: tx_exhaustion_events: 0 129 | [7]: tx_bytes: 48114336428 130 | [7]: tx_ucast_packets: 130962018 131 | [7]: tx_mcast_packets: 309529 132 | [7]: tx_bcast_packets: 0 133 | [7]: tpa_aggregations: 11431679 134 | [7]: tpa_aggregated_frames: 135152251 135 | [7]: tpa_bytes: 204893159596 136 | [7]: driver_filtered_tx_pkt: 0 137 | rx_bytes: 1703594885772 138 | rx_error_bytes: 0 139 | rx_ucast_packets: 1603125012 140 | rx_mcast_packets: 1977444 141 | rx_bcast_packets: 1465106 142 | rx_crc_errors: 0 143 | rx_align_errors: 0 144 | rx_undersize_packets: 0 145 | rx_oversize_packets: 0 146 | rx_fragments: 0 147 | rx_jabbers: 0 148 | rx_discards: 0 149 | rx_filtered_packets: 30687561 150 | rx_mf_tag_discard: 0 151 | pfc_frames_received: 0 152 | pfc_frames_sent: 0 153 | rx_brb_discard: 0 154 | rx_brb_truncate: 0 155 | rx_pause_frames: 0 156 | rx_mac_ctrl_frames: 0 157 | rx_constant_pause_events: 2 158 | rx_phy_ip_err_discards: 0 159 | rx_skb_alloc_discard: 0 160 | rx_csum_offload_errors: 0 161 | tx_exhaustion_events: 0 162 | tx_bytes: 438566581554 163 | tx_error_bytes: 0 164 | tx_ucast_packets: 1170087088 165 | tx_mcast_packets: 309541 166 | tx_bcast_packets: 8249 167 | tx_mac_errors: 2 168 | tx_carrier_errors: 0 169 | tx_single_collisions: 0 170 | tx_multi_collisions: 0 171 | tx_deferred: 0 172 | tx_excess_collisions: 0 173 | tx_late_collisions: 0 174 | tx_total_collisions: 0 175 | tx_64_byte_packets: 450368 176 | tx_65_to_127_byte_packets: 682645668 177 | tx_128_to_255_byte_packets: 8388699 178 | tx_256_to_511_byte_packets: 189886883 179 | tx_512_to_1023_byte_packets: 147607729 180 | tx_1024_to_1522_byte_packets: 138430710 181 | tx_1523_to_9022_byte_packets: 0 182 | tx_pause_frames: 0 183 | tpa_aggregations: 91902619 184 | tpa_aggregated_frames: 1081147597 185 | tpa_bytes: 1638594629343 186 | recoverable_errors: 0 187 | unrecoverable_errors: 0 188 | driver_filtered_tx_pkt: 0 189 | Tx LPI entry count: 0 190 | -------------------------------------------------------------------------------- /tests/bnxt_en: -------------------------------------------------------------------------------- 1 | NIC statistics: 2 | [0]: rx_ucast_packets: 10198513532 3 | [0]: rx_mcast_packets: 3854315 4 | [0]: rx_bcast_packets: 124570464 5 | [0]: rx_discards: 11763190 6 | [0]: rx_errors: 0 7 | [0]: rx_ucast_bytes: 8926453110639 8 | [0]: rx_mcast_bytes: 1184763754 9 | [0]: rx_bcast_bytes: 7658835398 10 | [0]: tx_ucast_packets: 2811906835 11 | [0]: tx_mcast_packets: 0 12 | [0]: tx_bcast_packets: 0 13 | [0]: tx_errors: 0 14 | [0]: tx_discards: 0 15 | [0]: tx_ucast_bytes: 1462856966524 16 | [0]: tx_mcast_bytes: 0 17 | [0]: tx_bcast_bytes: 0 18 | [0]: tpa_packets: 0 19 | [0]: tpa_bytes: 0 20 | [0]: tpa_events: 0 21 | [0]: tpa_aborts: 0 22 | [0]: rx_l4_csum_errors: 3442 23 | [0]: rx_resets: 0 24 | [0]: rx_buf_errors: 0 25 | [0]: missed_irqs: 0 26 | [1]: rx_ucast_packets: 10418578771 27 | [1]: rx_mcast_packets: 9467129 28 | [1]: rx_bcast_packets: 295 29 | [1]: rx_discards: 10611365 30 | [1]: rx_errors: 0 31 | [1]: rx_ucast_bytes: 9012688698556 32 | [1]: rx_mcast_bytes: 4167996334 33 | [1]: rx_bcast_bytes: 18290 34 | [1]: tx_ucast_packets: 2944476622 35 | [1]: tx_mcast_packets: 0 36 | [1]: tx_bcast_packets: 0 37 | [1]: tx_errors: 0 38 | [1]: tx_discards: 0 39 | [1]: tx_ucast_bytes: 1537274134211 40 | [1]: tx_mcast_bytes: 0 41 | [1]: tx_bcast_bytes: 0 42 | [1]: tpa_packets: 0 43 | [1]: tpa_bytes: 0 44 | [1]: tpa_events: 0 45 | [1]: tpa_aborts: 0 46 | [1]: rx_l4_csum_errors: 2909 47 | [1]: rx_resets: 0 48 | [1]: rx_buf_errors: 0 49 | [1]: missed_irqs: 0 50 | [2]: rx_ucast_packets: 10194101500 51 | [2]: rx_mcast_packets: 8898942 52 | [2]: rx_bcast_packets: 200 53 | [2]: rx_discards: 10422195 54 | [2]: rx_errors: 0 55 | [2]: rx_ucast_bytes: 8893668293363 56 | [2]: rx_mcast_bytes: 3828141033 57 | [2]: rx_bcast_bytes: 12400 58 | [2]: tx_ucast_packets: 2765280004 59 | [2]: tx_mcast_packets: 0 60 | [2]: tx_bcast_packets: 0 61 | [2]: tx_errors: 0 62 | [2]: tx_discards: 0 63 | [2]: tx_ucast_bytes: 1372538107516 64 | [2]: tx_mcast_bytes: 0 65 | [2]: tx_bcast_bytes: 0 66 | [2]: tpa_packets: 0 67 | [2]: tpa_bytes: 0 68 | [2]: tpa_events: 0 69 | [2]: tpa_aborts: 0 70 | [2]: rx_l4_csum_errors: 13872 71 | [2]: rx_resets: 0 72 | [2]: rx_buf_errors: 0 73 | [2]: missed_irqs: 0 74 | [3]: rx_ucast_packets: 10146503431 75 | [3]: rx_mcast_packets: 20147032 76 | [3]: rx_bcast_packets: 292 77 | [3]: rx_discards: 10573381 78 | [3]: rx_errors: 0 79 | [3]: rx_ucast_bytes: 8825085068105 80 | [3]: rx_mcast_bytes: 9219769672 81 | [3]: rx_bcast_bytes: 18104 82 | [3]: tx_ucast_packets: 2784718144 83 | [3]: tx_mcast_packets: 0 84 | [3]: tx_bcast_packets: 0 85 | [3]: tx_errors: 0 86 | [3]: tx_discards: 0 87 | [3]: tx_ucast_bytes: 1401210523511 88 | [3]: tx_mcast_bytes: 0 89 | [3]: tx_bcast_bytes: 0 90 | [3]: tpa_packets: 0 91 | [3]: tpa_bytes: 0 92 | [3]: tpa_events: 0 93 | [3]: tpa_aborts: 0 94 | [3]: rx_l4_csum_errors: 6163 95 | [3]: rx_resets: 0 96 | [3]: rx_buf_errors: 0 97 | [3]: missed_irqs: 0 98 | [4]: rx_ucast_packets: 10224502490 99 | [4]: rx_mcast_packets: 377783954 100 | [4]: rx_bcast_packets: 252 101 | [4]: rx_discards: 10455357 102 | [4]: rx_errors: 0 103 | [4]: rx_ucast_bytes: 8920427591589 104 | [4]: rx_mcast_bytes: 282210194975 105 | [4]: rx_bcast_bytes: 15624 106 | [4]: tx_ucast_packets: 2869125692 107 | [4]: tx_mcast_packets: 0 108 | [4]: tx_bcast_packets: 0 109 | [4]: tx_errors: 0 110 | [4]: tx_discards: 0 111 | [4]: tx_ucast_bytes: 1565231780886 112 | [4]: tx_mcast_bytes: 0 113 | [4]: tx_bcast_bytes: 0 114 | [4]: tpa_packets: 0 115 | [4]: tpa_bytes: 0 116 | [4]: tpa_events: 0 117 | [4]: tpa_aborts: 0 118 | [4]: rx_l4_csum_errors: 3867 119 | [4]: rx_resets: 0 120 | [4]: rx_buf_errors: 0 121 | [4]: missed_irqs: 0 122 | [5]: rx_ucast_packets: 10199052923 123 | [5]: rx_mcast_packets: 373435650 124 | [5]: rx_bcast_packets: 283 125 | [5]: rx_discards: 10249715 126 | [5]: rx_errors: 0 127 | [5]: rx_ucast_bytes: 8891260879585 128 | [5]: rx_mcast_bytes: 268555037122 129 | [5]: rx_bcast_bytes: 18599 130 | [5]: tx_ucast_packets: 2865423392 131 | [5]: tx_mcast_packets: 0 132 | [5]: tx_bcast_packets: 0 133 | [5]: tx_errors: 0 134 | [5]: tx_discards: 0 135 | [5]: tx_ucast_bytes: 1524746102151 136 | [5]: tx_mcast_bytes: 0 137 | [5]: tx_bcast_bytes: 0 138 | [5]: tpa_packets: 0 139 | [5]: tpa_bytes: 0 140 | [5]: tpa_events: 0 141 | [5]: tpa_aborts: 0 142 | [5]: rx_l4_csum_errors: 6425 143 | [5]: rx_resets: 0 144 | [5]: rx_buf_errors: 0 145 | [5]: missed_irqs: 0 146 | [6]: rx_ucast_packets: 10249151507 147 | [6]: rx_mcast_packets: 397672279 148 | [6]: rx_bcast_packets: 243 149 | [6]: rx_discards: 10408867 150 | [6]: rx_errors: 0 151 | [6]: rx_ucast_bytes: 8973706057588 152 | [6]: rx_mcast_bytes: 294323380535 153 | [6]: rx_bcast_bytes: 16119 154 | [6]: tx_ucast_packets: 2833833988 155 | [6]: tx_mcast_packets: 0 156 | [6]: tx_bcast_packets: 0 157 | [6]: tx_errors: 0 158 | [6]: tx_discards: 0 159 | [6]: tx_ucast_bytes: 1492697626845 160 | [6]: tx_mcast_bytes: 0 161 | [6]: tx_bcast_bytes: 0 162 | [6]: tpa_packets: 0 163 | [6]: tpa_bytes: 0 164 | [6]: tpa_events: 0 165 | [6]: tpa_aborts: 0 166 | [6]: rx_l4_csum_errors: 5139 167 | [6]: rx_resets: 0 168 | [6]: rx_buf_errors: 0 169 | [6]: missed_irqs: 0 170 | [7]: rx_ucast_packets: 10156240633 171 | [7]: rx_mcast_packets: 507970511 172 | [7]: rx_bcast_packets: 272 173 | [7]: rx_discards: 9809679 174 | [7]: rx_errors: 0 175 | [7]: rx_ucast_bytes: 8841482944119 176 | [7]: rx_mcast_bytes: 489794998086 177 | [7]: rx_bcast_bytes: 16864 178 | [7]: tx_ucast_packets: 2742995955 179 | [7]: tx_mcast_packets: 0 180 | [7]: tx_bcast_packets: 0 181 | [7]: tx_errors: 0 182 | [7]: tx_discards: 0 183 | [7]: tx_ucast_bytes: 1368507557419 184 | [7]: tx_mcast_bytes: 0 185 | [7]: tx_bcast_bytes: 0 186 | [7]: tpa_packets: 0 187 | [7]: tpa_bytes: 0 188 | [7]: tpa_events: 0 189 | [7]: tpa_aborts: 0 190 | [7]: rx_l4_csum_errors: 6925 191 | [7]: rx_resets: 0 192 | [7]: rx_buf_errors: 0 193 | [7]: missed_irqs: 0 194 | [8]: rx_ucast_packets: 10297685752 195 | [8]: rx_mcast_packets: 68210628 196 | [8]: rx_bcast_packets: 231 197 | [8]: rx_discards: 9830722 198 | [8]: rx_errors: 0 199 | [8]: rx_ucast_bytes: 8965591733249 200 | [8]: rx_mcast_bytes: 70193948690 201 | [8]: rx_bcast_bytes: 14322 202 | [8]: tx_ucast_packets: 2831685303 203 | [8]: tx_mcast_packets: 0 204 | [8]: tx_bcast_packets: 0 205 | [8]: tx_errors: 0 206 | [8]: tx_discards: 0 207 | [8]: tx_ucast_bytes: 1480438935686 208 | [8]: tx_mcast_bytes: 0 209 | [8]: tx_bcast_bytes: 0 210 | [8]: tpa_packets: 0 211 | [8]: tpa_bytes: 0 212 | [8]: tpa_events: 0 213 | [8]: tpa_aborts: 0 214 | [8]: rx_l4_csum_errors: 5551 215 | [8]: rx_resets: 0 216 | [8]: rx_buf_errors: 0 217 | [8]: missed_irqs: 0 218 | [9]: rx_ucast_packets: 10278089295 219 | [9]: rx_mcast_packets: 48639974 220 | [9]: rx_bcast_packets: 258 221 | [9]: rx_discards: 9887942 222 | [9]: rx_errors: 0 223 | [9]: rx_ucast_bytes: 8908868954811 224 | [9]: rx_mcast_bytes: 51914509322 225 | [9]: rx_bcast_bytes: 15996 226 | [9]: tx_ucast_packets: 2877042890 227 | [9]: tx_mcast_packets: 0 228 | [9]: tx_bcast_packets: 0 229 | [9]: tx_errors: 0 230 | [9]: tx_discards: 0 231 | [9]: tx_ucast_bytes: 1446318947746 232 | [9]: tx_mcast_bytes: 0 233 | [9]: tx_bcast_bytes: 0 234 | [9]: tpa_packets: 0 235 | [9]: tpa_bytes: 0 236 | [9]: tpa_events: 0 237 | [9]: tpa_aborts: 0 238 | [9]: rx_l4_csum_errors: 5430 239 | [9]: rx_resets: 0 240 | [9]: rx_buf_errors: 0 241 | [9]: missed_irqs: 0 242 | [10]: rx_ucast_packets: 10153781481 243 | [10]: rx_mcast_packets: 92153366 244 | [10]: rx_bcast_packets: 230 245 | [10]: rx_discards: 9859473 246 | [10]: rx_errors: 0 247 | [10]: rx_ucast_bytes: 8873172688194 248 | [10]: rx_mcast_bytes: 94637350179 249 | [10]: rx_bcast_bytes: 14260 250 | [10]: tx_ucast_packets: 2779454122 251 | [10]: tx_mcast_packets: 0 252 | [10]: tx_bcast_packets: 0 253 | [10]: tx_errors: 0 254 | [10]: tx_discards: 0 255 | [10]: tx_ucast_bytes: 1450110232981 256 | [10]: tx_mcast_bytes: 0 257 | [10]: tx_bcast_bytes: 0 258 | [10]: tpa_packets: 0 259 | [10]: tpa_bytes: 0 260 | [10]: tpa_events: 0 261 | [10]: tpa_aborts: 0 262 | [10]: rx_l4_csum_errors: 6504 263 | [10]: rx_resets: 0 264 | [10]: rx_buf_errors: 0 265 | [10]: missed_irqs: 0 266 | [11]: rx_ucast_packets: 10123111140 267 | [11]: rx_mcast_packets: 59706646 268 | [11]: rx_bcast_packets: 258 269 | [11]: rx_discards: 9244693 270 | [11]: rx_errors: 0 271 | [11]: rx_ucast_bytes: 8802192527858 272 | [11]: rx_mcast_bytes: 63770804573 273 | [11]: rx_bcast_bytes: 15996 274 | [11]: tx_ucast_packets: 2820769676 275 | [11]: tx_mcast_packets: 0 276 | [11]: tx_bcast_packets: 0 277 | [11]: tx_errors: 0 278 | [11]: tx_discards: 0 279 | [11]: tx_ucast_bytes: 1507044546359 280 | [11]: tx_mcast_bytes: 0 281 | [11]: tx_bcast_bytes: 0 282 | [11]: tpa_packets: 0 283 | [11]: tpa_bytes: 0 284 | [11]: tpa_events: 0 285 | [11]: tpa_aborts: 0 286 | [11]: rx_l4_csum_errors: 5858 287 | [11]: rx_resets: 0 288 | [11]: rx_buf_errors: 0 289 | [11]: missed_irqs: 0 290 | rx_total_l4_csum_errors: 428620 291 | rx_total_resets: 0 292 | rx_total_buf_errors: 0 293 | rx_total_oom_discards: 0 294 | rx_total_netpoll_discards: 0 295 | rx_total_ring_discards: 655430134 296 | tx_total_resets: 0 297 | tx_total_ring_discards: 0 298 | total_missed_irqs: 0 299 | rx_64b_frames: 6173873185 300 | rx_65b_127b_frames: 167230792639 301 | rx_128b_255b_frames: 104525368401 302 | rx_256b_511b_frames: 15804823492 303 | rx_512b_1023b_frames: 18583386701 304 | rx_1024b_1518b_frames: 139555903469 305 | rx_good_vlan_frames: 111220089565 306 | rx_1519b_2047b_frames: 210382908588 307 | rx_2048b_4095b_frames: 0 308 | rx_4096b_9216b_frames: 0 309 | rx_9217b_16383b_frames: 0 310 | rx_total_frames: 662257056500 311 | rx_ucast_frames: 657730753441 312 | rx_mcast_frames: 4401417802 313 | rx_bcast_frames: 124885258 314 | rx_fcs_err_frames: 0 315 | rx_ctrl_frames: 0 316 | rx_pause_frames: 0 317 | rx_pfc_frames: 0 318 | rx_align_err_frames: 0 319 | rx_ovrsz_frames: 0 320 | rx_jbr_frames: 0 321 | rx_mtu_err_frames: 0 322 | rx_tagged_frames: 662238511375 323 | rx_double_tagged_frames: 0 324 | rx_good_frames: 662257056609 325 | rx_pfc_ena_frames_pri0: 0 326 | rx_pfc_ena_frames_pri1: 0 327 | rx_pfc_ena_frames_pri2: 0 328 | rx_pfc_ena_frames_pri3: 0 329 | rx_pfc_ena_frames_pri4: 0 330 | rx_pfc_ena_frames_pri5: 0 331 | rx_pfc_ena_frames_pri6: 0 332 | rx_pfc_ena_frames_pri7: 0 333 | rx_undrsz_frames: 0 334 | rx_eee_lpi_events: 0 335 | rx_eee_lpi_duration: 0 336 | rx_bytes: 577687185962088 337 | rx_runt_bytes: 0 338 | rx_runt_frames: 0 339 | rx_stat_discard: 49337 340 | rx_stat_err: 0 341 | tx_64b_frames: 3101510414 342 | tx_65b_127b_frames: 142988584370 343 | tx_128b_255b_frames: 91326295239 344 | tx_256b_511b_frames: 14353606293 345 | tx_512b_1023b_frames: 20971580770 346 | tx_1024b_1518b_frames: 218102868745 347 | tx_good_vlan_frames: 108380236428 348 | tx_1519b_2047b_frames: 263265192033 349 | tx_2048b_4095b_frames: 0 350 | tx_4096b_9216b_frames: 0 351 | tx_9217b_16383b_frames: 0 352 | tx_good_frames: 754109637868 353 | tx_total_frames: 754109637868 354 | tx_ucast_frames: 754082578391 355 | tx_mcast_frames: 26550190 356 | tx_bcast_frames: 509287 357 | tx_pause_frames: 0 358 | tx_pfc_frames: 0 359 | tx_jabber_frames: 0 360 | tx_fcs_err_frames: 0 361 | tx_err: 0 362 | tx_fifo_underruns: 0 363 | tx_pfc_ena_frames_pri0: 0 364 | tx_pfc_ena_frames_pri1: 0 365 | tx_pfc_ena_frames_pri2: 0 366 | tx_pfc_ena_frames_pri3: 0 367 | tx_pfc_ena_frames_pri4: 0 368 | tx_pfc_ena_frames_pri5: 0 369 | tx_pfc_ena_frames_pri6: 0 370 | tx_pfc_ena_frames_pri7: 0 371 | tx_eee_lpi_events: 0 372 | tx_eee_lpi_duration: 0 373 | tx_total_collisions: 0 374 | tx_bytes: 770394433789550 375 | tx_xthol_frames: 0 376 | tx_stat_discard: 0 377 | tx_stat_error: 0 378 | link_down_events: 0 379 | continuous_pause_events: 0 380 | resume_pause_events: 0 381 | continuous_roce_pause_events: 0 382 | resume_roce_pause_events: 0 383 | rx_bytes_cos0: 0 384 | rx_packets_cos0: 0 385 | rx_bytes_cos1: 0 386 | rx_packets_cos1: 0 387 | rx_bytes_cos2: 0 388 | rx_packets_cos2: 0 389 | rx_bytes_cos3: 0 390 | rx_packets_cos3: 0 391 | rx_bytes_cos4: 0 392 | rx_packets_cos4: 0 393 | rx_bytes_cos5: 0 394 | rx_packets_cos5: 0 395 | rx_bytes_cos6: 0 396 | rx_packets_cos6: 0 397 | rx_bytes_cos7: 0 398 | rx_packets_cos7: 0 399 | pfc_pri0_rx_duration_us: 0 400 | pfc_pri0_rx_transitions: 0 401 | pfc_pri1_rx_duration_us: 0 402 | pfc_pri1_rx_transitions: 0 403 | pfc_pri2_rx_duration_us: 0 404 | pfc_pri2_rx_transitions: 0 405 | pfc_pri3_rx_duration_us: 0 406 | pfc_pri3_rx_transitions: 0 407 | pfc_pri4_rx_duration_us: 0 408 | pfc_pri4_rx_transitions: 0 409 | pfc_pri5_rx_duration_us: 0 410 | pfc_pri5_rx_transitions: 0 411 | pfc_pri6_rx_duration_us: 0 412 | pfc_pri6_rx_transitions: 0 413 | pfc_pri7_rx_duration_us: 0 414 | pfc_pri7_rx_transitions: 0 415 | rx_bits: 4621497487696704 416 | rx_buffer_passed_threshold: 417 417 | rx_pcs_symbol_err: 0 418 | rx_corrected_bits: 0 419 | rx_discard_bytes_cos0: 0 420 | rx_discard_packets_cos0: 0 421 | rx_discard_bytes_cos1: 0 422 | rx_discard_packets_cos1: 0 423 | rx_discard_bytes_cos2: 0 424 | rx_discard_packets_cos2: 0 425 | rx_discard_bytes_cos3: 0 426 | rx_discard_packets_cos3: 0 427 | rx_discard_bytes_cos4: 0 428 | rx_discard_packets_cos4: 0 429 | rx_discard_bytes_cos5: 0 430 | rx_discard_packets_cos5: 0 431 | rx_discard_bytes_cos6: 0 432 | rx_discard_packets_cos6: 0 433 | rx_discard_bytes_cos7: 0 434 | rx_discard_packets_cos7: 0 435 | rx_fec_corrected_blocks: 0 436 | rx_fec_uncorrectable_blocks: 0 437 | tx_bytes_cos0: 0 438 | tx_packets_cos0: 0 439 | tx_bytes_cos1: 0 440 | tx_packets_cos1: 0 441 | tx_bytes_cos2: 0 442 | tx_packets_cos2: 0 443 | tx_bytes_cos3: 0 444 | tx_packets_cos3: 0 445 | tx_bytes_cos4: 0 446 | tx_packets_cos4: 0 447 | tx_bytes_cos5: 0 448 | tx_packets_cos5: 0 449 | tx_bytes_cos6: 0 450 | tx_packets_cos6: 0 451 | tx_bytes_cos7: 0 452 | tx_packets_cos7: 0 453 | pfc_pri0_tx_duration_us: 0 454 | pfc_pri0_tx_transitions: 0 455 | pfc_pri1_tx_duration_us: 0 456 | pfc_pri1_tx_transitions: 0 457 | pfc_pri2_tx_duration_us: 0 458 | pfc_pri2_tx_transitions: 0 459 | pfc_pri3_tx_duration_us: 0 460 | pfc_pri3_tx_transitions: 0 461 | pfc_pri4_tx_duration_us: 0 462 | pfc_pri4_tx_transitions: 0 463 | pfc_pri5_tx_duration_us: 0 464 | pfc_pri5_tx_transitions: 0 465 | pfc_pri6_tx_duration_us: 0 466 | pfc_pri6_tx_transitions: 0 467 | pfc_pri7_tx_duration_us: 0 468 | pfc_pri7_tx_transitions: 0 469 | rx_bytes_pri0: 0 470 | rx_bytes_pri1: 0 471 | rx_bytes_pri2: 0 472 | rx_bytes_pri3: 0 473 | rx_bytes_pri4: 0 474 | rx_bytes_pri5: 0 475 | rx_bytes_pri6: 0 476 | rx_bytes_pri7: 0 477 | rx_packets_pri0: 0 478 | rx_packets_pri1: 0 479 | rx_packets_pri2: 0 480 | rx_packets_pri3: 0 481 | rx_packets_pri4: 0 482 | rx_packets_pri5: 0 483 | rx_packets_pri6: 0 484 | rx_packets_pri7: 0 485 | tx_bytes_pri0: 0 486 | tx_bytes_pri1: 0 487 | tx_bytes_pri2: 0 488 | tx_bytes_pri3: 0 489 | tx_bytes_pri4: 0 490 | tx_bytes_pri5: 0 491 | tx_bytes_pri6: 0 492 | tx_bytes_pri7: 0 493 | tx_packets_pri0: 0 494 | tx_packets_pri1: 0 495 | tx_packets_pri2: 0 496 | tx_packets_pri3: 0 497 | tx_packets_pri4: 0 498 | tx_packets_pri5: 0 499 | tx_packets_pri6: 0 500 | tx_packets_pri7: 0 501 | -------------------------------------------------------------------------------- /tests/e1000e: -------------------------------------------------------------------------------- 1 | rx_packets: 567425 2 | tx_packets: 274383 3 | rx_bytes: 703224479 4 | tx_bytes: 31313190 5 | rx_broadcast: 1401 6 | tx_broadcast: 51 7 | rx_multicast: 0 8 | tx_multicast: 12 9 | rx_errors: 0 10 | tx_errors: 0 11 | tx_dropped: 0 12 | multicast: 0 13 | collisions: 0 14 | rx_length_errors: 0 15 | rx_over_errors: 0 16 | rx_crc_errors: 0 17 | rx_frame_errors: 0 18 | rx_no_buffer_count: 0 19 | rx_missed_errors: 0 20 | tx_aborted_errors: 0 21 | tx_carrier_errors: 0 22 | tx_fifo_errors: 0 23 | tx_heartbeat_errors: 0 24 | tx_window_errors: 0 25 | tx_abort_late_coll: 0 26 | tx_deferred_ok: 0 27 | tx_single_coll_ok: 0 28 | tx_multi_coll_ok: 0 29 | tx_timeout_count: 0 30 | tx_restart_queue: 0 31 | rx_long_length_errors: 0 32 | rx_short_length_errors: 0 33 | rx_align_errors: 0 34 | tx_tcp_seg_good: 0 35 | tx_tcp_seg_failed: 0 36 | rx_flow_control_xon: 0 37 | rx_flow_control_xoff: 0 38 | tx_flow_control_xon: 0 39 | tx_flow_control_xoff: 0 40 | rx_csum_offload_good: 565981 41 | rx_csum_offload_errors: 0 42 | rx_header_split: 0 43 | alloc_rx_buff_failed: 0 44 | tx_smbus: 1 45 | rx_smbus: 1446 46 | dropped_smbus: 0 47 | rx_dma_failed: 0 48 | tx_dma_failed: 0 49 | rx_hwtstamp_cleared: 0 50 | uncorr_ecc_errors: 0 51 | corr_ecc_errors: 0 52 | tx_hwtstamp_timeouts: 0 53 | tx_hwtstamp_skipped: 0 54 | -------------------------------------------------------------------------------- /tests/ena: -------------------------------------------------------------------------------- 1 | tx_timeout: 0 2 | io_suspend: 0 3 | io_resume: 0 4 | wd_expired: 0 5 | interface_up: 1 6 | interface_down: 0 7 | admin_q_pause: 0 8 | queue_0_tx_cnt: 2005711 9 | queue_0_tx_bytes: 293608419 10 | queue_0_tx_queue_stop: 0 11 | queue_0_tx_queue_wakeup: 0 12 | queue_0_tx_dma_mapping_err: 0 13 | queue_0_tx_linearize: 0 14 | queue_0_tx_linearize_failed: 0 15 | queue_0_tx_napi_comp: 10702433 16 | queue_0_tx_tx_poll: 10702433 17 | queue_0_tx_doorbells: 2003972 18 | queue_0_tx_prepare_ctx_err: 0 19 | queue_0_tx_bad_req_id: 0 20 | queue_0_rx_cnt: 9300271 21 | queue_0_rx_bytes: 64430725908 22 | queue_0_rx_refil_partial: 0 23 | queue_0_rx_bad_csum: 0 24 | queue_0_rx_page_alloc_fail: 0 25 | queue_0_rx_skb_alloc_fail: 0 26 | queue_0_rx_dma_mapping_err: 0 27 | queue_0_rx_bad_desc_num: 0 28 | queue_0_rx_rx_copybreak_pkt: 187597 29 | queue_0_rx_bad_req_id: 0 30 | queue_0_rx_empty_rx_ring: 0 31 | queue_1_tx_cnt: 4468943 32 | queue_1_tx_bytes: 485087354 33 | queue_1_tx_queue_stop: 0 34 | queue_1_tx_queue_wakeup: 0 35 | queue_1_tx_dma_mapping_err: 0 36 | queue_1_tx_linearize: 0 37 | queue_1_tx_linearize_failed: 0 38 | queue_1_tx_napi_comp: 7945308 39 | queue_1_tx_tx_poll: 7945308 40 | queue_1_tx_doorbells: 4464854 41 | queue_1_tx_prepare_ctx_err: 0 42 | queue_1_tx_bad_req_id: 0 43 | queue_1_rx_cnt: 3667424 44 | queue_1_rx_bytes: 27051044585 45 | queue_1_rx_refil_partial: 0 46 | queue_1_rx_bad_csum: 0 47 | queue_1_rx_page_alloc_fail: 0 48 | queue_1_rx_skb_alloc_fail: 0 49 | queue_1_rx_dma_mapping_err: 0 50 | queue_1_rx_bad_desc_num: 0 51 | queue_1_rx_rx_copybreak_pkt: 161983 52 | queue_1_rx_bad_req_id: 0 53 | queue_1_rx_empty_rx_ring: 0 54 | queue_2_tx_cnt: 1972698 55 | queue_2_tx_bytes: 291144882 56 | queue_2_tx_queue_stop: 0 57 | queue_2_tx_queue_wakeup: 0 58 | queue_2_tx_dma_mapping_err: 0 59 | queue_2_tx_linearize: 0 60 | queue_2_tx_linearize_failed: 0 61 | queue_2_tx_napi_comp: 5548229 62 | queue_2_tx_tx_poll: 5548229 63 | queue_2_tx_doorbells: 1971107 64 | queue_2_tx_prepare_ctx_err: 0 65 | queue_2_tx_bad_req_id: 0 66 | queue_2_rx_cnt: 3767353 67 | queue_2_rx_bytes: 27815409390 68 | queue_2_rx_refil_partial: 0 69 | queue_2_rx_bad_csum: 0 70 | queue_2_rx_page_alloc_fail: 0 71 | queue_2_rx_skb_alloc_fail: 0 72 | queue_2_rx_dma_mapping_err: 0 73 | queue_2_rx_bad_desc_num: 0 74 | queue_2_rx_rx_copybreak_pkt: 164206 75 | queue_2_rx_bad_req_id: 0 76 | queue_2_rx_empty_rx_ring: 0 77 | queue_3_tx_cnt: 4647398 78 | queue_3_tx_bytes: 537327783 79 | queue_3_tx_queue_stop: 0 80 | queue_3_tx_queue_wakeup: 0 81 | queue_3_tx_dma_mapping_err: 0 82 | queue_3_tx_linearize: 0 83 | queue_3_tx_linearize_failed: 0 84 | queue_3_tx_napi_comp: 12276845 85 | queue_3_tx_tx_poll: 12276845 86 | queue_3_tx_doorbells: 4642707 87 | queue_3_tx_prepare_ctx_err: 0 88 | queue_3_tx_bad_req_id: 0 89 | queue_3_rx_cnt: 9010589 90 | queue_3_rx_bytes: 66809815952 91 | queue_3_rx_refil_partial: 0 92 | queue_3_rx_bad_csum: 0 93 | queue_3_rx_page_alloc_fail: 0 94 | queue_3_rx_skb_alloc_fail: 0 95 | queue_3_rx_dma_mapping_err: 0 96 | queue_3_rx_bad_desc_num: 0 97 | queue_3_rx_rx_copybreak_pkt: 169576 98 | queue_3_rx_bad_req_id: 0 99 | queue_3_rx_empty_rx_ring: 0 100 | ena_admin_q_aborted_cmd: 0 101 | ena_admin_q_submitted_cmd: 28 102 | ena_admin_q_completed_cmd: 28 103 | ena_admin_q_out_of_space: 0 104 | ena_admin_q_no_completion: 0 105 | -------------------------------------------------------------------------------- /tests/fsl_dpaa2_eth: -------------------------------------------------------------------------------- 1 | NIC statistics: 2 | [hw] rx frames: 92343581 3 | [hw] rx bytes: 48809586696 4 | [hw] rx mcast frames: 816094 5 | [hw] rx mcast bytes: 181447466 6 | [hw] rx bcast frames: 965862 7 | [hw] rx bcast bytes: 126041185 8 | [hw] tx frames: 331202545 9 | [hw] tx bytes: 383050568929 10 | [hw] tx mcast frames: 10936040 11 | [hw] tx mcast bytes: 2975608926 12 | [hw] tx bcast frames: 602592 13 | [hw] tx bcast bytes: 124871017 14 | [hw] rx filtered frames: 0 15 | [hw] rx discarded frames: 0 16 | [hw] rx nobuffer discards: 0 17 | [hw] tx discarded frames: 0 18 | [hw] tx confirmed frames: 331202545 19 | [hw] tx dequeued bytes: 383050568929 20 | [hw] tx dequeued frames: 331202545 21 | [hw] tx rejected bytes: 0 22 | [hw] tx rejected frames: 0 23 | [hw] tx pending frames: 0 24 | [drv] tx conf frames: 331202545 25 | [drv] tx conf bytes: 383050568929 26 | [drv] tx sg frames: 92122892 27 | [drv] tx sg bytes: 129969786399 28 | [drv] tx tso frames: 44078304 29 | [drv] tx tso bytes: 65582872849 30 | [drv] rx sg frames: 0 31 | [drv] rx sg bytes: 0 32 | [drv] tx converted sg frames: 4803265 33 | [drv] tx converted sg bytes: 399365079 34 | [drv] enqueue portal busy: 0 35 | [drv] dequeue portal busy: 0 36 | [drv] channel pull errors: 0 37 | [drv] cdan: 189818939 38 | [drv] xdp drop: 0 39 | [drv] xdp tx: 0 40 | [drv] xdp tx errors: 0 41 | [drv] xdp redirect: 0 42 | [qbman] rx pending frames: 0 43 | [qbman] rx pending bytes: 0 44 | [qbman] tx conf pending frames: 0 45 | [qbman] tx conf pending bytes: 0 46 | [qbman] buffer count: 20396 47 | [mac] rx 64 bytes: 4496630 48 | [mac] rx 65-127 bytes: 46601925 49 | [mac] rx 128-255 bytes: 9955626 50 | [mac] rx 256-511 bytes: 2078612 51 | [mac] rx 512-1023 bytes: 2130788 52 | [mac] rx 1024-1518 bytes: 27080001 53 | [mac] rx 1519-max bytes: 0 54 | [mac] rx frags: 0 55 | [mac] rx jabber: 0 56 | [mac] rx frame discards: 0 57 | [mac] rx align errors: 0 58 | [mac] tx undersized: 0 59 | [mac] rx oversized: 0 60 | [mac] rx pause: 0 61 | [mac] tx b-pause: 0 62 | [mac] rx bytes: 49178961174 63 | [mac] rx m-cast: 816094 64 | [mac] rx b-cast: 965862 65 | [mac] rx all frames: 92343583 66 | [mac] rx u-cast: 90561627 67 | [mac] rx frame errors: 0 68 | [mac] tx bytes: 384409304192 69 | [mac] tx m-cast: 10936040 70 | [mac] tx b-cast: 602592 71 | [mac] tx u-cast: 319663913 72 | [mac] tx frame errors: 0 73 | [mac] rx frames ok: 92343583 74 | [mac] tx frames ok: 331202545 75 | -------------------------------------------------------------------------------- /tests/i40e: -------------------------------------------------------------------------------- 1 | rx_packets: 371706048609 2 | tx_packets: 364363670834 3 | rx_bytes: 28901222394039 4 | tx_bytes: 54319323988898 5 | rx_errors: 0 6 | tx_errors: 0 7 | rx_dropped: 0 8 | tx_dropped: 0 9 | collisions: 0 10 | rx_length_errors: 0 11 | rx_crc_errors: 0 12 | rx_unicast: 371705533241 13 | tx_unicast: 364363155561 14 | rx_multicast: 0 15 | tx_multicast: 0 16 | rx_broadcast: 10 17 | tx_broadcast: 0 18 | rx_unknown_protocol: 0 19 | tx-0.tx_packets: 27274035294 20 | tx-0.tx_bytes: 4256212322334 21 | rx-0.rx_packets: 64128515158 22 | rx-0.rx_bytes: 4974745040637 23 | tx-1.tx_packets: 31802682322 24 | tx-1.tx_bytes: 4652656399192 25 | rx-1.rx_packets: 13480677444 26 | rx-1.rx_bytes: 1054363120639 27 | tx-2.tx_packets: 32140536232 28 | tx-2.tx_bytes: 4640751942075 29 | rx-2.rx_packets: 13678447928 30 | rx-2.rx_bytes: 1069535552876 31 | tx-3.tx_packets: 27787829221 32 | tx-3.tx_bytes: 4344132731361 33 | rx-3.rx_packets: 61598230947 34 | rx-3.rx_bytes: 4779364627433 35 | tx-4.tx_packets: 30051298484 36 | tx-4.tx_bytes: 4542962606238 37 | rx-4.rx_packets: 39898023861 38 | rx-4.rx_bytes: 3099467379873 39 | tx-5.tx_packets: 33060528213 40 | tx-5.tx_bytes: 4811457800694 41 | rx-5.rx_packets: 13706719700 42 | rx-5.rx_bytes: 1071759338537 43 | tx-6.tx_packets: 31216796169 44 | tx-6.tx_bytes: 4562322711717 45 | rx-6.rx_packets: 13480673022 46 | rx-6.rx_bytes: 1054352257865 47 | tx-7.tx_packets: 30357475530 48 | tx-7.tx_bytes: 4569608307020 49 | rx-7.rx_packets: 45253048092 50 | rx-7.rx_bytes: 3513052183985 51 | tx-8.tx_packets: 29842104327 52 | tx-8.tx_bytes: 4408582457195 53 | rx-8.rx_packets: 41876439023 54 | rx-8.rx_bytes: 3251706905893 55 | tx-9.tx_packets: 31515979642 56 | tx-9.tx_bytes: 4638142019741 57 | rx-9.rx_packets: 13144345355 58 | rx-9.rx_bytes: 1028093096771 59 | tx-10.tx_packets: 31171040141 60 | tx-10.tx_bytes: 4573155943133 61 | rx-10.rx_packets: 13172431289 62 | rx-10.rx_bytes: 1030232559471 63 | tx-11.tx_packets: 28143365262 64 | tx-11.tx_bytes: 4319338748501 65 | rx-11.rx_packets: 38288496797 66 | rx-11.rx_bytes: 2974550330599 67 | veb.rx_bytes: 0 68 | veb.tx_bytes: 0 69 | veb.rx_unicast: 0 70 | veb.tx_unicast: 0 71 | veb.rx_multicast: 0 72 | veb.tx_multicast: 0 73 | veb.rx_broadcast: 0 74 | veb.tx_broadcast: 0 75 | veb.rx_discards: 0 76 | veb.tx_discards: 0 77 | veb.tx_errors: 0 78 | veb.rx_unknown_protocol: 0 79 | veb.tc_0_tx_packets: 0 80 | veb.tc_0_tx_bytes: 0 81 | veb.tc_0_rx_packets: 0 82 | veb.tc_0_rx_bytes: 0 83 | veb.tc_1_tx_packets: 0 84 | veb.tc_1_tx_bytes: 0 85 | veb.tc_1_rx_packets: 0 86 | veb.tc_1_rx_bytes: 0 87 | veb.tc_2_tx_packets: 0 88 | veb.tc_2_tx_bytes: 0 89 | veb.tc_2_rx_packets: 0 90 | veb.tc_2_rx_bytes: 0 91 | veb.tc_3_tx_packets: 0 92 | veb.tc_3_tx_bytes: 0 93 | veb.tc_3_rx_packets: 0 94 | veb.tc_3_rx_bytes: 0 95 | veb.tc_4_tx_packets: 0 96 | veb.tc_4_tx_bytes: 0 97 | veb.tc_4_rx_packets: 0 98 | veb.tc_4_rx_bytes: 0 99 | veb.tc_5_tx_packets: 0 100 | veb.tc_5_tx_bytes: 0 101 | veb.tc_5_rx_packets: 0 102 | veb.tc_5_rx_bytes: 0 103 | veb.tc_6_tx_packets: 0 104 | veb.tc_6_tx_bytes: 0 105 | veb.tc_6_rx_packets: 0 106 | veb.tc_6_rx_bytes: 0 107 | veb.tc_7_tx_packets: 0 108 | veb.tc_7_tx_bytes: 0 109 | veb.tc_7_rx_packets: 0 110 | veb.tc_7_rx_bytes: 0 111 | port.rx_bytes: 30388004820195 112 | port.tx_bytes: 55878809901817 113 | port.rx_unicast: 371705533245 114 | port.tx_unicast: 364363155570 115 | port.rx_multicast: 0 116 | port.tx_multicast: 23817 117 | port.rx_broadcast: 10 118 | port.tx_broadcast: 0 119 | port.tx_errors: 0 120 | port.rx_dropped: 0 121 | port.tx_dropped_link_down: 0 122 | port.rx_crc_errors: 0 123 | port.illegal_bytes: 0 124 | port.mac_local_faults: 0 125 | port.mac_remote_faults: 0 126 | port.tx_timeout: 0 127 | port.rx_csum_bad: 0 128 | port.rx_length_errors: 0 129 | port.link_xon_rx: 0 130 | port.link_xoff_rx: 0 131 | port.link_xon_tx: 0 132 | port.link_xoff_tx: 0 133 | port.rx_size_64: 279307404 134 | port.rx_size_127: 371106813100 135 | port.rx_size_255: 319366248 136 | port.rx_size_511: 5019 137 | port.rx_size_1023: 41482 138 | port.rx_size_1522: 0 139 | port.rx_size_big: 0 140 | port.tx_size_64: 17158372015 141 | port.tx_size_127: 242313490006 142 | port.tx_size_255: 68981412153 143 | port.tx_size_511: 4169807437 144 | port.tx_size_1023: 31740097773 145 | port.tx_size_1522: 0 146 | port.tx_size_big: 0 147 | port.rx_undersize: 0 148 | port.rx_fragments: 0 149 | port.rx_oversize: 0 150 | port.rx_jabber: 0 151 | port.VF_admin_queue_requests: 0 152 | port.rx_hwtstamp_cleared: 0 153 | port.fdir_flush_cnt: 0 154 | port.fdir_atr_match: 0 155 | port.fdir_atr_tunnel_match: 0 156 | port.fdir_atr_status: 1 157 | port.fdir_sb_match: 0 158 | port.fdir_sb_status: 1 159 | port.tx_lpi_status: 0 160 | port.rx_lpi_status: 0 161 | port.tx_lpi_count: 0 162 | port.rx_lpi_count: 0 163 | port.tx_priority_0_xon: 0 164 | port.tx_priority_0_xoff: 0 165 | port.tx_priority_1_xon: 0 166 | port.tx_priority_1_xoff: 0 167 | port.tx_priority_2_xon: 0 168 | port.tx_priority_2_xoff: 0 169 | port.tx_priority_3_xon: 0 170 | port.tx_priority_3_xoff: 0 171 | port.tx_priority_4_xon: 0 172 | port.tx_priority_4_xoff: 0 173 | port.tx_priority_5_xon: 0 174 | port.tx_priority_5_xoff: 0 175 | port.tx_priority_6_xon: 0 176 | port.tx_priority_6_xoff: 0 177 | port.tx_priority_7_xon: 0 178 | port.tx_priority_7_xoff: 0 179 | port.rx_priority_0_xon: 0 180 | port.rx_priority_0_xoff: 0 181 | port.rx_priority_1_xon: 0 182 | port.rx_priority_1_xoff: 0 183 | port.rx_priority_2_xon: 0 184 | port.rx_priority_2_xoff: 0 185 | port.rx_priority_3_xon: 0 186 | port.rx_priority_3_xoff: 0 187 | port.rx_priority_4_xon: 0 188 | port.rx_priority_4_xoff: 0 189 | port.rx_priority_5_xon: 0 190 | port.rx_priority_5_xoff: 0 191 | port.rx_priority_6_xon: 0 192 | port.rx_priority_6_xoff: 0 193 | port.rx_priority_7_xon: 0 194 | port.rx_priority_7_xoff: 0 195 | port.rx_priority_0_xon_2_xoff: 0 196 | port.rx_priority_1_xon_2_xoff: 0 197 | port.rx_priority_2_xon_2_xoff: 0 198 | port.rx_priority_3_xon_2_xoff: 0 199 | port.rx_priority_4_xon_2_xoff: 0 200 | port.rx_priority_5_xon_2_xoff: 0 201 | port.rx_priority_6_xon_2_xoff: 0 202 | port.rx_priority_7_xon_2_xoff: 0 203 | -------------------------------------------------------------------------------- /tests/i40e-v2.3.2k: -------------------------------------------------------------------------------- 1 | NIC statistics: 2 | rx_packets: 439831225513 3 | tx_packets: 422310305473 4 | rx_bytes: 34195001351783 5 | tx_bytes: 51455324600441 6 | rx_errors: 0 7 | tx_errors: 0 8 | rx_dropped: 179160 9 | tx_dropped: 0 10 | collisions: 0 11 | rx_length_errors: 0 12 | rx_crc_errors: 0 13 | rx_unicast: 439831404681 14 | tx_unicast: 422310305458 15 | rx_multicast: 0 16 | tx_multicast: 12 17 | rx_broadcast: 3 18 | tx_broadcast: 4 19 | rx_unknown_protocol: 0 20 | tx_linearize: 0 21 | tx_force_wb: 0 22 | tx_busy: 0 23 | rx_alloc_fail: 0 24 | rx_pg_alloc_fail: 0 25 | tx-0.packets: 36459363750 26 | tx-0.bytes: 4404820986920 27 | rx-0.packets: 36938878353 28 | rx-0.bytes: 2871854728434 29 | tx-1.packets: 34809430740 30 | tx-1.bytes: 4245144246100 31 | rx-1.packets: 36938866233 32 | rx-1.bytes: 2871826875303 33 | tx-2.packets: 34844987020 34 | tx-2.bytes: 4247738711042 35 | rx-2.packets: 36938872161 36 | rx-2.bytes: 2871814688831 37 | tx-3.packets: 34835304047 38 | tx-3.bytes: 4247805178962 39 | rx-3.packets: 36938887991 40 | rx-3.bytes: 2871863261550 41 | tx-4.packets: 35254674981 42 | tx-4.bytes: 4300540991126 43 | rx-4.packets: 36938870054 44 | rx-4.bytes: 2871812517355 45 | tx-5.packets: 35255631484 46 | tx-5.bytes: 4300887351775 47 | rx-5.packets: 36939691673 48 | rx-5.bytes: 2871981571973 49 | tx-6.packets: 35289346821 50 | tx-6.bytes: 4305173309684 51 | rx-6.packets: 36938883698 52 | rx-6.bytes: 2871843204812 53 | tx-7.packets: 35458473418 54 | tx-7.bytes: 4324335292840 55 | rx-7.packets: 36938866864 56 | rx-7.bytes: 2871822303189 57 | tx-8.packets: 34927449829 58 | tx-8.bytes: 4257573513230 59 | rx-8.packets: 36079924566 60 | rx-8.bytes: 2805059288404 61 | tx-9.packets: 35112665721 62 | tx-9.bytes: 4280166399127 63 | rx-9.packets: 36079828296 64 | rx-9.bytes: 2805076114419 65 | tx-10.packets: 35079478377 66 | tx-10.bytes: 4277057594758 67 | rx-10.packets: 36079835390 68 | rx-10.bytes: 2805015328910 69 | tx-11.packets: 34983499286 70 | tx-11.bytes: 4264081024982 71 | rx-11.packets: 36079820245 72 | rx-11.bytes: 2805031469450 73 | tx-12.packets: 0 74 | tx-12.bytes: 0 75 | rx-12.packets: 0 76 | rx-12.bytes: 0 77 | tx-13.packets: 0 78 | tx-13.bytes: 0 79 | rx-13.packets: 0 80 | rx-13.bytes: 0 81 | tx-14.packets: 0 82 | tx-14.bytes: 0 83 | rx-14.packets: 0 84 | rx-14.bytes: 0 85 | tx-15.packets: 0 86 | tx-15.bytes: 0 87 | rx-15.packets: 0 88 | rx-15.bytes: 0 89 | tx-16.packets: 0 90 | tx-16.bytes: 0 91 | rx-16.packets: 0 92 | rx-16.bytes: 0 93 | tx-17.packets: 0 94 | tx-17.bytes: 0 95 | rx-17.packets: 0 96 | rx-17.bytes: 0 97 | tx-18.packets: 0 98 | tx-18.bytes: 0 99 | rx-18.packets: 0 100 | rx-18.bytes: 0 101 | tx-19.packets: 0 102 | tx-19.bytes: 0 103 | rx-19.packets: 0 104 | rx-19.bytes: 0 105 | tx-20.packets: 0 106 | tx-20.bytes: 0 107 | rx-20.packets: 0 108 | rx-20.bytes: 0 109 | tx-21.packets: 0 110 | tx-21.bytes: 0 111 | rx-21.packets: 0 112 | rx-21.bytes: 0 113 | tx-22.packets: 0 114 | tx-22.bytes: 0 115 | rx-22.packets: 0 116 | rx-22.bytes: 0 117 | tx-23.packets: 0 118 | tx-23.bytes: 0 119 | rx-23.packets: 0 120 | rx-23.bytes: 0 121 | tx-24.packets: 0 122 | tx-24.bytes: 0 123 | rx-24.packets: 0 124 | rx-24.bytes: 0 125 | tx-25.packets: 0 126 | tx-25.bytes: 0 127 | rx-25.packets: 0 128 | rx-25.bytes: 0 129 | tx-26.packets: 0 130 | tx-26.bytes: 0 131 | rx-26.packets: 0 132 | rx-26.bytes: 0 133 | tx-27.packets: 0 134 | tx-27.bytes: 0 135 | rx-27.packets: 0 136 | rx-27.bytes: 0 137 | tx-28.packets: 0 138 | tx-28.bytes: 0 139 | rx-28.packets: 0 140 | rx-28.bytes: 0 141 | tx-29.packets: 0 142 | tx-29.bytes: 0 143 | rx-29.packets: 0 144 | rx-29.bytes: 0 145 | tx-30.packets: 0 146 | tx-30.bytes: 0 147 | rx-30.packets: 0 148 | rx-30.bytes: 0 149 | tx-31.packets: 0 150 | tx-31.bytes: 0 151 | rx-31.packets: 0 152 | rx-31.bytes: 0 153 | tx-32.packets: 0 154 | tx-32.bytes: 0 155 | rx-32.packets: 0 156 | rx-32.bytes: 0 157 | tx-33.packets: 0 158 | tx-33.bytes: 0 159 | rx-33.packets: 0 160 | rx-33.bytes: 0 161 | tx-34.packets: 0 162 | tx-34.bytes: 0 163 | rx-34.packets: 0 164 | rx-34.bytes: 0 165 | tx-35.packets: 0 166 | tx-35.bytes: 0 167 | rx-35.packets: 0 168 | rx-35.bytes: 0 169 | tx-36.packets: 0 170 | tx-36.bytes: 0 171 | rx-36.packets: 0 172 | rx-36.bytes: 0 173 | tx-37.packets: 0 174 | tx-37.bytes: 0 175 | rx-37.packets: 0 176 | rx-37.bytes: 0 177 | tx-38.packets: 0 178 | tx-38.bytes: 0 179 | rx-38.packets: 0 180 | rx-38.bytes: 0 181 | tx-39.packets: 0 182 | tx-39.bytes: 0 183 | rx-39.packets: 0 184 | rx-39.bytes: 0 185 | tx-40.packets: 0 186 | tx-40.bytes: 0 187 | rx-40.packets: 0 188 | rx-40.bytes: 0 189 | tx-41.packets: 0 190 | tx-41.bytes: 0 191 | rx-41.packets: 0 192 | rx-41.bytes: 0 193 | tx-42.packets: 0 194 | tx-42.bytes: 0 195 | rx-42.packets: 0 196 | rx-42.bytes: 0 197 | tx-43.packets: 0 198 | tx-43.bytes: 0 199 | rx-43.packets: 0 200 | rx-43.bytes: 0 201 | tx-44.packets: 0 202 | tx-44.bytes: 0 203 | rx-44.packets: 0 204 | rx-44.bytes: 0 205 | tx-45.packets: 0 206 | tx-45.bytes: 0 207 | rx-45.packets: 0 208 | rx-45.bytes: 0 209 | tx-46.packets: 0 210 | tx-46.bytes: 0 211 | rx-46.packets: 0 212 | rx-46.bytes: 0 213 | tx-47.packets: 0 214 | tx-47.bytes: 0 215 | rx-47.packets: 0 216 | rx-47.bytes: 0 217 | tx-48.packets: 0 218 | tx-48.bytes: 0 219 | rx-48.packets: 0 220 | rx-48.bytes: 0 221 | tx-49.packets: 0 222 | tx-49.bytes: 0 223 | rx-49.packets: 0 224 | rx-49.bytes: 0 225 | tx-50.packets: 0 226 | tx-50.bytes: 0 227 | rx-50.packets: 0 228 | rx-50.bytes: 0 229 | tx-51.packets: 0 230 | tx-51.bytes: 0 231 | rx-51.packets: 0 232 | rx-51.bytes: 0 233 | tx-52.packets: 0 234 | tx-52.bytes: 0 235 | rx-52.packets: 0 236 | rx-52.bytes: 0 237 | tx-53.packets: 0 238 | tx-53.bytes: 0 239 | rx-53.packets: 0 240 | rx-53.bytes: 0 241 | tx-54.packets: 0 242 | tx-54.bytes: 0 243 | rx-54.packets: 0 244 | rx-54.bytes: 0 245 | tx-55.packets: 0 246 | tx-55.bytes: 0 247 | rx-55.packets: 0 248 | rx-55.bytes: 0 249 | tx-56.packets: 0 250 | tx-56.bytes: 0 251 | rx-56.packets: 0 252 | rx-56.bytes: 0 253 | tx-57.packets: 0 254 | tx-57.bytes: 0 255 | rx-57.packets: 0 256 | rx-57.bytes: 0 257 | tx-58.packets: 0 258 | tx-58.bytes: 0 259 | rx-58.packets: 0 260 | rx-58.bytes: 0 261 | tx-59.packets: 0 262 | tx-59.bytes: 0 263 | rx-59.packets: 0 264 | rx-59.bytes: 0 265 | tx-60.packets: 0 266 | tx-60.bytes: 0 267 | rx-60.packets: 0 268 | rx-60.bytes: 0 269 | tx-61.packets: 0 270 | tx-61.bytes: 0 271 | rx-61.packets: 0 272 | rx-61.bytes: 0 273 | tx-62.packets: 0 274 | tx-62.bytes: 0 275 | rx-62.packets: 0 276 | rx-62.bytes: 0 277 | tx-63.packets: 0 278 | tx-63.bytes: 0 279 | rx-63.packets: 0 280 | rx-63.bytes: 0 281 | veb.rx_bytes: 0 282 | veb.tx_bytes: 0 283 | veb.rx_unicast: 0 284 | veb.tx_unicast: 0 285 | veb.rx_multicast: 0 286 | veb.tx_multicast: 0 287 | veb.rx_broadcast: 0 288 | veb.tx_broadcast: 0 289 | veb.rx_discards: 0 290 | veb.tx_discards: 0 291 | veb.tx_errors: 0 292 | veb.rx_unknown_protocol: 0 293 | veb.tc_0_tx_packets: 0 294 | veb.tc_0_tx_bytes: 0 295 | veb.tc_0_rx_packets: 0 296 | veb.tc_0_rx_bytes: 0 297 | veb.tc_1_tx_packets: 0 298 | veb.tc_1_tx_bytes: 0 299 | veb.tc_1_rx_packets: 0 300 | veb.tc_1_rx_bytes: 0 301 | veb.tc_2_tx_packets: 0 302 | veb.tc_2_tx_bytes: 0 303 | veb.tc_2_rx_packets: 0 304 | veb.tc_2_rx_bytes: 0 305 | veb.tc_3_tx_packets: 0 306 | veb.tc_3_tx_bytes: 0 307 | veb.tc_3_rx_packets: 0 308 | veb.tc_3_rx_bytes: 0 309 | veb.tc_4_tx_packets: 0 310 | veb.tc_4_tx_bytes: 0 311 | veb.tc_4_rx_packets: 0 312 | veb.tc_4_rx_bytes: 0 313 | veb.tc_5_tx_packets: 0 314 | veb.tc_5_tx_bytes: 0 315 | veb.tc_5_rx_packets: 0 316 | veb.tc_5_rx_bytes: 0 317 | veb.tc_6_tx_packets: 0 318 | veb.tc_6_tx_bytes: 0 319 | veb.tc_6_rx_packets: 0 320 | veb.tc_6_rx_bytes: 0 321 | veb.tc_7_tx_packets: 0 322 | veb.tc_7_tx_bytes: 0 323 | veb.tc_7_rx_packets: 0 324 | veb.tc_7_rx_bytes: 0 325 | port.rx_bytes: 35954341339678 326 | port.tx_bytes: 53144569624786 327 | port.rx_unicast: 439831404645 328 | port.tx_unicast: 422310305448 329 | port.rx_multicast: 12 330 | port.tx_multicast: 29106 331 | port.rx_broadcast: 3 332 | port.tx_broadcast: 4 333 | port.tx_errors: 0 334 | port.rx_dropped: 0 335 | port.tx_dropped_link_down: 0 336 | port.rx_crc_errors: 0 337 | port.illegal_bytes: 0 338 | port.mac_local_faults: 0 339 | port.mac_remote_faults: 0 340 | port.tx_timeout: 0 341 | port.rx_csum_bad: 0 342 | port.rx_length_errors: 0 343 | port.link_xon_rx: 0 344 | port.link_xoff_rx: 0 345 | port.link_xon_tx: 0 346 | port.link_xoff_tx: 0 347 | port.rx_size_64: 271842163 348 | port.rx_size_127: 439248716404 349 | port.rx_size_255: 310770727 350 | port.rx_size_511: 9620 351 | port.rx_size_1023: 65766 352 | port.rx_size_1522: 0 353 | port.rx_size_big: 0 354 | port.tx_size_64: 205516237 355 | port.tx_size_127: 334242431469 356 | port.tx_size_255: 72381457523 357 | port.tx_size_511: 2003199101 358 | port.tx_size_1023: 13477730236 359 | port.tx_size_1522: 0 360 | port.tx_size_big: 0 361 | port.rx_undersize: 0 362 | port.rx_fragments: 0 363 | port.rx_oversize: 0 364 | port.rx_jabber: 0 365 | port.VF_admin_queue_requests: 0 366 | port.arq_overflows: 0 367 | port.tx_hwtstamp_timeouts: 0 368 | port.rx_hwtstamp_cleared: 0 369 | port.tx_hwtstamp_skipped: 0 370 | port.fdir_flush_cnt: 0 371 | port.fdir_atr_match: 0 372 | port.fdir_atr_tunnel_match: 0 373 | port.fdir_atr_status: 1 374 | port.fdir_sb_match: 0 375 | port.fdir_sb_status: 1 376 | port.tx_lpi_status: 0 377 | port.rx_lpi_status: 0 378 | port.tx_lpi_count: 0 379 | port.rx_lpi_count: 0 380 | port.tx_priority_0_xon_tx: 0 381 | port.tx_priority_0_xoff_tx: 0 382 | port.rx_priority_0_xon_rx: 0 383 | port.rx_priority_0_xoff_rx: 0 384 | port.rx_priority_0_xon_2_xoff: 0 385 | port.tx_priority_1_xon_tx: 0 386 | port.tx_priority_1_xoff_tx: 0 387 | port.rx_priority_1_xon_rx: 0 388 | port.rx_priority_1_xoff_rx: 0 389 | port.rx_priority_1_xon_2_xoff: 0 390 | port.tx_priority_2_xon_tx: 0 391 | port.tx_priority_2_xoff_tx: 0 392 | port.rx_priority_2_xon_rx: 0 393 | port.rx_priority_2_xoff_rx: 0 394 | port.rx_priority_2_xon_2_xoff: 0 395 | port.tx_priority_3_xon_tx: 0 396 | port.tx_priority_3_xoff_tx: 0 397 | port.rx_priority_3_xon_rx: 0 398 | port.rx_priority_3_xoff_rx: 0 399 | port.rx_priority_3_xon_2_xoff: 0 400 | port.tx_priority_4_xon_tx: 0 401 | port.tx_priority_4_xoff_tx: 0 402 | port.rx_priority_4_xon_rx: 0 403 | port.rx_priority_4_xoff_rx: 0 404 | port.rx_priority_4_xon_2_xoff: 0 405 | port.tx_priority_5_xon_tx: 0 406 | port.tx_priority_5_xoff_tx: 0 407 | port.rx_priority_5_xon_rx: 0 408 | port.rx_priority_5_xoff_rx: 0 409 | port.rx_priority_5_xon_2_xoff: 0 410 | port.tx_priority_6_xon_tx: 0 411 | port.tx_priority_6_xoff_tx: 0 412 | port.rx_priority_6_xon_rx: 0 413 | port.rx_priority_6_xoff_rx: 0 414 | port.rx_priority_6_xon_2_xoff: 0 415 | port.tx_priority_7_xon_tx: 0 416 | port.tx_priority_7_xoff_tx: 0 417 | port.rx_priority_7_xon_rx: 0 418 | port.rx_priority_7_xoff_rx: 0 419 | port.rx_priority_7_xon_2_xoff: 0 420 | -------------------------------------------------------------------------------- /tests/iavf: -------------------------------------------------------------------------------- 1 | NIC statistics: 2 | rx_bytes: 7042004 3 | rx_unicast: 69039 4 | rx_multicast: 0 5 | rx_broadcast: 1 6 | rx_discards: 0 7 | rx_unknown_protocol: 0 8 | tx_bytes: 6766774 9 | tx_unicast: 69040 10 | tx_multicast: 8 11 | tx_broadcast: 0 12 | tx_discards: 0 13 | tx_errors: 0 14 | tx-0.packets: 0 15 | tx-0.bytes: 0 16 | rx-0.packets: 2 17 | rx-0.bytes: 120 18 | tx-1.packets: 0 19 | tx-1.bytes: 0 20 | rx-1.packets: 0 21 | rx-1.bytes: 0 22 | tx-2.packets: 0 23 | tx-2.bytes: 0 24 | rx-2.packets: 0 25 | rx-2.bytes: 0 26 | tx-3.packets: 0 27 | tx-3.bytes: 0 28 | rx-3.packets: 0 29 | rx-3.bytes: 0 30 | tx-4.packets: 0 31 | tx-4.bytes: 0 32 | rx-4.packets: 0 33 | rx-4.bytes: 0 34 | tx-5.packets: 0 35 | tx-5.bytes: 0 36 | rx-5.packets: 0 37 | rx-5.bytes: 0 38 | tx-6.packets: 0 39 | tx-6.bytes: 0 40 | rx-6.packets: 0 41 | rx-6.bytes: 0 42 | tx-7.packets: 0 43 | tx-7.bytes: 0 44 | rx-7.packets: 0 45 | rx-7.bytes: 0 46 | tx-8.packets: 0 47 | tx-8.bytes: 0 48 | rx-8.packets: 69038 49 | rx-8.bytes: 6765724 50 | tx-9.packets: 6 51 | tx-9.bytes: 810 52 | rx-9.packets: 0 53 | rx-9.bytes: 0 54 | tx-10.packets: 0 55 | tx-10.bytes: 0 56 | rx-10.packets: 0 57 | rx-10.bytes: 0 58 | tx-11.packets: 0 59 | tx-11.bytes: 0 60 | rx-11.packets: 0 61 | rx-11.bytes: 0 62 | tx-12.packets: 0 63 | tx-12.bytes: 0 64 | rx-12.packets: 0 65 | rx-12.bytes: 0 66 | tx-13.packets: 0 67 | tx-13.bytes: 0 68 | rx-13.packets: 0 69 | rx-13.bytes: 0 70 | tx-14.packets: 69040 71 | tx-14.bytes: 6765832 72 | rx-14.packets: 0 73 | rx-14.bytes: 0 74 | tx-15.packets: 2 75 | tx-15.bytes: 84 76 | rx-15.packets: 0 77 | rx-15.bytes: 0 78 | -------------------------------------------------------------------------------- /tests/ice: -------------------------------------------------------------------------------- 1 | NIC statistics: 2 | rx_unicast: 12117448 3 | tx_unicast: 48786299 4 | rx_multicast: 4 5 | tx_multicast: 253 6 | rx_broadcast: 0 7 | tx_broadcast: 4 8 | rx_bytes: 848243014 9 | tx_bytes: 73862244221 10 | rx_dropped: 0 11 | rx_unknown_protocol: 0 12 | rx_alloc_fail: 0 13 | rx_pg_alloc_fail: 0 14 | tx_errors: 0 15 | tx_linearize: 0 16 | tx_busy: 0 17 | tx_restart: 0 18 | tx_queue_0_packets: 5 19 | tx_queue_0_bytes: 338 20 | tx_queue_1_packets: 15 21 | tx_queue_1_bytes: 16142 22 | tx_queue_2_packets: 36 23 | tx_queue_2_bytes: 6478 24 | tx_queue_3_packets: 2 25 | tx_queue_3_bytes: 132 26 | tx_queue_4_packets: 0 27 | tx_queue_4_bytes: 0 28 | tx_queue_5_packets: 1 29 | tx_queue_5_bytes: 66 30 | tx_queue_6_packets: 0 31 | tx_queue_6_bytes: 0 32 | tx_queue_7_packets: 0 33 | tx_queue_7_bytes: 0 34 | tx_queue_8_packets: 5 35 | tx_queue_8_bytes: 330 36 | tx_queue_9_packets: 2032857 37 | tx_queue_9_bytes: 3077738770 38 | tx_queue_10_packets: 0 39 | tx_queue_10_bytes: 0 40 | tx_queue_11_packets: 0 41 | tx_queue_11_bytes: 0 42 | tx_queue_12_packets: 1 43 | tx_queue_12_bytes: 66 44 | tx_queue_13_packets: 2033183 45 | tx_queue_13_bytes: 3078235390 46 | tx_queue_14_packets: 0 47 | tx_queue_14_bytes: 0 48 | tx_queue_15_packets: 25 49 | tx_queue_15_bytes: 31282 50 | tx_queue_16_packets: 1 51 | tx_queue_16_bytes: 62 52 | tx_queue_17_packets: 0 53 | tx_queue_17_bytes: 0 54 | tx_queue_18_packets: 1 55 | tx_queue_18_bytes: 66 56 | tx_queue_19_packets: 2033065 57 | tx_queue_19_bytes: 3078050270 58 | tx_queue_20_packets: 2 59 | tx_queue_20_bytes: 124 60 | tx_queue_21_packets: 6097828 61 | tx_queue_21_bytes: 9232103576 62 | tx_queue_22_packets: 13 63 | tx_queue_22_bytes: 920 64 | tx_queue_23_packets: 4 65 | tx_queue_23_bytes: 264 66 | tx_queue_24_packets: 2 67 | tx_queue_24_bytes: 132 68 | tx_queue_25_packets: 1 69 | tx_queue_25_bytes: 66 70 | tx_queue_26_packets: 0 71 | tx_queue_26_bytes: 0 72 | tx_queue_27_packets: 0 73 | tx_queue_27_bytes: 0 74 | tx_queue_28_packets: 0 75 | tx_queue_28_bytes: 0 76 | tx_queue_29_packets: 3 77 | tx_queue_29_bytes: 198 78 | tx_queue_30_packets: 0 79 | tx_queue_30_bytes: 0 80 | tx_queue_31_packets: 4065841 81 | tx_queue_31_bytes: 6155679602 82 | tx_queue_32_packets: 9 83 | tx_queue_32_bytes: 1437 84 | tx_queue_33_packets: 0 85 | tx_queue_33_bytes: 0 86 | tx_queue_34_packets: 3 87 | tx_queue_34_bytes: 198 88 | tx_queue_35_packets: 0 89 | tx_queue_35_bytes: 0 90 | tx_queue_36_packets: 0 91 | tx_queue_36_bytes: 0 92 | tx_queue_37_packets: 0 93 | tx_queue_37_bytes: 0 94 | tx_queue_38_packets: 3 95 | tx_queue_38_bytes: 198 96 | tx_queue_39_packets: 0 97 | tx_queue_39_bytes: 0 98 | tx_queue_40_packets: 4065560 99 | tx_queue_40_bytes: 6155256392 100 | tx_queue_41_packets: 0 101 | tx_queue_41_bytes: 0 102 | tx_queue_42_packets: 0 103 | tx_queue_42_bytes: 0 104 | tx_queue_43_packets: 0 105 | tx_queue_43_bytes: 0 106 | tx_queue_44_packets: 0 107 | tx_queue_44_bytes: 0 108 | tx_queue_45_packets: 0 109 | tx_queue_45_bytes: 0 110 | tx_queue_46_packets: 0 111 | tx_queue_46_bytes: 0 112 | tx_queue_47_packets: 2 113 | tx_queue_47_bytes: 132 114 | tx_queue_48_packets: 1 115 | tx_queue_48_bytes: 66 116 | tx_queue_49_packets: 0 117 | tx_queue_49_bytes: 0 118 | tx_queue_50_packets: 0 119 | tx_queue_50_bytes: 0 120 | tx_queue_51_packets: 0 121 | tx_queue_51_bytes: 0 122 | tx_queue_52_packets: 0 123 | tx_queue_52_bytes: 0 124 | tx_queue_53_packets: 0 125 | tx_queue_53_bytes: 0 126 | tx_queue_54_packets: 0 127 | tx_queue_54_bytes: 0 128 | tx_queue_55_packets: 0 129 | tx_queue_55_bytes: 0 130 | tx_queue_56_packets: 0 131 | tx_queue_56_bytes: 0 132 | tx_queue_57_packets: 0 133 | tx_queue_57_bytes: 0 134 | tx_queue_58_packets: 1 135 | tx_queue_58_bytes: 66 136 | tx_queue_59_packets: 0 137 | tx_queue_59_bytes: 0 138 | tx_queue_60_packets: 0 139 | tx_queue_60_bytes: 0 140 | tx_queue_61_packets: 3 141 | tx_queue_61_bytes: 198 142 | tx_queue_62_packets: 0 143 | tx_queue_62_bytes: 0 144 | tx_queue_63_packets: 0 145 | tx_queue_63_bytes: 0 146 | tx_queue_64_packets: 0 147 | tx_queue_64_bytes: 0 148 | tx_queue_65_packets: 0 149 | tx_queue_65_bytes: 0 150 | tx_queue_66_packets: 0 151 | tx_queue_66_bytes: 0 152 | tx_queue_67_packets: 3 153 | tx_queue_67_bytes: 198 154 | tx_queue_68_packets: 1 155 | tx_queue_68_bytes: 74 156 | tx_queue_69_packets: 0 157 | tx_queue_69_bytes: 0 158 | tx_queue_70_packets: 6097055 159 | tx_queue_70_bytes: 9230928910 160 | tx_queue_71_packets: 0 161 | tx_queue_71_bytes: 0 162 | tx_queue_72_packets: 0 163 | tx_queue_72_bytes: 0 164 | tx_queue_73_packets: 2 165 | tx_queue_73_bytes: 132 166 | tx_queue_74_packets: 0 167 | tx_queue_74_bytes: 0 168 | tx_queue_75_packets: 16 169 | tx_queue_75_bytes: 16208 170 | tx_queue_76_packets: 0 171 | tx_queue_76_bytes: 0 172 | tx_queue_77_packets: 1 173 | tx_queue_77_bytes: 66 174 | tx_queue_78_packets: 0 175 | tx_queue_78_bytes: 0 176 | tx_queue_79_packets: 0 177 | tx_queue_79_bytes: 0 178 | tx_queue_80_packets: 97 179 | tx_queue_80_bytes: 6014 180 | tx_queue_81_packets: 6097291 181 | tx_queue_81_bytes: 9231164558 182 | tx_queue_82_packets: 19 183 | tx_queue_82_bytes: 16390 184 | tx_queue_83_packets: 2033279 185 | tx_queue_83_bytes: 3078374942 186 | tx_queue_84_packets: 6 187 | tx_queue_84_bytes: 518 188 | tx_queue_85_packets: 1 189 | tx_queue_85_bytes: 66 190 | tx_queue_86_packets: 0 191 | tx_queue_86_bytes: 0 192 | tx_queue_87_packets: 10 193 | tx_queue_87_bytes: 632 194 | tx_queue_88_packets: 1 195 | tx_queue_88_bytes: 98 196 | tx_queue_89_packets: 2033024 197 | tx_queue_89_bytes: 3077993216 198 | tx_queue_90_packets: 0 199 | tx_queue_90_bytes: 0 200 | tx_queue_91_packets: 4065031 201 | tx_queue_91_bytes: 6154453262 202 | tx_queue_92_packets: 2032798 203 | tx_queue_92_bytes: 3077648820 204 | tx_queue_93_packets: 2032943 205 | tx_queue_93_bytes: 3077872030 206 | tx_queue_94_packets: 2 207 | tx_queue_94_bytes: 128 208 | tx_queue_95_packets: 1 209 | tx_queue_95_bytes: 66 210 | tx_queue_96_packets: 3 211 | tx_queue_96_bytes: 198 212 | tx_queue_97_packets: 0 213 | tx_queue_97_bytes: 0 214 | tx_queue_98_packets: 3 215 | tx_queue_98_bytes: 198 216 | tx_queue_99_packets: 0 217 | tx_queue_99_bytes: 0 218 | tx_queue_100_packets: 0 219 | tx_queue_100_bytes: 0 220 | tx_queue_101_packets: 55 221 | tx_queue_101_bytes: 76030 222 | tx_queue_102_packets: 0 223 | tx_queue_102_bytes: 0 224 | tx_queue_103_packets: 0 225 | tx_queue_103_bytes: 0 226 | tx_queue_104_packets: 0 227 | tx_queue_104_bytes: 0 228 | tx_queue_105_packets: 0 229 | tx_queue_105_bytes: 0 230 | tx_queue_106_packets: 0 231 | tx_queue_106_bytes: 0 232 | tx_queue_107_packets: 0 233 | tx_queue_107_bytes: 0 234 | tx_queue_108_packets: 2033286 235 | tx_queue_108_bytes: 3078393556 236 | tx_queue_109_packets: 1 237 | tx_queue_109_bytes: 66 238 | tx_queue_110_packets: 0 239 | tx_queue_110_bytes: 0 240 | tx_queue_111_packets: 0 241 | tx_queue_111_bytes: 0 242 | tx_queue_112_packets: 3 243 | tx_queue_112_bytes: 198 244 | tx_queue_113_packets: 0 245 | tx_queue_113_bytes: 0 246 | tx_queue_114_packets: 0 247 | tx_queue_114_bytes: 0 248 | tx_queue_115_packets: 2033142 249 | tx_queue_115_bytes: 3078174092 250 | tx_queue_116_packets: 0 251 | tx_queue_116_bytes: 0 252 | tx_queue_117_packets: 0 253 | tx_queue_117_bytes: 0 254 | tx_queue_118_packets: 0 255 | tx_queue_118_bytes: 0 256 | tx_queue_119_packets: 1 257 | tx_queue_119_bytes: 66 258 | tx_queue_120_packets: 0 259 | tx_queue_120_bytes: 0 260 | tx_queue_121_packets: 2 261 | tx_queue_121_bytes: 132 262 | tx_queue_122_packets: 0 263 | tx_queue_122_bytes: 0 264 | tx_queue_123_packets: 3 265 | tx_queue_123_bytes: 198 266 | tx_queue_124_packets: 3 267 | tx_queue_124_bytes: 198 268 | tx_queue_125_packets: 0 269 | tx_queue_125_bytes: 0 270 | tx_queue_126_packets: 0 271 | tx_queue_126_bytes: 0 272 | tx_queue_127_packets: 0 273 | tx_queue_127_bytes: 0 274 | rx_queue_0_packets: 487528 275 | rx_queue_0_bytes: 32176838 276 | rx_queue_1_packets: 0 277 | rx_queue_1_bytes: 0 278 | rx_queue_2_packets: 452533 279 | rx_queue_2_bytes: 29867186 280 | rx_queue_3_packets: 0 281 | rx_queue_3_bytes: 0 282 | rx_queue_4_packets: 0 283 | rx_queue_4_bytes: 0 284 | rx_queue_5_packets: 0 285 | rx_queue_5_bytes: 0 286 | rx_queue_6_packets: 0 287 | rx_queue_6_bytes: 0 288 | rx_queue_7_packets: 0 289 | rx_queue_7_bytes: 0 290 | rx_queue_8_packets: 5 291 | rx_queue_8_bytes: 1650 292 | rx_queue_9_packets: 442493 293 | rx_queue_9_bytes: 29204546 294 | rx_queue_10_packets: 0 295 | rx_queue_10_bytes: 0 296 | rx_queue_11_packets: 0 297 | rx_queue_11_bytes: 0 298 | rx_queue_12_packets: 0 299 | rx_queue_12_bytes: 0 300 | rx_queue_13_packets: 0 301 | rx_queue_13_bytes: 0 302 | rx_queue_14_packets: 0 303 | rx_queue_14_bytes: 0 304 | rx_queue_15_packets: 0 305 | rx_queue_15_bytes: 0 306 | rx_queue_16_packets: 0 307 | rx_queue_16_bytes: 0 308 | rx_queue_17_packets: 0 309 | rx_queue_17_bytes: 0 310 | rx_queue_18_packets: 0 311 | rx_queue_18_bytes: 0 312 | rx_queue_19_packets: 520956 313 | rx_queue_19_bytes: 34384424 314 | rx_queue_20_packets: 0 315 | rx_queue_20_bytes: 0 316 | rx_queue_21_packets: 421386 317 | rx_queue_21_bytes: 27811484 318 | rx_queue_22_packets: 0 319 | rx_queue_22_bytes: 0 320 | rx_queue_23_packets: 5 321 | rx_queue_23_bytes: 1650 322 | rx_queue_24_packets: 0 323 | rx_queue_24_bytes: 0 324 | rx_queue_25_packets: 0 325 | rx_queue_25_bytes: 0 326 | rx_queue_26_packets: 0 327 | rx_queue_26_bytes: 0 328 | rx_queue_27_packets: 0 329 | rx_queue_27_bytes: 0 330 | rx_queue_28_packets: 0 331 | rx_queue_28_bytes: 0 332 | rx_queue_29_packets: 5 333 | rx_queue_29_bytes: 1650 334 | rx_queue_30_packets: 0 335 | rx_queue_30_bytes: 0 336 | rx_queue_31_packets: 0 337 | rx_queue_31_bytes: 0 338 | rx_queue_32_packets: 0 339 | rx_queue_32_bytes: 0 340 | rx_queue_33_packets: 0 341 | rx_queue_33_bytes: 0 342 | rx_queue_34_packets: 5 343 | rx_queue_34_bytes: 1650 344 | rx_queue_35_packets: 5 345 | rx_queue_35_bytes: 490 346 | rx_queue_36_packets: 0 347 | rx_queue_36_bytes: 0 348 | rx_queue_37_packets: 0 349 | rx_queue_37_bytes: 0 350 | rx_queue_38_packets: 5 351 | rx_queue_38_bytes: 1650 352 | rx_queue_39_packets: 0 353 | rx_queue_39_bytes: 0 354 | rx_queue_40_packets: 949579 355 | rx_queue_40_bytes: 62672222 356 | rx_queue_41_packets: 0 357 | rx_queue_41_bytes: 0 358 | rx_queue_42_packets: 0 359 | rx_queue_42_bytes: 0 360 | rx_queue_43_packets: 0 361 | rx_queue_43_bytes: 0 362 | rx_queue_44_packets: 0 363 | rx_queue_44_bytes: 0 364 | rx_queue_45_packets: 0 365 | rx_queue_45_bytes: 0 366 | rx_queue_46_packets: 0 367 | rx_queue_46_bytes: 0 368 | rx_queue_47_packets: 643799 369 | rx_queue_47_bytes: 42490742 370 | rx_queue_48_packets: 0 371 | rx_queue_48_bytes: 0 372 | rx_queue_49_packets: 0 373 | rx_queue_49_bytes: 0 374 | rx_queue_50_packets: 0 375 | rx_queue_50_bytes: 0 376 | rx_queue_51_packets: 0 377 | rx_queue_51_bytes: 0 378 | rx_queue_52_packets: 0 379 | rx_queue_52_bytes: 0 380 | rx_queue_53_packets: 0 381 | rx_queue_53_bytes: 0 382 | rx_queue_54_packets: 0 383 | rx_queue_54_bytes: 0 384 | rx_queue_55_packets: 0 385 | rx_queue_55_bytes: 0 386 | rx_queue_56_packets: 0 387 | rx_queue_56_bytes: 0 388 | rx_queue_57_packets: 0 389 | rx_queue_57_bytes: 0 390 | rx_queue_58_packets: 0 391 | rx_queue_58_bytes: 0 392 | rx_queue_59_packets: 0 393 | rx_queue_59_bytes: 0 394 | rx_queue_60_packets: 0 395 | rx_queue_60_bytes: 0 396 | rx_queue_61_packets: 5 397 | rx_queue_61_bytes: 1650 398 | rx_queue_62_packets: 0 399 | rx_queue_62_bytes: 0 400 | rx_queue_63_packets: 0 401 | rx_queue_63_bytes: 0 402 | rx_queue_64_packets: 0 403 | rx_queue_64_bytes: 0 404 | rx_queue_65_packets: 0 405 | rx_queue_65_bytes: 0 406 | rx_queue_66_packets: 0 407 | rx_queue_66_bytes: 0 408 | rx_queue_67_packets: 5 409 | rx_queue_67_bytes: 1650 410 | rx_queue_68_packets: 0 411 | rx_queue_68_bytes: 0 412 | rx_queue_69_packets: 0 413 | rx_queue_69_bytes: 0 414 | rx_queue_70_packets: 1221711 415 | rx_queue_70_bytes: 80634254 416 | rx_queue_71_packets: 0 417 | rx_queue_71_bytes: 0 418 | rx_queue_72_packets: 0 419 | rx_queue_72_bytes: 0 420 | rx_queue_73_packets: 0 421 | rx_queue_73_bytes: 0 422 | rx_queue_74_packets: 0 423 | rx_queue_74_bytes: 0 424 | rx_queue_75_packets: 1016483 425 | rx_queue_75_bytes: 67087886 426 | rx_queue_76_packets: 0 427 | rx_queue_76_bytes: 0 428 | rx_queue_77_packets: 0 429 | rx_queue_77_bytes: 0 430 | rx_queue_78_packets: 0 431 | rx_queue_78_bytes: 0 432 | rx_queue_79_packets: 0 433 | rx_queue_79_bytes: 0 434 | rx_queue_80_packets: 0 435 | rx_queue_80_bytes: 0 436 | rx_queue_81_packets: 1358816 437 | rx_queue_81_bytes: 89681864 438 | rx_queue_82_packets: 0 439 | rx_queue_82_bytes: 0 440 | rx_queue_83_packets: 1016593 441 | rx_queue_83_bytes: 67095146 442 | rx_queue_84_packets: 0 443 | rx_queue_84_bytes: 0 444 | rx_queue_85_packets: 0 445 | rx_queue_85_bytes: 0 446 | rx_queue_86_packets: 0 447 | rx_queue_86_bytes: 0 448 | rx_queue_87_packets: 5 449 | rx_queue_87_bytes: 1650 450 | rx_queue_88_packets: 0 451 | rx_queue_88_bytes: 0 452 | rx_queue_89_packets: 4 453 | rx_queue_89_bytes: 248 454 | rx_queue_90_packets: 0 455 | rx_queue_90_bytes: 0 456 | rx_queue_91_packets: 0 457 | rx_queue_91_bytes: 0 458 | rx_queue_92_packets: 0 459 | rx_queue_92_bytes: 0 460 | rx_queue_93_packets: 0 461 | rx_queue_93_bytes: 0 462 | rx_queue_94_packets: 0 463 | rx_queue_94_bytes: 0 464 | rx_queue_95_packets: 0 465 | rx_queue_95_bytes: 0 466 | rx_queue_96_packets: 5 467 | rx_queue_96_bytes: 1650 468 | rx_queue_97_packets: 0 469 | rx_queue_97_bytes: 0 470 | rx_queue_98_packets: 5 471 | rx_queue_98_bytes: 1650 472 | rx_queue_99_packets: 0 473 | rx_queue_99_bytes: 0 474 | rx_queue_100_packets: 0 475 | rx_queue_100_bytes: 0 476 | rx_queue_101_packets: 447274 477 | rx_queue_101_bytes: 29521412 478 | rx_queue_102_packets: 0 479 | rx_queue_102_bytes: 0 480 | rx_queue_103_packets: 0 481 | rx_queue_103_bytes: 0 482 | rx_queue_104_packets: 0 483 | rx_queue_104_bytes: 0 484 | rx_queue_105_packets: 0 485 | rx_queue_105_bytes: 0 486 | rx_queue_106_packets: 0 487 | rx_queue_106_bytes: 0 488 | rx_queue_107_packets: 0 489 | rx_queue_107_bytes: 0 490 | rx_queue_108_packets: 453238 491 | rx_queue_108_bytes: 29913716 492 | rx_queue_109_packets: 0 493 | rx_queue_109_bytes: 0 494 | rx_queue_110_packets: 0 495 | rx_queue_110_bytes: 0 496 | rx_queue_111_packets: 0 497 | rx_queue_111_bytes: 0 498 | rx_queue_112_packets: 5 499 | rx_queue_112_bytes: 1650 500 | rx_queue_113_packets: 0 501 | rx_queue_113_bytes: 0 502 | rx_queue_114_packets: 0 503 | rx_queue_114_bytes: 0 504 | rx_queue_115_packets: 372449 505 | rx_queue_115_bytes: 24581642 506 | rx_queue_116_packets: 0 507 | rx_queue_116_bytes: 0 508 | rx_queue_117_packets: 0 509 | rx_queue_117_bytes: 0 510 | rx_queue_118_packets: 0 511 | rx_queue_118_bytes: 0 512 | rx_queue_119_packets: 1380062 513 | rx_queue_119_bytes: 91084100 514 | rx_queue_120_packets: 0 515 | rx_queue_120_bytes: 0 516 | rx_queue_121_packets: 932478 517 | rx_queue_121_bytes: 61543556 518 | rx_queue_122_packets: 0 519 | rx_queue_122_bytes: 0 520 | rx_queue_123_packets: 5 521 | rx_queue_123_bytes: 1650 522 | rx_queue_124_packets: 5 523 | rx_queue_124_bytes: 1650 524 | rx_queue_125_packets: 0 525 | rx_queue_125_bytes: 0 526 | rx_queue_126_packets: 0 527 | rx_queue_126_bytes: 0 528 | rx_queue_127_packets: 0 529 | rx_queue_127_bytes: 0 530 | rx_bytes.nic: 848255752 531 | tx_bytes.nic: 74057390445 532 | rx_unicast.nic: 12117448 533 | tx_unicast.nic: 48786299 534 | rx_multicast.nic: 197 535 | tx_multicast.nic: 253 536 | rx_broadcast.nic: 0 537 | tx_broadcast.nic: 4 538 | tx_errors.nic: 0 539 | tx_timeout.nic: 0 540 | rx_size_64.nic: 3 541 | tx_size_64.nic: 8 542 | rx_size_127.nic: 12117610 543 | tx_size_127.nic: 367 544 | rx_size_255.nic: 0 545 | tx_size_255.nic: 30 546 | rx_size_511.nic: 0 547 | tx_size_511.nic: 5 548 | rx_size_1023.nic: 32 549 | tx_size_1023.nic: 16 550 | rx_size_1522.nic: 0 551 | tx_size_1522.nic: 48786130 552 | rx_size_big.nic: 0 553 | tx_size_big.nic: 0 554 | link_xon_rx.nic: 0 555 | link_xon_tx.nic: 0 556 | link_xoff_rx.nic: 0 557 | link_xoff_tx.nic: 0 558 | tx_dropped_link_down.nic: 0 559 | rx_undersize.nic: 0 560 | rx_fragments.nic: 0 561 | rx_oversize.nic: 0 562 | rx_jabber.nic: 0 563 | rx_csum_bad.nic: 0 564 | rx_length_errors.nic: 0 565 | rx_dropped.nic: 0 566 | rx_crc_errors.nic: 0 567 | illegal_bytes.nic: 0 568 | mac_local_faults.nic: 0 569 | mac_remote_faults.nic: 0 570 | fdir_sb_match.nic: 0 571 | fdir_sb_status.nic: 1 572 | tx_priority_0_xon.nic: 0 573 | tx_priority_0_xoff.nic: 0 574 | tx_priority_1_xon.nic: 0 575 | tx_priority_1_xoff.nic: 0 576 | tx_priority_2_xon.nic: 0 577 | tx_priority_2_xoff.nic: 0 578 | tx_priority_3_xon.nic: 0 579 | tx_priority_3_xoff.nic: 0 580 | tx_priority_4_xon.nic: 0 581 | tx_priority_4_xoff.nic: 0 582 | tx_priority_5_xon.nic: 0 583 | tx_priority_5_xoff.nic: 0 584 | tx_priority_6_xon.nic: 0 585 | tx_priority_6_xoff.nic: 0 586 | tx_priority_7_xon.nic: 0 587 | tx_priority_7_xoff.nic: 0 588 | rx_priority_0_xon.nic: 0 589 | rx_priority_0_xoff.nic: 0 590 | rx_priority_1_xon.nic: 0 591 | rx_priority_1_xoff.nic: 0 592 | rx_priority_2_xon.nic: 0 593 | rx_priority_2_xoff.nic: 0 594 | rx_priority_3_xon.nic: 0 595 | rx_priority_3_xoff.nic: 0 596 | rx_priority_4_xon.nic: 0 597 | rx_priority_4_xoff.nic: 0 598 | rx_priority_5_xon.nic: 0 599 | rx_priority_5_xoff.nic: 0 600 | rx_priority_6_xon.nic: 0 601 | rx_priority_6_xoff.nic: 0 602 | rx_priority_7_xon.nic: 0 603 | rx_priority_7_xoff.nic: 0 604 | -------------------------------------------------------------------------------- /tests/mlx5_core: -------------------------------------------------------------------------------- 1 | rx_packets: 845320277 2 | rx_bytes: 2195783498134 3 | tx_packets: 896117891 4 | tx_bytes: 2655285206479 5 | tx_tso_packets: 56041559 6 | tx_tso_bytes: 1822751919330 7 | tx_tso_inner_packets: 0 8 | tx_tso_inner_bytes: 0 9 | tx_added_vlan_packets: 726871730 10 | rx_lro_packets: 0 11 | rx_lro_bytes: 0 12 | rx_removed_vlan_packets: 845149735 13 | rx_csum_unnecessary: 0 14 | rx_csum_none: 49455 15 | rx_csum_complete: 845270822 16 | rx_csum_unnecessary_inner: 0 17 | rx_xdp_drop: 0 18 | rx_xdp_tx: 0 19 | rx_xdp_tx_full: 0 20 | tx_csum_none: 290909 21 | tx_csum_partial: 726606998 22 | tx_csum_partial_inner: 0 23 | tx_queue_stopped: 0 24 | tx_queue_wake: 0 25 | tx_queue_dropped: 0 26 | tx_xmit_more: 548410 27 | rx_wqe_err: 0 28 | rx_mpwqe_filler: 8251861 29 | rx_buff_alloc_err: 0 30 | rx_cqe_compress_blks: 0 31 | rx_cqe_compress_pkts: 0 32 | rx_page_reuse: 0 33 | rx_cache_reuse: 546395557 34 | rx_cache_full: 696843 35 | rx_cache_empty: 10752 36 | rx_cache_busy: 699867 37 | rx_cache_waive: 3584 38 | link_down_events_phy: 0 39 | rx_out_of_buffer: 0 40 | rx_vport_unicast_packets: 844884988 41 | rx_vport_unicast_bytes: 2199120290572 42 | tx_vport_unicast_packets: 895829896 43 | tx_vport_unicast_bytes: 2658838156693 44 | rx_vport_multicast_packets: 807705 45 | rx_vport_multicast_bytes: 66227437 46 | tx_vport_multicast_packets: 287994 47 | tx_vport_multicast_bytes: 31416578 48 | rx_vport_broadcast_packets: 23269 49 | rx_vport_broadcast_bytes: 1396140 50 | tx_vport_broadcast_packets: 1 51 | tx_vport_broadcast_bytes: 60 52 | rx_vport_rdma_unicast_packets: 0 53 | rx_vport_rdma_unicast_bytes: 0 54 | tx_vport_rdma_unicast_packets: 0 55 | tx_vport_rdma_unicast_bytes: 0 56 | rx_vport_rdma_multicast_packets: 0 57 | rx_vport_rdma_multicast_bytes: 0 58 | tx_vport_rdma_multicast_packets: 0 59 | tx_vport_rdma_multicast_bytes: 0 60 | tx_packets_phy: 896117891 61 | rx_packets_phy: 845715962 62 | rx_crc_errors_phy: 0 63 | tx_bytes_phy: 2662454044895 64 | rx_bytes_phy: 2202570777997 65 | tx_multicast_phy: 287994 66 | tx_broadcast_phy: 1 67 | rx_multicast_phy: 807704 68 | rx_broadcast_phy: 23270 69 | rx_in_range_len_errors_phy: 0 70 | rx_out_of_range_len_phy: 0 71 | rx_oversize_pkts_phy: 0 72 | rx_symbol_err_phy: 0 73 | tx_mac_control_phy: 0 74 | rx_mac_control_phy: 0 75 | rx_unsupported_op_phy: 0 76 | rx_pause_ctrl_phy: 0 77 | tx_pause_ctrl_phy: 0 78 | rx_discards_phy: 0 79 | tx_discards_phy: 0 80 | tx_errors_phy: 0 81 | rx_undersize_pkts_phy: 0 82 | rx_fragments_phy: 0 83 | rx_jabbers_phy: 0 84 | rx_64_bytes_phy: 416040 85 | rx_65_to_127_bytes_phy: 289181634 86 | rx_128_to_255_bytes_phy: 6765114 87 | rx_256_to_511_bytes_phy: 34863433 88 | rx_512_to_1023_bytes_phy: 2467488 89 | rx_1024_to_1518_bytes_phy: 3373839 90 | rx_1519_to_2047_bytes_phy: 8207970 91 | rx_2048_to_4095_bytes_phy: 341551408 92 | rx_4096_to_8191_bytes_phy: 17187382 93 | rx_8192_to_10239_bytes_phy: 141701654 94 | rx_pcs_symbol_err_phy: 0 95 | rx_corrected_bits_phy: 0 96 | rx_buffer_passed_thres_phy: 0 97 | rx_pci_signal_integrity: 0 98 | tx_pci_signal_integrity: 34 99 | outbound_pci_stalled_rd: 0 100 | outbound_pci_stalled_wr: 0 101 | outbound_pci_stalled_rd_events: 0 102 | outbound_pci_stalled_wr_events: 0 103 | rx_prio0_bytes: 2202570777997 104 | rx_prio0_packets: 845715962 105 | tx_prio0_bytes: 2662454044895 106 | tx_prio0_packets: 896117891 107 | rx_prio1_bytes: 0 108 | rx_prio1_packets: 0 109 | tx_prio1_bytes: 0 110 | tx_prio1_packets: 0 111 | rx_prio2_bytes: 0 112 | rx_prio2_packets: 0 113 | tx_prio2_bytes: 0 114 | tx_prio2_packets: 0 115 | rx_prio3_bytes: 0 116 | rx_prio3_packets: 0 117 | tx_prio3_bytes: 0 118 | tx_prio3_packets: 0 119 | rx_prio4_bytes: 0 120 | rx_prio4_packets: 0 121 | tx_prio4_bytes: 0 122 | tx_prio4_packets: 0 123 | rx_prio5_bytes: 0 124 | rx_prio5_packets: 0 125 | tx_prio5_bytes: 0 126 | tx_prio5_packets: 0 127 | rx_prio6_bytes: 0 128 | rx_prio6_packets: 0 129 | tx_prio6_bytes: 0 130 | tx_prio6_packets: 0 131 | rx_prio7_bytes: 0 132 | rx_prio7_packets: 0 133 | tx_prio7_bytes: 0 134 | tx_prio7_packets: 0 135 | rx_global_pause: 0 136 | rx_global_pause_duration: 0 137 | tx_global_pause: 0 138 | tx_global_pause_duration: 0 139 | rx_global_pause_transition: 0 140 | module_unplug: 0 141 | module_bus_stuck: 0 142 | module_high_temp: 0 143 | module_bad_shorted: 0 144 | rx0_packets: 53947906 145 | rx0_bytes: 146815482364 146 | rx0_csum_complete: 53898451 147 | rx0_csum_unnecessary: 0 148 | rx0_csum_unnecessary_inner: 0 149 | rx0_csum_none: 49455 150 | rx0_xdp_drop: 0 151 | rx0_xdp_tx: 0 152 | rx0_xdp_tx_full: 0 153 | rx0_lro_packets: 0 154 | rx0_lro_bytes: 0 155 | rx0_removed_vlan_packets: 53898451 156 | rx0_wqe_err: 0 157 | rx0_mpwqe_filler: 555477 158 | rx0_buff_alloc_err: 0 159 | rx0_cqe_compress_blks: 0 160 | rx0_cqe_compress_pkts: 0 161 | rx0_page_reuse: 0 162 | rx0_cache_reuse: 36523177 163 | rx0_cache_full: 51032 164 | rx0_cache_empty: 448 165 | rx0_cache_busy: 51223 166 | rx0_cache_waive: 0 167 | rx1_packets: 45327809 168 | rx1_bytes: 118939650984 169 | rx1_csum_complete: 45327809 170 | rx1_csum_unnecessary: 0 171 | rx1_csum_unnecessary_inner: 0 172 | rx1_csum_none: 0 173 | rx1_xdp_drop: 0 174 | rx1_xdp_tx: 0 175 | rx1_xdp_tx_full: 0 176 | rx1_lro_packets: 0 177 | rx1_lro_bytes: 0 178 | rx1_removed_vlan_packets: 45327809 179 | rx1_wqe_err: 0 180 | rx1_mpwqe_filler: 445369 181 | rx1_buff_alloc_err: 0 182 | rx1_cqe_compress_blks: 0 183 | rx1_cqe_compress_pkts: 0 184 | rx1_page_reuse: 0 185 | rx1_cache_reuse: 29574716 186 | rx1_cache_full: 29125 187 | rx1_cache_empty: 448 188 | rx1_cache_busy: 29316 189 | rx1_cache_waive: 0 190 | rx2_packets: 56127573 191 | rx2_bytes: 158096787259 192 | rx2_csum_complete: 56127573 193 | rx2_csum_unnecessary: 0 194 | rx2_csum_unnecessary_inner: 0 195 | rx2_csum_none: 0 196 | rx2_xdp_drop: 0 197 | rx2_xdp_tx: 0 198 | rx2_xdp_tx_full: 0 199 | rx2_lro_packets: 0 200 | rx2_lro_bytes: 0 201 | rx2_removed_vlan_packets: 56127573 202 | rx2_wqe_err: 0 203 | rx2_mpwqe_filler: 596025 204 | rx2_buff_alloc_err: 0 205 | rx2_cqe_compress_blks: 0 206 | rx2_cqe_compress_pkts: 0 207 | rx2_page_reuse: 0 208 | rx2_cache_reuse: 39304200 209 | rx2_cache_full: 76601 210 | rx2_cache_empty: 448 211 | rx2_cache_busy: 76792 212 | rx2_cache_waive: 0 213 | rx3_packets: 55915567 214 | rx3_bytes: 153682362509 215 | rx3_csum_complete: 55915567 216 | rx3_csum_unnecessary: 0 217 | rx3_csum_unnecessary_inner: 0 218 | rx3_csum_none: 0 219 | rx3_xdp_drop: 0 220 | rx3_xdp_tx: 0 221 | rx3_xdp_tx_full: 0 222 | rx3_lro_packets: 0 223 | rx3_lro_bytes: 0 224 | rx3_removed_vlan_packets: 55915567 225 | rx3_wqe_err: 0 226 | rx3_mpwqe_filler: 578601 227 | rx3_buff_alloc_err: 0 228 | rx3_cqe_compress_blks: 0 229 | rx3_cqe_compress_pkts: 0 230 | rx3_page_reuse: 0 231 | rx3_cache_reuse: 38202093 232 | rx3_cache_full: 80468 233 | rx3_cache_empty: 448 234 | rx3_cache_busy: 80659 235 | rx3_cache_waive: 0 236 | rx4_packets: 57384015 237 | rx4_bytes: 147625729809 238 | rx4_csum_complete: 57384015 239 | rx4_csum_unnecessary: 0 240 | rx4_csum_unnecessary_inner: 0 241 | rx4_csum_none: 0 242 | rx4_xdp_drop: 0 243 | rx4_xdp_tx: 0 244 | rx4_xdp_tx_full: 0 245 | rx4_lro_packets: 0 246 | rx4_lro_bytes: 0 247 | rx4_removed_vlan_packets: 57384015 248 | rx4_wqe_err: 0 249 | rx4_mpwqe_filler: 554803 250 | rx4_buff_alloc_err: 0 251 | rx4_cqe_compress_blks: 0 252 | rx4_cqe_compress_pkts: 0 253 | rx4_page_reuse: 0 254 | rx4_cache_reuse: 36748991 255 | rx4_cache_full: 52098 256 | rx4_cache_empty: 448 257 | rx4_cache_busy: 52289 258 | rx4_cache_waive: 0 259 | rx5_packets: 55903387 260 | rx5_bytes: 132595334095 261 | rx5_csum_complete: 55903387 262 | rx5_csum_unnecessary: 0 263 | rx5_csum_unnecessary_inner: 0 264 | rx5_csum_none: 0 265 | rx5_xdp_drop: 0 266 | rx5_xdp_tx: 0 267 | rx5_xdp_tx_full: 0 268 | rx5_lro_packets: 0 269 | rx5_lro_bytes: 0 270 | rx5_removed_vlan_packets: 55903387 271 | rx5_wqe_err: 0 272 | rx5_mpwqe_filler: 497225 273 | rx5_buff_alloc_err: 0 274 | rx5_cqe_compress_blks: 0 275 | rx5_cqe_compress_pkts: 0 276 | rx5_page_reuse: 0 277 | rx5_cache_reuse: 33048587 278 | rx5_cache_full: 33526 279 | rx5_cache_empty: 448 280 | rx5_cache_busy: 33717 281 | rx5_cache_waive: 0 282 | rx6_packets: 54899841 283 | rx6_bytes: 140873394653 284 | rx6_csum_complete: 54899841 285 | rx6_csum_unnecessary: 0 286 | rx6_csum_unnecessary_inner: 0 287 | rx6_csum_none: 0 288 | rx6_xdp_drop: 0 289 | rx6_xdp_tx: 0 290 | rx6_xdp_tx_full: 0 291 | rx6_lro_packets: 0 292 | rx6_lro_bytes: 0 293 | rx6_removed_vlan_packets: 54899841 294 | rx6_wqe_err: 0 295 | rx6_mpwqe_filler: 529654 296 | rx6_buff_alloc_err: 0 297 | rx6_cqe_compress_blks: 0 298 | rx6_cqe_compress_pkts: 0 299 | rx6_page_reuse: 0 300 | rx6_cache_reuse: 35068414 301 | rx6_cache_full: 50755 302 | rx6_cache_empty: 448 303 | rx6_cache_busy: 50946 304 | rx6_cache_waive: 0 305 | rx7_packets: 51477168 306 | rx7_bytes: 143564316284 307 | rx7_csum_complete: 51477168 308 | rx7_csum_unnecessary: 0 309 | rx7_csum_unnecessary_inner: 0 310 | rx7_csum_none: 0 311 | rx7_xdp_drop: 0 312 | rx7_xdp_tx: 0 313 | rx7_xdp_tx_full: 0 314 | rx7_lro_packets: 0 315 | rx7_lro_bytes: 0 316 | rx7_removed_vlan_packets: 51477168 317 | rx7_wqe_err: 0 318 | rx7_mpwqe_filler: 541429 319 | rx7_buff_alloc_err: 0 320 | rx7_cqe_compress_blks: 0 321 | rx7_cqe_compress_pkts: 0 322 | rx7_page_reuse: 0 323 | rx7_cache_reuse: 35731713 324 | rx7_cache_full: 45696 325 | rx7_cache_empty: 448 326 | rx7_cache_busy: 45887 327 | rx7_cache_waive: 0 328 | rx8_packets: 50709885 329 | rx8_bytes: 123673981628 330 | rx8_csum_complete: 50709885 331 | rx8_csum_unnecessary: 0 332 | rx8_csum_unnecessary_inner: 0 333 | rx8_csum_none: 0 334 | rx8_xdp_drop: 0 335 | rx8_xdp_tx: 0 336 | rx8_xdp_tx_full: 0 337 | rx8_lro_packets: 0 338 | rx8_lro_bytes: 0 339 | rx8_removed_vlan_packets: 50709885 340 | rx8_wqe_err: 0 341 | rx8_mpwqe_filler: 463855 342 | rx8_buff_alloc_err: 0 343 | rx8_cqe_compress_blks: 0 344 | rx8_cqe_compress_pkts: 0 345 | rx8_page_reuse: 0 346 | rx8_cache_reuse: 30804748 347 | rx8_cache_full: 21941 348 | rx8_cache_empty: 896 349 | rx8_cache_busy: 22132 350 | rx8_cache_waive: 448 351 | rx9_packets: 46685206 352 | rx9_bytes: 116915921860 353 | rx9_csum_complete: 46685206 354 | rx9_csum_unnecessary: 0 355 | rx9_csum_unnecessary_inner: 0 356 | rx9_csum_none: 0 357 | rx9_xdp_drop: 0 358 | rx9_xdp_tx: 0 359 | rx9_xdp_tx_full: 0 360 | rx9_lro_packets: 0 361 | rx9_lro_bytes: 0 362 | rx9_removed_vlan_packets: 46685206 363 | rx9_wqe_err: 0 364 | rx9_mpwqe_filler: 436607 365 | rx9_buff_alloc_err: 0 366 | rx9_cqe_compress_blks: 0 367 | rx9_cqe_compress_pkts: 0 368 | rx9_page_reuse: 0 369 | rx9_cache_reuse: 29072348 370 | rx9_cache_full: 26725 371 | rx9_cache_empty: 896 372 | rx9_cache_busy: 26916 373 | rx9_cache_waive: 448 374 | rx10_packets: 56169341 375 | rx10_bytes: 125016058769 376 | rx10_csum_complete: 56169341 377 | rx10_csum_unnecessary: 0 378 | rx10_csum_unnecessary_inner: 0 379 | rx10_csum_none: 0 380 | rx10_xdp_drop: 0 381 | rx10_xdp_tx: 0 382 | rx10_xdp_tx_full: 0 383 | rx10_lro_packets: 0 384 | rx10_lro_bytes: 0 385 | rx10_removed_vlan_packets: 56169341 386 | rx10_wqe_err: 0 387 | rx10_mpwqe_filler: 467868 388 | rx10_buff_alloc_err: 0 389 | rx10_cqe_compress_blks: 0 390 | rx10_cqe_compress_pkts: 0 391 | rx10_page_reuse: 0 392 | rx10_cache_reuse: 31169201 393 | rx10_cache_full: 30096 394 | rx10_cache_empty: 896 395 | rx10_cache_busy: 30287 396 | rx10_cache_waive: 448 397 | rx11_packets: 52042939 398 | rx11_bytes: 145121723975 399 | rx11_csum_complete: 52042939 400 | rx11_csum_unnecessary: 0 401 | rx11_csum_unnecessary_inner: 0 402 | rx11_csum_none: 0 403 | rx11_xdp_drop: 0 404 | rx11_xdp_tx: 0 405 | rx11_xdp_tx_full: 0 406 | rx11_lro_packets: 0 407 | rx11_lro_bytes: 0 408 | rx11_removed_vlan_packets: 52042939 409 | rx11_wqe_err: 0 410 | rx11_mpwqe_filler: 545960 411 | rx11_buff_alloc_err: 0 412 | rx11_cqe_compress_blks: 0 413 | rx11_cqe_compress_pkts: 0 414 | rx11_page_reuse: 0 415 | rx11_cache_reuse: 36075583 416 | rx11_cache_full: 48066 417 | rx11_cache_empty: 896 418 | rx11_cache_busy: 48257 419 | rx11_cache_waive: 448 420 | rx12_packets: 59802388 421 | rx12_bytes: 140720935477 422 | rx12_csum_complete: 59802388 423 | rx12_csum_unnecessary: 0 424 | rx12_csum_unnecessary_inner: 0 425 | rx12_csum_none: 0 426 | rx12_xdp_drop: 0 427 | rx12_xdp_tx: 0 428 | rx12_xdp_tx_full: 0 429 | rx12_lro_packets: 0 430 | rx12_lro_bytes: 0 431 | rx12_removed_vlan_packets: 59681301 432 | rx12_wqe_err: 0 433 | rx12_mpwqe_filler: 527017 434 | rx12_buff_alloc_err: 0 435 | rx12_cqe_compress_blks: 0 436 | rx12_cqe_compress_pkts: 0 437 | rx12_page_reuse: 0 438 | rx12_cache_reuse: 35053509 439 | rx12_cache_full: 34492 440 | rx12_cache_empty: 896 441 | rx12_cache_busy: 34683 442 | rx12_cache_waive: 448 443 | rx13_packets: 46788329 444 | rx13_bytes: 121964675871 445 | rx13_csum_complete: 46788329 446 | rx13_csum_unnecessary: 0 447 | rx13_csum_unnecessary_inner: 0 448 | rx13_csum_none: 0 449 | rx13_xdp_drop: 0 450 | rx13_xdp_tx: 0 451 | rx13_xdp_tx_full: 0 452 | rx13_lro_packets: 0 453 | rx13_lro_bytes: 0 454 | rx13_removed_vlan_packets: 46788329 455 | rx13_wqe_err: 0 456 | rx13_mpwqe_filler: 457625 457 | rx13_buff_alloc_err: 0 458 | rx13_cqe_compress_blks: 0 459 | rx13_cqe_compress_pkts: 0 460 | rx13_page_reuse: 0 461 | rx13_cache_reuse: 30324518 462 | rx13_cache_full: 35547 463 | rx13_cache_empty: 896 464 | rx13_cache_busy: 35738 465 | rx13_cache_waive: 448 466 | rx14_packets: 51910671 467 | rx14_bytes: 148498131905 468 | rx14_csum_complete: 51910671 469 | rx14_csum_unnecessary: 0 470 | rx14_csum_unnecessary_inner: 0 471 | rx14_csum_none: 0 472 | rx14_xdp_drop: 0 473 | rx14_xdp_tx: 0 474 | rx14_xdp_tx_full: 0 475 | rx14_lro_packets: 0 476 | rx14_lro_bytes: 0 477 | rx14_removed_vlan_packets: 51910671 478 | rx14_wqe_err: 0 479 | rx14_mpwqe_filler: 560115 480 | rx14_buff_alloc_err: 0 481 | rx14_cqe_compress_blks: 0 482 | rx14_cqe_compress_pkts: 0 483 | rx14_page_reuse: 0 484 | rx14_cache_reuse: 36938042 485 | rx14_cache_full: 40807 486 | rx14_cache_empty: 896 487 | rx14_cache_busy: 40966 488 | rx14_cache_waive: 448 489 | rx15_packets: 50228252 490 | rx15_bytes: 131679010692 491 | rx15_csum_complete: 50228252 492 | rx15_csum_unnecessary: 0 493 | rx15_csum_unnecessary_inner: 0 494 | rx15_csum_none: 0 495 | rx15_xdp_drop: 0 496 | rx15_xdp_tx: 0 497 | rx15_xdp_tx_full: 0 498 | rx15_lro_packets: 0 499 | rx15_lro_bytes: 0 500 | rx15_removed_vlan_packets: 50228252 501 | rx15_wqe_err: 0 502 | rx15_mpwqe_filler: 494231 503 | rx15_buff_alloc_err: 0 504 | rx15_cqe_compress_blks: 0 505 | rx15_cqe_compress_pkts: 0 506 | rx15_page_reuse: 0 507 | rx15_cache_reuse: 32755717 508 | rx15_cache_full: 39868 509 | rx15_cache_empty: 896 510 | rx15_cache_busy: 40059 511 | rx15_cache_waive: 448 512 | tx0_packets: 101488959 513 | tx0_bytes: 335856818753 514 | tx0_tso_packets: 7617176 515 | tx0_tso_bytes: 254762689311 516 | tx0_tso_inner_packets: 0 517 | tx0_tso_inner_bytes: 0 518 | tx0_csum_partial: 77672225 519 | tx0_csum_partial_inner: 0 520 | tx0_added_vlan_packets: 77781033 521 | tx0_nop: 2315562 522 | tx0_csum_none: 110719 523 | tx0_stopped: 0 524 | tx0_wake: 0 525 | tx0_dropped: 0 526 | tx0_xmit_more: 69985 527 | tx1_packets: 88553947 528 | tx1_bytes: 279717042611 529 | tx1_tso_packets: 6134614 530 | tx1_tso_bytes: 201142567801 531 | tx1_tso_inner_packets: 0 532 | tx1_tso_inner_bytes: 0 533 | tx1_csum_partial: 69810557 534 | tx1_csum_partial_inner: 0 535 | tx1_added_vlan_packets: 69823541 536 | tx1_nop: 2070460 537 | tx1_csum_none: 24514 538 | tx1_stopped: 0 539 | tx1_wake: 0 540 | tx1_dropped: 0 541 | tx1_xmit_more: 53698 542 | tx2_packets: 100501778 543 | tx2_bytes: 325126406549 544 | tx2_tso_packets: 7419598 545 | tx2_tso_bytes: 242732784420 546 | tx2_tso_inner_packets: 0 547 | tx2_tso_inner_bytes: 0 548 | tx2_csum_partial: 77886985 549 | tx2_csum_partial_inner: 0 550 | tx2_added_vlan_packets: 77897530 551 | tx2_nop: 2315723 552 | tx2_csum_none: 12435 553 | tx2_stopped: 0 554 | tx2_wake: 0 555 | tx2_dropped: 0 556 | tx2_xmit_more: 71652 557 | tx3_packets: 88832819 558 | tx3_bytes: 282363305759 559 | tx3_tso_packets: 6201782 560 | tx3_tso_bytes: 203218948220 561 | tx3_tso_inner_packets: 0 562 | tx3_tso_inner_bytes: 0 563 | tx3_csum_partial: 69943913 564 | tx3_csum_partial_inner: 0 565 | tx3_added_vlan_packets: 69947116 566 | tx3_nop: 2074347 567 | tx3_csum_none: 5248 568 | tx3_stopped: 0 569 | tx3_wake: 0 570 | tx3_dropped: 0 571 | tx3_xmit_more: 55002 572 | tx4_packets: 97995446 573 | tx4_bytes: 286873178203 574 | tx4_tso_packets: 6358204 575 | tx4_tso_bytes: 204229370600 576 | tx4_tso_inner_packets: 0 577 | tx4_tso_inner_bytes: 0 578 | tx4_csum_partial: 79053512 579 | tx4_csum_partial_inner: 0 580 | tx4_added_vlan_packets: 79062734 581 | tx4_nop: 2333750 582 | tx4_csum_none: 11386 583 | tx4_stopped: 0 584 | tx4_wake: 0 585 | tx4_dropped: 0 586 | tx4_xmit_more: 61145 587 | tx5_packets: 90771920 588 | tx5_bytes: 293042167667 589 | tx5_tso_packets: 6394451 590 | tx5_tso_bytes: 214496255729 591 | tx5_tso_inner_packets: 0 592 | tx5_tso_inner_bytes: 0 593 | tx5_csum_partial: 70830851 594 | tx5_csum_partial_inner: 0 595 | tx5_added_vlan_packets: 70835498 596 | tx5_nop: 2102100 597 | tx5_csum_none: 7307 598 | tx5_stopped: 0 599 | tx5_wake: 0 600 | tx5_dropped: 0 601 | tx5_xmit_more: 58591 602 | tx6_packets: 100978251 603 | tx6_bytes: 320559759542 604 | tx6_tso_packets: 7232798 605 | tx6_tso_bytes: 236778913958 606 | tx6_tso_inner_packets: 0 607 | tx6_tso_inner_bytes: 0 608 | tx6_csum_partial: 78830319 609 | tx6_csum_partial_inner: 0 610 | tx6_added_vlan_packets: 78924502 611 | tx6_nop: 2341030 612 | tx6_csum_none: 96577 613 | tx6_stopped: 0 614 | tx6_wake: 0 615 | tx6_dropped: 0 616 | tx6_xmit_more: 63864 617 | tx7_packets: 96408152 618 | tx7_bytes: 297149746576 619 | tx7_tso_packets: 6758183 620 | tx7_tso_bytes: 215257425488 621 | tx7_tso_inner_packets: 0 622 | tx7_tso_inner_bytes: 0 623 | tx7_csum_partial: 76385194 624 | tx7_csum_partial_inner: 0 625 | tx7_added_vlan_packets: 76402247 626 | tx7_nop: 2265638 627 | tx7_csum_none: 18630 628 | tx7_stopped: 0 629 | tx7_wake: 0 630 | tx7_dropped: 0 631 | tx7_xmit_more: 62679 632 | tx8_packets: 15216684 633 | tx8_bytes: 35186202170 634 | tx8_tso_packets: 439691 635 | tx8_tso_bytes: 12024894868 636 | tx8_tso_inner_packets: 0 637 | tx8_tso_inner_bytes: 0 638 | tx8_csum_partial: 14161457 639 | tx8_csum_partial_inner: 0 640 | tx8_added_vlan_packets: 14161993 641 | tx8_nop: 409675 642 | tx8_csum_none: 537 643 | tx8_stopped: 0 644 | tx8_wake: 0 645 | tx8_dropped: 0 646 | tx8_xmit_more: 6691 647 | tx9_packets: 16740243 648 | tx9_bytes: 30882136330 649 | tx9_tso_packets: 267293 650 | tx9_tso_bytes: 6943824829 651 | tx9_tso_inner_packets: 0 652 | tx9_tso_inner_bytes: 0 653 | tx9_csum_partial: 16134406 654 | tx9_csum_partial_inner: 0 655 | tx9_added_vlan_packets: 16134706 656 | tx9_nop: 461359 657 | tx9_csum_none: 300 658 | tx9_stopped: 0 659 | tx9_wake: 0 660 | tx9_dropped: 0 661 | tx9_xmit_more: 7482 662 | tx10_packets: 16662340 663 | tx10_bytes: 29239263106 664 | tx10_tso_packets: 218691 665 | tx10_tso_bytes: 5602210884 666 | tx10_tso_inner_packets: 0 667 | tx10_tso_inner_bytes: 0 668 | tx10_csum_partial: 16172484 669 | tx10_csum_partial_inner: 0 670 | tx10_added_vlan_packets: 16172916 671 | tx10_nop: 461459 672 | tx10_csum_none: 432 673 | tx10_stopped: 0 674 | tx10_wake: 0 675 | tx10_dropped: 0 676 | tx10_xmit_more: 6885 677 | tx11_packets: 16570337 678 | tx11_bytes: 28577455550 679 | tx11_tso_packets: 209589 680 | tx11_tso_bytes: 5373605557 681 | tx11_tso_inner_packets: 0 682 | tx11_tso_inner_bytes: 0 683 | tx11_csum_partial: 16099728 684 | tx11_csum_partial_inner: 0 685 | tx11_added_vlan_packets: 16100300 686 | tx11_nop: 459032 687 | tx11_csum_none: 573 688 | tx11_stopped: 0 689 | tx11_wake: 0 690 | tx11_dropped: 0 691 | tx11_xmit_more: 6970 692 | tx12_packets: 16477648 693 | tx12_bytes: 28145046151 694 | tx12_tso_packets: 201593 695 | tx12_tso_bytes: 5156616142 696 | tx12_tso_inner_packets: 0 697 | tx12_tso_inner_bytes: 0 698 | tx12_csum_partial: 16026002 699 | tx12_csum_partial_inner: 0 700 | tx12_added_vlan_packets: 16026511 701 | tx12_nop: 456695 702 | tx12_csum_none: 510 703 | tx12_stopped: 0 704 | tx12_wake: 0 705 | tx12_dropped: 0 706 | tx12_xmit_more: 5717 707 | tx13_packets: 16375757 708 | tx13_bytes: 27791324750 709 | tx13_tso_packets: 197598 710 | tx13_tso_bytes: 5055962475 711 | tx13_tso_inner_packets: 0 712 | tx13_tso_inner_bytes: 0 713 | tx13_csum_partial: 15932199 714 | tx13_csum_partial_inner: 0 715 | tx13_added_vlan_packets: 15932614 716 | tx13_nop: 454077 717 | tx13_csum_none: 416 718 | tx13_stopped: 0 719 | tx13_wake: 0 720 | tx13_dropped: 0 721 | tx13_xmit_more: 6374 722 | tx14_packets: 16305671 723 | tx14_bytes: 27541818451 724 | tx14_tso_packets: 196115 725 | tx14_tso_bytes: 5019709738 726 | tx14_tso_inner_packets: 0 727 | tx14_tso_inner_bytes: 0 728 | tx14_csum_partial: 15864262 729 | tx14_csum_partial_inner: 0 730 | tx14_added_vlan_packets: 15864874 731 | tx14_nop: 452049 732 | tx14_csum_none: 614 733 | tx14_stopped: 0 734 | tx14_wake: 0 735 | tx14_dropped: 0 736 | tx14_xmit_more: 6145 737 | tx15_packets: 16237939 738 | tx15_bytes: 27233534311 739 | tx15_tso_packets: 194183 740 | tx15_tso_bytes: 4956139310 741 | tx15_tso_inner_packets: 0 742 | tx15_tso_inner_bytes: 0 743 | tx15_csum_partial: 15802904 744 | tx15_csum_partial_inner: 0 745 | tx15_added_vlan_packets: 15803615 746 | tx15_nop: 450168 747 | tx15_csum_none: 711 748 | tx15_stopped: 0 749 | tx15_wake: 0 750 | tx15_dropped: 0 751 | tx15_xmit_more: 5530 752 | -------------------------------------------------------------------------------- /tests/r8169: -------------------------------------------------------------------------------- 1 | NIC statistics: 2 | tx_packets: 0 3 | rx_packets: 0 4 | tx_errors: 0 5 | rx_errors: 0 6 | rx_missed: 0 7 | align_errors: 0 8 | tx_single_collisions: 0 9 | tx_multi_collisions: 0 10 | unicast: 0 11 | broadcast: 0 12 | multicast: 0 13 | tx_aborted: 0 14 | tx_underrun: 0 15 | -------------------------------------------------------------------------------- /tests/sfc: -------------------------------------------------------------------------------- 1 | NIC statistics: 2 | rx_noskb_drops: 0 3 | rx_nodesc_trunc: 0 4 | port_tx_bytes: 795279 5 | port_tx_packets: 1865 6 | port_tx_pause: 0 7 | port_tx_control: 0 8 | port_tx_unicast: 1799 9 | port_tx_multicast: 66 10 | port_tx_broadcast: 0 11 | port_tx_lt64: 0 12 | port_tx_64: 58 13 | port_tx_65_to_127: 1084 14 | port_tx_128_to_255: 145 15 | port_tx_256_to_511: 109 16 | port_tx_512_to_1023: 92 17 | port_tx_1024_to_15xx: 67 18 | port_tx_15xx_to_jumbo: 310 19 | port_rx_bytes: 410901 20 | port_rx_good_bytes: 410901 21 | port_rx_bad_bytes: 0 22 | port_rx_packets: 1653 23 | port_rx_good: 1653 24 | port_rx_bad: 0 25 | port_rx_pause: 0 26 | port_rx_control: 0 27 | port_rx_unicast: 1147 28 | port_rx_multicast: 474 29 | port_rx_broadcast: 32 30 | port_rx_lt64: 0 31 | port_rx_64: 60 32 | port_rx_65_to_127: 1039 33 | port_rx_128_to_255: 298 34 | port_rx_256_to_511: 71 35 | port_rx_512_to_1023: 38 36 | port_rx_1024_to_15xx: 147 37 | port_rx_15xx_to_jumbo: 0 38 | port_rx_gtjumbo: 0 39 | port_rx_bad_gtjumbo: 0 40 | port_rx_overflow: 0 41 | port_rx_nodesc_drops: 0 42 | port_rx_pm_trunc_bb_overflow: 0 43 | port_rx_pm_discard_bb_overflow: 0 44 | port_rx_pm_trunc_vfifo_full: 0 45 | port_rx_pm_discard_vfifo_full: 0 46 | port_rx_pm_trunc_qbb: 0 47 | port_rx_pm_discard_qbb: 0 48 | port_rx_pm_discard_mapping: 0 49 | port_rx_dp_q_disabled_packets: 0 50 | port_rx_dp_di_dropped_packets: 27 51 | port_rx_dp_streaming_packets: 0 52 | port_rx_dp_hlb_fetch: 0 53 | port_rx_dp_hlb_wait: 0 54 | rx_unicast: 1146 55 | rx_unicast_bytes: 361894 56 | rx_multicast: 390 57 | rx_multicast_bytes: 35635 58 | rx_broadcast: 32 59 | rx_broadcast_bytes: 2052 60 | rx_bad: 0 61 | rx_bad_bytes: 0 62 | rx_overflow: 0 63 | tx_unicast: 1799 64 | tx_unicast_bytes: 787362 65 | tx_multicast: 60 66 | tx_multicast_bytes: 7457 67 | tx_broadcast: 0 68 | tx_broadcast_bytes: 0 69 | tx_bad: 0 70 | tx_bad_bytes: 0 71 | tx_overflow: 0 72 | tx_merge_events: 3 73 | tx_tso_bursts: 82 74 | tx_tso_long_headers: 0 75 | tx_tso_packets: 390 76 | tx_tso_fallbacks: 0 77 | tx_pushes: 1231 78 | tx_pio_packets: 1247 79 | tx_cb_packets: 2 80 | rx_reset: 0 81 | rx_tobe_disc: 0 82 | rx_ip_hdr_chksum_err: 0 83 | rx_tcp_udp_chksum_err: 0 84 | rx_inner_ip_hdr_chksum_err: 0 85 | rx_inner_tcp_udp_chksum_err: 0 86 | rx_outer_ip_hdr_chksum_err: 0 87 | rx_outer_tcp_udp_chksum_err: 0 88 | rx_eth_crc_err: 0 89 | rx_mcast_mismatch: 0 90 | rx_frm_trunc: 0 91 | rx_merge_events: 0 92 | rx_merge_packets: 0 93 | rx_xdp_drops: 0 94 | rx_xdp_bad_drops: 0 95 | rx_xdp_tx: 0 96 | rx_xdp_redirect: 0 97 | rfs_filter_count: 0 98 | rfs_succeeded: 0 99 | rfs_failed: 0 100 | tx-0.tx_packets: 130 101 | tx-1.tx_packets: 339 102 | tx-2.tx_packets: 129 103 | tx-3.tx_packets: 62 104 | tx-4.tx_packets: 97 105 | tx-5.tx_packets: 39 106 | tx-6.tx_packets: 171 107 | tx-7.tx_packets: 111 108 | tx-8.tx_packets: 53 109 | tx-9.tx_packets: 92 110 | tx-10.tx_packets: 218 111 | tx-11.tx_packets: 439 112 | tx-12.tx_packets: 0 113 | tx-13.tx_packets: 0 114 | tx-14.tx_packets: 0 115 | tx-15.tx_packets: 0 116 | tx-16.tx_packets: 0 117 | tx-17.tx_packets: 0 118 | rx-0.rx_packets: 232 119 | rx-1.rx_packets: 115 120 | rx-2.rx_packets: 86 121 | rx-3.rx_packets: 130 122 | rx-4.rx_packets: 225 123 | rx-5.rx_packets: 86 124 | rx-6.rx_packets: 179 125 | rx-7.rx_packets: 139 126 | rx-8.rx_packets: 169 127 | rx-9.rx_packets: 114 128 | rx-10.rx_packets: 50 129 | rx-11.rx_packets: 60 130 | tx-xdp-cpu-0.tx_packets: 0 131 | tx-xdp-cpu-1.tx_packets: 0 132 | tx-xdp-cpu-2.tx_packets: 0 133 | tx-xdp-cpu-3.tx_packets: 0 134 | tx-xdp-cpu-4.tx_packets: 0 135 | tx-xdp-cpu-5.tx_packets: 0 136 | tx-xdp-cpu-6.tx_packets: 0 137 | tx-xdp-cpu-7.tx_packets: 0 138 | tx-xdp-cpu-8.tx_packets: 0 139 | tx-xdp-cpu-9.tx_packets: 0 140 | tx-xdp-cpu-10.tx_packets: 0 141 | tx-xdp-cpu-11.tx_packets: 0 142 | tx-xdp-cpu-12.tx_packets: 0 143 | tx-xdp-cpu-13.tx_packets: 0 144 | tx-xdp-cpu-14.tx_packets: 0 145 | tx-xdp-cpu-15.tx_packets: 0 146 | tx-xdp-cpu-16.tx_packets: 0 147 | tx-xdp-cpu-17.tx_packets: 0 148 | tx-xdp-cpu-18.tx_packets: 0 149 | tx-xdp-cpu-19.tx_packets: 0 150 | tx-xdp-cpu-20.tx_packets: 0 151 | tx-xdp-cpu-21.tx_packets: 0 152 | tx-xdp-cpu-22.tx_packets: 0 153 | tx-xdp-cpu-23.tx_packets: 0 154 | -------------------------------------------------------------------------------- /tests/tg3: -------------------------------------------------------------------------------- 1 | rx_octets: 60386827026 2 | rx_fragments: 0 3 | rx_ucast_packets: 141299868 4 | rx_mcast_packets: 12967606 5 | rx_bcast_packets: 675616 6 | rx_fcs_errors: 0 7 | rx_align_errors: 0 8 | rx_xon_pause_rcvd: 0 9 | rx_xoff_pause_rcvd: 0 10 | rx_mac_ctrl_rcvd: 0 11 | rx_xoff_entered: 0 12 | rx_frame_too_long_errors: 0 13 | rx_jabbers: 0 14 | rx_undersize_packets: 0 15 | rx_in_length_errors: 0 16 | rx_out_length_errors: 0 17 | rx_64_or_less_octet_packets: 0 18 | rx_65_to_127_octet_packets: 0 19 | rx_128_to_255_octet_packets: 0 20 | rx_256_to_511_octet_packets: 0 21 | rx_512_to_1023_octet_packets: 0 22 | rx_1024_to_1522_octet_packets: 0 23 | rx_1523_to_2047_octet_packets: 0 24 | rx_2048_to_4095_octet_packets: 0 25 | rx_4096_to_8191_octet_packets: 0 26 | rx_8192_to_9022_octet_packets: 0 27 | tx_octets: 33589308727 28 | tx_collisions: 0 29 | tx_xon_sent: 0 30 | tx_xoff_sent: 0 31 | tx_flow_control: 0 32 | tx_mac_errors: 0 33 | tx_single_collisions: 0 34 | tx_mult_collisions: 0 35 | tx_deferred: 0 36 | tx_excessive_collisions: 0 37 | tx_late_collisions: 0 38 | tx_collide_2times: 0 39 | tx_collide_3times: 0 40 | tx_collide_4times: 0 41 | tx_collide_5times: 0 42 | tx_collide_6times: 0 43 | tx_collide_7times: 0 44 | tx_collide_8times: 0 45 | tx_collide_9times: 0 46 | tx_collide_10times: 0 47 | tx_collide_11times: 0 48 | tx_collide_12times: 0 49 | tx_collide_13times: 0 50 | tx_collide_14times: 0 51 | tx_collide_15times: 0 52 | tx_ucast_packets: 140518737 53 | tx_mcast_packets: 9 54 | tx_bcast_packets: 6 55 | tx_carrier_sense_errors: 0 56 | tx_discards: 0 57 | tx_errors: 0 58 | dma_writeq_full: 0 59 | dma_write_prioq_full: 0 60 | rxbds_empty: 0 61 | rx_discards: 0 62 | rx_errors: 0 63 | rx_threshold_hit: 0 64 | dma_readq_full: 0 65 | dma_read_prioq_full: 0 66 | tx_comp_queue_full: 0 67 | ring_set_send_prod_index: 0 68 | ring_status_update: 0 69 | nic_irqs: 0 70 | nic_avoided_irqs: 0 71 | nic_tx_threshold_hit: 0 72 | mbuf_lwm_thresh_hit: 0 73 | -------------------------------------------------------------------------------- /tests/virtio_net: -------------------------------------------------------------------------------- 1 | rx_queue_0_packets: 10282181 2 | rx_queue_0_bytes: 5048789307 3 | rx_queue_1_packets: 10401806 4 | rx_queue_1_bytes: 4819127125 5 | tx_queue_0_packets: 3558968 6 | tx_queue_0_bytes: 18392695909 7 | tx_queue_1_packets: 3493740 8 | tx_queue_1_bytes: 18293525171 9 | -------------------------------------------------------------------------------- /tests/vmxnet3: -------------------------------------------------------------------------------- 1 | NIC statistics: 2 | Tx Queue#: 0 3 | TSO pkts tx: 161 4 | TSO bytes tx: 353558 5 | ucast pkts tx: 54123 6 | ucast bytes tx: 9333023 7 | mcast pkts tx: 36 8 | mcast bytes tx: 4622 9 | bcast pkts tx: 3 10 | bcast bytes tx: 432 11 | pkts tx err: 0 12 | pkts tx discard: 0 13 | drv dropped tx total: 0 14 | too many frags: 0 15 | giant hdr: 0 16 | hdr err: 0 17 | tso: 0 18 | ring full: 0 19 | pkts linearized: 0 20 | hdr cloned: 0 21 | giant hdr: 0 22 | Tx Queue#: 1 23 | TSO pkts tx: 620 24 | TSO bytes tx: 1240681 25 | ucast pkts tx: 64809 26 | ucast bytes tx: 9359541 27 | mcast pkts tx: 6 28 | mcast bytes tx: 528 29 | bcast pkts tx: 0 30 | bcast bytes tx: 0 31 | pkts tx err: 0 32 | pkts tx discard: 0 33 | drv dropped tx total: 0 34 | too many frags: 0 35 | giant hdr: 0 36 | hdr err: 0 37 | tso: 0 38 | ring full: 0 39 | pkts linearized: 0 40 | hdr cloned: 0 41 | giant hdr: 0 42 | Rx Queue#: 0 43 | LRO pkts rx: 5283 44 | LRO byte rx: 27010018 45 | ucast pkts rx: 40863 46 | ucast bytes rx: 75776304 47 | mcast pkts rx: 112048 48 | mcast bytes rx: 38879727 49 | bcast pkts rx: 79384 50 | bcast bytes rx: 9352174 51 | pkts rx OOB: 0 52 | pkts rx err: 0 53 | drv dropped rx total: 0 54 | err: 0 55 | fcs: 0 56 | rx buf alloc fail: 0 57 | Rx Queue#: 1 58 | LRO pkts rx: 604 59 | LRO byte rx: 2527622 60 | ucast pkts rx: 143523 61 | ucast bytes rx: 23059888 62 | mcast pkts rx: 82558 63 | mcast bytes rx: 22900279 64 | bcast pkts rx: 17327 65 | bcast bytes rx: 4360015 66 | pkts rx OOB: 0 67 | pkts rx err: 0 68 | drv dropped rx total: 0 69 | err: 0 70 | fcs: 0 71 | rx buf alloc fail: 0 72 | tx timeout count: 0 73 | -------------------------------------------------------------------------------- /util.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #include 13 | #include 14 | 15 | #include "util.h" 16 | 17 | void throw_errno(const std::string& what) 18 | { 19 | throw std::system_error(errno, std::system_category(), what); 20 | } 21 | -------------------------------------------------------------------------------- /util.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 | * 8 | * See the COPYRIGHT file distributed with this work for additional 9 | * information regarding copyright ownership. 10 | */ 11 | 12 | #pragma once 13 | 14 | #include 15 | 16 | extern void throw_errno(const std::string& what); 17 | --------------------------------------------------------------------------------