Tengo un buen moldeador, con filtrado hash, construido en un puente de Linux. En resumen, las br0
conexiones external
y internal
las interfaces físicas, los paquetes etiquetados con VLAN se conectan "transparentemente" (es decir, no hay interfaces VLAN allí).
Ahora, diferentes núcleos lo hacen de manera diferente. Puedo estar equivocado con los rangos exactos de versiones de kernel, por favor perdóname. Gracias.
2.6.26
Entonces, en debian, 2.6.26 y superior (hasta 2.6.32, creo) --- esto funciona:
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
Aquí, "kernel" coincide con dos bytes en el campo "protocolo" con 0x8100, pero cuenta el comienzo del paquete ip como una "posición cero" (perdón por mi inglés, si no estoy claro).
2.6.32
Nuevamente, en debian (no he construido el núcleo de vainilla), 2.6.32-5 --- esto funciona:
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
Aquí, "kernel" coincide con el mismo protocolo, pero cuenta el desplazamiento desde el comienzo del encabezado de este protocolo --- Tengo que agregar 4 bytes al desplazamiento (20, no 16 para la dirección dst). Está bien, parece más lógico, en cuanto a mí.
3.2.11, el último establo ahora
Esto funciona --- como si no hubiera una etiqueta 802.1q en absoluto:
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
El problema es que hasta ahora no pude encontrar una manera de hacer coincidir la etiqueta 802.1q.
Etiqueta 802.1q coincidente en el pasado
Podría hacer esto antes de la siguiente manera:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
u32 match u16 0x0ed8 0x0fff at -4 flowid 1:300
Ahora soy incapaz de igualar 802.1q etiqueta con at 0
, at -2
, at -4
, at -6
o por el estilo. El principal problema que tengo cero éxitos cuentan --- este filtro no se está comprobando en absoluto "protocolo equivocado", en otras palabras.
Por favor, alguien, ayúdenme :-)
¡Gracias!
protocol all
me daRTNETLINK answers: Invalid argument
(3.3.4 kernel aquí). Probaré esto con núcleos más nuevos. Gracias.