$vlan) { // Skip not exist vlans if ($vlan['vlanRowStatus'] != 'active') { continue; } $vlan_array = [ 'ifIndex' => $vlan['vlanPortNumber'], 'vlan_domain' => $vtp_domain_index, 'vlan_vlan' => $vlan_num, 'vlan_name' => strlen($vlan['vlanName']) ? $vlan['vlanName'] : "Vlan $vlan_num", //'vlan_mtu' => $vlan[''], 'vlan_type' => 'ethernet', 'vlan_status' => 'operational' ]; $discovery_vlans[$vtp_domain_index][$vlan_num] = $vlan_array; } $ports_vlans_oids = snmpwalk_cache_oid($device, 'portMode', [], 'DCN-MIB'); $oids = []; foreach ($ports_vlans_oids as $ifIndex => $entry) { if ($entry['portMode'] == 'trunk') { $oids[] = 'portTrunkAllowedvlan'; } elseif ($entry['portMode'] == 'hybrid') { $oids[] = 'portHybridTaggedAllowedvlan'; } } foreach (array_unique($oids) as $oid) { $ports_vlans_oids = snmpwalk_cache_oid($device, $oid, $ports_vlans_oids, 'DCN-MIB', NULL, OBS_SNMP_ALL_MULTILINE | OBS_SNMP_HEX); } print_debug_vars($ports_vlans_oids); foreach ($ports_vlans_oids as $ifIndex => $entry) { if ($entry['portMode'] == 'trunk') { $binary = hex2binmap($entry['portTrunkAllowedvlan']); } elseif ($entry['portMode'] == 'hybrid') { $binary = hex2binmap($entry['portHybridTaggedAllowedvlan']); } else { continue; } // Assign binary vlans map to ports $length = strlen($binary); for ($i = 0; $i < $length; $i++) { if ($binary[$i] && $i > 0) { $vlan_num = $i; //print_debug("ifIndex = $ifIndex, \$i = $i, mode {$entry['portMode']}"); if (isset($discovery_vlans[$vtp_domain_index][$vlan_num])) { $discovery_ports_vlans[$ifIndex][$vlan_num] = array('vlan' => $vlan_num); } } } } // EOF