Добрый день!
По мере надобности мне потребовалось использовать возможности утилиты ifplugstatus, а именно воспользоваться функцией interface_detect_beat_ethtool(fd,iface) файла interface.c, которая проверяет, поднят ли интерфейс сетевой платы.
Соответственно, там создается ioctl-запрос следующего вида (соответственно, привожу кусок):if (ioctl(fd, SIOCETHTOOL, &ifr) == -1)
{
if(interface_do_message)
daemon_log(LOG_ERR, "ETHTOOL_GLINK FAILED: %s", strerror(errno));
return IFSTATUS_ERR
}
Каким образом включается возможность использования параметра SIOCETHTOOL для ioctl-запроса? Что именно отвечает за его работу?Буду очень благодарен за помощь.
Наличие соответствующего драйвера, кажись он называется mii.
>Наличие соответствующего драйвера, кажись он называется mii.А можно поподробнее? Различаются ли по написанию версии ifplugd (используют SIOCETHTOOL или нет)? Если этот драйвер установлен, возможность использования этой функции предоставляется автоматом?
>>Наличие соответствующего драйвера, кажись он называется mii.
>
>А можно поподробнее? Различаются ли по написанию версии ifplugd (используют SIOCETHTOOL или
>нет)? Если этот драйвер установлен, возможность использования этой функции предоставляется автоматом?
>ioctl() это системный вызов, он всегда есть.
SIOCETHTOOL - константа по которой ядро определяет что делать.
Драйвер(модуль ядра) если не загружен, то функция вернет ошибку, так же ошибка будет если сетевая карта не поддерживает эту функциональность (или ее драйвер). Немного напутал, т.к. константа есть в linux/sockios.h т.е. она есть в ядре, но как я понимаю реализация этой функциональности все же в mii (имхо).
Все понял! Действительно - интерфейс mii, и действительно библиотека sockios.h. Спасибо!