forked from librenms/librenms
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added support for VLANs and FDB in AOS (librenms#11145)
* Draft of Aos Script * Changing to independant script * Adding Aos6 vlan_dict and port_dict * Adding Aos7 vlans module * Adding Aos7 vlans module script * Added Test data
- Loading branch information
Showing
6 changed files
with
16,865 additions
and
2,120 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
<?php | ||
/** | ||
* aos.inc.php | ||
* | ||
* Discover FDB data with ALCATEL-IND1-MAC-ADDRESS-MIB | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
* | ||
* @package LibreNMS | ||
* @link http://librenms.org | ||
* @copyright LibreNMS contributors | ||
* @author Tony Murray <murraytony@gmail.com> | ||
* @author JoseUPV | ||
*/ | ||
|
||
// Try nokia/aos7/ALCATEL-IND1-MAC-ADDRESS-MIB::slMacAddressGblManagement first | ||
$dot1d = snmpwalk_group($device, 'slMacAddressGblManagement', 'ALCATEL-IND1-MAC-ADDRESS-MIB', 0, array(), 'nokia/aos7'); | ||
if (!empty($dot1d)) { | ||
echo 'AOS7+ MAC-ADDRESS-MIB:'; | ||
$fdbPort_table=array(); | ||
foreach ($dot1d['slMacAddressGblManagement'] as $slMacDomain => $data) { | ||
foreach ($data as $slLocaleType => $data2) { | ||
foreach ($data2 as $portLocal => $data3) { | ||
foreach ($data3 as $vlanLocal => $data4) { | ||
$fdbPort_table[$vlanLocal]=array('dot1qTpFdbPort' => array_combine(array_keys($data4[0]), array_fill(0, count($data4[0]), $portLocal))); | ||
} | ||
} | ||
} | ||
} | ||
} else { | ||
// try nokia/ALCATEL-IND1-MAC-ADDRESS-MIB::slMacAddressDisposition | ||
$dot1d = snmpwalk_group($device, 'slMacAddressDisposition', 'ALCATEL-IND1-MAC-ADDRESS-MIB', 0, array(), 'nokia'); | ||
if (!empty($dot1d)) { | ||
echo 'AOS6 MAC-ADDRESS-MIB: '; | ||
$fdbPort_table=array(); | ||
foreach ($dot1d['slMacAddressDisposition'] as $portLocal => $data) { | ||
foreach ($data as $vlanLocal => $data2) { | ||
$fdbPort_table[$vlanLocal]=array('dot1qTpFdbPort' => array_combine(array_keys($data2), array_fill(0, count($data2), $portLocal))); | ||
} | ||
} | ||
} | ||
} | ||
if (!empty($fdbPort_table)) { | ||
// Build dot1dBasePort to port_id dictionary | ||
$portid_dict = array(); | ||
$dot1dBasePortIfIndex = snmpwalk_group($device, 'dot1dBasePortIfIndex', 'BRIDGE-MIB'); | ||
foreach ($dot1dBasePortIfIndex as $portLocal => $data) { | ||
$port = get_port_by_index_cache($device['device_id'], $data['dot1dBasePortIfIndex']); | ||
$portid_dict[$port['ifIndex']] = $port['port_id']; | ||
} | ||
// Collect data and populate $insert | ||
foreach ($fdbPort_table as $vlan => $data) { | ||
foreach ($data['dot1qTpFdbPort'] as $mac => $dot1dBasePort) { | ||
if ($dot1dBasePort == 0) { | ||
d_echo("No port known for $mac\n"); | ||
continue; | ||
} | ||
$mac_address = implode(array_map('zeropad', explode(':', $mac))); | ||
if (strlen($mac_address) != 12) { | ||
d_echo("MAC address padding failed for $mac\n"); | ||
continue; | ||
} | ||
$port_id = $portid_dict[$dot1dBasePort]; | ||
$vlan_id = isset($vlans_dict[$vlan]) ? $vlans_dict[$vlan] : 0; | ||
$insert[$vlan_id][$mac_address]['port_id'] = $port_id; | ||
d_echo("vlan $vlan_id mac $mac_address port ($dot1dBasePort) $port_id\n"); | ||
} | ||
} | ||
} | ||
|
||
echo PHP_EOL; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
<?php | ||
echo 'ALCATEL-IND1-VLAN-MGR-MIB VLANs: '; | ||
|
||
$vtpdomain_id = '1'; | ||
$vlans = snmpwalk_cache_oid($device, 'vlanDescription', array(), 'ALCATEL-IND1-VLAN-MGR-MIB', 'nokia/aos7'); | ||
|
||
foreach ($vlans as $vlan_id => $vlan) { | ||
d_echo(" $vlan_id"); | ||
if (is_array($vlans_db[$vtpdomain_id][$vlan_id])) { | ||
$vlan_data = $vlans_db[$vtpdomain_id][$vlan_id]; | ||
if ($vlan_data['vlan_name'] != $vlan['vlanDescription']) { | ||
$vlan_upd['vlan_name'] = $vlan['vlanDescription']; | ||
dbUpdate($vlan_upd, 'vlans', '`vlan_id` = ?', array($vlan_data['vlan_id'])); | ||
log_event("VLAN $vlan_id changed name {$vlan_data['vlan_name']} -> {$vlan['vlanDescription']} ", $device, 'vlan', 3, $vlan_data['vlan_id']); | ||
echo 'U'; | ||
} else { | ||
echo '.'; | ||
} | ||
} else { | ||
dbInsert(array( | ||
'device_id' => $device['device_id'], | ||
'vlan_domain' => $vtpdomain_id, | ||
'vlan_vlan' => $vlan_id, | ||
'vlan_name' => $vlan['vlanDescription'], | ||
'vlan_type' => array('NULL') | ||
), 'vlans'); | ||
echo '+'; | ||
} | ||
$device['vlans'][$vtpdomain_id][$vlan_id] = $vlan_id; | ||
} | ||
|
||
$vlanstype = snmpwalk_group($device, 'vpaType', 'ALCATEL-IND1-VLAN-MGR-MIB', 0, array(), 'nokia/aos7'); | ||
|
||
foreach ($vlanstype['vpaType'] as $vlan_id => $data) { | ||
foreach ($data as $portidx => $porttype) { | ||
$per_vlan_data[$vlan_id][$portidx]['untagged'] = ($porttype == 1 ? 1 : 0); | ||
} | ||
} |
Oops, something went wrong.