LINUX.ORG.RU

Нету vlan тэга в skb в netfilter hooks.

 ,


0

1

Всем добрый день, такая проблема - в зарегестрированном rx_handler вижу vlan тэг в метаданных (skb->vlan_tci), a вот в зарегестрированном netfilter хуке он уже нулевой. Стал рыться в коде ядра (4.8) и обнаружил что вроде как так и должно быть… Вопрос такой - правильно ли я понимаю:

  1. В __netif_receive_skb_core() в функции skb_vlan_untag() тег у VLAN пакетов удалается из skb->data и переноситься в метаданные skb (skb->vlan_tci) - я правильно прочитал? И зачем это? Оптимизация?
  2. Далее по коду функции __netif_receive_skb_core() кроме всего прочего вызываются rx_handler’ы и после этого есть следующий кусок:
	if (unlikely(skb_vlan_tag_present(skb))) {
		if (skb_vlan_tag_get_id(skb))
			skb->pkt_type = PACKET_OTHERHOST;
		/* Note: we might in the future use prio bits
		 * and set skb->priority like in vlan_do_receive()
		 * For the time being, just ignore Priority Code Point
		 */
		skb->vlan_tci = 0;
	}

В этом коде получается удаляется совсем информация о VLANID? Почему так? А что если мне в netfilter хуке нужен VLAN? Или подразумевается что все что касается VLAN’ов решается на L2 уровне…

  1. И последний момент - не совсем понимаю логику работы макроса skb_vlan_tag_present()

((__skb)->vlan_tci & VLAN_TAG_PRESENT)

#define VLAN_TAG_PRESENT VLAN_CFI_MASK

Т. е. проверяется что CFI бит ненулевой, но он же должен быть нулевой у Ethernet VLAN пакетов, вообще не совсем понимаю что значит этот бит, он вроде к влану не относится… Спасибо!

Если ты хочешь, чтобы netfilter реагировал на vlan, то нужно bridge-nf-filter-vlan-tagged выставить в 1. Посмотри IS_VLAN_IP.

xpahos ★★★★★
()
Последнее исправление: xpahos (всего исправлений: 1)
Ответ на: комментарий от xpahos

Спасибо, но судя по IS_VLAN_IP если bridge-nf-filter-vlan-tagged не установлен, то prerouting хук не вызывается, а у меня хук вызывается, но в нем нет vlan’а (ни в данных, ни в метаданных).

Andy1011
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.