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!
źródło
protocol all
mnieRTNETLINK answers: Invalid argument
(jądro 3.3.4 tutaj). Przetestuję to na nowszych jądrach. Dziękuję Ci.Musiałem dokładnie to zrobić. Odkryłem, że odpowiedź sugerowana przez @Thusitha była poprawnym sposobem na to w przypadku nowych jąder.
Testowane z jądrem wheezy Debiana 3.2.0-4 i iproute (skąd pochodzi polecenie tc) wersja 20120521-3 + b3
Oto kompletny skrypt,
tc filter
wiersze są prawie dokładnie takie, jak określone przez @Thusithaźródło
protocol all
dało mi błąd w jądrze wanilii. Powinienem to sprawdzić bardziej. Dziękuję Ci.Poleciłbym użyć wireshark do przechwycenia tego, co przechodzi przez interfejs jako widoczne w przestrzeni użytkownika, i użycie tego do napisania filtru. Zastanawiam się, czy być może interfejs z jakiegoś powodu usuwa tagi VLAN (pomimo skonfigurowania przezroczystego mostkowania). Być może dodaje dodatkowe tagi czy coś?
źródło
tcpdump
pokazuje identyfikatory vlan na wszystkich interfejsachbridge
i porty.Możesz oznaczyć pakiety vlan za pomocą ebtables .
Następnie zastosuj kształtowanie na podstawie oznaczeń. ebtables i iptables mają to samo oznaczenie.
Nie zrobiłem tego jeszcze sam. Więc to raczej przeczucie.
źródło
Spróbuj wyłączyć
reorder_hdr
opcję interfejsu vlan. Jeśli włączona jest opcja zmiany kolejności nagłówków, tagi z ramek są usuwane. Sprawdź to za pomocą poleceniaip -d link list dev vlan_iface
.źródło
tc
wywoływane są filtry? Czy masz link do mapy lub coś takiego? Dzięki!