def get_vlan_list(row): concatenated_bits = b'' for column in ('vlanTrunkPortVlansEnabled', 'vlanTrunkPortVlansEnabled2k', 'vlanTrunkPortVlansEnabled3k', 'vlanTrunkPortVlansEnabled4k'): value = row[column] or b'' concatenated_bits += value.ljust(CHARS_IN_1024_BITS, b'\x00') enabled = BitVector(concatenated_bits) return as_bitvector and enabled or enabled.get_set_bits()
def test_chunkify(self): vlans = [10, 33, 513, 1023, 1025, 2048, 4095] b = BitVector(512 * '\000') for vlan in vlans: b[vlan] = 1 self.assertEqual(b.get_set_bits(), vlans) first, second, third, fourth = SNMPHandler._chunkify(b, 4) self.assertEqual(first.get_set_bits(), [10, 33, 513, 1023]) self.assertEqual(second.get_set_bits(), [1]) self.assertEqual(third.get_set_bits(), [0]) self.assertEqual(fourth.get_set_bits(), [1023])
def get_vlan_list(row): concatenated_bits = '' # There is no point in concatening more bitstrings if one of them # are empty, that would just produced a skewed result. for column in ('vlanTrunkPortVlansEnabled', 'vlanTrunkPortVlansEnabled2k', 'vlanTrunkPortVlansEnabled3k', 'vlanTrunkPortVlansEnabled4k'): if row[column]: concatenated_bits += row[column] else: break enabled = BitVector(concatenated_bits) return as_bitvector and enabled or enabled.get_set_bits()
def get_native_and_trunked_vlans(self, interface): ifindex = interface.ifindex native_vlan = self._query_netbox(self.TRUNKPORTNATIVEVLAN, ifindex) blocks = [ self._query_netbox(oid, ifindex) or '' for oid in (self.TRUNKPORTVLANSENABLED, self.TRUNKPORTVLANSENABLED2K, self.TRUNKPORTVLANSENABLED3K, self.TRUNKPORTVLANSENABLED4K)] bitstring = "".join(value.ljust(CHARS_IN_1024_BITS, '\x00') for value in blocks) bitvector = BitVector(bitstring) return native_vlan, bitvector.get_set_bits()