Compare commits
	
		
			145 Commits
		
	
	
		
			db3a764d49
			...
			master
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					5af11cb612 | ||
| 
						 | 
					aa17e6865c | ||
| 
						 | 
					34797b100a | ||
| 
						 | 
					b15a950d6a | ||
| 
						 | 
					c6ce0d6e4d | ||
| 
						 | 
					48b7214840 | ||
| 
						 | 
					a2ba6aa0ef | ||
| 
						 | 
					8e8edb48d1 | ||
| 
						 | 
					e88ce9da2b | ||
| 
						 | 
					c4488d6236 | ||
| 
						 | 
					133febf550 | ||
| 
						 | 
					1ca9abdf8a | ||
| 
						 | 
					b10ff0f8dd | ||
| 
						 | 
					f101cb0a23 | ||
| 
						 | 
					a71be6e4c2 | ||
| 
						 | 
					ba721cf9fb | ||
| 
						 | 
					736005b4f6 | ||
| 
						 | 
					70f19bf988 | ||
| 
						 | 
					d32b7e42c9 | ||
| 
						 | 
					b3f96de3e0 | ||
| 
						 | 
					6ecfb2245f | ||
| 
						 | 
					1d4cd2d075 | ||
| 
						 | 
					52f16e0673 | ||
| 
						 | 
					9042ad7573 | ||
| 
						 | 
					f9f3dc6490 | ||
| 
						 | 
					cdafa791d0 | ||
| 
						 | 
					ef4dfbe870 | ||
| 
						 | 
					1a42221e58 | ||
| 
						 | 
					ca1d2104dc | ||
| 
						 | 
					c6c168733e | ||
| 
						 | 
					c6a5c68657 | ||
| 
						 | 
					f7d4a78f41 | ||
| 
						 | 
					4b15add4ff | ||
| 
						 | 
					9842bb2dc2 | ||
| 
						 | 
					a59af743a9 | ||
| 
						 | 
					f65301f233 | ||
| 
						 | 
					7fd2e31913 | ||
| 
						 | 
					c514baa9b2 | ||
| 
						 | 
					ac18ab7b10 | ||
| 
						 | 
					3acf12ada3 | ||
| 
						 | 
					ce60c79008 | ||
| 
						 | 
					a665fe335b | ||
| 
						 | 
					ffb28b7e34 | ||
| 
						 | 
					f09c705e71 | ||
| 
						 | 
					3de22ad136 | ||
| 
						 | 
					d36ef515a6 | ||
| 
						 | 
					75db1771b7 | ||
| 
						 | 
					4020a430f5 | ||
| 
						 | 
					d404cbd154 | ||
| 
						 | 
					d5f68ca4e7 | ||
| 
						 | 
					dc3d1e0b46 | ||
| 
						 | 
					e885efa921 | ||
| 
						 | 
					dcf2c0ee54 | ||
| 
						 | 
					feaeba8be4 | ||
| 
						 | 
					b4d19c937c | ||
| 
						 | 
					7846cbce1a | ||
| 
						 | 
					74b25e4c88 | ||
| 
						 | 
					ef2500dcc7 | ||
| 
						 | 
					70379aaf6e | ||
| 
						 | 
					4d471b38fb | ||
| 
						 | 
					895b8ed373 | ||
| 
						 | 
					efb32ac10d | ||
| 
						 | 
					7f3028cbdb | ||
| 
						 | 
					1c1dbe6464 | ||
| 
						 | 
					b98b68c718 | ||
| 
						 | 
					f55edced32 | ||
| 
						 | 
					0d7b482edd | ||
| 
						 | 
					933766120f | ||
| 
						 | 
					fbfa2ec154 | ||
| 
						 | 
					0e75c44cb8 | ||
| 
						 | 
					bce84023ca | ||
| 
						 | 
					a0cd7c57e2 | ||
| 
						 | 
					d535cea7db | ||
| 
						 | 
					21f3b2b199 | ||
| 
						 | 
					9f12bcf676 | ||
| 
						 | 
					dd1688a587 | ||
| 
						 | 
					8c50ef81af | ||
| 
						 | 
					8b753c83af | ||
| 
						 | 
					7e3300552d | ||
| 
						 | 
					a3be7337bb | ||
| 
						 | 
					1bf87a4cb2 | ||
| 
						 | 
					d4269ad79b | ||
| 
						 | 
					807cd20da0 | ||
| 
						 | 
					23a247c048 | ||
| 
						 | 
					2b3674dcae | ||
| 
						 | 
					86e120ea5f | ||
| 
						 | 
					48725546a2 | ||
| 
						 | 
					4731bbfe2f | ||
| 
						 | 
					6dc369efbc | ||
| 
						 | 
					afc8eefaf1 | ||
| 
						 | 
					d8a532febe | ||
| 
						 | 
					fe39d38897 | ||
| 
						 | 
					44cb254ee0 | ||
| 
						 | 
					72d6d87bf9 | ||
| 
						 | 
					81b8082fd4 | ||
| 
						 | 
					948d96ed28 | ||
| 
						 | 
					765a6417b2 | ||
| 
						 | 
					5a895a09ca | ||
| 
						 | 
					2773594274 | ||
| 
						 | 
					846bb46e33 | ||
| 
						 | 
					33d69e8dea | ||
| 
						 | 
					bbf5a5a570 | ||
| 
						 | 
					651169f726 | ||
| 
						 | 
					9b8dc0916c | ||
| 
						 | 
					f7ca5dfde2 | ||
| 
						 | 
					80b88fbbb4 | ||
| 
						 | 
					98281e7df6 | ||
| 
						 | 
					470aca5c68 | ||
| 
						 | 
					8f0183eeb8 | ||
| 
						 | 
					b5d88076a8 | ||
| 
						 | 
					56ceb86f97 | ||
| 
						 | 
					abbc3d4a63 | ||
| 
						 | 
					d0609781e8 | ||
| 
						 | 
					2ff3021eae | ||
| 
						 | 
					31c286ca57 | ||
| 
						 | 
					dd982373a7 | ||
| 
						 | 
					42d3df0e9c | ||
| 
						 | 
					774339e98f | ||
| 
						 | 
					b0c1c7e2a7 | ||
| 
						 | 
					36f882d916 | ||
| 
						 | 
					b1225583cd | ||
| 
						 | 
					b491a6921c | ||
| 
						 | 
					63fedc6a41 | ||
| 
						 | 
					aefd0364fb | ||
| 
						 | 
					3ae7073198 | ||
| 
						 | 
					9c306812f9 | ||
| 
						 | 
					3790a2fcb2 | ||
| 
						 | 
					0b86645a63 | ||
| 
						 | 
					fa206be639 | ||
| 
						 | 
					350ee49293 | ||
| 
						 | 
					210d4d48a7 | ||
| 
						 | 
					ad8224bcec | ||
| 
						 | 
					9943dff277 | ||
| 
						 | 
					bf0b7d989f | ||
| 
						 | 
					6ec90b3b9b | ||
| 
						 | 
					2a2214a0ac | ||
| 
						 | 
					31b231804f | ||
| 
						 | 
					a4c66663c1 | ||
| 
						 | 
					b9e054093a | ||
| 
						 | 
					1c7320ce1e | ||
| 
						 | 
					50841b5109 | ||
| 
						 | 
					babbbb4e57 | ||
| 
						 | 
					e2544129bc | ||
| 
						 | 
					39b5b3af9f | ||
| 
						 | 
					a263f54744 | 
							
								
								
									
										19
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
name: GitHub Release on Tag
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    tags:
 | 
			
		||||
      - '[0-9].[0-9][0-9]'
 | 
			
		||||
