Linux köprüsünde yapılmış karma filtreli güzel bir şekillendiricim var. Kısacası, br0
bağlar external
ve internal
fiziksel arayüzler, VLAN etiketli paketler "şeffaf" olarak köprülenir (yani, VLAN arayüzleri yoktur).
Şimdi, farklı çekirdekler bunu farklı yapıyor. Kesin çekirdek çeşitlerinde yanlış olabilirim, lütfen beni affet. Teşekkürler.
2.6.26
Yani, debian'da, 2.6.26 ve üstü (2.6.32'ye kadar, inanıyorum) --- bu işe yarıyor:
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
Burada, "çekirdek" 0x8100 ile "protokol" alanında iki baytla eşleşir, ancak ip paketinin başlangıcını "sıfır konumu" olarak sayar (eğer biraz net değilsem İngilizcem için özür dilerim).
2.6.32
Yine, debian'da (vanilya çekirdeği inşa etmedim), 2.6.32-5 --- bu işe yarıyor:
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
Burada, "çekirdek" protokol için aynı eşleşir, ancak bu protokol başlığının başından itibaren ofset sayar --- Ben ofset için 4 bayt eklemek zorunda (20, dst adresi için 16 değil). Sorun değil, bana göre daha mantıklı görünüyor.
3.2.11, şimdi en son kararlı
Bu --- hiçbir 802.1q etiketi yokmuş gibi çalışır:
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
Sorun şu ana kadar 802.1q etiketi eşleştirmek için bir yol bulamadı olmasıdır.
Geçmişte 802.1q etiketi eşleniyor
Bunu daha önce aşağıdaki gibi yapabilirdim:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 match u16 0x0ed8 0x0fff at -4 flowid 1:300
Şimdi birlikte 802.1q etiketi eşleştiremediğimiz değilim at 0
, at -2
, at -4
, at -6
veya benzeri söyledi. Ben sıfır hit sayısı ana sorun --- bu filtre hiç kontrol edilmiyor, başka bir deyişle, "yanlış protokol".
Lütfen, kimse, yardım et :-)
Teşekkürler!
protocol all
bana veriyorRTNETLINK answers: Invalid argument
(burada 3.3.4 çekirdek). Bunu daha yeni çekirdeklerle test edeceğim. Teşekkür ederim.