J'ai un joli shaper, avec un filtrage haché, construit sur un pont Linux. En bref, les br0
connexions external
et internal
les interfaces physiques, les paquets balisés VLAN sont pontés "de manière transparente" (je veux dire, aucune interface VLAN n'est là).
Maintenant, différents noyaux le font différemment. Je peux me tromper avec les plages de versions exactes du noyau, veuillez me pardonner. Merci.
2.6.26
Donc, dans Debian, 2.6.26 et plus (jusqu'à 2.6.32, je crois) --- cela fonctionne:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 ht 1:64 match ip dst 192.168.1.100 flowid 1:200
Ici, "kernel" correspond à deux octets dans le champ "protocol" avec 0x8100, mais compte le début du paquet ip comme une "position zéro" (désolé pour mon anglais, si je ne suis pas clair).
2.6.32
Encore une fois, dans debian (je n'ai pas construit de noyau vanilla), 2.6.32-5 --- cela fonctionne:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 ht 1:64 match ip dst 192.168.1.100 at 20 flowid 1:200
Ici, "noyau" correspond à la même chose pour le protocole, mais compte l'offset depuis le début de l'en-tête de ce protocole --- Je dois ajouter 4 octets pour l'offset (20, pas 16 pour l'adresse dst). C'est bon, ça me semble plus logique, pour moi.
3.2.11, la dernière écurie maintenant
Cela fonctionne --- comme s'il n'y avait pas de balise 802.1q du tout:
tc filter add dev internal protocol ip parent 1:0 prio 100 \
u32 ht 1:64 match ip dst 192.168.1.100 flowid 1:200
Le problème est que je n'ai pas trouvé de moyen de faire correspondre la balise 802.1q jusqu'à présent.
Balise 802.1q correspondante dans le passé
Je pourrais le faire avant comme suit:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 match u16 0x0ed8 0x0fff at -4 flowid 1:300
Maintenant , je suis incapable de faire correspondre 802.1Q tag avec at 0
, at -2
, at -4
, at -6
ou comme ça. Le principal problème que j'ai zéro compte de coups --- ce filtre n'est pas vérifié du tout, "mauvais protocole", en d'autres termes.
S'il vous plaît, n'importe qui, aidez-moi :-)
Merci!
protocol all
me donneRTNETLINK answers: Invalid argument
(noyau 3.3.4 ici). Je vais tester cela avec des noyaux plus récents. Je vous remercie.