La fonction walk de hptools fait appel au binaire snmpwalk. Celui-ci renvoi
(dans le cas d'une demande des hpSwitchPortFdbAddress) des lignes
de la forme:
STATISTICS-MIB::hpSwitchPortFdbAddress.$(numerodeport).'$(mac en binaire)' "$(mac en hexa) "
Par $(mac en binaire), je désigne une représentation où chaque octet de
l'adresse mac est représenté par le caractère ascii correspondant.
Cependant, il existe plus d'un caractère ascii non-représentable, et ces
caractères sont tous remplacés par des ".". Cela donne des résultats
avec plusieurs fois le même oid (quand présents sur la même prise):
STATISTICS-MIB::hpSwitchPortFdbAddress.25.'......' "D4 BE D9 80 CD F8 "
STATISTICS-MIB::hpSwitchPortFdbAddress.25.'......' "DC 9F DB 07 D9 12 "
STATISTICS-MIB::hpSwitchPortFdbAddress.25.'......' "DC 9F DB 07 DA A8 "
STATISTICS-MIB::hpSwitchPortFdbAddress.25.'......' "DC 9F DB 07 DB 1B "
(^^^^ ex ici avec des bornes wifi sur le port 25)
Cela pose un problème certain car la fonction walk renvoie un dictionnaire
indexé par les oid, ce qui écrase donc les données précédentes.
On patche en utilisant une lib snmp sachant traiter des oid binaires
arbitraires.
Comme cela change un peu la sortie de la fonction walk, j'ai préféré garder
l'ancienne version, tout en permettant l'utilisation de la nouvelle via
un argument optionnel de compatibilité.
C'est entre autre l'exception récupérée dans lc_ldap (pour l'attribut chambre),
qui permet de fallback en connexion de test. Ce n'est pas la manière idéale
de faire une connexion de test, mais c'est mieux que rien.
* Les rid sont maintenant des listes de tuples.
* Il faut utiliser crans_utils.find_rid_plage, et crans_utils.find_ipv4_plage
qui renvoient le realm d'un rid/d'une ipv4, et la plage associée (un tuple ou
un slash ipv4).
* Pour les anciens scripts, j'ai mis find_rid_plage dans ridtools, il faut l'utiliser
également à la place des boucles for tp, (begin, end) in config.rid.iteritems()...
* J'ai essayé de faire attention à tout ce que ça aurait pu casser, mais ce n'est
pas garanti
Pour firewall, en fait on s'en fout parce qu'il fait pas d'écriture, mais on laisse le
binding en admin parce que les transactions sont plus rapides et qu'il en fait mâss.