У мене є гарний формувач, з хеш-фільтруванням, побудований на мосту Linux. Коротше кажучи, br0
підключення external
та internal
фізичні інтерфейси, пакети з тегами VLAN мостикуються "прозоро" (я маю на увазі, що VLAN-інтерфейсів немає).
Тепер різні ядра роблять це по-різному. Я можу помилятися з точними діапазонами версій ядра, пробачте, будь ласка. Дякую.
2.6.26
Отже, в debian, 2.6.26 і вище (до 2.6.32, я вважаю) --- це працює:
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
Тут "ядро" відповідає двом байтам у полі "протокол" з 0x8100, але зараховує початок ip-пакету як "нульову позицію" (вибачте за мою англійську, якщо я трохи незрозумілий).
2.6.32
Знову ж таки, у debian (я не створив ванільне ядро), 2.6.32-5 --- це працює:
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
Тут "ядро" збігається з аналогічним для протоколу, але рахує зсув з початку заголовка цього протоколу --- я повинен додати 4 байти для зміщення (20, а не 16 для адреси dst). Це нормально, здається більш логічним, як на мене.
3.2.11, остання стабільна зараз
Це працює --- так, ніби тег 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
Проблема полягає в тому, що я не зміг знайти спосіб відповідати тегу 802.1q.
Відповідність тегу 802.1q минулого
Я міг би це зробити раніше:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 match u16 0x0ed8 0x0fff at -4 flowid 1:300
Зараз я не в змозі відповідати 802.1q тег at 0
, at -2
, at -4
, at -6
або , як це. Основне питання , який у мене є нуль хітів розраховувати --- цей фільтр не перевіряється на всіх, «неправильний протокол», іншими словами.
Будь ласка, будь-хто, допоможіть мені :-)
Дякую!
protocol all
дає меніRTNETLINK answers: Invalid argument
(тут ядро 3.3.4). Я протестую це з новими ядрами. Дякую.