L'option DHCP 43 est un peu étrange. Les fournisseurs peuvent le traiter comme ils le souhaitent - certains s'attendent à ce que les numéros d'option correspondent aux numéros d'option DHCP, d'autres non.
La structure de base est de 1 octet pour un ID d'option, 1 octet pour la longueur des données d'option (n), puis n octets des données d'option réelles - et, rincez et répétez.
Prenons l'exemple de dhcp-options. Ils ont collé les nouvelles lignes à des endroits stratégiques pour faciliter la lecture. En réalité, le paramètre qu'ils ont configuré est simplement celui-ci :
02:04:AC:11:41:01:03:12:73:75:6e:64:68:63:70:2d:73:65:72:76:65:72:31:37:2d:31:04:12:2f:65:78:70:6f:72:74:2f:72:6f:6f:74:2f:69:38:36:70:63;
Ce qui est assez difficile à lire à moins que vous ne sachiez ce que vous cherchez. Décomposons les parties :
- Octet 1,
0x02
. Cela indique que ce bloc est configuré pour l'option numéro 2. La façon dont cela est interprété dépend du fournisseur. - Octet 2,
0x04
. Cela signifie que les données de l'option 2 occuperont les 4 octets suivants. - Octets 3-6,
0xAC114101
. Ces quatre octets sont les données réelles. Comme vous l'avez vu lorsque vous avez essayé de le décoder, ce ne sont pas des données lisibles. - Octet 7, le début du bloc d'option suivant ,
0x03
. Toute la chaîne recommence, ceci dit que la configuration suivante est pour l'option 3. - et ainsi de suite, pour 3 sections
Un autre exemple, tiré de la page wiki de snom :
42:0c:68:74:74:70:3a:2f:2f:74:65:73:74:00:43:12:73:6e:6f:6d:2f:73:65:74:74:69:6e:67:73:2e:70:68:70:00;
- Octet 1,
0x42
. 42 en hexadécimal est 66, pour le code d'option 66. - Octet 2,
0x0c
. Longueur de 12 octets. - Octets 3-14,
0x687474703a2f2f7465737400
. C'esthttp://test
avec un octet nul (0x00
) a la fin. Je ne sais pas pourquoi ils ont ça là. - Octet 15,
0x43
. Variante 67. - Octet 16,
0x12
. Longueur de 18 octets. - Octets 17-34,
0x736e6f6d2f73657474696e67732e70687000
.snom/settings.php
. Encore une fois, l'octet nul à la fin.
Donc, disons que vous devez construire une option 43 avec http://phone.example.com
en option 66 et phonesettings.txt
comme option 67.
- Octet 1, code d'option 66,
0x42
- Octet 2, longueur de 24 octets sur
http://phone.example.com
, donc0x18
- Octets 3-26, les données.
0x687474703a2f2f70686f6e652e6578616d706c652e636f6d
- Octet 27, code d'option 67,
0x43
- Octet 28, longueur de 17 octets sur
phonesettings.txt
, donc0x11
- Octets 29-45, données.
0x70686f6e6573657474696e67732e747874
Donc, une chaîne de configuration complète de :
42:18:68:74:74:70:3a:2f:2f:70:68:6f:6e:65:2e:65:78:61:6d:70:6c:65:2e:63:6f:6d:43:11:70:68:6f:6e:65:73:65:74:74:69:6e:67:73:2e:74:78:74;
Si cela ne fonctionne pas, essayez d'ajouter les octets nuls à la fin des chaînes de données (et augmentez le champ de longueur en conséquence) comme dans leur exemple - ils peuvent soit souhaiter des octets nuls à la fin de chaque option, soit un nombre pair d'octets pour la longueur de chaque option. C'est l'inconvénient de l'option 43 :ils peuvent faire ce qu'ils veulent !
C'est définitivement la façon la plus folle de configurer l'option 43. Vous devriez plutôt utiliser la syntaxe "vendor option space" de l'ISC qui vous permet d'avoir une lecture humaine de ce que vous avez configuré et d'éviter les erreurs :
option space db;
option db.db-server code 1 = ip-address;
option db.loginid code 2 = text;
option db.db-name code 3 = text;
Jean-Yves Bisiaux
N'oubliez pas d'utiliser l'encapsulation locale :
option space cisco;
option cisco.wlc code 241 = array of ip-address;
option local-encapsulation code 43 = encapsulate cisco;
option cisco.wlc 10.7.3.6, 10.7.3.2;