получить дескриптор файла ioctl для порта Ethernet - PullRequest
3 голосов
/ 15 июня 2010

Мне нужно получить дескриптор файла для использования в вызовах ioctl () для порта Ethernet в Linux. Не уверен, как это сделать.

Ответы [ 2 ]

3 голосов
/ 15 июня 2010

Просто используйте файловый дескриптор открытого сокета, используя имя устройства в структуре ifreq, переданное ioctl(), при условии, что ваша программа имеет соответствующие разрешения для этого.

Из документов:

Linux поддерживает некоторые стандартные ioctl для настроить сетевые устройства. Они могут использоваться в любом файле сокета дескриптор независимо от семьи или тип. Они передают структуру ifreq:

Сокет не обязательно должен быть привязан к целевому устройству или принадлежать к какой-либо конкретной семье. Подойдет любой открытый сокет fd (опять же, с соответствующими привилегиями), просто откройте один для вашей конкретной задачи, дождитесь, пока ioctl() вернется и закройте его.

См. man 7 netdevice для получения дополнительной информации или здесь , если у вас не установлены соответствующие пакеты документации (подсказка, пакет обычно называется manpages-dev или manpages-devel, в зависимости от вашего дистрибутива)

Вы также можете взглянуть на исходный код пакета net-tools, который может называться по-разному в зависимости от вашего дистрибутива. Это источник ifconfig (Debian / Ubuntu здесь).

Извините за оригинальную двусмысленность, я думал, что вы пытаетесь настроить специальное многофункциональное устройство (не знаю, почему сейчас, возможно, не хватает сна).

1 голос
/ 15 июня 2010

Вы можете сделать что-то вроде этого fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)

Используйте strace, чтобы увидеть, какие функции ifconfig вызывает.

...