URL: https://linuxfr.org/forums/linux-noyau/posts/linux-ipv6-stack-ajouter-une-extension-hop-by-hop Title: Linux IPv6 stack, ajouter une extension "Hop-by-Hop" Authors: Doude Date: 2009年02月04日T17:55:18+01:00 Tags: Score: 2 Salut, Je suis en train de programmer un module pour le noyau qui interfère sur la stack IPv6. Pour ça, j'ai placé un hook dans la fonction "ip6_output2" du fichier ip6_output.c et je ne m'intéresse qu'à certain paquets multicast. Je veux rajouter une extension dans l'entête IPv6 en utilisant l'option "hop-by-hop". J'ai réussit à le faire mais je ne suis capable de rajouter que 8 octets. Pour faire ça, je fais un "skb_push" de 8 octets sur le "sk_buff" pour décaler l'entête IPv6 (copie dans un tmp et recopie au nouvel emplacement). Puis je place la structure "ipv6_hopopt_hdr" juste après cette l'entête IPv6 en recopiant "nexthdr" d'origine dans son champs "nexthdr" et en mettant ce champs "nexthdr" de l'entête IPv6 à "NEXTHDR_HOP". En suite, je créer une structure au format TLV : struct ipv6_TLV_struct { £spaces£ £/spaces£__u8 type; £spaces£ £/spaces£__u8 length; £spaces£ £/spaces£__u16 x1; £spaces£ £/spaces£__u16 y1; } __attribute__ ((packed)); J'ai mis le champs "hdrlen" de la structure "ipv6_hopopt_hdr" à 0 et le champs "length" de la structure "ipv6_TLV_struct " à 4. Dans ce cas, ça fonctionne. Mais j'aimerai ajouter plus de données dans mon extension : struct ipv6_TLV_struct { £spaces£ £/spaces£__u8 type; £spaces£ £/spaces£__u8 length; £spaces£ £/spaces£__u16 x1; £spaces£ £/spaces£__u16 y1; £spaces£ £/spaces£__u16 x2; £spaces£ £/spaces£__u16 y2; £spaces£ £/spaces£__u32 reserved; } __attribute__ ((packed)); Je rajoute du padding à la fin, pour avoir une taille totale ("ipv6_hopopt_hdr" + "ipv6_TLV_struct") multiple de 64 bits, soit ici 2. J'ai cru comprendre que le champs "hdrlen" de la structure "ipv6_hopopt_hdr" est égale à la taille de l'extension / 64bit - 1, soit ici 1. Quand je fais ça, je me retrouve avec un "skb_under_panic" qui intervient dans la stack IPv6, dans mon code tout c'est bien passé. Je ne parle pas ici de tout les tests nécessaires et la gestion des erreurs (vérifier qu'il y a suffisamment de place dans le sk_buff pour rajouter l'extension, ...). Pouvez vous m'aidez ? (Je peux fournir le code) Merci.