Il y a 2 fois "pedit pedit" sur TA ligne 2, c'est normal ?
Je suis parti d'un exemple de la manpage de pedit:
https://man7.org/linux/man-pages/man8/tc-pedit.8.htmlMais ça fonctionne aussi avec un seul, c'est pareil.
Pour résumer:
Nos lignes 1 sont identiques.
Nos lignes 2 match les paquets DHCPv4, mais la mienne est plus drastique dans la sélection.
Justement il faut lire "ET" entre chaque critère. Je vérifie bien que le paquet n'a pas d'option (en-tête de 20 octets donc) ET n'est pas fragmenté (ou du moins est le 1er fragment).
Si tu ne vérifie pas ça, à l'offset 20 ("ip sport" et "ip dport") il y aura bien quelque chose, mais potentiellement pas des numéros de port.
Normalement avec des paquets DHCPv4 ça n'arrivera jamais, mais je préfère être strict.
D'ailleurs tu as oublié de vérifier le port source aussi.
Puis ma ligne 1 modifie en plus le DSCP et finalement corrige le checksum IPv4 rendu invalide par la modification du DSCP.
Ta ligne 3 match les paquets DHCPv6 et ne change que la priority, pas le DSCP.
Pour être plus rigoureux il faudrait ajouter le check du port source.
Par contre attention en IPv6, "ip6 protocol" ignore les cas où tu as un header intermédiaire, tel qu'un fragmentation header par exemple.
Bon ok pour du DHCPv6 ça ne devrait pas arriver, mais c'est bon à savoir.
Ta ligne 4 match les paquets ICMPv6 et ne change que la priority, pas le DSCP.
Attention tu match tous les paquets ICMPv6, pas que les NS/NA/RS et aussi ceux qui partent vers Internet au delà du BNG.
Même remarque aussi pour "ip6 procotol".
Mon script tc ne s'occupe pas du tout de IPv6, puisque normalement aucun programme ne devrait utiliser de raw socket pour ce protocole.
Je passe par des règles nftables exclusivement:
NET = eth1.832
table inet firewall {
chain prio_orange {
meta nfproto ipv4 \
meta priority set 0:0 \
ip dscp set cs0
meta nfproto ipv6 \
meta priority set 0:0 \
ip6 dscp set cs0
ip6 daddr { fe80::/10, ff02::/16 } \
icmpv6 type {
nd-router-solicit,
nd-neighbor-solicit,
nd-neighbor-advert
} \
meta priority set 0:6 \
ip6 dscp set cs6
ip6 daddr { fe80::/10, ff02::/16 } \
udp sport 546 \
udp dport 547 \
meta priority set 0:6 \
ip6 dscp set cs6
}
chain mangle_postrouting {
type filter hook postrouting priority mangle
policy accept
oifname $NET \
rt ipsec missing \
jump prio_orange
}
}
Enfin ceci dit busybox udhcpc6 utilise des raw socket pour DHCPv6, mais c'est du n'importe quoi, ça fait partie des aspects que je corrige avec mes patchs.