Когда устройство, которое не поддерживает фильтрацию одноадресной рассылки, должно прослушивать несколько адресов одноадресной рассылки, оно переводится в смешанный режим в соответствии с dev->uc_count
и dev->uc_promisc
. Проверьте функцию __dev_set_rx_mode()
.
Многие устройства реализуют ndo_set_rx_mode()
и устанавливают свои одноадресные (и многоадресные) фильтры с помощью ndo_set_rx_mode()
. Для устройств, которые не реализуют это, Linux переводит устройство в беспорядочный режим и отслеживает этот факт с помощью dev->uc_promisc
.
Итак, есть несколько флагов для случайного режима:
dev->flags & IFF_PROMISC
означает, что устройство находится в беспорядочном режиме.
dev->gflags & IFF_PROMISC
означает, что пользователь запросил беспорядочный режим.
dev->uc_promisc
означает, что включен неразборчивый режим (фактически, его счетчик ссылок увеличен) из-за необходимости прослушивать дополнительный адрес одноадресной рассылки в устройстве, которое не реализует ndo_set_rx_mode()
.