123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- <?php
- /*
- Copyright (c) 2012, Open Source Solutions Limited, Dublin, Ireland
- All rights reserved.
- Contact: Barry O'Donovan - barry (at) opensolutions (dot) ie
- http://www.opensolutions.ie/
- This file is part of the OSS_SNMP package.
- 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 Open Source Solutions Limited 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.
- */
- namespace OSS_SNMP\MIBS\Cisco;
- /**
- * A class for performing SNMP V2 queries on Cisco devices
- *
- * @copyright Copyright (c) 2012, Open Source Solutions Limited, Dublin, Ireland
- * @author Barry O'Donovan <barry@opensolutions.ie>
- */
- class RSTP extends \OSS_SNMP\MIBS\Cisco
- {
- const OID_STP_X_RSTP_PORT_ROLE = '.1.3.6.1.4.1.9.9.82.1.12.2.1.3'; // add '.$VID'; integer
- /**
- * Constant for possible value of STP extensions RSTP Port Role
- * @see rstpPortRole()
- */
- const STP_X_RSTP_PORT_ROLE_DISABLED = 1;
- /**
- * Constant for possible value of STP extensions RSTP Port Role
- * @see rstpPortRole()
- */
- const STP_X_RSTP_PORT_ROLE_ROOT = 2;
- /**
- * Constant for possible value of STP extensions RSTP Port Role
- * @see rstpPortRole()
- */
- const STP_X_RSTP_PORT_ROLE_DESIGNATED = 3;
- /**
- * Constant for possible value of STP extensions RSTP Port Role
- * @see rstpPortRole()
- */
- const STP_X_RSTP_PORT_ROLE_ALTERNATE = 4;
- /**
- * Constant for possible value of STP extensions RSTP Port Role
- * @see rstpPortRole()
- */
- const STP_X_RSTP_PORT_ROLE_BACKUP = 5;
- /**
- * Constant for possible value of STP extensions RSTP Port Role
- * @see rstpPortRole()
- */
- const STP_X_RSTP_PORT_ROLE_BOUNDARY = 6;
- /**
- * Constant for possible value of STP extensions RSTP Port Role
- * @see rstpPortRole()
- */
- const STP_X_RSTP_PORT_ROLE_MASTER = 6;
- /**
- * Text representation of STP extensions RSTP Port Roles
- *
- * @see rstpPortRole()
- * @var array Text representations of STP extensions RSTP Port Role.
- */
- public static $STP_X_RSTP_PORT_ROLES = array(
- self::STP_X_RSTP_PORT_ROLE_DISABLED => 'disabled',
- self::STP_X_RSTP_PORT_ROLE_ROOT => 'root',
- self::STP_X_RSTP_PORT_ROLE_DESIGNATED => 'designated',
- self::STP_X_RSTP_PORT_ROLE_ALTERNATE => 'alternate',
- self::STP_X_RSTP_PORT_ROLE_BACKUP => 'backUp',
- self::STP_X_RSTP_PORT_ROLE_BOUNDARY => 'boundary',
- self::STP_X_RSTP_PORT_ROLE_MASTER => 'master'
- );
- /**
- * Array of port states that indicate traffic is/can pass
- * @var Array of port states that indicate traffic is/can pass
- */
- public static $STP_X_RSTP_PASSING_PORT_ROLES = array(
- self::STP_X_RSTP_PORT_ROLE_ROOT => 'root',
- self::STP_X_RSTP_PORT_ROLE_DESIGNATED => 'designated'
- );
- /**
- * Get the device's RSTP port roles (by given vlan id)
- *
- * Only ports participating in RSTP for the given VLAN id are returned.
- *
- * This function will also convert STP port IDs to the device proper port IDs.
- * E.g. sample output:
- *
- * Array
- * (
- * [10101] => 3
- * [10103] => 3
- * [10105] => 3
- * [5048] => 2
- * )
- *
- *
- * @see $STP_X_RSTP_PORT_ROLES
- * @see STP_X_RSTP_PORT_ROLE_ROOT and others
- *
- * @param int $vid The RSTP VLAN ID to query port roles for
- * @param boolean $translate If true, return the string representation via self::$STP_X_RSTP_PORT_ROLES
- * @return array The device's RSTP port roles (by given vlan id)
- */
- public function rstpPortRole( $vid, $translate = false )
- {
- $roles = $this->getSNMP()->walk1d( self::OID_STP_X_RSTP_PORT_ROLE . ".{$vid}" );
- // convert STP port IDs to switch port IDs
- $croles = array();
- foreach( $roles as $k => $v )
- {
- $base = $this->getSNMP()->useBridge()->basePortIfIndexes()[$k];
- if( $base )
- $croles[ $base ] = $v;
- else
- {
- // and and get port ID from MIBS\Entity
- // TODO Find a better way to translate these?
- $croles[ $this->getSNMP()->useEntity()->relPosToAlias()[$k] ] = $v;
- }
- }
- if( !$translate )
- return $croles;
- return $this->getSNMP()->translate( $croles, self::$STP_X_RSTP_PORT_ROLES );
- }
- }
|