Mam ładny shaper z filtrowaniem hash, zbudowany na mostku linuksowym. W skrócie, br0
połączenia external
i internal
fizyczne interfejsy, pakiety oznaczone VLAN są mostkowane „przezroczyście” (to znaczy, nie ma żadnych interfejsów VLAN).
Teraz różne jądra robią to inaczej. Mogę się mylić z dokładnymi zakresami wersji jądra, proszę wybacz mi. Dzięki.
2.6.26
Tak więc w Debianie, 2.6.26 i nowszych (do 2.6.32, jak sądzę) --- to działa:
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
Tutaj „jądro” dopasowuje dwa bajty w polu „protokół” z 0x8100, ale liczy początek pakietu ip jako „pozycję zerową” (przepraszam za mój angielski, jeśli jestem trochę niejasny).
2.6.32
Ponownie, w debianie (nie zbudowałem jądra wanilii), 2.6.32-5 --- to działa:
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
Tutaj „jądro” pasuje do protokołu tak samo, ale liczy przesunięcie od początku nagłówka tego protokołu --- muszę dodać 4 bajty do przesunięcia (20, a nie 16 dla adresu dst). Jest ok, wydaje się bardziej logiczne, jak dla mnie.
3.2.11, najnowsza stabilna teraz
Działa to tak, jakby w ogóle nie było znacznika 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
Problem polega na tym, że jak dotąd nie mogłem znaleźć sposobu na dopasowanie tagu 802.1q.
W przeszłości zgodny tag 802.1q
Mógłbym to zrobić wcześniej w następujący sposób:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 match u16 0x0ed8 0x0fff at -4 flowid 1:300
Teraz jestem w stanie dopasować 802.1Q tag at 0
, at -2
, at -4
, at -6
lub tak. Główny problem polegający na tym, że mam zerową liczbę trafień - ten filtr wcale nie jest sprawdzany, „innymi słowy”.
Proszę, pomóżcie mi :-)
Dzięki!
protocol all
mnieRTNETLINK answers: Invalid argument
(jądro 3.3.4 tutaj). Przetestuję to na nowszych jądrach. Dziękuję Ci.