diff --git a/includes/discovery/arp-table.inc.php b/includes/discovery/arp-table.inc.php index bfbcc0470d..ba247f222e 100644 --- a/includes/discovery/arp-table.inc.php +++ b/includes/discovery/arp-table.inc.php @@ -33,8 +33,12 @@ foreach ($vrfs_lite_cisco as $vrf) { $context = $vrf['context_name']; $device['context_name']=$context; - $arp_data = snmpwalk_group($device, 'ipNetToPhysicalPhysAddress', 'IP-MIB'); - $arp_data = snmpwalk_group($device, 'ipNetToMediaPhysAddress', 'IP-MIB', 1, $arp_data); + if (file_exists($config['install_dir'] . "/includes/discovery/arp-table/{$device['os']}.inc.php")) { + include $config['install_dir'] . "/includes/discovery/arp-table/{$device['os']}.inc.php"; + } else { + $arp_data = snmpwalk_group($device, 'ipNetToPhysicalPhysAddress', 'IP-MIB'); + $arp_data = snmpwalk_group($device, 'ipNetToMediaPhysAddress', 'IP-MIB', 1, $arp_data); + } $existing_data = dbFetchRows( "SELECT * from `ipv4_mac` WHERE `device_id`=? AND `context_name`=?", diff --git a/includes/discovery/arp-table/edgeswitch.inc.php b/includes/discovery/arp-table/edgeswitch.inc.php new file mode 100644 index 0000000000..b6ec2396e3 --- /dev/null +++ b/includes/discovery/arp-table/edgeswitch.inc.php @@ -0,0 +1,31 @@ +. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2017 Tony Murray + * @author Tony Murray + */ + +$binding = snmpwalk_group($device, 'agentDynamicDsBindingTable', 'EdgeSwitch-SWITCHING-MIB', 1); + +foreach ($binding as $mac => $data) { + $arp_data[$data['agentDynamicDsBindingIfIndex']]['ipNetToMediaPhysAddress'][$data['agentDynamicDsBindingIpAddr']] = $data['agentDynamicDsBindingMacAddr']; + $arp_data[$data['agentDynamicDsBindingIfIndex']]['ipNetToPhysicalPhysAddress']['ipv4'][$data['agentDynamicDsBindingIpAddr']] = $data['agentDynamicDsBindingMacAddr']; +} diff --git a/includes/discovery/fdb-table.inc.php b/includes/discovery/fdb-table.inc.php index c556814df2..9c89be1d66 100644 --- a/includes/discovery/fdb-table.inc.php +++ b/includes/discovery/fdb-table.inc.php @@ -15,7 +15,9 @@ foreach ($sql_result as $entry) { } $insert = array(); // populate $insert with database entries -if ($device['os'] == 'ios' || $device['os'] == 'iosxe') { +if (file_exists($config['install_dir'] . "/includes/discovery/fdb-table/{$device['os']}.inc.php")) { + require $config['install_dir'] . "/includes/discovery/fdb-table/{$device['os']}.inc.php"; +} elseif ($device['os'] == 'ios' || $device['os'] == 'iosxe') { include $config['install_dir'] . '/includes/discovery/fdb-table/ios.inc.php'; } else { // Check generic Q-BRIDGE-MIB and BRIDGE-MIB diff --git a/includes/discovery/fdb-table/edgeswitch.inc.php b/includes/discovery/fdb-table/edgeswitch.inc.php new file mode 100644 index 0000000000..2f0f2c452f --- /dev/null +++ b/includes/discovery/fdb-table/edgeswitch.inc.php @@ -0,0 +1,35 @@ +. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2017 Tony Murray + * @author Tony Murray + */ + +$binding = snmpwalk_group($device, 'agentDynamicDsBindingTable', 'EdgeSwitch-SWITCHING-MIB', 1); + +foreach ($binding as $mac => $data) { + $port = get_port_by_index_cache($device['device_id'], $data['agentDynamicDsBindingIfIndex']); + $port_id = $port['port_id']; + $mac_address = implode(array_map('zeropad', explode(':', $mac))); + $vlan_id = $data['agentDynamicDsBindingVlanId'] ?: 0; + $insert[$vlan_id][$mac_address]['port_id'] = $port_id; + d_echo("vlan $vlan_id mac $mac_address port $port_id\n"); +}