Ho un bel shaper, con filtro hash, costruito su un bridge Linux. In breve, br0
connessioni external
e internal
interfacce fisiche, i pacchetti con tag VLAN sono collegati in modo "trasparente" (voglio dire, non ci sono interfacce VLAN).
Ora, kernel diversi lo fanno diversamente. Posso sbagliarmi con gli intervalli esatti delle versioni del kernel, per favore perdonami. Grazie.
2.6.26
Quindi, in debian, 2.6.26 e versioni successive (fino a 2.6.32, credo) --- funziona:
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
Qui, "kernel" corrisponde a due byte nel campo "protocol" con 0x8100, ma considera l'inizio del pacchetto ip come "posizione zero" (scusate il mio inglese, se non sono abbastanza chiaro).
2.6.32
Ancora una volta, in debian (non ho compilato il kernel vanilla), 2.6.32-5 --- funziona:
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
Qui, "kernel" corrisponde allo stesso per il protocollo, ma conta offset all'inizio dell'intestazione di questo protocollo --- Devo aggiungere 4 byte a offset (20, non 16 per l'indirizzo dst). Va bene, sembra più logico, per quanto mi riguarda.
3.2.11, l'ultima stalla ora
Funziona --- come se non ci fosse alcun tag 802.1q:
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
Il problema è che finora non sono riuscito a trovare un modo per abbinare il tag 802.1q.
Corrispondenza tag 802.1q in passato
Potrei farlo prima come segue:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 match u16 0x0ed8 0x0fff at -4 flowid 1:300
Ora sono in grado di eguagliare 802.1Q tag con at 0
, at -2
, at -4
, at -6
o simile. Il problema principale che ho zero hit conta --- questo filtro non viene controllato affatto, "protocollo errato", in altre parole.
Per favore, chiunque mi aiuti :-)
Grazie!
protocol all
Mi dà un tentativo di aggiungere un filtro root perRTNETLINK answers: Invalid argument
(kernel 3.3.4 qui). Lo proverò con kernel più recenti. Grazie.