![]() |
|
Модераторы: xvr |
![]()
|
|
| diamond3351 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 13.1.2006 Репутация: нет Всего: нет |
Есть драйвер сетевого устройства, выполенный в виде модуля ядра. Модуль грузится, устройство регестрируется в системе, его можно поднимать и опускать с помощью ifconfig. Что нужно писать(на С), чтобы выполнить ioctrl()? Для ioctrl нужно знать "дескриптор" устройства, а я знаю только имя. Как получить у ядра указатель на сетевое устройство, зная его имя?
|
|||
|
||||
| bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 4 Всего: 317 |
open() ?
-------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
| diamond3351 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 13.1.2006 Репутация: нет Всего: нет |
так open() что? пусть устройство называется driver, как его открывать?
|
|||
|
||||
| bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 4 Всего: 317 |
все это делается в userland, ты хотел узнать fd для ioctl().
делаешь:
Это сообщение отредактировал(а) bilbobagginz - 15.1.2006, 02:18 -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
| diamond3351 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 13.1.2006 Репутация: нет Всего: нет |
Спасибо!...
Правда я вчера перерыл исзодники ifconfig, и вроде это слегка по другому делается fd = socket( /* какие-то параметры */ ); ioctrl(fd, command, "device"); Мне кажется (может я ошибаюсь) что сетевые устройства на создают файлов в каталоге /dev/ ? |
|||
|
||||
| diamond3351 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 13.1.2006 Репутация: нет Всего: нет |
Проверил - действительно, сетевые устройства не создают файлы в каталоге /dev/. Писать нужно так:
struct ifreq ifr; int skfd; skfd = socket(AF_UNIX, SOCK_DGRAM, 0); strncpy(ifr.ifr_name, driver_name, IFNAMSIZ); if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0) { fprintf(stderr, "%s: unknown interface (module not loaded?)\n", ifr.ifr_name); return (-1); } И дальше таким образом через ioctl |
|||
|
||||
| cenix |
|
|||
|
/dev/null ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 7.8.2004 Репутация: нет Всего: 4 |
diamond3351
Все устройства в никсах и не только они лежат в /dev, только так никсы работают с устройствами. В том числе там находятся и сетевые устройства, и многое другое(мышь, клава, терминал, список процессов ...) |
|||
|
||||
| dwr_budr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 11.4.2004 Репутация: нет Всего: 2 |
cenix
На сетевые устройства абстракция "устройство-файл" не распространяется и в /dev нет файлов представляющих сетевые интерфейсы. |
|||
|
||||
| cenix |
|
|||
|
/dev/null ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 7.8.2004 Репутация: нет Всего: 4 |
dwr_budr
Насколько я знаю, обращение ко всем устройствам идет через файлы, точно утверждать не буду, но вот подтверждение того, что у меня есть в /dev файлы сетевых устройств.
не знаю как в линухе, но я думаю так же, отсюда видно что у меня есть интерфейс de0(сетевая), которая есть ссылкой прямо в /dev под именем net1, и сам файл в каталоге /dev/net. возражения, предложения ?.. |
|||
|
||||
| dwr_budr |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 11.4.2004 Репутация: нет Всего: 2 |
Я FreeBSD в глаза не видел и ничего о его ядре не читал, посему спорить не буду и поверю на слово.
Но мой пост был по поводу Линукса и я могу лишь еще раз повторить, что в Линуксе сетевые интерфейсы не представленны в виде файлов. Для подтверждения и разъяснения полистай самое начало 17й главы этой книги. |
|||
|
||||
| cenix |
|
|||
|
/dev/null ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 7.8.2004 Репутация: нет Всего: 4 |
dwr_budr
видимо в линухе по-другому сделано, но в общем запустил в виртуалке линух, поглядел в /dev и не нашел там файла интерфейса, а потом почитал 17 главу, и нашел там это:
это меня убедило окончательно как я понял, походу в линухе устройства сетевые создаются динамически, а во фре только при старте системы они опознаются. в общем походу оба правы, только я думал что не так сильно различается поддержка сети между ними. |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |