Эти два флага часто устанавливаются вместе. В чем разница между ними?
В чем разница между IFF_UP и IFF_RUNNING?
Ответ 1
От Драйверы устройств Linux 3:
IFF_UP Этот флаг доступен только для чтения для драйвера. Ядро включает его, когда интерфейс активен и готов к передаче пакетов.
...
IFF_RUNNING
Этот флаг указывает, что интерфейс запущен и работает. Это в основном для совместимости с BSD; ядро мало использует его. Наиболее сетевым драйверам не нужно беспокоиться о IFF_RUNNING.
Копаясь немного глубже, кажется, что существует одна существенная разница:
IFF_RUNNING
должен отражать операционный статус на сетевом интерфейсе, а не на его административном. Например, для интерфейса Ethernet может быть добавлен UP
администратором (например, ifconfig eth0 up
), но он не будет считаться рабочим (т.е. RUNNING
в соответствии с RFC2863), если кабель не подключен.
Ответ 2
Чтобы проверить, действительно ли кабель Ethernet подключен к сети, вы должны проверить IFF_RUNNIG. IFF_UP означает, что система выделяет ресурсы для интерфейса.
Пожалуйста, найдите подробный код, как "ip link show" и "ethtool eth0" проверяет наличие ссылки здесь.