jobs:
 | 
			
		||||
  release_snmp_info:
 | 
			
		||||
    if: github.repository == 'netdisco/snmp-info'
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout
 | 
			
		||||
        uses: actions/checkout@v2
 | 
			
		||||
      - name: Get the Tag
 | 
			
		||||
        id: get_tag
 | 
			
		||||
        run: echo ::set-output name=TAGVALUE::${GITHUB_REF#refs/tags/}
 | 
			
		||||
      - name: Release
 | 
			
		||||
        uses: softprops/action-gh-release@v1
 | 
			
		||||
        with:
 | 
			
		||||
          name: SNMP::Info ${{ steps.get_tag.outputs.TAGVALUE }}
 | 
			
		||||
							
								
								
									
										124
									
								
								.github/workflows/test_and_publish.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								.github/workflows/test_and_publish.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,124 @@
 | 
			
		||||
name: Test and Publish SNMP::Info
 | 
			
		||||
on:
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
    inputs:
 | 
			
		||||
      success_irc_squawk:
 | 
			
		||||
        description: 'Squawk to IRC on successful tests'     
 | 
			
		||||
        required: false
 | 
			
		||||
        default:  false
 | 
			
		||||
      debug_test_enabled:
 | 
			
		||||
        description: 'With build and test debug'
 | 
			
		||||
        required: false
 | 
			
		||||
        default:  false
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - master
 | 
			
		||||
    tags:
 | 
			
		||||
      - '[0-9].[0-9][0-9]'
 | 
			
		||||
  pull_request:
 | 
			
		||||
    types: [opened, synchronize, reopened]
 | 
			
		||||
jobs:
 | 
			
		||||
  test_snmp_info:
 | 
			
		||||
    name: Test and CPAN Upload
 | 
			
		||||
    if: github.repository == 'netdisco/snmp-info'
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    container:
 | 
			
		||||
      image: 'netdisco/netdisco:latest-do'
 | 
			
		||||
      options: '--user root --entrypoint /bin/ash'
 | 
			
		||||
      volumes:
 | 
			
		||||
        - '/home/runner/work:/github/workspace'
 | 
			
		||||
    defaults:
 | 
			
		||||
      run:
 | 
			
		||||
        working-directory: /github/workspace/snmp-info/snmp-info
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Get the Tag or Branch
 | 
			
		||||
      run: echo "GH_REF_SHORT=$(echo ${GITHUB_REF##*/})" >> $GITHUB_ENV
 | 
			
		||||
 | 
			
		||||
    - name: Install base packages
 | 
			
		||||
      run: apk add tmux bash curl sudo xz
 | 
			
		||||
    - name: Install other packages
 | 
			
		||||
      run: apk add openssh-client gcc make musl-dev perl-dev unzip jq
 | 
			
		||||
    - name: Install fake apt-get
 | 
			
		||||
      run: echo 'if [ "$1" == "update" ]; then exec apk update; else exec apk add openssh-client xz; fi' > /usr/local/bin/apt-get && chmod +x /usr/local/bin/apt-get
 | 
			
		||||
 | 
			
		||||
    - name: Check out latest code
 | 
			
		||||
      uses: actions/checkout@v1
 | 
			
		||||
    - name: Fix owner of checkout
 | 
			
		||||
      run: chown -R netdisco:netdisco /github/workspace/snmp-info/snmp-info
 | 
			
		||||
 | 
			
		||||
    - name: Install Perl deps
 | 
			
		||||
      run: |
 | 
			
		||||
        sudo -u netdisco /home/netdisco/bin/localenv cpanm --notest Hook::LexWrap Test::Class::Most Test::Distribution Test::MockObject::Extends PPI Class::ISA Module::Info File::Slurp Test::Perl::Critic Test::Spelling CPAN::Uploader
 | 
			
		||||
 | 
			
		||||
    - name: Run Tests
 | 
			
		||||
      id: build_and_run_tests
 | 
			
		||||
      run: |
 | 
			
		||||
        sudo -u netdisco /home/netdisco/bin/localenv perl ./Build.PL
 | 
			
		||||
        sudo -u netdisco /home/netdisco/bin/localenv ./Build test --test_files t/ --test_files xt/
 | 
			
		||||
      continue-on-error: true
 | 
			
		||||
 | 
			
		||||
    - name: IRC test failure notification
 | 
			
		||||
      if: (steps.build_and_run_tests.outcome == 'failure') && (github.event_name != 'workflow_dispatch') && (github.event_name != 'pull_request')
 | 
			
		||||
      uses: Gottox/irc-message-action@v2
 | 
			
		||||
      with:
 | 
			
		||||
        channel: '#netdisco'
 | 
			
		||||
        nickname: github-actions
 | 
			
		||||
        message: |-
 | 
			
		||||
          🤖 ${{ github.actor }} pushed to ${{ env.GH_REF_SHORT }}: https://github.com/${{ github.repository }}/commit/${{ github.sha }}
 | 
			
		||||
          😭 TESTS have FAILED! 👀 https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
 | 
			
		||||
    - name: IRC test success notification
 | 
			
		||||
      if: (steps.build_and_run_tests.outcome == 'success') && github.event.inputs.success_irc_squawk
 | 
			
		||||
      uses: Gottox/irc-message-action@v2
 | 
			
		||||
      with:
 | 
			
		||||
        channel: '#netdisco'
 | 
			
		||||
        nickname: github-actions
 | 
			
		||||
        message: |-
 | 
			
		||||
          🤖 ${{ github.actor }} pushed to ${{ env.GH_REF_SHORT }}: https://github.com/${{ github.repository }}/commit/${{ github.sha }} (tests PASSED 🎉)
 | 
			
		||||
 | 
			
		||||
    - name: Make release
 | 
			
		||||
      if: steps.build_and_run_tests.outcome == 'success'
 | 
			
		||||
      run: |
 | 
			
		||||
        sudo -u netdisco /home/netdisco/bin/localenv rm ./MANIFEST
 | 
			
		||||
        sudo -u netdisco /home/netdisco/bin/localenv ./Build manifest
 | 
			
		||||
        sudo -u netdisco /home/netdisco/bin/localenv ./Build distmeta
 | 
			
		||||
        sudo -u netdisco /home/netdisco/bin/localenv ./Build dist
 | 
			
		||||
 | 
			
		||||
    - name: Upload to CPAN
 | 
			
		||||
      id: upload_to_cpan
 | 
			
		||||
      if: success() && startsWith(github.ref, 'refs/tags/')
 | 
			
		||||
      env:
 | 
			
		||||
        PAUSE_USERNAME: ${{ secrets.PAUSE_USERNAME }}
 | 
			
		||||
        PAUSE_PASSWORD: ${{ secrets.PAUSE_PASSWORD }}
 | 
			
		||||
      run: |
 | 
			
		||||
        bash -c 'RELEASENAME=(SNMP-Info-*.tar.gz) && ! curl -LI --fail https://cpan.metacpan.org/authors/id/O/OL/OLIVER/${RELEASENAME}'
 | 
			
		||||
        sudo -u netdisco /home/netdisco/bin/localenv cpan-upload -u '${{ env.PAUSE_USERNAME }}' -p '${{ env.PAUSE_PASSWORD }}' SNMP-Info-*.tar.gz
 | 
			
		||||
      continue-on-error: true
 | 
			
		||||
 | 
			
		||||
    - name: IRC upload failure notification
 | 
			
		||||
      if: steps.upload_to_cpan.outcome == 'failure'
 | 
			
		||||
      uses: Gottox/irc-message-action@v2
 | 
			
		||||
      with:
 | 
			
		||||
        channel: '#netdisco'
 | 
			
		||||
        nickname: github-actions
 | 
			
		||||
        message: |-
 | 
			
		||||
          🤖 Failed to upload SNMP::Info release ${{ env.GH_REF_SHORT }} to CPAN! 😭
 | 
			
		||||
          👀 https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
 | 
			
		||||
    - name: IRC upload success notification
 | 
			
		||||
      if: steps.upload_to_cpan.outcome == 'success'
 | 
			
		||||
      uses: Gottox/irc-message-action@v2
 | 
			
		||||
      with:
 | 
			
		||||
        channel: '#netdisco'
 | 
			
		||||
        nickname: github-actions
 | 
			
		||||
        message: |-
 | 
			
		||||
          🤖 Uploaded SNMP::Info release ${{ env.GH_REF_SHORT }} to CPAN 🎉
 | 
			
		||||
 | 
			
		||||
    - name: Setup tmate session
 | 
			
		||||
      uses: mxschmitt/action-tmate@v3
 | 
			
		||||
      if: always() && github.event.inputs.debug_test_enabled
 | 
			
		||||
      with:
 | 
			
		||||
        sudo: true
 | 
			
		||||
 | 
			
		||||
    - name: Preserve status from tests
 | 
			
		||||
      if: always() && (steps.build_and_run_tests.outcome == 'failure')
 | 
			
		||||
      run: exit 1
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -11,3 +11,4 @@ _build
 | 
			
		||||
blib
 | 
			
		||||
cover_db
 | 
			
		||||
.idea
 | 
			
		||||
.vscode
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										39
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								.travis.yml
									
									
									
									
									
								
							@@ -1,39 +0,0 @@
 | 
			
		||||
language: perl
 | 
			
		||||
perl:
 | 
			
		||||
  - "5.30"
 | 
			
		||||
  - "5.10"
 | 
			
		||||
os: linux
 | 
			
		||||
dist: trusty
 | 
			
		||||
addons:
 | 
			
		||||
  apt:
 | 
			
		||||
    packages:
 | 
			
		||||
      - jq
 | 
			
		||||
      - libsnmp-dev
 | 
			
		||||
branches:
 | 
			
		||||
  only:
 | 
			
		||||
    - /^3\.\d{2}$/
 | 
			
		||||
    - 'master'
 | 
			
		||||
before_install:
 | 
			
		||||
  - mkdir ~/netdisco-mibs
 | 
			
		||||
  - cd ~/netdisco-mibs
 | 
			
		||||
install:
 | 
			
		||||
  - curl -sL https://api.github.com/repos/netdisco/netdisco-mibs/releases/latest | jq -r '.tarball_url' | xargs -n1 curl -sL | tar --strip-components=1 -zxf -
 | 
			
		||||
  - cpanm --quiet --notest PkgConfig Test::CChecker Alien::zlib::Static Alien::OpenSSL::Static Alien::SNMP
 | 
			
		||||
before_script:
 | 
			
		||||
  - 'cd ${TRAVIS_BUILD_DIR}'
 | 
			
		||||
script:
 | 
			
		||||
  - >
 | 
			
		||||
    perl Build.PL &&
 | 
			
		||||
    PERL_MM_USE_DEFAULT=1 ./Build installdeps --cpan_client 'cpanm --quiet --notest' &&
 | 
			
		||||
    ./Build test --test_files t/ --test_files xt/
 | 
			
		||||
notifications:
 | 
			
		||||
  irc:
 | 
			
		||||
    on_success: change
 | 
			
		||||
    on_failure: change
 | 
			
		||||
    channels:
 | 
			
		||||
      - 'chat.freenode.net#netdisco'
 | 
			
		||||
#  email:
 | 
			
		||||
#    on_success: always
 | 
			
		||||
#    on_failure: always
 | 
			
		||||
#    recipients:
 | 
			
		||||
#      - 'snmp-info-cvs@lists.sourceforge.net'
 | 
			
		||||
							
								
								
									
										16
									
								
								Build.PL
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								Build.PL
									
									
									
									
									
								
							@@ -6,17 +6,19 @@ Module::Build->new(
 | 
			
		||||
  module_name => 'SNMP::Info',
 | 
			
		||||
  license     => 'bsd',
 | 
			
		||||
  dist_author => 'Eric A. Miller <emiller@cpan.org>',
 | 
			
		||||
  # dynamic_config => 1,
 | 
			
		||||
  # dynamic_config => 1,
 | 
			
		||||
  create_readme => 1,
 | 
			
		||||
  configure_requires => {
 | 
			
		||||
    'Module::Build' => '0.42',
 | 
			
		||||
  },
 | 
			
		||||
  # build_requires => {
 | 
			
		||||
  # },
 | 
			
		||||
  # build_requires => {
 | 
			
		||||
  # },
 | 
			
		||||
  requires => {
 | 
			
		||||
    'SNMP' => '0',
 | 
			
		||||
    'Math::BigInt' => '0',
 | 
			
		||||
    'NetAddr::IP' => '4.068',
 | 
			
		||||
    'Regexp::Common' => '0',
 | 
			
		||||
    'Scalar::Util' => '0',
 | 
			
		||||
  },
 | 
			
		||||
  recommends => {
 | 
			
		||||
    'PPI' => '0',
 | 
			
		||||
@@ -39,16 +41,16 @@ Module::Build->new(
 | 
			
		||||
    'Module::Find' => '0',
 | 
			
		||||
    'Hook::LexWrap' => '0',
 | 
			
		||||
  },
 | 
			
		||||
  # script_files => [
 | 
			
		||||
  # ],
 | 
			
		||||
  # share_dir => 'share',
 | 
			
		||||
  # script_files => [
 | 
			
		||||
  # ],
 | 
			
		||||
  # share_dir => 'share',
 | 
			
		||||
  meta_merge => {
 | 
			
		||||
    resources => {
 | 
			
		||||
      homepage => 'http://netdisco.org/',
 | 
			
		||||
      bugtracker => 'https://github.com/netdisco/snmp-info/issues',
 | 
			
		||||
      repository => 'https://github.com/netdisco/snmp-info',
 | 
			
		||||
      MailingList => 'https://lists.sourceforge.net/lists/listinfo/snmp-info-users',
 | 
			
		||||
      IRC => 'irc://irc.freenode.org/#netdisco',
 | 
			
		||||
      IRC => 'irc://irc.libera.chat/#netdisco',
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
)->create_build_script;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										184
									
								
								Changes
									
									
									
									
									
								
							
							
						
						
									
										184
									
								
								Changes
									
									
									
									
									
								
							@@ -1,3 +1,187 @@
 | 
			
		||||
Version 3.95 (2023-09-02)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #491 Dell - Take into account OS10
 | 
			
		||||
  * #492 F5 - Update the module to correctly retrieve interfaces
 | 
			
		||||
  * #499 aoscx power over ethernet support
 | 
			
		||||
  * #500 pretty format 2.5gbps speeds
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * partial revert #484 and replace with Cisco specific CiscoAgg::agg_ports_propvirtual
 | 
			
		||||
 | 
			
		||||
Version 3.94 (2023-07-25)
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * partial revert #484 and replace with Cisco specific CiscoAgg::agg_ports_propvirtual
 | 
			
		||||
 | 
			
		||||
Version 3.93 (2023-07-14)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #484 add Aggregate::agg_ports_ifstack to CiscoAgg::agg_ports
 | 
			
		||||
 | 
			
		||||
Version 3.92 (2023-02-20)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * #450 Hirschmann switch support
 | 
			
		||||
  * #463 Netonix switch support
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * new() accepts hashref as well as bare list of arguments
 | 
			
		||||
  # #475 additional recognition of Allied switches
 | 
			
		||||
  * #477 additional recognition of Cisco 9xxx switches
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #460 always return $info instance to allow error() inspection
 | 
			
		||||
  * #464 check in case non numeric key in cache befor inc
 | 
			
		||||
  * #474 workaround for aruba-cx link aggregation
 | 
			
		||||
 | 
			
		||||
Version 3.89 (2022-08-18)
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * add Regexp::Common to dependencies
 | 
			
		||||
  * fix tests for i_vlan_membership_untagged
 | 
			
		||||
 | 
			
		||||
Version 3.88 (2022-08-17)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * Add i_subinterfaces for VLAN subinterfaces in Layer3::Juniper
 | 
			
		||||
  * Add i_vlan and i_vlan_membership_untagged to Layer3::Juniper based on ifChassisLogicalUnit
 | 
			
		||||
 | 
			
		||||
Version 3.87 (2022-08-12)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * PortAccessEntity/IEEE8021-PAE-MIB module support
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #462 SNMP::Info::Layer3::PaloAlto to include layer 2
 | 
			
		||||
  * #461 Expose lldLocChassisId as $lldp->lldp_loc_id
 | 
			
		||||
  * Update CiscoStats.pm for Amsterdam IOS-XE release
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #470 avoid error if Juniper VLAN not in bp_index
 | 
			
		||||
 | 
			
		||||
Version 3.86 (2022-08-10)
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #468 Cisco dotted subinterfaces had incorrect vlan assigned
 | 
			
		||||
 | 
			
		||||
Version 3.85 (2022-08-02)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * Add i_subinterfaces for VLAN subinterfaces in CiscoVTP
 | 
			
		||||
 | 
			
		||||
Version 3.84 (2022-07-04)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * Add support for HW Group STE whitespace monitoring devices
 | 
			
		||||
 | 
			
		||||
Version 3.82 (2022-03-16)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * add Cisco BGP MIB support to all Cisco Layer 3 devices
 | 
			
		||||
 | 
			
		||||
Version 3.81 (2021-10-07)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #400 change IPv6 decode warning to be debug-only
 | 
			
		||||
  * #394 Recognise hyphenated cumulus version strings
 | 
			
		||||
  * #401 add DLink layers always 2+3
 | 
			
		||||
  * #377 i/if_ignore cleanup
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #443 trapeze and nws deep recursion fix
 | 
			
		||||
  * #378 fix several uninitialized vars
 | 
			
		||||
  * #374 undefined error from H3C class
 | 
			
		||||
 | 
			
		||||
Version 3.80 (2021-09-22)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * layer3::fortinet now supports link aggregation mapping
 | 
			
		||||
  * Add support for Riverbed SteelheadEx and Steelfusion (#438)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * change default class for Cisco from Layer3::Cisco to Layer3::CiscoSwitch
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * Fix typo in Whiterabbit.pm (#439)
 | 
			
		||||
 | 
			
		||||
Version 3.78 (2021-09-08)
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * Fix undefined value error in Bridge.pm i_vlan
 | 
			
		||||
 | 
			
		||||
Version 3.77 (2021-09-04)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * set_i_vlan support for Ruckus/Brocade/Foundry
 | 
			
		||||
 | 
			
		||||
Version 3.74 (2021-08-24)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * Support changing PVID on Arista switches (#429)
 | 
			
		||||
  * Support for Whiterabbit devices
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * Patch H3C broken node-vlan mapping
 | 
			
		||||
 | 
			
		||||
Version 3.73 (2021-06-28)
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * fix packaging error
 | 
			
		||||
 | 
			
		||||
Version 3.72 (2021-06-28)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * Support for Aruba CX switches
 | 
			
		||||
  * IEEE802_Bridge module
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #403 don't use layer3::dell for layer3::aruba devices
 | 
			
		||||
  * layer2::aerohive supports version numbers above 9
 | 
			
		||||
 | 
			
		||||
Version 3.71 (2020-11-27)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 | 
			
		||||
  * #386 Teltonika RUT9XX support (jeroenvis)
 | 
			
		||||
 | 
			
		||||
  [ENHANCEMENTS]
 | 
			
		||||
 | 
			
		||||
  * #398, 411 more ubiquiti cleanup and support for er-12 (lbegnaud & inphobia)
 | 
			
		||||
 | 
			
		||||
  [BUG FIXES]
 | 
			
		||||
 | 
			
		||||
  * #409, 410 Don't add AUTOLOAD generated methods in symbol table
 | 
			
		||||
  * #372, 375 fix lldp on nx-os6 (inphobia)
 | 
			
		||||
 | 
			
		||||
Version 3.70 (2019-10-15)
 | 
			
		||||
 | 
			
		||||
  [NEW FEATURES]
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								MANIFEST
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								MANIFEST
									
									
									
									
									
								
							@@ -17,6 +17,7 @@ lib/SNMP/Info/AMAP.pm
 | 
			
		||||
lib/SNMP/Info/Bridge.pm
 | 
			
		||||
lib/SNMP/Info/CDP.pm
 | 
			
		||||
lib/SNMP/Info/CiscoAgg.pm
 | 
			
		||||
lib/SNMP/Info/CiscoBGP.pm
 | 
			
		||||
lib/SNMP/Info/CiscoConfig.pm
 | 
			
		||||
lib/SNMP/Info/CiscoPortSecurity.pm
 | 
			
		||||
lib/SNMP/Info/CiscoPower.pm
 | 
			
		||||
@@ -32,6 +33,7 @@ lib/SNMP/Info/EDP.pm
 | 
			
		||||
lib/SNMP/Info/Entity.pm
 | 
			
		||||
lib/SNMP/Info/EtherLike.pm
 | 
			
		||||
lib/SNMP/Info/FDP.pm
 | 
			
		||||
lib/SNMP/Info/IEEE802_Bridge.pm
 | 
			
		||||
lib/SNMP/Info/IEEE802dot11.pm
 | 
			
		||||
lib/SNMP/Info/IEEE802dot3ad.pm
 | 
			
		||||
lib/SNMP/Info/IPv6.pm
 | 
			
		||||
@@ -57,6 +59,7 @@ lib/SNMP/Info/Layer2/Centillion.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Cisco.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/CiscoSB.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Exinda.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/Hirschmann.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/HP.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/HP4000.pm
 | 
			
		||||
lib/SNMP/Info/Layer2/HPVC.pm
 | 
			
		||||
@@ -78,6 +81,7 @@ lib/SNMP/Info/Layer3/AlteonAD.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Altiga.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Arista.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Aruba.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/ArubaCX.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/BayRS.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/BlueCoatSG.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/C3550.pm
 | 
			
		||||
@@ -111,6 +115,7 @@ lib/SNMP/Info/Layer3/Lenovo.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Microsoft.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Mikrotik.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/N1600.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Netonix.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Netscreen.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/NetSNMP.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Nexus.pm
 | 
			
		||||
@@ -123,17 +128,22 @@ lib/SNMP/Info/Layer3/Pica8.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Redlion.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Scalance.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/SonicWALL.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Steelfusion.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Steelhead.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/SteelheadEx.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Sun.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Tasman.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Teltonika.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Timetra.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/VMware.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/VyOS.pm
 | 
			
		||||
lib/SNMP/Info/Layer3/Whiterabbit.pm
 | 
			
		||||
lib/SNMP/Info/Layer7.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/APC.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/Arbor.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/CiscoIPS.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/Gigamon.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/HWGroup.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/Liebert.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/Neoteris.pm
 | 
			
		||||
lib/SNMP/Info/Layer7/Netscaler.pm
 | 
			
		||||
@@ -141,6 +151,7 @@ lib/SNMP/Info/LLDP.pm
 | 
			
		||||
lib/SNMP/Info/MAU.pm
 | 
			
		||||
lib/SNMP/Info/MRO.pm
 | 
			
		||||
lib/SNMP/Info/NortelStack.pm
 | 
			
		||||
lib/SNMP/Info/PortAccessEntity.pm
 | 
			
		||||
lib/SNMP/Info/PowerEthernet.pm
 | 
			
		||||
lib/SNMP/Info/RapidCity.pm
 | 
			
		||||
lib/SNMP/Info/SONMP.pm
 | 
			
		||||
@@ -274,6 +285,7 @@ xt/lib/Test/SNMP/Info/Layer3/SonicWALL.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Steelhead.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Sun.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Tasman.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Teltonika.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/Timetra.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/VMware.pm
 | 
			
		||||
xt/lib/Test/SNMP/Info/Layer3/VyOS.pm
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										328
									
								
								META.json
									
									
									
									
									
								
							
							
						
						
									
										328
									
								
								META.json
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
      "Eric A. Miller <emiller@cpan.org>"
 | 
			
		||||
   ],
 | 
			
		||||
   "dynamic_config" : 1,
 | 
			
		||||
   "generated_by" : "Module::Build version 0.4224",
 | 
			
		||||
   "generated_by" : "Module::Build version 0.4234",
 | 
			
		||||
   "license" : [
 | 
			
		||||
      "bsd"
 | 
			
		||||
   ],
 | 
			
		||||
@@ -30,7 +30,9 @@
 | 
			
		||||
         "requires" : {
 | 
			
		||||
            "Math::BigInt" : "0",
 | 
			
		||||
            "NetAddr::IP" : "4.068",
 | 
			
		||||
            "SNMP" : "0"
 | 
			
		||||
            "Regexp::Common" : "0",
 | 
			
		||||
            "SNMP" : "0",
 | 
			
		||||
            "Scalar::Util" : "0"
 | 
			
		||||
         }
 | 
			
		||||
      },
 | 
			
		||||
      "test" : {
 | 
			
		||||
@@ -53,543 +55,587 @@
 | 
			
		||||
   "provides" : {
 | 
			
		||||
      "SNMP::Info" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::AMAP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/AMAP.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::AdslLine" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/AdslLine.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Aggregate" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Aggregate.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Airespace" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Airespace.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Bridge" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Bridge.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CDP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CDP.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoAgg" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoAgg.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoBGP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoBGP.pm",
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoConfig" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoConfig.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoPortSecurity" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoPortSecurity.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoPower" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoPower.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoQOS" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoQOS.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoRTT" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoRTT.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoStack" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoStack.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoStats" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoStats.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoStpExtensions" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoStpExtensions.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::CiscoVTP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/CiscoVTP.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::DocsisCM" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/DocsisCM.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::DocsisHE" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/DocsisHE.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::EDP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/EDP.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Entity" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Entity.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::EtherLike" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/EtherLike.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::FDP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/FDP.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::IEEE802_Bridge" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/IEEE802_Bridge.pm",
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::IEEE802dot11" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/IEEE802dot11.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::IEEE802dot3ad" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/IEEE802dot3ad.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::IPv6" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/IPv6.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::LLDP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/LLDP.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer1" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer1.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer1::Allied" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer1/Allied.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer1::Asante" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer1/Asante.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer1::Bayhub" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer1/Bayhub.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer1::Cyclades" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer1/Cyclades.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer1::S3000" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer1/S3000.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::3Com" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/3Com.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Adtran" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Adtran.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Aerohive" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Aerohive.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Airespace" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Airespace.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Aironet" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Aironet.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Allied" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Allied.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Atmedia" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Atmedia.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Baystack" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Baystack.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::C1900" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/C1900.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::C2900" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/C2900.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Catalyst" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Catalyst.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Centillion" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Centillion.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Cisco" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Cisco.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::CiscoSB" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/CiscoSB.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Exinda" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Exinda.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::HP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/HP.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::HP4000" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/HP4000.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::HPVC" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/HPVC.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Hirschmann" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Hirschmann.pm",
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Kentrox" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Kentrox.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::N2270" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/N2270.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::NAP222x" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/NAP222x.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::NWSS2300" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/NWSS2300.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Netgear" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Netgear.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Nexans" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Nexans.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Orinoco" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Orinoco.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Sixnet" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Sixnet.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Trapeze" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Trapeze.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::Ubiquiti" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/Ubiquiti.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer2::ZyXEL_DSLAM" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Aironet" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Aironet.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::AlcatelLucent" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/AlcatelLucent.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::AlteonAD" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/AlteonAD.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Altiga" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Altiga.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Arista" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Arista.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Aruba" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Aruba.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::ArubaCX" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/ArubaCX.pm",
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::BayRS" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/BayRS.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::BlueCoatSG" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/BlueCoatSG.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::C3550" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/C3550.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::C4000" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/C4000.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::C6500" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/C6500.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::CheckPoint" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/CheckPoint.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Ciena" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Ciena.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Cisco" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Cisco.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::CiscoASA" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/CiscoASA.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::CiscoFWSM" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/CiscoFWSM.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::CiscoSwitch" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/CiscoSwitch.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Contivity" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Contivity.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Cumulus" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Cumulus.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::DLink" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/DLink.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Dell" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Dell.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::ERX" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/ERX.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Enterasys" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Enterasys.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Extreme" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Extreme.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::F5" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/F5.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Force10" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Force10.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Fortinet" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Fortinet.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Foundry" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Foundry.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Genua" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Genua.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::H3C" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/H3C.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::HP9300" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/HP9300.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Huawei" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Huawei.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::IBMGbTor" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/IBMGbTor.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Juniper" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Juniper.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Lantronix" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Lantronix.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Lenovo" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Lenovo.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Microsoft" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Microsoft.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Mikrotik" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Mikrotik.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::N1600" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/N1600.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::NetSNMP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/NetSNMP.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Netonix" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Netonix.pm",
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Netscreen" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Netscreen.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Nexus" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Nexus.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::OneAccess" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/OneAccess.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::PacketFront" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/PacketFront.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::PaloAlto" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/PaloAlto.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Passport" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Passport.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Pf" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Pf.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Pica8" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Pica8.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Redlion" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Redlion.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Scalance" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Scalance.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::SonicWALL" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/SonicWALL.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Steelfusion" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Steelfusion.pm",
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Steelhead" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Steelhead.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::SteelheadEx" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/SteelheadEx.pm",
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Sun" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Sun.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Tasman" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Tasman.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Teltonika" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Teltonika.pm",
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Timetra" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Timetra.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::VMware" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/VMware.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::VyOS" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/VyOS.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer3::Whiterabbit" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer3/Whiterabbit.pm",
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::APC" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/APC.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::Arbor" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/Arbor.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::CiscoIPS" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/CiscoIPS.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::Gigamon" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/Gigamon.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::HWGroup" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/HWGroup.pm",
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::Liebert" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/Liebert.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::Neoteris" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/Neoteris.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::Layer7::Netscaler" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/Layer7/Netscaler.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::MAU" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/MAU.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::MRO" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/MRO.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::NortelStack" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/NortelStack.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::PortAccessEntity" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/PortAccessEntity.pm",
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::PowerEthernet" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/PowerEthernet.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::RapidCity" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/RapidCity.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      },
 | 
			
		||||
      "SNMP::Info::SONMP" : {
 | 
			
		||||
         "file" : "lib/SNMP/Info/SONMP.pm",
 | 
			
		||||
         "version" : "3.70"
 | 
			
		||||
         "version" : "3.95"
 | 
			
		||||
      }
 | 
			
		||||
   },
 | 
			
		||||
   "release_status" : "stable",
 | 
			
		||||
@@ -599,14 +645,14 @@
 | 
			
		||||
      },
 | 
			
		||||
      "homepage" : "http://netdisco.org/",
 | 
			
		||||
      "license" : [
 | 
			
		||||
         "http://opensource.org/licenses/bsd-license.php"
 | 
			
		||||
         "http://opensource.org/licenses/BSD-3-Clause"
 | 
			
		||||
      ],
 | 
			
		||||
      "repository" : {
 | 
			
		||||
         "url" : "https://github.com/netdisco/snmp-info"
 | 
			
		||||
      },
 | 
			
		||||
      "x_IRC" : "irc://irc.freenode.org/#netdisco",
 | 
			
		||||
      "x_IRC" : "irc://irc.libera.chat/#netdisco",
 | 
			
		||||
      "x_MailingList" : "https://lists.sourceforge.net/lists/listinfo/snmp-info-users"
 | 
			
		||||
   },
 | 
			
		||||
   "version" : "3.70",
 | 
			
		||||
   "x_serialization_backend" : "JSON::PP version 2.97001"
 | 
			
		||||
   "version" : "3.95",
 | 
			
		||||
   "x_serialization_backend" : "JSON::PP version 4.07"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										313
									
								
								META.yml
									
									
									
									
									
								
							
							
						
						
									
										313
									
								
								META.yml
									
									
									
									
									
								
							@@ -18,7 +18,7 @@ build_requires:
 | 
			
		||||
configure_requires:
 | 
			
		||||
  Module::Build: '0.42'
 | 
			
		||||
dynamic_config: 1
 | 
			
		||||
generated_by: 'Module::Build version 0.4224, CPAN::Meta::Converter version 2.150010'
 | 
			
		||||
generated_by: 'Module::Build version 0.4234, CPAN::Meta::Converter version 2.150010'
 | 
			
		||||
license: bsd
 | 
			
		||||
meta-spec:
 | 
			
		||||
  url: http://module-build.sourceforge.net/META-spec-v1.4.html
 | 
			
		||||
@@ -27,409 +27,442 @@ name: SNMP-Info
 | 
			
		||||
provides:
 | 
			
		||||
  SNMP::Info:
 | 
			
		||||
    file: lib/SNMP/Info.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::AMAP:
 | 
			
		||||
    file: lib/SNMP/Info/AMAP.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::AdslLine:
 | 
			
		||||
    file: lib/SNMP/Info/AdslLine.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Aggregate:
 | 
			
		||||
    file: lib/SNMP/Info/Aggregate.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Airespace:
 | 
			
		||||
    file: lib/SNMP/Info/Airespace.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Bridge:
 | 
			
		||||
    file: lib/SNMP/Info/Bridge.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::CDP:
 | 
			
		||||
    file: lib/SNMP/Info/CDP.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::CiscoAgg:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoAgg.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::CiscoBGP:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoBGP.pm
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::CiscoConfig:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoConfig.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::CiscoPortSecurity:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoPortSecurity.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::CiscoPower:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoPower.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::CiscoQOS:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoQOS.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::CiscoRTT:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoRTT.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::CiscoStack:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoStack.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::CiscoStats:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoStats.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::CiscoStpExtensions:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoStpExtensions.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::CiscoVTP:
 | 
			
		||||
    file: lib/SNMP/Info/CiscoVTP.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::DocsisCM:
 | 
			
		||||
    file: lib/SNMP/Info/DocsisCM.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::DocsisHE:
 | 
			
		||||
    file: lib/SNMP/Info/DocsisHE.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::EDP:
 | 
			
		||||
    file: lib/SNMP/Info/EDP.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Entity:
 | 
			
		||||
    file: lib/SNMP/Info/Entity.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::EtherLike:
 | 
			
		||||
    file: lib/SNMP/Info/EtherLike.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::FDP:
 | 
			
		||||
    file: lib/SNMP/Info/FDP.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::IEEE802_Bridge:
 | 
			
		||||
    file: lib/SNMP/Info/IEEE802_Bridge.pm
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::IEEE802dot11:
 | 
			
		||||
    file: lib/SNMP/Info/IEEE802dot11.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::IEEE802dot3ad:
 | 
			
		||||
    file: lib/SNMP/Info/IEEE802dot3ad.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::IPv6:
 | 
			
		||||
    file: lib/SNMP/Info/IPv6.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::LLDP:
 | 
			
		||||
    file: lib/SNMP/Info/LLDP.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer1:
 | 
			
		||||
    file: lib/SNMP/Info/Layer1.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer1::Allied:
 | 
			
		||||
    file: lib/SNMP/Info/Layer1/Allied.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer1::Asante:
 | 
			
		||||
    file: lib/SNMP/Info/Layer1/Asante.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer1::Bayhub:
 | 
			
		||||
    file: lib/SNMP/Info/Layer1/Bayhub.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer1::Cyclades:
 | 
			
		||||
    file: lib/SNMP/Info/Layer1/Cyclades.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer1::S3000:
 | 
			
		||||
    file: lib/SNMP/Info/Layer1/S3000.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::3Com:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/3Com.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Adtran:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Adtran.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Aerohive:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Aerohive.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Airespace:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Airespace.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Aironet:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Aironet.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Allied:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Allied.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Atmedia:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Atmedia.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Baystack:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Baystack.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::C1900:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/C1900.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::C2900:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/C2900.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Catalyst:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Catalyst.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Centillion:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Centillion.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Cisco:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Cisco.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::CiscoSB:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/CiscoSB.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Exinda:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Exinda.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::HP:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/HP.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::HP4000:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/HP4000.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::HPVC:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/HPVC.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Hirschmann:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Hirschmann.pm
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Kentrox:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Kentrox.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::N2270:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/N2270.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::NAP222x:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/NAP222x.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::NWSS2300:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/NWSS2300.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Netgear:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Netgear.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Nexans:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Nexans.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Orinoco:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Orinoco.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Sixnet:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Sixnet.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Trapeze:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Trapeze.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::Ubiquiti:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/Ubiquiti.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer2::ZyXEL_DSLAM:
 | 
			
		||||
    file: lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Aironet:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Aironet.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::AlcatelLucent:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/AlcatelLucent.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::AlteonAD:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/AlteonAD.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Altiga:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Altiga.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Arista:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Arista.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Aruba:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Aruba.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::ArubaCX:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/ArubaCX.pm
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::BayRS:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/BayRS.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::BlueCoatSG:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/BlueCoatSG.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::C3550:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/C3550.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::C4000:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/C4000.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::C6500:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/C6500.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::CheckPoint:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/CheckPoint.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Ciena:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Ciena.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Cisco:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Cisco.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::CiscoASA:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/CiscoASA.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::CiscoFWSM:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/CiscoFWSM.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::CiscoSwitch:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/CiscoSwitch.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Contivity:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Contivity.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Cumulus:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Cumulus.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::DLink:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/DLink.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Dell:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Dell.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::ERX:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/ERX.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Enterasys:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Enterasys.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Extreme:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Extreme.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::F5:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/F5.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Force10:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Force10.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Fortinet:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Fortinet.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Foundry:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Foundry.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Genua:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Genua.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::H3C:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/H3C.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::HP9300:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/HP9300.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Huawei:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Huawei.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::IBMGbTor:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/IBMGbTor.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Juniper:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Juniper.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Lantronix:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Lantronix.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Lenovo:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Lenovo.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Microsoft:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Microsoft.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Mikrotik:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Mikrotik.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::N1600:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/N1600.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::NetSNMP:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/NetSNMP.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Netonix:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Netonix.pm
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Netscreen:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Netscreen.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Nexus:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Nexus.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::OneAccess:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/OneAccess.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::PacketFront:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/PacketFront.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::PaloAlto:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/PaloAlto.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Passport:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Passport.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Pf:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Pf.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Pica8:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Pica8.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Redlion:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Redlion.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Scalance:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Scalance.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::SonicWALL:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/SonicWALL.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Steelfusion:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Steelfusion.pm
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Steelhead:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Steelhead.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::SteelheadEx:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/SteelheadEx.pm
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Sun:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Sun.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Tasman:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Tasman.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Teltonika:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Teltonika.pm
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Timetra:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Timetra.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::VMware:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/VMware.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::VyOS:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/VyOS.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer3::Whiterabbit:
 | 
			
		||||
    file: lib/SNMP/Info/Layer3/Whiterabbit.pm
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer7:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer7::APC:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/APC.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer7::Arbor:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/Arbor.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer7::CiscoIPS:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/CiscoIPS.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer7::Gigamon:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/Gigamon.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer7::HWGroup:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/HWGroup.pm
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer7::Liebert:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/Liebert.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer7::Neoteris:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/Neoteris.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::Layer7::Netscaler:
 | 
			
		||||
    file: lib/SNMP/Info/Layer7/Netscaler.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::MAU:
 | 
			
		||||
    file: lib/SNMP/Info/MAU.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::MRO:
 | 
			
		||||
    file: lib/SNMP/Info/MRO.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::NortelStack:
 | 
			
		||||
    file: lib/SNMP/Info/NortelStack.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::PortAccessEntity:
 | 
			
		||||
    file: lib/SNMP/Info/PortAccessEntity.pm
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::PowerEthernet:
 | 
			
		||||
    file: lib/SNMP/Info/PowerEthernet.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::RapidCity:
 | 
			
		||||
    file: lib/SNMP/Info/RapidCity.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
  SNMP::Info::SONMP:
 | 
			
		||||
    file: lib/SNMP/Info/SONMP.pm
 | 
			
		||||
    version: '3.70'
 | 
			
		||||
    version: '3.95'
 | 
			
		||||
recommends:
 | 
			
		||||
  Class::ISA: '0'
 | 
			
		||||
  File::Slurp: '0'
 | 
			
		||||
@@ -439,13 +472,15 @@ recommends:
 | 
			
		||||
requires:
 | 
			
		||||
  Math::BigInt: '0'
 | 
			
		||||
  NetAddr::IP: '4.068'
 | 
			
		||||
  Regexp::Common: '0'
 | 
			
		||||
  SNMP: '0'
 | 
			
		||||
  Scalar::Util: '0'
 | 
			
		||||
resources:
 | 
			
		||||
  IRC: irc://irc.freenode.org/#netdisco
 | 
			
		||||
  IRC: irc://irc.libera.chat/#netdisco
 | 
			
		||||
  MailingList: https://lists.sourceforge.net/lists/listinfo/snmp-info-users
 | 
			
		||||
  bugtracker: https://github.com/netdisco/snmp-info/issues
 | 
			
		||||
  homepage: http://netdisco.org/
 | 
			
		||||
  license: http://opensource.org/licenses/bsd-license.php
 | 
			
		||||
  license: http://opensource.org/licenses/BSD-3-Clause
 | 
			
		||||
  repository: https://github.com/netdisco/snmp-info
 | 
			
		||||
version: '3.70'
 | 
			
		||||
version: '3.95'
 | 
			
		||||
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										308
									
								
								lib/SNMP/Info.pm
									
									
									
									
									
								
							
							
						
						
									
										308
									
								
								lib/SNMP/Info.pm
									
									
									
									
									
								
							@@ -15,6 +15,7 @@ use strict;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP;
 | 
			
		||||
use Carp;
 | 
			
		||||
use Scalar::Util ();
 | 
			
		||||
use Math::BigInt;
 | 
			
		||||
use NetAddr::IP::Lite ':lower';
 | 
			
		||||
 | 
			
		||||
@@ -25,7 +26,7 @@ our
 | 
			
		||||
    ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $AUTOLOAD, $INIT, $DEBUG, %SPEED_MAP,
 | 
			
		||||
     $NOSUCH, $BIGINT, $REPEATERS);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
@@ -33,7 +34,7 @@ SNMP::Info - OO Interface to Network devices and MIBs through SNMP
 | 
			
		||||
 | 
			
		||||
=head1 VERSION
 | 
			
		||||
 | 
			
		||||
SNMP::Info - Version 3.70
 | 
			
		||||
SNMP::Info - Version 3.95
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
@@ -56,18 +57,29 @@ list any missing functionality (such as neighbor discovery tables).
 | 
			
		||||
 | 
			
		||||
 use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
 my $info = new SNMP::Info(
 | 
			
		||||
                            # Auto Discover more specific Device Class
 | 
			
		||||
 my $info = SNMP::Info->new({
 | 
			
		||||
                            # Auto Discover your Device Class (Cisco, Juniper, etc ...)
 | 
			
		||||
                            AutoSpecify => 1,
 | 
			
		||||
                            Debug       => 1,
 | 
			
		||||
 | 
			
		||||
                            # The rest is passed to SNMP::Session
 | 
			
		||||
                            DestHost    => 'router',
 | 
			
		||||
                            Community   => 'public',
 | 
			
		||||
                            Version     => 2
 | 
			
		||||
                          ) or die "Can't connect to device.\n";
 | 
			
		||||
 | 
			
		||||
                            # Parameter reference for SNMPv3
 | 
			
		||||
                            # Version   => 3
 | 
			
		||||
                            # SecLevel  => 'authPriv', # authPriv|authNoPriv|noAuthNoPriv
 | 
			
		||||
                            # SecName   => 'myuser',
 | 
			
		||||
                            # AuthProto => 'MD5',      # MD5|SHA
 | 
			
		||||
                            # AuthPass  => 'authp4ss',
 | 
			
		||||
                            # PrivProto => 'DES',      # DES|AES
 | 
			
		||||
                            # PrivPass  => 'pr1vp4ss',
 | 
			
		||||
                           });
 | 
			
		||||
 | 
			
		||||
 my $err = $info->error();
 | 
			
		||||
 die "SNMP Community or Version probably wrong connecting to device. $err\n" if defined $err;
 | 
			
		||||
 die $err if defined $err;
 | 
			
		||||
 # usually a wrong DestHost or Community or Version if you have trouble here
 | 
			
		||||
 | 
			
		||||
 my $name  = $info->name();
 | 
			
		||||
 my $class = $info->class();
 | 
			
		||||
@@ -265,12 +277,6 @@ support.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Bridge> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::CiscoAgg
 | 
			
		||||
 | 
			
		||||
SNMP Interface to Cisco Aggregated Links
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::CiscoAgg> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::CDP
 | 
			
		||||
 | 
			
		||||
F<CISCO-CDP-MIB>.  Cisco Discovery Protocol (CDP) Support.  Inherited by
 | 
			
		||||
@@ -278,6 +284,19 @@ Cisco, Enterasys, and HP devices.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::CDP> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::CiscoAgg
 | 
			
		||||
 | 
			
		||||
SNMP Interface to Cisco Aggregated Links
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::CiscoAgg> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::CiscoBGP
 | 
			
		||||
 | 
			
		||||
F<CISCO-BGP4-MIB>.  Cisco BGPv4 support.  Inherited by Cisco devices with
 | 
			
		||||
Layer3 support.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::CiscoBGP> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::CiscoConfig
 | 
			
		||||
 | 
			
		||||
F<CISCO-CONFIG-COPY-MIB>, F<CISCO-FLASH-MIB>, and F<OLD-CISCO-SYS-MIB>.
 | 
			
		||||
@@ -317,12 +336,6 @@ F<CISCO-STACK-MIB>.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::CiscoStack> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::CiscoStpExtensions
 | 
			
		||||
 | 
			
		||||
F<CISCO-STP-EXTENSIONS-MIB>
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::CiscoStpExtensions> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::CiscoStats
 | 
			
		||||
 | 
			
		||||
F<OLD-CISCO-CPU-MIB>, F<CISCO-PROCESS-MIB>, and F<CISCO-MEMORY-POOL-MIB>.
 | 
			
		||||
@@ -331,6 +344,12 @@ devices.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::CiscoStats> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::CiscoStpExtensions
 | 
			
		||||
 | 
			
		||||
F<CISCO-STP-EXTENSIONS-MIB>
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::CiscoStpExtensions> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::CiscoVTP
 | 
			
		||||
 | 
			
		||||
F<CISCO-VTP-MIB>, F<CISCO-VLAN-MEMBERSHIP-MIB>,
 | 
			
		||||
@@ -338,18 +357,18 @@ F<CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB>
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::CiscoVTP> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::DocsisHE
 | 
			
		||||
 | 
			
		||||
SNMP Interface for DOCSIS CMTS
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::DocsisHE> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::DocsisCM
 | 
			
		||||
 | 
			
		||||
SNMP Interface for DOCSIS Cable Modems
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::DocsisCM> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::DocsisHE
 | 
			
		||||
 | 
			
		||||
SNMP Interface for DOCSIS CMTS
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::DocsisHE> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::EDP
 | 
			
		||||
 | 
			
		||||
Extreme Discovery Protocol.  F<EXTREME-EDP-MIB>
 | 
			
		||||
@@ -375,6 +394,12 @@ Foundry (Brocade) Discovery Protocol.  F<FOUNDRY-SN-SWITCH-GROUP-MIB>
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::FDP> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::IEEE802_Bridge
 | 
			
		||||
 | 
			
		||||
SNMP Interface to data available through the F<IEEE8021-Q-BRIDGE-MIB>
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::IEEE802_Bridge> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::IEEE802dot11
 | 
			
		||||
 | 
			
		||||
F<IEEE802dot11-MIB>.  A collection of OIDs providing information about
 | 
			
		||||
@@ -422,6 +447,12 @@ F<S5-AGENT-MIB>, F<S5-CHASSIS-MIB>.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::NortelStack> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::PortAccessEntity
 | 
			
		||||
 | 
			
		||||
F<IEEE8021-PAE-MIB>
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::PortAccessEntity> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::PowerEthernet
 | 
			
		||||
 | 
			
		||||
F<POWER-ETHERNET-MIB>
 | 
			
		||||
@@ -522,7 +553,7 @@ See documentation in L<SNMP::Info::Layer2::Adtran> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2::Aerohive
 | 
			
		||||
 | 
			
		||||
Subclass for Aerohive Access Points.
 | 
			
		||||
Subclass for Aerohive / Extreme access points.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2::Aerohive> for details.
 | 
			
		||||
 | 
			
		||||
@@ -607,6 +638,12 @@ Subclass for Exinda / GFI Network Orchestrator traffic shapers.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2::Exinda> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2::Hirschmann
 | 
			
		||||
 | 
			
		||||
Subclass for Hirschmann switches
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2::Hirschmann> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2::HP
 | 
			
		||||
 | 
			
		||||
Subclass for more recent HP Procurve Switches.
 | 
			
		||||
@@ -741,6 +778,12 @@ Subclass for Aruba wireless switches.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::Aruba> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::ArubaCX
 | 
			
		||||
 | 
			
		||||
SNMP Interface to L3 Devices running ArubaOS-CX
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::ArubaCX> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::BayRS
 | 
			
		||||
 | 
			
		||||
Subclass for Avaya/Nortel/Bay Multiprotocol/BayRS routers.  This includes
 | 
			
		||||
@@ -750,7 +793,7 @@ See documentation in L<SNMP::Info::Layer3::BayRS> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::BlueCoatSG
 | 
			
		||||
 | 
			
		||||
Subclass for Blue Coat SG series proxy devices.
 | 
			
		||||
Subclass for BlueCoat SG series proxy devices.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::BlueCoatSG> for details.
 | 
			
		||||
 | 
			
		||||
@@ -822,12 +865,6 @@ Subclass for Cumulus Networks Routers.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::Cumulus> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::DLink
 | 
			
		||||
 | 
			
		||||
Subclass for DLink devices.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::DLink> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::Dell
 | 
			
		||||
 | 
			
		||||
Subclass for Dell PowerConnect switches. The IBM BladeCenter
 | 
			
		||||
@@ -836,6 +873,12 @@ also use this module based upon MIB support.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::Dell> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::DLink
 | 
			
		||||
 | 
			
		||||
Subclass for DLink devices.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::DLink> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::Enterasys
 | 
			
		||||
 | 
			
		||||
Subclass for Enterasys devices.
 | 
			
		||||
@@ -947,6 +990,12 @@ Subclass for Avaya/Nortel Ethernet Routing Switch 1600 series.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::N1600> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::Netonix
 | 
			
		||||
 | 
			
		||||
Subclass for Netonix switches.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::Netonix> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::NetSNMP
 | 
			
		||||
 | 
			
		||||
Subclass for host systems running Net-SNMP.
 | 
			
		||||
@@ -1020,12 +1069,24 @@ Subclass for generic SonicWALL devices.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::SonicWALL> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::Steelfusion
 | 
			
		||||
 | 
			
		||||
Subclass for Riverbed Steelfusion WAN optimization appliances.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::Steelfusion> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::Steelhead
 | 
			
		||||
 | 
			
		||||
Subclass for Riverbed Steelhead WAN optimization appliances.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::Steelhead> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::SteelheadEx
 | 
			
		||||
 | 
			
		||||
Subclass for Riverbed SteelheadEx WAN optimization appliances.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::SteelheadEx> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::Sun
 | 
			
		||||
 | 
			
		||||
Subclass for Generic Sun Routers running SunOS.
 | 
			
		||||
@@ -1038,6 +1099,12 @@ Subclass for Avaya Secure Routers.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::Tasman> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::Teltonika
 | 
			
		||||
 | 
			
		||||
Subclass for Teltonika RUT9xx series routers.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::Teltonika> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::Timetra
 | 
			
		||||
 | 
			
		||||
Alcatel-Lucent SR Class.
 | 
			
		||||
@@ -1056,6 +1123,12 @@ Subclass for VMware ESXi hosts.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::VMware> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3::Whiterabbit
 | 
			
		||||
 | 
			
		||||
Subclass for whiterabbit devices.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3::Whiterabbit> for details.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
@@ -1094,6 +1167,12 @@ Subclass for Gigamon devices.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer7::Gigamon> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer7::HWGroup
 | 
			
		||||
 | 
			
		||||
Subclass for HW Group devices.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer7::HWGroup> for details.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer7::Liebert
 | 
			
		||||
 | 
			
		||||
Subclass for Liebert devices.
 | 
			
		||||
@@ -1138,18 +1217,24 @@ on the Netdisco README!
 | 
			
		||||
 | 
			
		||||
Creates a new object and connects via SNMP::Session.
 | 
			
		||||
 | 
			
		||||
 my $info = new SNMP::Info( 'Debug'             => 1,
 | 
			
		||||
                            'AutoSpecify'       => 1,
 | 
			
		||||
                            'BigInt'            => 1,
 | 
			
		||||
                            'BulkWalk'          => 1,
 | 
			
		||||
                            'BulkRepeaters'     => 20,
 | 
			
		||||
                            'IgnoreNetSNMPConf' => 1,
 | 
			
		||||
                            'LoopDetect'        => 1,
 | 
			
		||||
                            'DestHost'          => 'myrouter',
 | 
			
		||||
                            'Community'         => 'public',
 | 
			
		||||
                            'Version'           => 2,
 | 
			
		||||
                            'MibDirs'           => ['dir1','dir2','dir3'],
 | 
			
		||||
                          ) or die;
 | 
			
		||||
Always returns an SNMP::Info instance, and you should always check for
 | 
			
		||||
error() as in SYNOPSIS above to be sure of success.
 | 
			
		||||
 | 
			
		||||
Will take a bare list of key/value options but we recommend a HASH ref
 | 
			
		||||
as in the example below and SYNOPSIS, to catch syntax errors.
 | 
			
		||||
 | 
			
		||||
 my $info = SNMP::Info->({ 'Debug'             => 1,
 | 
			
		||||
                           'AutoSpecify'       => 1,
 | 
			
		||||
                           'BigInt'            => 1,
 | 
			
		||||
                           'BulkWalk'          => 1,
 | 
			
		||||
                           'BulkRepeaters'     => 20,
 | 
			
		||||
                           'LoopDetect'        => 1,
 | 
			
		||||
                           'IgnoreNetSNMPConf' => 1,
 | 
			
		||||
                           'DestHost'          => 'myrouter',
 | 
			
		||||
                           'Community'         => 'public',
 | 
			
		||||
                           'Version'           => 2,
 | 
			
		||||
                           'MibDirs'           => ['dir1','dir2','dir3'],
 | 
			
		||||
                        });
 | 
			
		||||
 | 
			
		||||
SNMP::Info Specific Arguments :
 | 
			
		||||
 | 
			
		||||
@@ -1288,7 +1373,7 @@ then fallback to version 1.
 | 
			
		||||
sub new {
 | 
			
		||||
    my $proto     = shift;
 | 
			
		||||
    my $class     = ref($proto) || $proto;
 | 
			
		||||
    my %args      = @_;
 | 
			
		||||
    my %args      = (ref $_[0] ? %{ $_[0] } : @_);
 | 
			
		||||
    my %sess_args = %args;
 | 
			
		||||
    my $new_obj   = {};
 | 
			
		||||
    bless $new_obj, $class;
 | 
			
		||||
@@ -1391,16 +1476,16 @@ sub new {
 | 
			
		||||
 | 
			
		||||
    # No session object created
 | 
			
		||||
    unless ( defined $sess ) {
 | 
			
		||||
        $new_obj->error_throw("SNMP::Info::new() Failed to Create Session. ");
 | 
			
		||||
        return;
 | 
			
		||||
        $new_obj->error_throw("SNMP::Info::new() Net-SNMP session creation failed completely.");
 | 
			
		||||
        return $new_obj;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Session object created but SNMP connection failed.
 | 
			
		||||
    my $sess_err = $sess->{ErrorStr} || '';
 | 
			
		||||
    if ($sess_err) {
 | 
			
		||||
    if ($sess->{ErrorStr}) {
 | 
			
		||||
        my $sess_err = $sess->{ErrorStr} || 'no specific error';
 | 
			
		||||
        $new_obj->error_throw(
 | 
			
		||||
            "SNMP::Info::new() Net-SNMP session creation failed. $sess_err");
 | 
			
		||||
        return;
 | 
			
		||||
            "SNMP::Info::new() Net-SNMP session creation failed: $sess_err");
 | 
			
		||||
        return $new_obj;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Save Args for later
 | 
			
		||||
@@ -1663,13 +1748,15 @@ sub device_type {
 | 
			
		||||
    # Hash for generic fallback to a device class if unable to determine using
 | 
			
		||||
    # the sysDescr regex.
 | 
			
		||||
    my %l3sysoidmap = (
 | 
			
		||||
        9     => 'SNMP::Info::Layer3::Cisco',
 | 
			
		||||
        9     => 'SNMP::Info::Layer3::CiscoSwitch',
 | 
			
		||||
        11    => 'SNMP::Info::Layer2::HP',
 | 
			
		||||
        18    => 'SNMP::Info::Layer3::BayRS',
 | 
			
		||||
        42    => 'SNMP::Info::Layer3::Sun',
 | 
			
		||||
        43    => 'SNMP::Info::Layer2::3Com',
 | 
			
		||||
        45    => 'SNMP::Info::Layer2::Baystack',
 | 
			
		||||
        96    => 'SNMP::Info::Layer3::Whiterabbit',
 | 
			
		||||
        171   => 'SNMP::Info::Layer3::DLink',
 | 
			
		||||
        207   => 'SNMP::Info::Layer2::Allied',
 | 
			
		||||
        244   => 'SNMP::Info::Layer3::Lantronix',
 | 
			
		||||
        311   => 'SNMP::Info::Layer3::Microsoft',
 | 
			
		||||
        664   => 'SNMP::Info::Layer2::Adtran',
 | 
			
		||||
@@ -1723,6 +1810,9 @@ sub device_type {
 | 
			
		||||
        40310 => 'SNMP::Info::Layer3::Cumulus',
 | 
			
		||||
        41112 => 'SNMP::Info::Layer2::Ubiquiti',
 | 
			
		||||
        44641 => 'SNMP::Info::Layer3::VyOS',
 | 
			
		||||
        46242 => 'SNMP::Info::Layer3::Netonix',
 | 
			
		||||
        47196 => 'SNMP::Info::Layer3::ArubaCX',
 | 
			
		||||
        48690 => 'SNMP::Info::Layer3::Teltonika',
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    my %l2sysoidmap = (
 | 
			
		||||
@@ -1730,8 +1820,10 @@ sub device_type {
 | 
			
		||||
        11    => 'SNMP::Info::Layer2::HP',
 | 
			
		||||
        43    => 'SNMP::Info::Layer2::3Com',
 | 
			
		||||
        45    => 'SNMP::Info::Layer2::Baystack',
 | 
			
		||||
        96    => 'SNMP::Info::Layer3::Whiterabbit',
 | 
			
		||||
        171   => 'SNMP::Info::Layer3::DLink',
 | 
			
		||||
        207   => 'SNMP::Info::Layer2::Allied',
 | 
			
		||||
	248   => 'SNMP::Info::Layer2::Hirschmann',
 | 
			
		||||
        266   => 'SNMP::Info::Layer2::Nexans',
 | 
			
		||||
        664   => 'SNMP::Info::Layer2::Adtran',
 | 
			
		||||
        674   => 'SNMP::Info::Layer3::Dell',
 | 
			
		||||
@@ -1760,6 +1852,9 @@ sub device_type {
 | 
			
		||||
        21091 => 'SNMP::Info::Layer2::Exinda',
 | 
			
		||||
        26543 => 'SNMP::Info::Layer3::IBMGbTor',
 | 
			
		||||
        26928 => 'SNMP::Info::Layer2::Aerohive',
 | 
			
		||||
        46242 => 'SNMP::Info::Layer3::Netonix',
 | 
			
		||||
        47196 => 'SNMP::Info::Layer3::ArubaCX',
 | 
			
		||||
        48690 => 'SNMP::Info::Layer3::Teltonika',
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    my %l1sysoidmap = (
 | 
			
		||||
@@ -1774,6 +1869,7 @@ sub device_type {
 | 
			
		||||
        9694  => 'SNMP::Info::Layer7::Arbor',
 | 
			
		||||
        12532 => 'SNMP::Info::Layer7::Neoteris',
 | 
			
		||||
        14525 => 'SNMP::Info::Layer2::Trapeze',
 | 
			
		||||
        21796 => 'SNMP::Info::Layer7::HWGroup',
 | 
			
		||||
        26866 => 'SNMP::Info::Layer7::Gigamon',
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
@@ -1923,6 +2019,24 @@ sub device_type {
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::Scalance'
 | 
			
		||||
	    if ( $soid =~ /\.1\.3\.6\.1\.4\.1\.4329\.6\.1\.2/i );
 | 
			
		||||
 | 
			
		||||
        # Aruba wireless switches (issue #403)
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::Aruba'
 | 
			
		||||
            if ( $desc =~ /ArubaOS/ );
 | 
			
		||||
 | 
			
		||||
        # Teltonika RUT9xx Series
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::Teltonika'
 | 
			
		||||
            if (
 | 
			
		||||
            $desc =~ /\bTeltonika.*RUT9\d{2}\b/);
 | 
			
		||||
 | 
			
		||||
        # Riverbed Steelfusion
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::SteelheadEx'
 | 
			
		||||
            if ( $soid =~ /\.1\.3\.6\.1\.4\.1\.17163\.1\.51/i );
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::Steelfusion'
 | 
			
		||||
            if ( $soid =~ /\.1\.3\.6\.1\.4\.1\.17163\.1\.52/i );
 | 
			
		||||
 | 
			
		||||
        # Whiterabbit Timing
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::Whiterabbit'
 | 
			
		||||
	    if ( $soid =~ /\.1\.3\.6\.1\.4\.1\.96\.100\.1000/i );
 | 
			
		||||
 | 
			
		||||
        # Generic device classification based upon sysObjectID
 | 
			
		||||
        if (    ( $objtype eq 'SNMP::Info::Layer3' )
 | 
			
		||||
@@ -2133,6 +2247,15 @@ sub device_type {
 | 
			
		||||
        # it would flip/flop between those
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::Scalance'
 | 
			
		||||
	    if ( $soid =~ /\.1\.3\.6\.1\.4\.1\.4329\.6\.1\.2/i );
 | 
			
		||||
	    
 | 
			
		||||
	# Whiterabbit Timing
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::Whiterabbit'
 | 
			
		||||
	    if ( $soid =~ /\.1\.3\.6\.1\.4\.1\.96\.100\.1000/i );
 | 
			
		||||
 | 
			
		||||
        # Teltonika RUT9xx Series
 | 
			
		||||
        $objtype = 'SNMP::Info::Layer3::Teltonika'
 | 
			
		||||
            if (
 | 
			
		||||
            $desc =~ /\bTeltonika.*RUT9\d{2}\b/);
 | 
			
		||||
 | 
			
		||||
        # Generic device classification based upon sysObjectID
 | 
			
		||||
        if ( defined($id) and $objtype eq 'SNMP::Info') {
 | 
			
		||||
@@ -2233,8 +2356,8 @@ sub specify {
 | 
			
		||||
    my $device_type = $self->device_type();
 | 
			
		||||
    unless ( defined $device_type ) {
 | 
			
		||||
        $self->error_throw(
 | 
			
		||||
            "SNMP::Info::specify() - Could not get info from device");
 | 
			
		||||
        return;
 | 
			
		||||
            "SNMP::Info::specify() - fatal error: connect failed or missing sysServices and/or sysDescr");
 | 
			
		||||
        return $self;
 | 
			
		||||
    }
 | 
			
		||||
    return $self if $device_type eq 'SNMP::Info';
 | 
			
		||||
 | 
			
		||||
@@ -2835,17 +2958,17 @@ For protocol specific information and implementation:
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item LLDP: See L<SNMP::Info::LLDP> for details.
 | 
			
		||||
=item AMAP: See L<SNMP::Info::AMAP> for details.
 | 
			
		||||
 | 
			
		||||
=item CDP: See L<SNMP::Info::CDP> for details.
 | 
			
		||||
 | 
			
		||||
=item SONMP: See L<SNMP::Info::SONMP> for details.
 | 
			
		||||
=item EDP: See L<SNMP::Info::EDP> for details.
 | 
			
		||||
 | 
			
		||||
=item FDP: See L<SNMP::Info::FDP> for details.
 | 
			
		||||
 | 
			
		||||
=item EDP: See L<SNMP::Info::EDP> for details.
 | 
			
		||||
=item LLDP: See L<SNMP::Info::LLDP> for details.
 | 
			
		||||
 | 
			
		||||
=item AMAP: See L<SNMP::Info::AMAP> for details.
 | 
			
		||||
=item SONMP: See L<SNMP::Info::SONMP> for details.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
@@ -2940,7 +3063,7 @@ sub ip_netmask {
 | 
			
		||||
            $prefix = $1;
 | 
			
		||||
        }
 | 
			
		||||
        my $new_iid = join( ".", @parts );
 | 
			
		||||
        my $mask = NetAddr::IP::Lite->new( $new_iid . '/' . $prefix )->mask()
 | 
			
		||||
        my $mask = eval { NetAddr::IP::Lite->new( $new_iid . '/' . $prefix )->mask() }
 | 
			
		||||
            || undef;
 | 
			
		||||
 | 
			
		||||
        $ip_netmask{$new_iid} = $mask;
 | 
			
		||||
@@ -3621,7 +3744,7 @@ Makes human friendly speed ratings using C<%SPEED_MAP>.
 | 
			
		||||
 %SPEED_MAP = (
 | 
			
		||||
                '56000'      => '56 kbps',
 | 
			
		||||
                '64000'      => '64 kbps',
 | 
			
		||||
                '115000'     => '115 kpbs',
 | 
			
		||||
                '115000'     => '115 kbps',
 | 
			
		||||
                '1500000'    => '1.5 Mbps',
 | 
			
		||||
                '1536000'    => 'T1',
 | 
			
		||||
                '1544000'    => 'T1',
 | 
			
		||||
@@ -3632,9 +3755,9 @@ Makes human friendly speed ratings using C<%SPEED_MAP>.
 | 
			
		||||
                '4000000'    => '4.0 Mbps',
 | 
			
		||||
                '10000000'   => '10 Mbps',
 | 
			
		||||
                '11000000'   => '11 Mbps',
 | 
			
		||||
                '20000000'   => '20 Mbps',
 | 
			
		||||
                '16000000'   => '16 Mbps',
 | 
			
		||||
                '16777216'   => '16 Mbps',
 | 
			
		||||
                '20000000'   => '20 Mbps',
 | 
			
		||||
                '44210000'   => 'T3',
 | 
			
		||||
                '44736000'   => 'T3',
 | 
			
		||||
                '45000000'   => '45 Mbps',
 | 
			
		||||
@@ -3644,11 +3767,11 @@ Makes human friendly speed ratings using C<%SPEED_MAP>.
 | 
			
		||||
                '54000000'   => '54 Mbps',
 | 
			
		||||
                '64000000'   => '64 Mbps',
 | 
			
		||||
                '100000000'  => '100 Mbps',
 | 
			
		||||
                '200000000'  => '200 Mbps',
 | 
			
		||||
                '149760000'  => 'ATM on OC-3',
 | 
			
		||||
                '155000000'  => 'OC-3',
 | 
			
		||||
                '155519000'  => 'OC-3',
 | 
			
		||||
                '155520000'  => 'OC-3',
 | 
			
		||||
                '200000000'  => '200 Mbps',
 | 
			
		||||
                '400000000'  => '400 Mbps',
 | 
			
		||||
                '599040000'  => 'ATM on OC-12',
 | 
			
		||||
                '622000000'  => 'OC-12',
 | 
			
		||||
@@ -3656,6 +3779,7 @@ Makes human friendly speed ratings using C<%SPEED_MAP>.
 | 
			
		||||
                '1000000000' => '1.0 Gbps',
 | 
			
		||||
                '2000000000' => '2.0 Gbps',
 | 
			
		||||
                '2488000000' => 'OC-48',
 | 
			
		||||
                '2500000000' => '2.5 Gbps',
 | 
			
		||||
             )
 | 
			
		||||
 | 
			
		||||
Note: high speed interfaces (usually 1 Gbps or faster) have their link
 | 
			
		||||
@@ -3668,7 +3792,7 @@ munge_highspeed(). SNMP::Info can return speeds up to terabit levels this way.
 | 
			
		||||
%SPEED_MAP = (
 | 
			
		||||
    '56000'      => '56 kbps',
 | 
			
		||||
    '64000'      => '64 kbps',
 | 
			
		||||
    '115000'     => '115 kpbs',
 | 
			
		||||
    '115000'     => '115 kbps',
 | 
			
		||||
    '1500000'    => '1.5 Mbps',
 | 
			
		||||
    '1536000'    => 'T1',
 | 
			
		||||
    '1544000'    => 'T1',
 | 
			
		||||
@@ -3679,9 +3803,9 @@ munge_highspeed(). SNMP::Info can return speeds up to terabit levels this way.
 | 
			
		||||
    '4000000'    => '4.0 Mbps',
 | 
			
		||||
    '10000000'   => '10 Mbps',
 | 
			
		||||
    '11000000'   => '11 Mbps',
 | 
			
		||||
    '20000000'   => '20 Mbps',
 | 
			
		||||
    '16000000'   => '16 Mbps',
 | 
			
		||||
    '16777216'   => '16 Mbps',
 | 
			
		||||
    '20000000'   => '20 Mbps',
 | 
			
		||||
    '44210000'   => 'T3',
 | 
			
		||||
    '44736000'   => 'T3',
 | 
			
		||||
    '45000000'   => '45 Mbps',
 | 
			
		||||
@@ -3691,11 +3815,11 @@ munge_highspeed(). SNMP::Info can return speeds up to terabit levels this way.
 | 
			
		||||
    '54000000'   => '54 Mbps',
 | 
			
		||||
    '64000000'   => '64 Mbps',
 | 
			
		||||
    '100000000'  => '100 Mbps',
 | 
			
		||||
    '200000000'  => '200 Mbps',
 | 
			
		||||
    '149760000'  => 'ATM on OC-3',
 | 
			
		||||
    '155000000'  => 'OC-3',
 | 
			
		||||
    '155519000'  => 'OC-3',
 | 
			
		||||
    '155520000'  => 'OC-3',
 | 
			
		||||
    '200000000'  => '200 Mbps',
 | 
			
		||||
    '400000000'  => '400 Mbps',
 | 
			
		||||
    '599040000'  => 'ATM on OC-12',
 | 
			
		||||
    '622000000'  => 'OC-12',
 | 
			
		||||
@@ -3703,6 +3827,7 @@ munge_highspeed(). SNMP::Info can return speeds up to terabit levels this way.
 | 
			
		||||
    '1000000000' => '1.0 Gbps',
 | 
			
		||||
    '2000000000' => '2.0 Gbps',
 | 
			
		||||
    '2488000000' => 'OC-48',
 | 
			
		||||
    '2500000000' => '2.5 Gbps',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub munge_speed {
 | 
			
		||||
@@ -3753,6 +3878,27 @@ sub munge_ip {
 | 
			
		||||
    return join( '.', unpack( 'C4', $ip ) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
=item munge_inetaddress
 | 
			
		||||
 | 
			
		||||
Takes a binary IP address as defined by the SNMP InetAddress type and returns
 | 
			
		||||
it as human readable string;
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
 | 
			
		||||
sub munge_inetaddress  {
 | 
			
		||||
    my $ip = shift;
 | 
			
		||||
    # 4 bytes = IPv4
 | 
			
		||||
    if (length($ip) == 4) {
 | 
			
		||||
        return SNMP::Info::munge_ip($ip);
 | 
			
		||||
    }
 | 
			
		||||
    # 16 bytes = IPv6
 | 
			
		||||
    elsif (length($ip) == 16) {
 | 
			
		||||
        return sprintf( "%x:%x:%x:%x:%x:%x:%x:%x",
 | 
			
		||||
            unpack( 'n8', $ip ));
 | 
			
		||||
    }
 | 
			
		||||
    return '';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
=item munge_mac()
 | 
			
		||||
 | 
			
		||||
Takes an octet stream (HEX-STRING) and returns a colon separated ASCII hex
 | 
			
		||||
@@ -3921,6 +4067,8 @@ Takes an OID and return the object name if the right MIB is loaded.
 | 
			
		||||
 | 
			
		||||
sub munge_e_type {
 | 
			
		||||
    my $oid = shift;
 | 
			
		||||
    return unless $oid;
 | 
			
		||||
    return $oid if $oid =~ m/^\.0/;
 | 
			
		||||
 | 
			
		||||
    my $name = &SNMP::translateObj($oid);
 | 
			
		||||
    return $name if defined($name);
 | 
			
		||||
@@ -4803,6 +4951,11 @@ sub _cache {
 | 
			
		||||
    my $store = $self->store();
 | 
			
		||||
 | 
			
		||||
    if (ref {} eq ref $data) {
 | 
			
		||||
        if (! Scalar::Util::looks_like_number($self->{"_${attr}"})) {
 | 
			
		||||
            # https://github.com/netdisco/snmp-info/issues/464
 | 
			
		||||
            # perhaps this is being set twice and first time gets $data ??
 | 
			
		||||
            $self->{"_${attr}"} = 0;
 | 
			
		||||
        }
 | 
			
		||||
        $self->{"_${attr}"}++;
 | 
			
		||||
        $store->{$attr} = $data;
 | 
			
		||||
    }
 | 
			
		||||
@@ -4972,8 +5125,7 @@ capabilities to include dynamic methods generated at run time via AUTOLOAD.
 | 
			
		||||
 | 
			
		||||
Calls parent can() first to see if method exists, if not validates that a
 | 
			
		||||
method should be created then dispatches to the appropriate internal method
 | 
			
		||||
for creation.  The newly created method is inserted into the symbol table
 | 
			
		||||
returning to AUTOLOAD only for the initial method call.
 | 
			
		||||
for creation.
 | 
			
		||||
 | 
			
		||||
Returns undef if the method does not exist and can not be created.
 | 
			
		||||
 | 
			
		||||
@@ -5007,18 +5159,24 @@ sub can {
 | 
			
		||||
    # We could add load_/orig_/_raw alternatives to symbol table here on
 | 
			
		||||
    # first call of any type for a global or func since they all use the same
 | 
			
		||||
    # destination code, but they aren't used heavily in main code base so
 | 
			
		||||
    # we’ll just create if/when they are called rather than pollute the
 | 
			
		||||
    # we'll just create if/when they are called rather than pollute the
 | 
			
		||||
    # symbol table with entries that never get called.
 | 
			
		||||
 | 
			
		||||
    # Between 2012-2020 we actually added the methods generated below to the
 | 
			
		||||
    # symbol table, but they were global to the SNMP::Info class, while
 | 
			
		||||
    # methods for different device classes may point to different SNMP
 | 
			
		||||
    # objects. This made interacting with multiple device types from a single
 | 
			
		||||
    # script somewhat unreliable.
 | 
			
		||||
 | 
			
		||||
    # Check for set_ ing.
 | 
			
		||||
    if ( $method =~ /^set_/ ) {
 | 
			
		||||
        return *{$method} = _make_setter( $method, $oid, @_ );
 | 
			
		||||
        return _make_setter( $method, $oid, @_ );
 | 
			
		||||
    }
 | 
			
		||||
    elsif ( defined $funcs->{$base_method} || $table ) {
 | 
			
		||||
        return *{$method} = _load_attr( $method, $oid, @_ );
 | 
			
		||||
        return _load_attr( $method, $oid, @_ );
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        return *{$method} = _global( $method, $oid );
 | 
			
		||||
        return _global( $method, $oid );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -5027,9 +5185,7 @@ sub can {
 | 
			
		||||
=head2 AUTOLOAD
 | 
			
		||||
 | 
			
		||||
Each entry in either %FUNCS, %GLOBALS, or MIB Leaf node names present in
 | 
			
		||||
loaded MIBs are used by AUTOLOAD() to create dynamic methods.  Generated
 | 
			
		||||
methods are inserted into the symbol table so that subsequent calls can avoid
 | 
			
		||||
AUTOLOAD() and dispatch directly.
 | 
			
		||||
loaded MIBs are used by AUTOLOAD() to create dynamic methods.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
@@ -5060,9 +5216,9 @@ subclass.
 | 
			
		||||
 | 
			
		||||
sub AUTOLOAD {
 | 
			
		||||
    my $self = shift;
 | 
			
		||||
    my ($sub_name) = $AUTOLOAD =~ /::(\w+)$/;
 | 
			
		||||
    my ($sub_name) = $AUTOLOAD =~ /::([a-zA-Z0-9_-]+)$/;
 | 
			
		||||
 | 
			
		||||
   return if $sub_name eq 'CARP_TRACE';
 | 
			
		||||
    return if $sub_name eq 'CARP_TRACE';
 | 
			
		||||
 | 
			
		||||
    # Typos in function calls in SNMP::Info subclasses turn into
 | 
			
		||||
    # AUTOLOAD requests for non-methods.  While this is deprecated,
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
  'ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB' => 'aipAMAPRemDeviceType',
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'ADSL-LINE-MIB' => 'adslLineType' );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
# Load MIB for leafs referenced within class
 | 
			
		||||
%MIBS = ('IF-MIB' => 'ifIndex',);
 | 
			
		||||
@@ -63,7 +63,10 @@ sub agg_ports_ifstack {
 | 
			
		||||
  foreach my $idx ( keys %$ifStack ) {
 | 
			
		||||
      my ( $higher, $lower ) = split /\./, $idx;
 | 
			
		||||
      next if ( $higher == 0 or $lower == 0 );
 | 
			
		||||
      if ( $ifType->{ $higher } eq 'ieee8023adLag'  or $ifType->{ $higher } eq 'propMultiplexor') {
 | 
			
		||||
      next unless exists $ifType->{ $higher } and defined $ifType->{ $higher };
 | 
			
		||||
 | 
			
		||||
      if ( $ifType->{ $higher } eq 'ieee8023adLag'
 | 
			
		||||
            or $ifType->{ $higher } eq 'propMultiplexor' ) {
 | 
			
		||||
          $ret->{ $lower } = $higher;
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, $DEBUG, %MIBS, %FUNCS, %GLOBALS, %MUNGE, $INIT);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'BRIDGE-MIB'   => 'dot1dBaseBridgeAddress',
 | 
			
		||||
@@ -105,7 +105,7 @@ $VERSION = '3.70';
 | 
			
		||||
    'stp_p_bridge'   => 'dot1dStpPortDesignatedBridge',
 | 
			
		||||
    'stp_p_port'     => 'dot1dStpPortDesignatedPort',
 | 
			
		||||
 | 
			
		||||
    # Rapid Spanning Tree Protocol Table : dot1dStpExtPortEntry
 | 
			
		||||
    # Rapid Spanning Tree Protocol Table : dot1dStpExtPortEntry
 | 
			
		||||
    'is_edgeport_admin' => 'dot1dStpPortAdminEdgePort',
 | 
			
		||||
    'is_edgeport_oper'  => 'dot1dStpPortOperEdgePort',
 | 
			
		||||
 | 
			
		||||
@@ -366,7 +366,7 @@ sub i_vlan {
 | 
			
		||||
    my $bridge  = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $index = $bridge->bp_index();
 | 
			
		||||
    my $index = $bridge->bp_index() or return {};
 | 
			
		||||
 | 
			
		||||
    # If given a partial it will be an ifIndex, we need to use dot1dBasePort
 | 
			
		||||
    if ($partial) {
 | 
			
		||||
@@ -429,7 +429,7 @@ sub _vlan_hoa {
 | 
			
		||||
        my $vlan;
 | 
			
		||||
 | 
			
		||||
        # Strip TimeFilter if we're using VlanCurrentTable
 | 
			
		||||
        ( $vlan = $idx ) =~ s/^\d+\.//;
 | 
			
		||||
        ($vlan = $idx) =~ s/^(\d+\.)*//g;
 | 
			
		||||
 | 
			
		||||
        # Convert portlist bit array to bp_index array
 | 
			
		||||
        for ( my $i = 0; $i <= $#$portlist; $i++ ) {
 | 
			
		||||
 
 | 
			
		||||
@@ -43,7 +43,7 @@ use SNMP::Info;
 | 
			
		||||
our
 | 
			
		||||
    ($VERSION, $DEBUG, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $INIT, %CDP_CAPABILITIES);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
# Five data structures required by SNMP::Info
 | 
			
		||||
%MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' );
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,7 @@ use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::IEEE802dot3ad;
 | 
			
		||||
use SNMP::Info::Aggregate 'agg_ports_ifstack';
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::CiscoAgg::ISA = qw/
 | 
			
		||||
  SNMP::Info::IEEE802dot3ad
 | 
			
		||||
@@ -48,7 +49,7 @@ use SNMP::Info::IEEE802dot3ad;
 | 
			
		||||
 | 
			
		||||
our ($DEBUG, $VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
  %SNMP::Info::IEEE802dot3ad::MIBS,
 | 
			
		||||
@@ -134,10 +135,50 @@ sub agg_ports_lag {
 | 
			
		||||
  return $mapping;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# version of SNMP::Info::Aggregate which uses propVirtual
 | 
			
		||||
# because CISCO-PAGP-MIB says "The ifType of an agport is propVirtual"
 | 
			
		||||
# but we need to filter out the VLANs and stuff so check against
 | 
			
		||||
# CISCO-PAGP-MIB::pagpEthcOperationMode
 | 
			
		||||
sub agg_ports_propvirtual {
 | 
			
		||||
  my $dev = shift;
 | 
			
		||||
  my $partial = shift;
 | 
			
		||||
 | 
			
		||||
  my $ifStack = $dev->ifStackStatus();
 | 
			
		||||
  my $pagpOperMode = $dev->pagpEthcOperationMode() || {};
 | 
			
		||||
  # TODO: if we want to do partial, we need to use inverse status
 | 
			
		||||
  my $ifType = $dev->ifType();
 | 
			
		||||
 | 
			
		||||
  my $ret = {};
 | 
			
		||||
 | 
			
		||||
  foreach my $idx ( keys %$ifStack ) {
 | 
			
		||||
      my ( $higher, $lower ) = split /\./, $idx;
 | 
			
		||||
      next if ( $higher == 0 or $lower == 0 );
 | 
			
		||||
      next unless exists $ifType->{ $higher } and defined $ifType->{ $higher };
 | 
			
		||||
 | 
			
		||||
      if ( $ifType->{ $higher } eq 'propVirtual' ) {
 | 
			
		||||
 | 
			
		||||
          # lower needs also to be configured in pagpEthcOperationMode
 | 
			
		||||
          next unless exists $pagpOperMode->{$lower}
 | 
			
		||||
            and defined $pagpOperMode->{$lower}
 | 
			
		||||
            and $pagpOperMode->{$lower} =~ m/^(?:manual|pagpOn)$/;
 | 
			
		||||
 | 
			
		||||
          $ret->{ $lower } = $higher;
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return $ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# combine PAgP, LAG & Cisco proprietary data
 | 
			
		||||
sub agg_ports {
 | 
			
		||||
  my $ret = {%{agg_ports_pagp(@_)}, %{agg_ports_lag(@_)}, %{agg_ports_cisco(@_)}};
 | 
			
		||||
  my $ret = {
 | 
			
		||||
      %{agg_ports_propvirtual(@_)},
 | 
			
		||||
      %{agg_ports_ifstack(@_)},
 | 
			
		||||
      %{agg_ports_pagp(@_)},
 | 
			
		||||
      %{agg_ports_lag(@_)},
 | 
			
		||||
      %{agg_ports_cisco(@_)},
 | 
			
		||||
  };
 | 
			
		||||
  return $ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -212,6 +253,11 @@ even if they are not running an aggregation protocol.
 | 
			
		||||
Implements the PAgP LAG info retrieval. Merged into C<agg_ports> data
 | 
			
		||||
automatically.
 | 
			
		||||
 | 
			
		||||
=item C<agg_ports_propvirtual>
 | 
			
		||||
 | 
			
		||||
A version of SNMP::Info::Aggregate::agg_ports_ifstack that inspects only
 | 
			
		||||
ports of type propVirtual. You still need to use agg_ports_ifstack.
 | 
			
		||||
 | 
			
		||||
=item C<lag_members>
 | 
			
		||||
 | 
			
		||||
Mimics C<ad_lag_ports> from L<SNMP::Info::IEEE802dot3ad> but based on ifindex
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										267
									
								
								lib/SNMP/Info/CiscoBGP.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										267
									
								
								lib/SNMP/Info/CiscoBGP.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,267 @@
 | 
			
		||||
# SNMP::Info::CiscoBGP
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2022 Alexander Hartmaier
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
# modification, are permitted provided that the following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
#     * Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
#       this list of conditions and the following disclaimer.
 | 
			
		||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
#       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
#       documentation and/or other materials provided with the distribution.
 | 
			
		||||
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
			
		||||
#       names of its contributors may be used to endorse or promote products
 | 
			
		||||
#       derived from this software without specific prior written permission.
 | 
			
		||||
#
 | 
			
		||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
			
		||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
package SNMP::Info::CiscoBGP;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::CiscoBGP::ISA       = qw( SNMP::Info Exporter );
 | 
			
		||||
@SNMP::Info::CiscoBGP::EXPORT_OK = qw(
 | 
			
		||||
    parse_cisco_bgp_peer2_entry_index
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'CISCO-BGP4-MIB' => 'cbgpPeer2State', );
 | 
			
		||||
 | 
			
		||||
%GLOBALS = ();
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    # cbgpPeer2Table
 | 
			
		||||
    'cisco_bgp_peer2_state'               => 'cbgpPeer2State',
 | 
			
		||||
    'cisco_bgp_peer2_adminstatus'         => 'cbgpPeer2AdminStatus',
 | 
			
		||||
    'cisco_bgp_peer2_localaddr'           => 'cbgpPeer2LocalAddr',
 | 
			
		||||
    'cisco_bgp_peer2_localport'           => 'cbgpPeer2LocalPort',
 | 
			
		||||
    'cisco_bgp_peer2_localas'             => 'cbgpPeer2LocalAs',
 | 
			
		||||
    'cisco_bgp_peer2_localidentifier'     => 'cbgpPeer2LocalIdentifier',
 | 
			
		||||
    'cisco_bgp_peer2_remoteport'          => 'cbgpPeer2RemotePort',
 | 
			
		||||
    'cisco_bgp_peer2_remoteas'            => 'cbgpPeer2RemoteAs',
 | 
			
		||||
    'cisco_bgp_peer2_remoteidentifier'    => 'cbgpPeer2RemoteIdentifier',
 | 
			
		||||
    'cisco_bgp_peer2_inupdates'           => 'cbgpPeer2InUpdates',
 | 
			
		||||
    'cisco_bgp_peer2_outupdates'          => 'cbgpPeer2OutUpdates',
 | 
			
		||||
    'cisco_bgp_peer2_intotalmessages'     => 'cbgpPeer2InTotalMessages',
 | 
			
		||||
    'cisco_bgp_peer2_outtotalmessages'    => 'cbgpPeer2OutTotalMessages',
 | 
			
		||||
    'cisco_bgp_peer2_lasterror'           => 'cbgpPeer2LastError',
 | 
			
		||||
    'cisco_bgp_peer2_fsmestablishedtransitions'
 | 
			
		||||
                                    => 'cbgpPeer2FsmEstablishedTransitions',
 | 
			
		||||
    'cisco_bgp_peer2_fsmestablishedtime'  => 'cbgpPeer2FsmEstablishedTime',
 | 
			
		||||
    'cisco_bgp_peer2_connectretryinterval'=> 'cbgpPeer2ConnectRetryInterval',
 | 
			
		||||
    'cisco_bgp_peer2_holdtime'            => 'cbgpPeer2HoldTime',
 | 
			
		||||
    'cisco_bgp_peer2_keepalive'           => 'cbgpPeer2KeepAlive',
 | 
			
		||||
    'cisco_bgp_peer2_holdtimeconfigured'  => 'cbgpPeer2HoldTimeConfigured',
 | 
			
		||||
    'cisco_bgp_peer2_keepaliveconfigured' => 'cbgpPeer2KeepAliveConfigured',
 | 
			
		||||
    'cisco_bgp_peer2_minasoriginationinterval'
 | 
			
		||||
                                    => 'cbgpPeer2MinASOriginationInterval',
 | 
			
		||||
    'cisco_bgp_peer2_inupdatelapsedtime'  => 'cbgpPeer2InUpdateElapsedTime',
 | 
			
		||||
    'cisco_bgp_peer2_lasterrortxt'        => 'cbgpPeer2LastErrorTxt',
 | 
			
		||||
    'cisco_bgp_peer2_prevstate'           => 'cbgpPeer2PrevState',
 | 
			
		||||
 | 
			
		||||
    # cbgpPeer2AddrFamilyPrefixTable
 | 
			
		||||
    'cisco_bgp_peer2_acceptedprefixes'    => 'cbgpPeer2AcceptedPrefixes',
 | 
			
		||||
    'cisco_bgp_peer2_deniedprefixes'      => 'cbgpPeer2DeniedPrefixes',
 | 
			
		||||
    'cisco_bgp_peer2_prefixadminlimit'    => 'cbgpPeer2PrefixAdminLimit',
 | 
			
		||||
    'cisco_bgp_peer2_prefixthreshold'     => 'cbgpPeer2PrefixThreshold',
 | 
			
		||||
    'cisco_bgp_peer2_prefixclearthreshold'=> 'cbgpPeer2PrefixClearThreshold',
 | 
			
		||||
    'cisco_bgp_peer2_advertisedprefixes'  => 'cbgpPeer2AdvertisedPrefixes',
 | 
			
		||||
    'cisco_bgp_peer2_suppressedprefixes'  => 'cbgpPeer2SuppressedPrefixes',
 | 
			
		||||
    'cisco_bgp_peer2_withdrawnprefixes'   => 'cbgpPeer2WithdrawnPrefixes',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    'cisco_bgp_peer2_localaddr'           => \&SNMP::Info::munge_inetaddress,
 | 
			
		||||
    'cisco_bgp_peer2_lasterror'           => \&SNMP::Info::munge_octet2hex,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub parse_cisco_bgp_peer2_entry_index {
 | 
			
		||||
    my ($self, $index) = @_;
 | 
			
		||||
    my ($type, $addrlength, $ip) = split(/\./, $index, 3);
 | 
			
		||||
    # decode IPv6 remote address
 | 
			
		||||
    if ($addrlength == 16) {
 | 
			
		||||
        # copied from SNMP::Info::IPv6/ipv6_addr
 | 
			
		||||
        my @parts = split(/\./, $ip);
 | 
			
		||||
        $ip = sprintf("%x:%x:%x:%x:%x:%x:%x:%x",
 | 
			
		||||
            unpack('n8', pack('C*', @parts)));
 | 
			
		||||
    }
 | 
			
		||||
    return $type, $addrlength, $ip;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::CiscoBGP - SNMP Interface to Cisco's BGP MIBs
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
Alexander Hartmaier
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
# Let SNMP::Info determine the correct subclass for you.
 | 
			
		||||
my $device = SNMP::Info->(
 | 
			
		||||
    AutoSpecify => 1,
 | 
			
		||||
    Debug       => 1,
 | 
			
		||||
    DestHost    => 'myswitch',
 | 
			
		||||
    Community   => 'public',
 | 
			
		||||
    Version     => 2
 | 
			
		||||
) or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
my $remoteas_for_index = $device->cisco_bgp_peer2_remoteas;
 | 
			
		||||
 | 
			
		||||
for my $index (keys $remoteas_for_index->%*) {
 | 
			
		||||
    my ($type, $addrlength, $ip) =
 | 
			
		||||
        $device->parse_cisco_bgp_peer2_entry_index($index);
 | 
			
		||||
    printf('remote: %-39s  type: %-4s  remote AS: %5d',
 | 
			
		||||
        $ip, $type, $remoteas_for_index->{$index});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
SNMP::Info::CiscoBGP is a subclass of SNMP::Info that provides
 | 
			
		||||
information about a cisco device's BGP configuration and state.
 | 
			
		||||
 | 
			
		||||
Use or create in a subclass of SNMP::Info.  Do not use directly.
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
none.
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<CISCO-BGP4-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
None
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
=head2 Cisco BGP Peer 2 Table (cbgpPeer2Table)
 | 
			
		||||
 | 
			
		||||
This table contains, one entry per BGP peer, information about the connections
 | 
			
		||||
with BGP peers.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_state (cbgpPeer2State)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_adminstatus (cbgpPeer2AdminStatus)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_localaddr (cbgpPeer2LocalAddr)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_localport (cbgpPeer2LocalPort)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_localas (cbgpPeer2LocalAs)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_localidentifier (cbgpPeer2LocalIdentifier)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_remoteport (cbgpPeer2RemotePort)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_remoteas (cbgpPeer2RemoteAs)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_remoteidentifier (cbgpPeer2RemoteIdentifier)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_inupdates (cbgpPeer2InUpdates)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_outupdates (cbgpPeer2OutUpdates)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_intotalmessages (cbgpPeer2InTotalMessages)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_outtotalmessages (cbgpPeer2OutTotalMessages)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_lasterror (cbgpPeer2LastError)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_fsmestablishedtransitions (cbgpPeer2FsmEstablishedTransitions)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_fsmestablishedtime (cbgpPeer2FsmEstablishedTime)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_connectretryinterval (cbgpPeer2ConnectRetryInterval)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_holdtime (cbgpPeer2HoldTime)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_keepalive (cbgpPeer2KeepAlive)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_holdtimeconfigured (cbgpPeer2HoldTimeConfigured)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_keepaliveconfigured (cbgpPeer2KeepAliveConfigured)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_minasoriginationinterval (cbgpPeer2MinASOriginationInterval)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_inupdatelapsedtime (cbgpPeer2InUpdateElapsedTime)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_lasterrortxt (cbgpPeer2LastErrorTxt)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_prevstate (cbgpPeer2PrevState)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Cisco BGP Peer 2 Address Family Prefix Table (cbgpPeer2AddrFamilyPrefixTable)
 | 
			
		||||
 | 
			
		||||
This table contains prefix related information related to address families
 | 
			
		||||
supported by a peer.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_acceptedprefixes (cbgpPeer2AcceptedPrefixes)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_deniedprefixes (cbgpPeer2DeniedPrefixes)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_prefixadminlimit (cbgpPeer2PrefixAdminLimit)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_prefixthreshold (cbgpPeer2PrefixThreshold)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_prefixclearthreshold (cbgpPeer2PrefixClearThreshold)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_advertisedprefixes (cbgpPeer2AdvertisedPrefixes)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_suppressedprefixes (cbgpPeer2SuppressedPrefixes)
 | 
			
		||||
 | 
			
		||||
=item cisco_bgp_peer2_withdrawnprefixes (cbgpPeer2WithdrawnPrefixes)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 METHODS
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item parse_cisco_bgp_peer2_entry_index
 | 
			
		||||
 | 
			
		||||
Takes a cbgpPeer2Entry index as returned by all methods of the Cisco BGP Peer
 | 
			
		||||
2 Table methods.
 | 
			
		||||
 | 
			
		||||
Returns a list of type (numeric, cbgpPeer2Type), address length (in bytes:
 | 
			
		||||
4 for IPv4, 16 for IPv6) and the remote IP address as string.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable',
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE, %PAECAPABILITIES);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB',
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex',
 | 
			
		||||
          'CISCO-CDP-MIB' => 'cdpCachePowerConsumption',
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ use Exporter;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE, %PORTSTAT);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'SNMPv2-MIB'            => 'sysDescr',
 | 
			
		||||
@@ -109,6 +109,11 @@ sub os {
 | 
			
		||||
    return 'ios-xe'   if ( $descr =~ /Fuji/ );
 | 
			
		||||
    return 'ios-xe'   if ( $descr =~ /Everest/ );
 | 
			
		||||
    return 'ios-xe'   if ( $descr =~ /Gibraltar/ );
 | 
			
		||||
    return 'ios-xe'   if ( $descr =~ /Amsterdam/ );
 | 
			
		||||
    return 'ios-xe'   if ( $descr =~ /Bengaluru/ );
 | 
			
		||||
    return 'ios-xe'   if ( $descr =~ /Cupertino/ );
 | 
			
		||||
    return 'ios-xe'   if ( $descr =~ /Dublin/ );
 | 
			
		||||
    return 'ios-xe'   if ( $descr =~ /IOSXE/ );
 | 
			
		||||
    return 'ios-xe'   if ( $descr =~ /IOS-XE/ );
 | 
			
		||||
    return 'ios-xr'   if ( $descr =~ /IOS XR/ );
 | 
			
		||||
    return 'ios'      if ( $descr =~ /IOS/ );
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ use SNMP::Info::Bridge;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, $DEBUG, %MIBS, %FUNCS, %GLOBALS, %MUNGE, %PORTSTAT, $INIT);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::CiscoStpExtensions::ISA = qw/SNMP::Info::Bridge SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::CiscoStpExtensions::EXPORT_OK = qw//;
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'CISCO-VTP-MIB'                       => 'vtpVlanName',
 | 
			
		||||
@@ -199,6 +199,32 @@ sub i_vlan {
 | 
			
		||||
    return \%i_vlans;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_subinterfaces {
 | 
			
		||||
    my $vtp    = shift;
 | 
			
		||||
    my %i_subs = %{ $vtp->SUPER::i_subinterfaces() || {} };
 | 
			
		||||
 | 
			
		||||
    # CISCO-VLAN-IFTABLE-RELATION-MIB
 | 
			
		||||
    # Used for traditional Cisco Routers and Aironet
 | 
			
		||||
 | 
			
		||||
    my $v_cvi_if = $vtp->v_cvi_if();
 | 
			
		||||
    if ( defined $v_cvi_if ) {
 | 
			
		||||
 | 
			
		||||
        # Translate vlan.parent_physical_interface_iid -> iid
 | 
			
		||||
        #       to iid -> [iid, iid, ...]
 | 
			
		||||
        foreach my $i ( keys %$v_cvi_if ) {
 | 
			
		||||
            my ( $vlan, $phys ) = split( /\./, $i );
 | 
			
		||||
            my $iid = $v_cvi_if->{$i};
 | 
			
		||||
 | 
			
		||||
            next unless $phys and $iid;
 | 
			
		||||
            next if $phys == $iid;
 | 
			
		||||
 | 
			
		||||
            push @{ $i_subs{$phys} }, $iid;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return \%i_subs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_untagged {
 | 
			
		||||
    my $vtp = shift;
 | 
			
		||||
    my ( $ifindex ) = @_;
 | 
			
		||||
@@ -625,6 +651,22 @@ IDs.  These are the VLANs which are members of enabled VLAN list for the port.
 | 
			
		||||
    print "Port: $port VLAN: $vlan\n";
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
=item $vtp->i_subinterfaces()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of
 | 
			
		||||
C<ifIndex>. These are the VLAN subinterfaces (C<l2vlan> type) for the parent
 | 
			
		||||
(C<ethernetCsmacd> type) interface.
 | 
			
		||||
 | 
			
		||||
  Example:
 | 
			
		||||
  my $interfaces = $vtp->interfaces();
 | 
			
		||||
  my $i_subs     = $vtp->i_subinterfaces();
 | 
			
		||||
 | 
			
		||||
  foreach my $iid (sort keys %$interfaces) {
 | 
			
		||||
    my $port = $interfaces->{$iid};
 | 
			
		||||
    my $subs = join(',', sort(map {$interfaces->{$_}} @{$i_subs->{$iid}}));
 | 
			
		||||
    print "Port: $port has subinterfaces: $subs\n";
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
=item $vtp->i_vlan_membership_untagged()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'DOCS-IF3-MIB' => 'docsIf3Mib',
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'EXTREME-EDP-MIB'   => 'extremeEdpPortIfIndex',
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'EtherLike-MIB' => 'etherMIB' );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										230
									
								
								lib/SNMP/Info/IEEE802_Bridge.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										230
									
								
								lib/SNMP/Info/IEEE802_Bridge.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,230 @@
 | 
			
		||||
# SNMP::Info::IEEE802_Bridge
 | 
			
		||||
#
 | 
			
		||||
# Changes since Version 0.7 Copyright (c) 2004 Max Baker
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2002,2003 Regents of the University of California
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
# modification, are permitted provided that the following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
#     * Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
#       this list of conditions and the following disclaimer.
 | 
			
		||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
#       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
#       documentation and/or other materials provided with the distribution.
 | 
			
		||||
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
			
		||||
#       names of its contributors may be used to endorse or promote products
 | 
			
		||||
#       derived from this software without specific prior written permission.
 | 
			
		||||
#
 | 
			
		||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
			
		||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
package SNMP::Info::IEEE802_Bridge;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::IEEE802_Bridge::ISA       = qw/SNMP::Info Exporter/;
 | 
			
		||||
@SNMP::Info::IEEE802_Bridge::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, $DEBUG, %MIBS, %FUNCS, %GLOBALS, %MUNGE, $INIT);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'IEEE8021-Q-BRIDGE-MIB' => 'ieee8021QBridgeVlanCurrentEgressPorts',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    'iqb_i_vlan'        => 'ieee8021QBridgePvid',
 | 
			
		||||
    'iqb_i_vlan_type'   => 'ieee8021QBridgePortAcceptableFrameTypes',
 | 
			
		||||
    'iqb_i_vlan_in_flt' => 'ieee8021QBridgePortIngressFiltering',
 | 
			
		||||
 | 
			
		||||
    'iqb_cv_egress'   => 'ieee8021QBridgeVlanCurrentEgressPorts',
 | 
			
		||||
    'iqb_cv_untagged' => 'ieee8021QBridgeVlanCurrentUntaggedPorts',
 | 
			
		||||
    'iqb_cv_stat'     => 'ieee8021QBridgeVlanStatus',
 | 
			
		||||
 | 
			
		||||
    'iqb_v_name'        => 'ieee8021QBridgeVlanStaticName',
 | 
			
		||||
    'iqb_v_egress'      => 'ieee8021QBridgeVlanStaticEgressPorts',
 | 
			
		||||
    'iqb_v_fbdn_egress' => 'ieee8021QBridgeVlanForbiddenEgressPorts',
 | 
			
		||||
    'iqb_v_untagged'    => 'ieee8021QBridgeVlanStaticUntaggedPorts',
 | 
			
		||||
    'iqb_v_stat'        => 'ieee8021QBridgeVlanStaticRowStatus',
 | 
			
		||||
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
 | 
			
		||||
    # Inherit all the built in munging
 | 
			
		||||
    %SNMP::Info::MUNGE,
 | 
			
		||||
 | 
			
		||||
    # Add ones for our class
 | 
			
		||||
    'iqb_cv_egress'     => \&SNMP::Info::munge_port_list,
 | 
			
		||||
    'iqb_cv_untagged'   => \&SNMP::Info::munge_port_list,
 | 
			
		||||
    'iqb_v_egress'      => \&SNMP::Info::munge_port_list,
 | 
			
		||||
    'iqb_v_fbdn_egress' => \&SNMP::Info::munge_port_list,
 | 
			
		||||
    'iqb_v_untagged'    => \&SNMP::Info::munge_port_list,
 | 
			
		||||
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::IEEE802_Bridge - SNMP Interface to SNMP data available through the
 | 
			
		||||
F<IEEE8021-Q-BRIDGE-MIB>
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
Jeroen van Ingen
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
FIXME update with better example
 | 
			
		||||
 my $bridge = new SNMP::Info (
 | 
			
		||||
                             AutoSpecify => 1,
 | 
			
		||||
                             Debug       => 1,
 | 
			
		||||
                             DestHost    => 'switch',
 | 
			
		||||
                             Community   => 'public',
 | 
			
		||||
                             Version     => 2
 | 
			
		||||
                             );
 | 
			
		||||
 | 
			
		||||
 my $class = $bridge->class();
 | 
			
		||||
 print " Using device sub class : $class\n";
 | 
			
		||||
 | 
			
		||||
 # Grab Forwarding Tables
 | 
			
		||||
 my $interfaces = $bridge->interfaces();
 | 
			
		||||
 my $fw_mac     = $bridge->fw_mac();
 | 
			
		||||
 my $fw_port    = $bridge->fw_port();
 | 
			
		||||
 my $bp_index   = $bridge->bp_index();
 | 
			
		||||
 | 
			
		||||
 foreach my $fw_index (keys %$fw_mac){
 | 
			
		||||
    my $mac   = $fw_mac->{$fw_index};
 | 
			
		||||
    my $bp_id = $fw_port->{$fw_index};
 | 
			
		||||
    my $iid   = $bp_index->{$bp_id};
 | 
			
		||||
    my $port  = $interfaces->{$iid};
 | 
			
		||||
 | 
			
		||||
    print "Port:$port forwarding to $mac\n";
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
F<IEEE8021-Q-BRIDGE-MIB> is used by some newer switches / Layer 2 devices.
 | 
			
		||||
It is derived from the IETF Q-BRIDGE-MIB (RFC 4363), extending it with the
 | 
			
		||||
concept of multiple VLAN-aware bridges (PBB).
 | 
			
		||||
 | 
			
		||||
Create or use a subclass of SNMP::Info that inherits this class.  Do not use
 | 
			
		||||
directly.
 | 
			
		||||
 | 
			
		||||
For debugging you can call new() directly as you would in SNMP::Info
 | 
			
		||||
 | 
			
		||||
 my $bridge = new SNMP::Info::IEEE802_Bridge(...);
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
None.
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<IEEE8021-Q-BRIDGE-MIB>
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar values from SNMP
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=head2 Per-port VLAN configuration in the device (C<ieee8021QBridgePortVlanTable>)
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_i_vlan()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgePvid>)
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_i_vlan_type()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgePortAcceptableFrameTypes>)
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_i_vlan_in_flt()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgePortIngressFiltering>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 VLAN Current Table (C<ieee8021QBridgeVlanCurrentTable>)
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_cv_egress()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgeVlanCurrentEgressPorts>)
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_cv_untagged()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgeVlanCurrentUntaggedPorts>)
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_cv_stat()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgeVlanStatus>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 VLAN Static Table (C<ieee8021QBridgeVlanStaticTable>)
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_v_name()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgeVlanStaticName>)
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_v_egress()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgeVlanStaticEgressPorts>)
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_v_fbdn_egress()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgeVlanForbiddenEgressPorts>)
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_v_untagged()
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgeVlanStaticUntaggedPorts>)
 | 
			
		||||
 | 
			
		||||
=item $bridge->iqb_v_stat()
 | 
			
		||||
 | 
			
		||||
C<active> !
 | 
			
		||||
 | 
			
		||||
(C<ieee8021QBridgeVlanStaticRowStatus>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@ use SNMP::Info::Aggregate;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
  %SNMP::Info::Aggregate::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,7 @@ use constant {
 | 
			
		||||
    IPV6MIB => 3,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -349,7 +349,7 @@ sub ipv6_addr_prefixlength {
 | 
			
		||||
                # Remove interface specific part from vrf interfaces
 | 
			
		||||
                if ($row =~ /^((\d+\.){17}\d+)/) { $row = $1 }
 | 
			
		||||
                # Remove the OID part from the value
 | 
			
		||||
                my $val = $ipv6_addr_prefix->{$row};
 | 
			
		||||
                my $val = $ipv6_addr_prefix->{$row} || '';
 | 
			
		||||
                if ( $val =~ /^.+?((?:\d+\.){19}(\d+))$/ ) {
 | 
			
		||||
                    $val = $2;
 | 
			
		||||
                    $return->{$row} = $val;
 | 
			
		||||
@@ -363,7 +363,7 @@ sub ipv6_addr_prefixlength {
 | 
			
		||||
 | 
			
		||||
sub ipv6_addr {
 | 
			
		||||
    my $info = shift;
 | 
			
		||||
    my $return;
 | 
			
		||||
    my $return = {};
 | 
			
		||||
    my $indexes = $info->ipv6_index();
 | 
			
		||||
    foreach my $row (keys %$indexes) {
 | 
			
		||||
        my @parts = split(/\./, $row);
 | 
			
		||||
@@ -377,8 +377,8 @@ sub ipv6_addr {
 | 
			
		||||
        my $addrsize = shift @parts; # First element now is addrsize, should be 16
 | 
			
		||||
        if ($is_valid && $addrsize == 16) {
 | 
			
		||||
            $return->{$row} = join(':', unpack('(H4)*', pack('C*', @parts)));
 | 
			
		||||
        } else {
 | 
			
		||||
            warn sprintf("%s: unable to decode table index to IPv6 address. Raw data is [%s].\n", &_my_sub_name, $row);
 | 
			
		||||
        } elsif ($info->debug()) {
 | 
			
		||||
            printf("%s: unable to decode table index to IPv6 address. Raw data is [%s].\n", &_my_sub_name, $row);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return $return;
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    'LLDP-MIB'          => 'lldpLocSysCapEnabled',
 | 
			
		||||
@@ -52,13 +52,18 @@ $VERSION = '3.70';
 | 
			
		||||
    'lldp_sysname' => 'lldpLocSysName',
 | 
			
		||||
    'lldp_sysdesc' => 'lldpLocSysDesc',
 | 
			
		||||
    'lldp_sys_cap' => 'lldpLocSysCapEnabled',
 | 
			
		||||
    'lldp_loc_id_type'  => 'lldpLocChassisIdSubtype',
 | 
			
		||||
    'lldp_loc_id_os'    => 'lldpLocChassisId',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
 | 
			
		||||
    # LLDP-MIB::lldpLocManAddrTable
 | 
			
		||||
    'lldp_lman_addr' => 'lldpLocManAddrIfId',
 | 
			
		||||
 | 
			
		||||
    # LLDP-MIB::LldpLocPortEntry
 | 
			
		||||
    'lldp_lport_id'   => 'lldpLocPortId',
 | 
			
		||||
    'lldp_lport_desc' => 'lldpLocPortDesc',
 | 
			
		||||
 | 
			
		||||
    # LLDP-MIB::lldpRemTable
 | 
			
		||||
    'lldp_rem_id_type'  => 'lldpRemChassisIdSubtype',
 | 
			
		||||
    'lldp_rem_id'       => 'lldpRemChassisId',
 | 
			
		||||
@@ -92,6 +97,8 @@ $VERSION = '3.70';
 | 
			
		||||
    'lldp_rem_sysname'   => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_rem_sysdesc'   => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_rem_port_desc' => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_lport_id'      => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_lport_desc'    => \&SNMP::Info::munge_null,
 | 
			
		||||
    'lldp_sys_cap'       => \&SNMP::Info::munge_bits,
 | 
			
		||||
    'lldp_rem_sys_cap'   => \&SNMP::Info::munge_bits,
 | 
			
		||||
    'lldp_rem_cap_spt'   => \&SNMP::Info::munge_bits,
 | 
			
		||||
@@ -146,7 +153,11 @@ sub lldp_if {
 | 
			
		||||
        # ifAlias because using cross ref with description is correct
 | 
			
		||||
        # behavior according to the LLDP-MIB. Some devices (eg H3C gear)
 | 
			
		||||
        # seem to use ifAlias though.
 | 
			
		||||
        my $lldp_desc = $lldp->lldpLocPortDesc($port);
 | 
			
		||||
        # snmp::info #372 -> to make things even more complex some devices
 | 
			
		||||
        # have different behaviour depending on os version (nx-os 6 vs 7)
 | 
			
		||||
        # so we made this a function to allow overrides in more specific
 | 
			
		||||
        # modules
 | 
			
		||||
        my $lldp_desc = $lldp->lldp_lport_desc($port);
 | 
			
		||||
        my $desc      = $lldp_desc->{$port};
 | 
			
		||||
 | 
			
		||||
        # If cross reference is successful use it, otherwise stick with
 | 
			
		||||
@@ -274,6 +285,29 @@ sub lldp_port {
 | 
			
		||||
    return \%lldp_port;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub _lldp_id_string {
 | 
			
		||||
    my $lldp    = shift;
 | 
			
		||||
    my $id    = shift;
 | 
			
		||||
    my $type    = shift;
 | 
			
		||||
 | 
			
		||||
    # May need to format other types in the future
 | 
			
		||||
    if ( $type =~ /mac/ ) {
 | 
			
		||||
        $id = SNMP::Info::munge_mac($id)
 | 
			
		||||
    } elsif ( $type eq 'networkAddress' ) {
 | 
			
		||||
        if ( length( unpack( 'H*', $id ) ) == 10 ) {
 | 
			
		||||
 | 
			
		||||
            # IP address - first octet is IANA Address Family Number, need
 | 
			
		||||
            # walk with IPv6
 | 
			
		||||
            my @octets
 | 
			
		||||
                = ( map { sprintf "%02x", $_ } unpack( 'C*', $id ) )
 | 
			
		||||
                [ 1 .. 4 ];
 | 
			
		||||
            $id = join '.', map { hex($_) } @octets;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $id;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub lldp_id {
 | 
			
		||||
    my $lldp    = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
@@ -288,26 +322,19 @@ sub lldp_id {
 | 
			
		||||
        my $type = $ch_type->{$key};
 | 
			
		||||
        next unless $type;
 | 
			
		||||
 | 
			
		||||
        # May need to format other types in the future
 | 
			
		||||
        if ( $type =~ /mac/ ) {
 | 
			
		||||
            $id = SNMP::Info::munge_mac($id)
 | 
			
		||||
        }
 | 
			
		||||
        elsif ( $type eq 'networkAddress' ) {
 | 
			
		||||
            if ( length( unpack( 'H*', $id ) ) == 10 ) {
 | 
			
		||||
 | 
			
		||||
                # IP address - first octet is IANA Address Family Number, need
 | 
			
		||||
                # walk with IPv6
 | 
			
		||||
                my @octets
 | 
			
		||||
                    = ( map { sprintf "%02x", $_ } unpack( 'C*', $id ) )
 | 
			
		||||
                    [ 1 .. 4 ];
 | 
			
		||||
                $id = join '.', map { hex($_) } @octets;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        $id = $lldp->_lldp_id_string($id, $type);
 | 
			
		||||
        $lldp_id{$key} = $id;
 | 
			
		||||
    }
 | 
			
		||||
    return \%lldp_id;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub lldp_loc_id {
 | 
			
		||||
    my $lldp    = shift;
 | 
			
		||||
    my $ch_type = $lldp->lldp_loc_id_type();
 | 
			
		||||
    my $ch      = $lldp->lldp_loc_id_os();
 | 
			
		||||
    return $lldp->_lldp_id_string($ch, $ch_type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub lldp_platform {
 | 
			
		||||
    my $lldp    = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
@@ -577,6 +604,22 @@ capability and nothing else."
 | 
			
		||||
 | 
			
		||||
(C<lldpLocSysCapEnabled>)
 | 
			
		||||
 | 
			
		||||
=item $lldp->lldp_loc_id()
 | 
			
		||||
 | 
			
		||||
The string value used to identify the chassis component associated with 
 | 
			
		||||
the local system.
 | 
			
		||||
 | 
			
		||||
(C<lldpLocChassisId>)
 | 
			
		||||
 | 
			
		||||
=item $lldp->lldp_loc_id_type()
 | 
			
		||||
 | 
			
		||||
The type of encoding used to identify the chassis associated with the 
 | 
			
		||||
local system.
 | 
			
		||||
 | 
			
		||||
This is used by the above method to decode the octet string in C<lldpLocChassisId>
 | 
			
		||||
 | 
			
		||||
(C<lldpLocChassisIdSubtype>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %PORTSTAT, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( %SNMP::Info::MIBS, 'SNMP-REPEATER-MIB' => 'rptrPortGroupIndex' );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
# Set for No CDP
 | 
			
		||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', );
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
# Set for No CDP
 | 
			
		||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, );
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer1;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $AUTOLOAD);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer1::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -37,22 +37,32 @@ use Exporter;
 | 
			
		||||
use SNMP::Info;
 | 
			
		||||
use SNMP::Info::Bridge;
 | 
			
		||||
use SNMP::Info::Entity;
 | 
			
		||||
use SNMP::Info::PortAccessEntity;
 | 
			
		||||
use SNMP::Info::PowerEthernet;
 | 
			
		||||
use SNMP::Info::LLDP;
 | 
			
		||||
use SNMP::Info::DocsisHE;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::ISA
 | 
			
		||||
    = qw/SNMP::Info SNMP::Info::Bridge SNMP::Info::Entity SNMP::Info::PowerEthernet SNMP::Info::LLDP SNMP::Info::DocsisHE Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::ISA = qw/
 | 
			
		||||
        SNMP::Info SNMP::Info::Bridge
 | 
			
		||||
        SNMP::Info::Entity
 | 
			
		||||
        SNMP::Info::PowerEthernet
 | 
			
		||||
        SNMP::Info::LLDP
 | 
			
		||||
        SNMP::Info::DocsisHE
 | 
			
		||||
        SNMP::Info::PortAccessEntity
 | 
			
		||||
        Exporter
 | 
			
		||||
/;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %PORTSTAT, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,         %SNMP::Info::Bridge::MIBS,
 | 
			
		||||
    %SNMP::Info::Entity::MIBS, %SNMP::Info::PowerEthernet::MIBS,
 | 
			
		||||
    %SNMP::Info::LLDP::MIBS,   %SNMP::Info::DocsisHE::MIBS,
 | 
			
		||||
    %SNMP::Info::PortAccessEntity::MIBS
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
@@ -62,6 +72,7 @@ $VERSION = '3.70';
 | 
			
		||||
    %SNMP::Info::Entity::GLOBALS,
 | 
			
		||||
    %SNMP::Info::PowerEthernet::GLOBALS,
 | 
			
		||||
    %SNMP::Info::LLDP::GLOBALS,
 | 
			
		||||
    %SNMP::Info::PortAccessEntity::GLOBALS,
 | 
			
		||||
    'serial1' =>
 | 
			
		||||
        '.1.3.6.1.4.1.9.3.6.3.0',    # OLD-CISCO-CHASSIS-MIB::chassisId.0
 | 
			
		||||
);
 | 
			
		||||
@@ -70,6 +81,7 @@ $VERSION = '3.70';
 | 
			
		||||
    %SNMP::Info::FUNCS,         %SNMP::Info::Bridge::FUNCS,
 | 
			
		||||
    %SNMP::Info::Entity::FUNCS, %SNMP::Info::PowerEthernet::FUNCS,
 | 
			
		||||
    %SNMP::Info::LLDP::FUNCS,   %SNMP::Info::DocsisHE::FUNCS,
 | 
			
		||||
    %SNMP::Info::PortAccessEntity::FUNCS
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
@@ -81,6 +93,7 @@ $VERSION = '3.70';
 | 
			
		||||
    %SNMP::Info::Entity::MUNGE,
 | 
			
		||||
    %SNMP::Info::PowerEthernet::MUNGE,
 | 
			
		||||
    %SNMP::Info::LLDP::MUNGE,
 | 
			
		||||
    %SNMP::Info::PortAccessEntity::MUNGE,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
# Method OverRides
 | 
			
		||||
@@ -105,8 +118,8 @@ sub model {
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    my $l2    = shift;
 | 
			
		||||
    my $model = $l2->model();
 | 
			
		||||
    my $descr = $l2->description();
 | 
			
		||||
    my $model = $l2->model() || '';
 | 
			
		||||
    my $descr = $l2->description() || '';
 | 
			
		||||
 | 
			
		||||
    if ( $model =~ /hp/i or $descr =~ /\bhp\b/i ) {
 | 
			
		||||
        return 'hp';
 | 
			
		||||
@@ -236,6 +249,8 @@ after determining a more specific class using the method above.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::PowerEthernet
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::PortAccessEntity
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
@@ -293,6 +308,10 @@ See documentation in L<SNMP::Info::Entity/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::PortAccessEntity
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::PortAccessEntity/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
@@ -327,4 +346,8 @@ See documentation in L<SNMP::Info::Entity/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::PortAccessEntity
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::PortAccessEntity/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::CDP;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $AUTOLOAD);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
# This will be filled in with the device's index into the EntPhysicalEntry
 | 
			
		||||
# table by the serial() function.
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
@@ -108,7 +108,7 @@ sub os_ver {
 | 
			
		||||
    my $aerohive = shift;
 | 
			
		||||
    my $descr    = $aerohive->description();
 | 
			
		||||
 | 
			
		||||
    if ( defined ($descr) && $descr =~ m/\bHiveOS\s(\d\.\w+)\b/ix ) {
 | 
			
		||||
    if ( defined ($descr) && $descr =~ m/\bHiveOS\s(\d+\.\w+)\b/ix ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
@@ -318,7 +318,8 @@ __END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer2::Aerohive - SNMP Interface to Aerohive Access Points
 | 
			
		||||
SNMP::Info::Layer2::Aerohive - SNMP Interface to Aerohive / Extreme
 | 
			
		||||
access points
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
@@ -342,7 +343,7 @@ Eric Miller
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Provides abstraction to the configuration information obtainable from an
 | 
			
		||||
Aerohive wireless Access Point through SNMP.
 | 
			
		||||
Aerohive / Extreme wireless access point through SNMP.
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
@@ -448,11 +449,11 @@ radio interface.
 | 
			
		||||
 | 
			
		||||
C<ahRadioTxPower>
 | 
			
		||||
 | 
			
		||||
=item $aironet->cd11_port()
 | 
			
		||||
=item $aerohive->cd11_port()
 | 
			
		||||
 | 
			
		||||
Returns radio interfaces.
 | 
			
		||||
 | 
			
		||||
=item $aironet->cd11_mac()
 | 
			
		||||
=item $aerohive->cd11_mac()
 | 
			
		||||
 | 
			
		||||
Returns client radio interface MAC addresses.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -31,6 +31,7 @@ package SNMP::Info::Layer2::Airespace;
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Bridge;
 | 
			
		||||
use SNMP::Info::CDP;
 | 
			
		||||
use SNMP::Info::Airespace;
 | 
			
		||||
 | 
			
		||||
@@ -40,7 +41,7 @@ use SNMP::Info::Airespace;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,      %SNMP::Info::Bridge::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,7 @@ use SNMP::Info::IEEE802dot11;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::IEEE802dot11::GLOBALS,
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer1;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( %SNMP::Info::Layer2::MIBS );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -552,10 +552,6 @@ Returns reference to the map between IID and physical Port.
 | 
			
		||||
 | 
			
		||||
  The physical port name is returned as slot.port.
 | 
			
		||||
 | 
			
		||||
=item $baystack->i_ignore()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of IIDs to ignore.
 | 
			
		||||
 | 
			
		||||
=item $baystack->i_mac()
 | 
			
		||||
 | 
			
		||||
Returns the C<ifPhysAddress> table entries.
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer2::Cisco;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::Cisco::GLOBALS,
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2::Cisco;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::Cisco::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ use SNMP::Info::SONMP;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -52,7 +52,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,7 @@ use SNMP::Info::CDP;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
 
 | 
			
		||||
@@ -43,7 +43,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -50,7 +50,7 @@ use SNMP::Info::Aggregate 'agg_ports_ifstack';
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %PORTSTAT, %MODEL_MAP, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,7 @@ use SNMP::Info::CDP;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %PORTSTAT, %MODEL_MAP, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										227
									
								
								lib/SNMP/Info/Layer2/Hirschmann.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										227
									
								
								lib/SNMP/Info/Layer2/Hirschmann.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,227 @@
 | 
			
		||||
# SNMP::Info::Layer2::Hirschmann - SNMP Interface to Hirschmann Devices
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2019 by The Netdisco Developer Team.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
# modification, are permitted provided that the following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
#     * Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
#       this list of conditions and the following disclaimer.
 | 
			
		||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
#       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
#       documentation and/or other materials provided with the distribution.
 | 
			
		||||
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
			
		||||
#       names of its contributors may be used to endorse or promote products
 | 
			
		||||
#       derived from this software without specific prior written permission.
 | 
			
		||||
#
 | 
			
		||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
			
		||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
package SNMP::Info::Layer2::Hirschmann;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::Layer2;
 | 
			
		||||
use SNMP::Info::CDP;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer2::Hirschmann::ISA       = qw/SNMP::Info::Layer2 Exporter/;
 | 
			
		||||
@SNMP::Info::Layer2::Hirschmann::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $AUTOLOAD);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
    'HMPRIV-MGMT-SNMP-MIB' => 'hirschmann',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
    'h_serial_number' => 'hmSysGroupTable.hmSysGroupEntry.hmSysGroupSerialNum.1', 
 | 
			
		||||
    'os_version'      => 'hmSysVersion.0'
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer2::FUNCS,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::Layer2::MUNGE,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub os {
 | 
			
		||||
    return 'Hirschmann';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub serial {
 | 
			
		||||
    my $hirschmann = shift;
 | 
			
		||||
    my $model = $hirschmann->model();
 | 
			
		||||
    my $id = $hirschmann->id();
 | 
			
		||||
    my $serial;
 | 
			
		||||
 | 
			
		||||
    return $hirschmann->h_serial_number() if ( $hirschmann->h_serial_number() );
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os_ver {
 | 
			
		||||
    my $hirschmann = shift;
 | 
			
		||||
    my $model = $hirschmann->model();
 | 
			
		||||
    my $id = $hirschmann->id();
 | 
			
		||||
 | 
			
		||||
    my $os_version = $hirschmann->os_version();
 | 
			
		||||
    if ( $os_version =~ m/(SW:\sL2.-\d{1,2}\.\d\.\d{2})/ ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $id unless defined $os_version;
 | 
			
		||||
 | 
			
		||||
    return $os_version;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    return 'Hirschmann';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $hmodel = shift;
 | 
			
		||||
    my $id    = $hmodel->id();
 | 
			
		||||
 | 
			
		||||
    my $model = &SNMP::translateObj($id) || $id;
 | 
			
		||||
 | 
			
		||||
    # model return by snmp is rs30 also if its a rs40
 | 
			
		||||
    if (defined $model && $model !~ /rs30/) {
 | 
			
		||||
        return uc $model;
 | 
			
		||||
    } else {
 | 
			
		||||
        return 'RS40-30';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub mac {
 | 
			
		||||
    my $hirschmann = shift;
 | 
			
		||||
    my $i_descr    = $hirschmann->i_description();
 | 
			
		||||
    my $i_mac      = $hirschmann->i_mac();
 | 
			
		||||
 | 
			
		||||
    # Return Interface MAC addresse of the switch (on the CPU pseudo interface)
 | 
			
		||||
    foreach my $entry ( sort keys %$i_descr ) {
 | 
			
		||||
        my $descr = $i_descr->{$entry};
 | 
			
		||||
        if ($descr =~ m/(^CPU.)/) {
 | 
			
		||||
            my $sn = $i_mac->{$entry};
 | 
			
		||||
#           next unless $sn;
 | 
			
		||||
            return $sn;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer2::Hirschamnn - SNMP Interface to L2 Hirschmann Switches
 | 
			
		||||
 | 
			
		||||
=head1 AUTHOR
 | 
			
		||||
 | 
			
		||||
Christophe COMTE
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
 # Let SNMP::Info determine the correct subclass for you.
 | 
			
		||||
 my $router = new SNMP::Info(
 | 
			
		||||
                          AutoSpecify => 1,
 | 
			
		||||
                          Debug       => 1,
 | 
			
		||||
                          DestHost    => 'myrouter',
 | 
			
		||||
                          Community   => 'public',
 | 
			
		||||
                          Version     => 2
 | 
			
		||||
                        )
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
 my $class      = $router->class();
 | 
			
		||||
 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Subclass for Hirschmann L2 devices
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<>
 | 
			
		||||
 | 
			
		||||
=item Inherited Classes' MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=head2 Overrides
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $device->vendor()
 | 
			
		||||
 | 
			
		||||
Returns 'hirschmann'
 | 
			
		||||
 | 
			
		||||
=item $device->os()
 | 
			
		||||
 | 
			
		||||
Returns 'hirschmann'
 | 
			
		||||
 | 
			
		||||
=item $device->os_ver()
 | 
			
		||||
 | 
			
		||||
Return os version
 | 
			
		||||
 | 
			
		||||
=item $device->mac()
 | 
			
		||||
 | 
			
		||||
Return Interface MAC addresse of the switch (on the CPU pseudo interface).
 | 
			
		||||
 | 
			
		||||
=item $device->model()
 | 
			
		||||
 | 
			
		||||
Returns device model extracted from description
 | 
			
		||||
 | 
			
		||||
=item $device->serial()
 | 
			
		||||
 | 
			
		||||
Returns serial number
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE METHODS
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer2
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
 | 
			
		||||
@@ -37,7 +37,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $AUTOLOAD);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ use SNMP::Info::Airespace;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $AUTOLOAD, $INIT, $DEBUG);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS, %SNMP::Info::IEEE802dot11::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
@@ -53,9 +53,9 @@ $VERSION = '3.70';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
    'os_ver' => 'ntwsVersionString',
 | 
			
		||||
    'serial' => 'ntwsSerialNumber',
 | 
			
		||||
    'mac'    => 'dot1dBaseBridgeAddress',
 | 
			
		||||
    'os_ver'     => 'ntwsVersionString',
 | 
			
		||||
    'nws_serial' => 'ntwsSerialNumber',
 | 
			
		||||
    'mac'        => 'dot1dBaseBridgeAddress',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
@@ -139,6 +139,14 @@ sub vendor {
 | 
			
		||||
    return 'avaya';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub serial {
 | 
			
		||||
    my $nwss2300 = shift;
 | 
			
		||||
    my $ser = $nwss2300->ntwsSerialNumber();
 | 
			
		||||
#    my $ser = $nwss2300->nws_serial();
 | 
			
		||||
 | 
			
		||||
    return $ser;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $nwss2300 = shift;
 | 
			
		||||
    my $id = $nwss2300->id();
 | 
			
		||||
@@ -654,7 +662,7 @@ sub e_serial {
 | 
			
		||||
    my %e_serial;
 | 
			
		||||
 | 
			
		||||
    # Chassis
 | 
			
		||||
    $e_serial{1} = $nwss2300->serial();
 | 
			
		||||
    $e_serial{1} = $nwss2300->serial()  || '';
 | 
			
		||||
 | 
			
		||||
    # APs
 | 
			
		||||
    foreach my $iid ( keys %$ap_serial ) {
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
# This will be filled in with the device's index into the EntPhysicalEntry
 | 
			
		||||
# table by the serial() function.
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %FUNCS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %FUNCS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (%SNMP::Info::Layer2::MIBS, 'SIXNET-MIB' => 'sxid',);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
@@ -53,9 +53,9 @@ $VERSION = '3.70';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer2::GLOBALS,
 | 
			
		||||
    'os_ver' => 'trpzVersionString',
 | 
			
		||||
    'serial' => 'trpzSerialNumber',
 | 
			
		||||
    'mac'    => 'dot1dBaseBridgeAddress',
 | 
			
		||||
    'os_ver'    => 'trpzVersionString',
 | 
			
		||||
    'tr_serial' => 'trpzSerialNumber',
 | 
			
		||||
    'mac'       => 'dot1dBaseBridgeAddress',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
@@ -138,6 +138,14 @@ sub vendor {
 | 
			
		||||
    return 'juniper';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub serial {
 | 
			
		||||
    my $trapeze = shift;
 | 
			
		||||
    my $ser = $trapeze->trpzSerialNumber();
 | 
			
		||||
#    my $ser = $trapeze->tr_serial();
 | 
			
		||||
 | 
			
		||||
    return $ser;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $trapeze = shift;
 | 
			
		||||
    my $id = $trapeze->id();
 | 
			
		||||
@@ -653,7 +661,7 @@ sub e_serial {
 | 
			
		||||
    my %e_serial;
 | 
			
		||||
 | 
			
		||||
    # Chassis
 | 
			
		||||
    $e_serial{1} = $trapeze->serial();
 | 
			
		||||
    $e_serial{1} = $trapeze->serial() || '';
 | 
			
		||||
 | 
			
		||||
    # APs
 | 
			
		||||
    foreach my $iid ( keys %$ap_serial ) {
 | 
			
		||||
 
 | 
			
		||||
@@ -43,7 +43,7 @@ use SNMP::Info::Layer3;  # only used in sub mac()
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS,
 | 
			
		||||
@@ -199,6 +199,9 @@ sub model {
 | 
			
		||||
        }if($ethCount eq 8){
 | 
			
		||||
            ## Could be ER-8 Pro, ER-8, or EP-R8
 | 
			
		||||
            return "EdgeRouter 8-Port"
 | 
			
		||||
        }if($ethCount eq 12){
 | 
			
		||||
            ## ER-12
 | 
			
		||||
            return "EdgeRouter 12-Port"
 | 
			
		||||
        }elsif($ethCount eq 5 and $cpuCount eq 4){
 | 
			
		||||
            ## Could be ER-X or ER-X-SFP
 | 
			
		||||
            return "EdgeRouter X 5-Port"
 | 
			
		||||
@@ -230,13 +233,14 @@ sub serial {
 | 
			
		||||
sub mac {
 | 
			
		||||
    my $ubnt = shift;
 | 
			
		||||
    my $ifDescs = $ubnt->ifDescr;
 | 
			
		||||
    my $erModel = $ubnt->model;
 | 
			
		||||
 | 
			
		||||
    foreach my $iid ( keys %$ifDescs ) {
 | 
			
		||||
        my $ifDesc = $ifDescs->{$iid};
 | 
			
		||||
        next unless defined $ifDesc;
 | 
			
		||||
        ## CPU Interface will have the primary MAC for EdgeSwitch
 | 
			
		||||
        ## eth0 will have primary MAC for linux-based UBNT devices
 | 
			
		||||
        if($ifDesc =~ /CPU/ or $ifDesc eq 'eth0'){
 | 
			
		||||
        ## eth0 will have primary MAC for linux-based UBNT devices, except ER-12 which is eth11
 | 
			
		||||
        if($ifDesc =~ /CPU/ or ($ifDesc eq 'eth0' and !($erModel =~ /EdgeRouter 12/)) or ($ifDesc eq 'eth11' and ($erModel =~ /EdgeRouter 12/))){
 | 
			
		||||
            my $mac = $ubnt->ifPhysAddress->{$iid};
 | 
			
		||||
 | 
			
		||||
            # syntax stolen from sub munge_mac in SNMP::Info
 | 
			
		||||
@@ -250,11 +254,11 @@ sub mac {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub interfaces {
 | 
			
		||||
    my $netgear = shift;
 | 
			
		||||
    my $ubnt = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $interfaces = $netgear->i_index($partial)       || {};
 | 
			
		||||
    my $i_descr    = $netgear->i_description($partial) || {};
 | 
			
		||||
    my $interfaces = $ubnt->i_index($partial)       || {};
 | 
			
		||||
    my $i_descr    = $ubnt->i_description($partial) || {};
 | 
			
		||||
    my $return = {};
 | 
			
		||||
 | 
			
		||||
    foreach my $iid ( keys %$i_descr ) {
 | 
			
		||||
@@ -368,11 +372,11 @@ Bridge MAC address.
 | 
			
		||||
 | 
			
		||||
=item $ubnt->os()
 | 
			
		||||
 | 
			
		||||
Returns 'Ubiquiti Networks, Inc.'
 | 
			
		||||
Returns C<AirOS>, C<UniFi> or C<EdgeOS> depending on model.
 | 
			
		||||
 | 
			
		||||
=item $ubnt->os_ver()
 | 
			
		||||
 | 
			
		||||
Returns the software version extracted from C<dot11manufacturerProductVersion>, with failback to description splitting for EdgeMax devices
 | 
			
		||||
Returns the software version extracted from C<dot11manufacturerProductVersion>, with fallback to description splitting for EdgeMax devices
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
@@ -393,11 +397,11 @@ to a hash.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $ubiquiti->interfaces()
 | 
			
		||||
=item $ubnt->interfaces()
 | 
			
		||||
 | 
			
		||||
Uses the i_name() field.
 | 
			
		||||
 | 
			
		||||
=item $ubiquiti->i_ignore()
 | 
			
		||||
=item $ubnt->i_ignore()
 | 
			
		||||
 | 
			
		||||
Ignores interfaces with "CPU Interface" in them.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
# Set for No CDP
 | 
			
		||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
 | 
			
		||||
 
 | 
			
		||||
@@ -54,7 +54,7 @@ use SNMP::Info::DocsisHE;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %FUNCS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MIBS,
 | 
			
		||||
@@ -277,6 +277,30 @@ sub model {
 | 
			
		||||
    return $model;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_subinterfaces {
 | 
			
		||||
  my $dev = shift;
 | 
			
		||||
  my $partial = shift;
 | 
			
		||||
 | 
			
		||||
  my $ifstack = $dev->i_stack_status() || {};
 | 
			
		||||
  # TODO: if we want to do partial, we need to use inverse status
 | 
			
		||||
  my $iftype = $dev->i_type() || {};
 | 
			
		||||
 | 
			
		||||
  my $ret = $dev->SUPER::i_subinterfaces() || {};
 | 
			
		||||
 | 
			
		||||
  foreach my $idx ( keys %$ifstack ) {
 | 
			
		||||
      next unless $ifstack->{$idx} eq 'active';
 | 
			
		||||
 | 
			
		||||
      my ( $higher, $lower ) = split /\./, $idx;
 | 
			
		||||
      next if ( $higher == 0 or $lower == 0 );
 | 
			
		||||
 | 
			
		||||
      if ( $iftype->{ $higher } eq 'l2vlan' or $iftype->{ $higher } eq 'l3ipvlan') {
 | 
			
		||||
          push @{ $ret->{ $lower } }, $higher;
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return $ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub i_name {
 | 
			
		||||
    my $l3      = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
@@ -357,8 +381,8 @@ sub interfaces {
 | 
			
		||||
sub vendor {
 | 
			
		||||
    my $l3 = shift;
 | 
			
		||||
 | 
			
		||||
    my $descr = $l3->description();
 | 
			
		||||
    my $id    = $l3->id();
 | 
			
		||||
    my $descr = $l3->description() || '';
 | 
			
		||||
    my $id    = $l3->id() || '';
 | 
			
		||||
 | 
			
		||||
    # .1.3.6.1.4.1.9.1 is the CISCO-PRODUCTS-MIB
 | 
			
		||||
    # .1.3.6.1.4.1.9.9.368.4 is an old tree that Cisco CSSs were numbered from
 | 
			
		||||
@@ -611,6 +635,22 @@ name.
 | 
			
		||||
 | 
			
		||||
Only returns those iids that have a description listed in $l3->i_description()
 | 
			
		||||
 | 
			
		||||
=item $l3->i_subinterfaces()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of
 | 
			
		||||
C<ifIndex>. These are the VLAN subinterfaces (C<l2vlan> type) for the parent
 | 
			
		||||
(C<ethernetCsmacd> type) interface.
 | 
			
		||||
 | 
			
		||||
  Example:
 | 
			
		||||
  my $interfaces = $l3->interfaces();
 | 
			
		||||
  my $i_subs     = $l3->i_subinterfaces();
 | 
			
		||||
 | 
			
		||||
  foreach my $iid (sort keys %$interfaces) {
 | 
			
		||||
    my $port = $interfaces->{$iid};
 | 
			
		||||
    my $subs = join(',', sort(map {$interfaces->{$_}} @{$i_subs->{$iid}}));
 | 
			
		||||
    print "Port: $port has subinterfaces: $subs\n";
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
=item $l3->i_name()
 | 
			
		||||
 | 
			
		||||
Returns reference to hash of iid to human set name.
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %MIBS, %FUNCS, %GLOBALS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,7 @@ use SNMP::Info::LLDP;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %FUNCS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE,
 | 
			
		||||
            $int_include_vpn, $fake_idx, $type_class);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
            %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -46,7 +46,7 @@ use SNMP::Info::Aggregate 'agg_ports_ifstack';
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -128,6 +128,11 @@ sub lldp_if {
 | 
			
		||||
    return $lldp_if;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub set_i_vlan {
 | 
			
		||||
    my ($arista, $vlan, $iid) = @_;
 | 
			
		||||
    return $arista->set_qb_i_vlan($vlan, $iid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub agg_ports { return agg_ports_ifstack(@_) }
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
@@ -258,4 +263,17 @@ See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
 | 
			
		||||
 | 
			
		||||
=head1 SET METHODS
 | 
			
		||||
 | 
			
		||||
These are methods that provide SNMP set functionality for overridden methods
 | 
			
		||||
or provide a simpler interface to complex set operations.  See
 | 
			
		||||
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
 | 
			
		||||
operations.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item set_i_vlan()
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										386
									
								
								lib/SNMP/Info/Layer3/ArubaCX.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										386
									
								
								lib/SNMP/Info/Layer3/ArubaCX.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,386 @@
 | 
			
		||||
# SNMP::Info::Layer3::ArubaCX
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2021 Jeroen van Ingen
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use in source and binary forms, with or without
 | 
			
		||||
# modification, are permitted provided that the following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
#     * Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
#       this list of conditions and the following disclaimer.
 | 
			
		||||
#     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
#       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
#       documentation and/or other materials provided with the distribution.
 | 
			
		||||
#     * Neither the name of the University of California, Santa Cruz nor the
 | 
			
		||||
#       names of its contributors may be used to endorse or promote products
 | 
			
		||||
#       derived from this software without specific prior written permission.
 | 
			
		||||
#
 | 
			
		||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
			
		||||
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
# POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
package SNMP::Info::Layer3::ArubaCX;
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::IEEE802dot3ad 'agg_ports_lag';
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
use SNMP::Info::IEEE802_Bridge;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::ArubaCX::ISA = qw/
 | 
			
		||||
  SNMP::Info::IEEE802dot3ad
 | 
			
		||||
  SNMP::Info::Layer3
 | 
			
		||||
  SNMP::Info::IEEE802_Bridge
 | 
			
		||||
  Exporter
 | 
			
		||||
/;
 | 
			
		||||
@SNMP::Info::Layer3::ArubaCX::EXPORT_OK = qw/
 | 
			
		||||
  agg_ports
 | 
			
		||||
/;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
    %SNMP::Info::IEEE802dot3ad::MIBS,
 | 
			
		||||
    %SNMP::Info::IEEE802_Bridge::MIBS,
 | 
			
		||||
    'ARUBAWIRED-FAN-MIB' => 'arubaWiredFanName',
 | 
			
		||||
    'ARUBAWIRED-VSF-MIB' => 'arubaWiredVsfTrapEnable',
 | 
			
		||||
    'ARUBAWIRED-POE-MIB' => 'arubaWiredPoePethPsePortAveragePower',
 | 
			
		||||
    'ARUBAWIRED-POWERSUPPLY-MIB' => 'arubaWiredPSUName',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer3::GLOBALS,
 | 
			
		||||
    %SNMP::Info::IEEE802_Bridge::GLOBALS,
 | 
			
		||||
    'ps1_type' => 'arubaWiredPSUProductName.1.1',
 | 
			
		||||
    'ps2_type' => 'arubaWiredPSUProductName.1.2',
 | 
			
		||||
    'ps1_status' => 'arubaWiredPSUState.1.1',
 | 
			
		||||
    'ps2_status' => 'arubaWiredPSUState.1.2',
 | 
			
		||||
    'vsf_topology' => 'arubaWiredVsfTopology',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer3::FUNCS,
 | 
			
		||||
    %SNMP::Info::IEEE802dot3ad::FUNCS,
 | 
			
		||||
    %SNMP::Info::IEEE802_Bridge::FUNCS,
 | 
			
		||||
    'peth_port_power' => 'arubaWiredPoePethPsePortAveragePower',
 | 
			
		||||
    'fan_names' => 'arubaWiredFanName',
 | 
			
		||||
    'fan_states' => 'arubaWiredFanState',
 | 
			
		||||
    'psu_names' => 'arubaWiredPSUName',
 | 
			
		||||
    'psu_types' => 'arubaWiredPSUProductName',
 | 
			
		||||
    'psu_states' => 'arubaWiredPSUState',
 | 
			
		||||
    'vsf_prod_names' => 'arubaWiredVsfMemberProductName',
 | 
			
		||||
    'raw_ad_lag_ports' => 'dot3adAggPortListPorts',  # unmunged raw data
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::Layer3::MUNGE,
 | 
			
		||||
    %SNMP::Info::IEEE802dot3ad::MUNGE,
 | 
			
		||||
    %SNMP::Info::IEEE802_Bridge::MUNGE,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub _at_pbb_one {
 | 
			
		||||
    my $in = shift // {};
 | 
			
		||||
    my $ret = {};
 | 
			
		||||
    foreach my $key (keys %$in) {
 | 
			
		||||
        if ($key =~ /^1\.(\d+)$/) {
 | 
			
		||||
            $ret->{$1} = $in->{$key};
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return $ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub fan {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    my $names = $cx->fan_names() || {};
 | 
			
		||||
    my $states = $cx->fan_states() || {};
 | 
			
		||||
    my @ary = ();
 | 
			
		||||
    foreach my $idx (sort keys %$names) {
 | 
			
		||||
        my $name = $names->{$idx} // 'n/a';
 | 
			
		||||
        my $state = $states->{$idx} // 'n/a';
 | 
			
		||||
        push @ary, sprintf("%s: %s", $name, $state);
 | 
			
		||||
    }
 | 
			
		||||
    return join (', ', @ary);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub vendor {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    my $mfg = $cx->entPhysicalMfgName(1) || {};
 | 
			
		||||
    my $vendor = $mfg->{1} || "aruba";
 | 
			
		||||
    return lc($vendor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub stack_info {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    my $vsf_topo = $cx->vsf_topology();
 | 
			
		||||
    if (defined $vsf_topo and $vsf_topo ne 'standalone') {
 | 
			
		||||
        my $member_prod_names = $cx->vsf_prod_names() || {};
 | 
			
		||||
        my $num_members = scalar keys %$member_prod_names;
 | 
			
		||||
        my $fullname = (values %$member_prod_names)[0];
 | 
			
		||||
        my $modelname = '';
 | 
			
		||||
        if ($fullname =~ /^(\S+)/) {
 | 
			
		||||
            $modelname = $1;
 | 
			
		||||
        }
 | 
			
		||||
        return sprintf("%s (stack of %d)", $modelname, $num_members);
 | 
			
		||||
    } else {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    my $model = $cx->entPhysicalModelName(1) || {};
 | 
			
		||||
    my $id = $cx->id();
 | 
			
		||||
    my $translated_id = &SNMP::translateObj($id) || $id;
 | 
			
		||||
    $translated_id =~ s/arubaWiredSwitch//i;
 | 
			
		||||
    return $cx->stack_info() || $model->{1} || $translated_id;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os {
 | 
			
		||||
    return "arubaos-cx";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os_ver {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    my $ver_release = $cx->entPhysicalSoftwareRev(1) || {};
 | 
			
		||||
    return $ver_release->{1};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# agg_ports should return a hash with
 | 
			
		||||
# ifindex of member -> ifindex of aggregation
 | 
			
		||||
#
 | 
			
		||||
# arabuaos-cx has a broken implementation of 
 | 
			
		||||
# dot3adAggPortListPorts / 1.2.840.10006.300.43.1.1.2.1.1
 | 
			
		||||
# it return a comma seperated String with interface names
 | 
			
		||||
# (rfc states a PortList / bitmask of member ports)
 | 
			
		||||
#
 | 
			
		||||
# fetch value, split at comma, reverse search the interface hash
 | 
			
		||||
# for the interface index
 | 
			
		||||
 | 
			
		||||
sub agg_ports {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    my $ret = {};
 | 
			
		||||
    my $ports = $cx->raw_ad_lag_ports();
 | 
			
		||||
    my $interfaces = $cx->interfaces();
 | 
			
		||||
    foreach my $m ( keys %$ports ) {
 | 
			
		||||
        my $idx = $m;
 | 
			
		||||
        my $portlist = $ports->{$m};
 | 
			
		||||
        next unless $portlist;
 | 
			
		||||
 | 
			
		||||
        foreach my $ifname ( split(/,/, $portlist) ) {
 | 
			
		||||
            foreach my $ifindex ( keys %$interfaces) {
 | 
			
		||||
                if ($interfaces->{$ifindex} eq $ifname) {
 | 
			
		||||
                    $ret->{$ifindex} = $idx;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return $ret;    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Overrides for VLAN & forwarding table methods
 | 
			
		||||
sub v_name {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    return _at_pbb_one($cx->iqb_v_name()) || $cx->SUPER::v_name();
 | 
			
		||||
}
 | 
			
		||||
sub qb_i_vlan {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    return _at_pbb_one($cx->iqb_i_vlan()) || $cx->SUPER::qb_i_vlan();
 | 
			
		||||
}
 | 
			
		||||
sub i_vlan_type {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    return _at_pbb_one($cx->iqb_i_vlan_type()) || $cx->SUPER::qb_i_vlan_type();
 | 
			
		||||
}
 | 
			
		||||
sub qb_v_egress {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    return $cx->iqb_v_egress() || $cx->SUPER::qb_v_egress();
 | 
			
		||||
}
 | 
			
		||||
sub qb_cv_egress {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    return $cx->iqb_cv_egress() || $cx->SUPER::qb_cv_egress();
 | 
			
		||||
}
 | 
			
		||||
sub qb_v_untagged {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    return $cx->iqb_v_untagged() || $cx->SUPER::qb_v_untagged();
 | 
			
		||||
}
 | 
			
		||||
sub qb_cv_untagged {
 | 
			
		||||
    my $cx = shift;
 | 
			
		||||
    return $cx->iqb_cv_untagged() || $cx->SUPER::qb_cv_untagged();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer3::ArubaCX - SNMP Interface to L3 Devices running ArubaOS-CX
 | 
			
		||||
 | 
			
		||||
=head1 AUTHORS
 | 
			
		||||
 | 
			
		||||
Jeroen van Ingen
 | 
			
		||||
 | 
			
		||||
=head1 SYNOPSIS
 | 
			
		||||
 | 
			
		||||
 # Let SNMP::Info determine the correct subclass for you.
 | 
			
		||||
 my $cx = new SNMP::Info(
 | 
			
		||||
                          AutoSpecify => 1,
 | 
			
		||||
                          Debug       => 1,
 | 
			
		||||
                          DestHost    => 'myrouter',
 | 
			
		||||
                          Community   => 'public',
 | 
			
		||||
                          Version     => 2
 | 
			
		||||
                        )
 | 
			
		||||
    or die "Can't connect to DestHost.\n";
 | 
			
		||||
 | 
			
		||||
 my $class      = $cx->class();
 | 
			
		||||
 print "SNMP::Info determined this device to fall under subclass : $class\n";
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Subclass for devices running ArubaOS-CX
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::IEEE802_Bridge
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::IEEE802dot3ad
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Required MIBs
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item F<ARUBAWIRED-FAN-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<ARUBAWIRED-VSF-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<ARUBAWIRED-POE-MIB>
 | 
			
		||||
 | 
			
		||||
=item F<ARUBAWIRED-POWERSUPPLY-MIB>
 | 
			
		||||
 | 
			
		||||
=item Inherited Classes' MIBs
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::Layer3> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::IEEE802_Bridge> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
See L<SNMP::Info::IEEE802dot3ad> for its own MIB requirements.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head1 GLOBALS
 | 
			
		||||
 | 
			
		||||
These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $cx->stack_info()
 | 
			
		||||
 | 
			
		||||
If the device supports VSF stacking and is not in standalone mode, returns
 | 
			
		||||
a string describing the switch family and the number of stack members.
 | 
			
		||||
Example return value: '6300M (stack of 2)'. Will return undef when VSF is not
 | 
			
		||||
supported or when the device is VSF standalone.
 | 
			
		||||
 | 
			
		||||
=item $cx->model()
 | 
			
		||||
 | 
			
		||||
Returns L<stack_info()> if defined, otherwise will fall back to returning the
 | 
			
		||||
model from C<entPhysicalModelName.1>; if that's also not set, will use
 | 
			
		||||
C<sysObjectID> as a last resort, stripping 'arubaWiredSwitch' from the value.
 | 
			
		||||
 | 
			
		||||
=item $cx->vendor()
 | 
			
		||||
 | 
			
		||||
Returns (lowercased) value for C<entPhysicalMfgName.1>, or 'aruba'.
 | 
			
		||||
 | 
			
		||||
=item $cx->os()
 | 
			
		||||
 | 
			
		||||
Returns 'arubaos-cx'.
 | 
			
		||||
 | 
			
		||||
=item $cx->os_ver()
 | 
			
		||||
 | 
			
		||||
Returns the software version. Either C<entPhysicalSoftwareRev.1> or
 | 
			
		||||
extracted from C<sysDescr>.
 | 
			
		||||
 | 
			
		||||
=item $cx->fan()
 | 
			
		||||
 | 
			
		||||
Returns a string with status information for all fans listed in
 | 
			
		||||
C<ARUBAWIRED-FAN-MIB>.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::IEEE802_Bridge
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::IEEE802_Bridge> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Globals imported from SNMP::Info::IEEE802dot3ad
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
 | 
			
		||||
 | 
			
		||||
=head1 TABLE ENTRIES
 | 
			
		||||
 | 
			
		||||
These are methods that return tables of information in the form of a reference
 | 
			
		||||
to a hash.
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $cx->peth_port_power()
 | 
			
		||||
 | 
			
		||||
Power supplied by PoE ports, in milliwatts.
 | 
			
		||||
(C<arubaWiredPoePethPsePortAveragePower>)
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Overrides
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item C<agg_ports>
 | 
			
		||||
 | 
			
		||||
Returns a HASH reference mapping from slave to master port for each member of
 | 
			
		||||
a port bundle on the device. Keys are ifIndex of the slave ports, Values are
 | 
			
		||||
ifIndex of the corresponding master ports.
 | 
			
		||||
 | 
			
		||||
=item C<v_name>
 | 
			
		||||
=item C<qb_i_vlan>
 | 
			
		||||
=item C<i_vlan_type>
 | 
			
		||||
=item C<qb_v_egress>
 | 
			
		||||
=item C<qb_cv_egress>
 | 
			
		||||
=item C<qb_v_untagged>
 | 
			
		||||
=item C<qb_cv_untagged>
 | 
			
		||||
All overridden to return the VLAN data structures that we'd expect for a
 | 
			
		||||
device that implements C<Q-BRIDGE-MIB>, but with data from
 | 
			
		||||
L<SNMP::Info::IEEE8021_Bridge> at PBB 1.
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::Layer3
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::Layer3> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::IEEE802_Bridge
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::IEEE802_Bridge> for details.
 | 
			
		||||
 | 
			
		||||
=head2 Table Methods imported from SNMP::Info::IEEE802dot3ad
 | 
			
		||||
 | 
			
		||||
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
our ($VERSION, %GLOBALS, %FUNCS, %MIBS, %MUNGE, %MODEL_MAP,
 | 
			
		||||
    %MODID_MAP, %PROCID_MAP);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer2::MIBS, %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -46,7 +46,7 @@ our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::C3550::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
# NOTE: Order creates precedence
 | 
			
		||||
#       Example: v_name exists in Bridge.pm and CiscoVTP.pm
 | 
			
		||||
 
 | 
			
		||||
@@ -43,7 +43,7 @@ use SNMP::Info::MAU;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::MAU::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,7 @@ our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::C6500::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
# NOTE: Order creates precedence
 | 
			
		||||
#       Example: v_name exists in Bridge.pm and CiscoVTP.pm
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -182,7 +182,21 @@ sub ps2_status {
 | 
			
		||||
    my $ps_status = $ciena->ps_status;
 | 
			
		||||
    return $ps_status->{'2'} if defined $ps_status->{'2'};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
 | 
			
		||||
__END__
 | 
			
		||||
 | 
			
		||||
=head1 NAME
 | 
			
		||||
 | 
			
		||||
SNMP::Info::Layer3::Ciena - SNMP Interface to Ciena Devices
 | 
			
		||||
 | 
			
		||||
=head1 AUTHORS
 | 
			
		||||
 | 
			
		||||
pyro3d
 | 
			
		||||
 | 
			
		||||
=head1 DESCRIPTION
 | 
			
		||||
 | 
			
		||||
Subclass for Ciena Devices running SAOS
 | 
			
		||||
 | 
			
		||||
=head2 Inherited Classes
 | 
			
		||||
@@ -323,3 +337,5 @@ Returns reference to hash of fans and their types (ex. fixed, modular, etc.)
 | 
			
		||||
Returns reference to hash of fans and their status
 | 
			
		||||
 | 
			
		||||
=back
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,7 @@ package SNMP::Info::Layer3::Cisco;
 | 
			
		||||
use strict;
 | 
			
		||||
use warnings;
 | 
			
		||||
use Exporter;
 | 
			
		||||
use SNMP::Info::CiscoBGP;
 | 
			
		||||
use SNMP::Info::CiscoVTP;
 | 
			
		||||
use SNMP::Info::CDP;
 | 
			
		||||
use SNMP::Info::CiscoStats;
 | 
			
		||||
@@ -42,7 +43,9 @@ use SNMP::Info::CiscoPower;
 | 
			
		||||
use SNMP::Info::CiscoStpExtensions;
 | 
			
		||||
use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::Cisco::ISA = qw/SNMP::Info::CiscoVTP
 | 
			
		||||
@SNMP::Info::Layer3::Cisco::ISA = qw/
 | 
			
		||||
    SNMP::Info::CiscoBGP
 | 
			
		||||
    SNMP::Info::CiscoVTP
 | 
			
		||||
    SNMP::Info::CDP
 | 
			
		||||
    SNMP::Info::CiscoStats SNMP::Info::CiscoRTT
 | 
			
		||||
    SNMP::Info::CiscoQOS SNMP::Info::CiscoConfig
 | 
			
		||||
@@ -53,10 +56,11 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
    %SNMP::Info::CiscoBGP::MIBS,
 | 
			
		||||
    %SNMP::Info::CiscoStpExtensions::MIBS,
 | 
			
		||||
    %SNMP::Info::CiscoPower::MIBS,
 | 
			
		||||
    %SNMP::Info::CiscoConfig::MIBS,
 | 
			
		||||
@@ -70,6 +74,7 @@ $VERSION = '3.70';
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer3::GLOBALS,
 | 
			
		||||
    %SNMP::Info::CiscoBGP::GLOBALS,
 | 
			
		||||
    %SNMP::Info::CiscoStpExtensions::GLOBALS,
 | 
			
		||||
    %SNMP::Info::CiscoPower::GLOBALS,
 | 
			
		||||
    %SNMP::Info::CiscoConfig::GLOBALS,
 | 
			
		||||
@@ -83,6 +88,7 @@ $VERSION = '3.70';
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer3::FUNCS,
 | 
			
		||||
    %SNMP::Info::CiscoBGP::FUNCS,
 | 
			
		||||
    %SNMP::Info::CiscoStpExtensions::FUNCS,
 | 
			
		||||
    %SNMP::Info::CiscoPower::FUNCS,
 | 
			
		||||
    %SNMP::Info::CiscoConfig::FUNCS,
 | 
			
		||||
@@ -98,13 +104,21 @@ $VERSION = '3.70';
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::Layer3::MUNGE,     %SNMP::Info::CiscoStpExtensions::MUNGE,
 | 
			
		||||
    %SNMP::Info::CiscoPower::MUNGE, %SNMP::Info::CiscoConfig::MUNGE,
 | 
			
		||||
    %SNMP::Info::CiscoQOS::MUNGE,   %SNMP::Info::CiscoRTT::MUNGE,
 | 
			
		||||
    %SNMP::Info::CiscoStats::MUNGE, %SNMP::Info::CDP::MUNGE,
 | 
			
		||||
    %SNMP::Info::Layer3::MUNGE,
 | 
			
		||||
    %SNMP::Info::CiscoBGP::MUNGE,
 | 
			
		||||
    %SNMP::Info::CiscoStpExtensions::MUNGE,
 | 
			
		||||
    %SNMP::Info::CiscoPower::MUNGE,
 | 
			
		||||
    %SNMP::Info::CiscoConfig::MUNGE,
 | 
			
		||||
    %SNMP::Info::CiscoQOS::MUNGE,
 | 
			
		||||
    %SNMP::Info::CiscoRTT::MUNGE,
 | 
			
		||||
    %SNMP::Info::CiscoStats::MUNGE,
 | 
			
		||||
    %SNMP::Info::CDP::MUNGE,
 | 
			
		||||
    %SNMP::Info::CiscoVTP::MUNGE,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# the i_vlan in SUPER is just fine; this exists to catch any dotted vlan
 | 
			
		||||
# subinterfaces not caught by CiscoVTP
 | 
			
		||||
sub i_vlan {
 | 
			
		||||
    my $cisco   = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
@@ -115,18 +129,17 @@ sub i_vlan {
 | 
			
		||||
 | 
			
		||||
    foreach my $idx ( keys %$i_descr ) {
 | 
			
		||||
        next unless $i_type->{$idx};
 | 
			
		||||
        if (   $i_type->{$idx} eq 'l2vlan'
 | 
			
		||||
            || $i_type->{$idx} eq '135' && !defined $i_vlan->{$idx} )
 | 
			
		||||
        {
 | 
			
		||||
            # Not sure where this regex came from, anchored at end?
 | 
			
		||||
            if ( $i_descr->{$idx} =~ /\.(\d+)$/ ) {
 | 
			
		||||
                $i_vlan->{$idx} = $1;
 | 
			
		||||
            }
 | 
			
		||||
        next unless (($i_type->{$idx} eq 'l2vlan' or $i_type->{$idx} eq '135')
 | 
			
		||||
                      and !defined $i_vlan->{$idx});
 | 
			
		||||
 | 
			
		||||
            # This matches 101 in 'Ethernet0.101-802.1Q vLAN subif'
 | 
			
		||||
            elsif ( $i_descr->{$idx} =~ /\.(\d+)-/ ) {
 | 
			
		||||
                $i_vlan->{$idx} = $1;
 | 
			
		||||
            }
 | 
			
		||||
        # Not sure where this regex came from, anchored at end?
 | 
			
		||||
        if ( $i_descr->{$idx} =~ /\.(\d+)$/ ) {
 | 
			
		||||
            $i_vlan->{$idx} = $1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        # This matches 101 in 'Ethernet0.101-802.1Q vLAN subif'
 | 
			
		||||
        elsif ( $i_descr->{$idx} =~ /\.(\d+)-/ ) {
 | 
			
		||||
            $i_vlan->{$idx} = $1;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return $i_vlan;
 | 
			
		||||
@@ -218,7 +231,7 @@ for other device specific L3 Cisco classes.
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::CiscoConfig
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::Power
 | 
			
		||||
=item SNMP::Info::CiscoPower
 | 
			
		||||
 | 
			
		||||
=item SNMP::Info::CiscoStpExtensions
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoStats::MIBS, );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = ( %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoStats::MIBS, );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -35,6 +35,7 @@ use Exporter;
 | 
			
		||||
use SNMP::Info::CiscoAgg;
 | 
			
		||||
use SNMP::Info::CiscoPortSecurity;
 | 
			
		||||
use SNMP::Info::Layer3::Cisco;
 | 
			
		||||
use SNMP::Info::PortAccessEntity;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
@@ -42,35 +43,40 @@ our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
    SNMP::Info::CiscoAgg
 | 
			
		||||
    SNMP::Info::CiscoPortSecurity
 | 
			
		||||
    SNMP::Info::Layer3::Cisco
 | 
			
		||||
    SNMP::Info::PortAccessEntity
 | 
			
		||||
    Exporter
 | 
			
		||||
/;
 | 
			
		||||
 | 
			
		||||
@SNMP::Info::Layer3::CiscoSwitch::EXPORT_OK = qw//;
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::Cisco::MIBS,
 | 
			
		||||
    %SNMP::Info::CiscoPortSecurity::MIBS,
 | 
			
		||||
    %SNMP::Info::CiscoAgg::MIBS,
 | 
			
		||||
    %SNMP::Info::PortAccessEntity::MIBS,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer3::Cisco::GLOBALS,
 | 
			
		||||
    %SNMP::Info::CiscoPortSecurity::GLOBALS,
 | 
			
		||||
    %SNMP::Info::CiscoAgg::GLOBALS,
 | 
			
		||||
    %SNMP::Info::PortAccessEntity::GLOBALS,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
    %SNMP::Info::Layer3::Cisco::FUNCS,
 | 
			
		||||
    %SNMP::Info::CiscoPortSecurity::FUNCS,
 | 
			
		||||
    %SNMP::Info::CiscoAgg::FUNCS,
 | 
			
		||||
    %SNMP::Info::PortAccessEntity::FUNCS,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
    %SNMP::Info::Layer3::Cisco::MUNGE,
 | 
			
		||||
    %SNMP::Info::CiscoPortSecurity::MUNGE,
 | 
			
		||||
    %SNMP::Info::CiscoAgg::MUNGE,
 | 
			
		||||
    %SNMP::Info::PortAccessEntity::MUNGE,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub cisco_comm_indexing { return 1; }
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %FUNCS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@ use SNMP::Info::IEEE802dot3ad 'agg_ports_lag';
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -80,7 +80,8 @@ sub os_ver {
 | 
			
		||||
    my $descr   = $netsnmp->description();
 | 
			
		||||
 | 
			
		||||
# STRING: "Cumulus Linux version 3.5.1 running on innotek GmbH VirtualBox"
 | 
			
		||||
    return $1 if ( defined ($descr) && $descr =~ /^Cumulus Linux.+(\d+\.\d+\.\d+)\s/ );
 | 
			
		||||
# STRING: "Cumulus-Linux 4.1.1 (Linux Kernel 4.19.94-1+cl4u3)"
 | 
			
		||||
    return $1 if ( defined ($descr) && $descr =~ /^Cumulus(?: |-)Linux.+(\d+\.\d+\.\d+)\s/ );
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %FUNCS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -74,6 +74,18 @@ $VERSION = '3.70';
 | 
			
		||||
 | 
			
		||||
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, );
 | 
			
		||||
 | 
			
		||||
sub layers {
 | 
			
		||||
    my $dlink = shift;
 | 
			
		||||
 | 
			
		||||
    my $layers = $dlink->SUPER::layers();
 | 
			
		||||
    if ($layers) {
 | 
			
		||||
        substr $layers, 5, 1, "1";
 | 
			
		||||
        substr $layers, 6, 1, "1";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $layers;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub model {
 | 
			
		||||
    my $dlink=shift;
 | 
			
		||||
    my $id = $dlink->id();
 | 
			
		||||
@@ -233,6 +245,10 @@ These are methods that return scalar value from SNMP
 | 
			
		||||
 | 
			
		||||
=over
 | 
			
		||||
 | 
			
		||||
=item $dlink->layers()
 | 
			
		||||
 | 
			
		||||
Makes sure to always report layer 2 and 3.
 | 
			
		||||
 | 
			
		||||
=item $dlink->model()
 | 
			
		||||
 | 
			
		||||
Returns the ID or else description.
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %FUNCS, %MIBS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
@@ -49,12 +49,19 @@ $VERSION = '3.70';
 | 
			
		||||
    'RADLAN-HWENVIROMENT'            => 'rlEnvPhysicalDescription',
 | 
			
		||||
    'Dell-Vendor-MIB'                => 'productIdentificationVersion',
 | 
			
		||||
    'DELL-REF-MIB'                   => 'dell6224Switch',
 | 
			
		||||
 | 
			
		||||
    # For DELL-OS10 devices
 | 
			
		||||
    'DELLEMC-OS10-PRODUCTS-MIB'      => 'os10Products',
 | 
			
		||||
    'DELLEMC-OS10-CHASSIS-MIB'       => 'os10SysObject',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%GLOBALS = (
 | 
			
		||||
    %SNMP::Info::Layer3::GLOBALS,
 | 
			
		||||
    'dell_os_ver'  => 'productIdentificationVersion',
 | 
			
		||||
    'dell_id_name' => 'productIdentificationDisplayName',
 | 
			
		||||
 | 
			
		||||
    # For DELL-OS10
 | 
			
		||||
    'dell_os10_id_name' => 'os10ChassisType',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%FUNCS = (
 | 
			
		||||
@@ -102,6 +109,15 @@ $VERSION = '3.70';
 | 
			
		||||
    # RADLAN-HWENVIROMENT:rlEnvMonFanStatusTable
 | 
			
		||||
    'dell_fan_state' => 'rlEnvMonFanState',
 | 
			
		||||
    'dell_fan_desc'  => 'rlEnvMonFanStatusDescr',
 | 
			
		||||
 | 
			
		||||
    # DELLEMC-OS10-CHASSIS-MIB:os10PowerSupplyTable
 | 
			
		||||
    'dell_os10_pwr_src'   => 'os10PowerSupplyType',
 | 
			
		||||
    'dell_os10_pwr_state' => 'os10PowerSupplyOperStatus',
 | 
			
		||||
   
 | 
			
		||||
    # DELLEMC-OS10-CHASSIS-MIB:os10FanTable
 | 
			
		||||
    'dell_os10_fan_state' => 'os10FanOperStatus',
 | 
			
		||||
    'dell_os10_fan_ent'   => 'os10FanEntity',
 | 
			
		||||
    'dell_os10_fan_slot'  => 'os10FanEntitySlot',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, );
 | 
			
		||||
@@ -112,10 +128,13 @@ sub model {
 | 
			
		||||
    my $dell = shift;
 | 
			
		||||
 | 
			
		||||
    my $name  = $dell->dell_id_name();
 | 
			
		||||
    my $os10_name = $dell->dell_os10_id_name();
 | 
			
		||||
    my $id    = $dell->id();
 | 
			
		||||
 | 
			
		||||
    if ( defined $name and $name =~ m/(\d+)/ ) {
 | 
			
		||||
        return $1;
 | 
			
		||||
    } elsif (defined $os10_name) {
 | 
			
		||||
	return $os10_name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return unless defined $id;
 | 
			
		||||
@@ -163,6 +182,9 @@ sub fan {
 | 
			
		||||
 | 
			
		||||
    my $fan   = $dell->dell_fan_desc()  || {};
 | 
			
		||||
    my $state = $dell->dell_fan_state() || {};
 | 
			
		||||
    my $os10_fan_ent  = $dell->dell_os10_fan_ent() || {};
 | 
			
		||||
    my $os10_fan_slot = $dell->dell_os10_fan_slot() || {}; 
 | 
			
		||||
    my $os10_state    = $dell->dell_os10_fan_state() || {};
 | 
			
		||||
 | 
			
		||||
    if (scalar keys %$fan) {
 | 
			
		||||
        my @messages = ();
 | 
			
		||||
@@ -176,14 +198,25 @@ sub fan {
 | 
			
		||||
            if scalar @messages == 0;
 | 
			
		||||
 | 
			
		||||
        return (join ", ", @messages);
 | 
			
		||||
    } elsif (scalar keys %$os10_fan_ent) {
 | 
			
		||||
        my @messages = ();
 | 
			
		||||
 | 
			
		||||
        foreach my $k (keys %$os10_fan_ent) {
 | 
			
		||||
            next if $os10_state->{$k} and $os10_state->{$k} eq 'up';
 | 
			
		||||
            push @messages, "$os10_fan_ent->{$k}_$os10_fan_slot->{$k}: $os10_state->{$k}";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        push @messages, ((scalar keys %$os10_fan_ent). " fans OK");
 | 
			
		||||
 | 
			
		||||
        return (join ", ", @messages);
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub ps1_type {
 | 
			
		||||
    my $dell = shift;
 | 
			
		||||
 | 
			
		||||
    my $src  = $dell->dell_pwr_src()  || {};
 | 
			
		||||
    my $src  = $dell->dell_pwr_src() || $dell->dell_os10_pwr_src() || {};
 | 
			
		||||
 | 
			
		||||
    foreach my $k (sort keys %$src) {
 | 
			
		||||
        next unless $src->{$k};
 | 
			
		||||
@@ -195,7 +228,7 @@ sub ps1_type {
 | 
			
		||||
sub ps2_type {
 | 
			
		||||
    my $dell = shift;
 | 
			
		||||
 | 
			
		||||
    my $src  = $dell->dell_pwr_src()  || {};
 | 
			
		||||
    my $src  = $dell->dell_pwr_src() || $dell->dell_os10_pwr_src() || {};
 | 
			
		||||
 | 
			
		||||
    my $i = 0;
 | 
			
		||||
    foreach my $k (sort keys %$src) {
 | 
			
		||||
@@ -209,7 +242,7 @@ sub ps2_type {
 | 
			
		||||
sub ps1_status {
 | 
			
		||||
    my $dell = shift;
 | 
			
		||||
 | 
			
		||||
    my $status  = $dell->dell_pwr_state()  || {};
 | 
			
		||||
    my $status  = $dell->dell_pwr_state() || $dell->dell_os10_pwr_state() || {};
 | 
			
		||||
 | 
			
		||||
    foreach my $k (sort keys %$status) {
 | 
			
		||||
        next unless $status->{$k};
 | 
			
		||||
@@ -221,7 +254,7 @@ sub ps1_status {
 | 
			
		||||
sub ps2_status {
 | 
			
		||||
    my $dell = shift;
 | 
			
		||||
 | 
			
		||||
    my $status  = $dell->dell_pwr_state()  || {};
 | 
			
		||||
    my $status  = $dell->dell_pwr_state() || $dell->dell_os10_pwr_state() || {};
 | 
			
		||||
 | 
			
		||||
    my $i = 0;
 | 
			
		||||
    foreach my $k (sort keys %$status) {
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer3;
 | 
			
		||||
 | 
			
		||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
 | 
			
		||||
 | 
			
		||||
$VERSION = '3.70';
 | 
			
		||||
$VERSION = '3.95';
 | 
			
		||||
 | 
			
		||||
%MIBS = (
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user