Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Драйвер сетевого устройства, Вопрос 
:(
    Опции темы
diamond3351
Дата 13.1.2006, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 13.1.2006

Репутация: нет
Всего: нет



Есть драйвер сетевого устройства, выполенный в виде модуля ядра. Модуль грузится, устройство регестрируется в системе, его можно поднимать и опускать с помощью ifconfig. Что нужно писать(на С), чтобы выполнить ioctrl()? Для ioctrl нужно знать "дескриптор" устройства, а я знаю только имя. Как получить у ядра указатель на сетевое устройство, зная его имя?
PM MAIL   Вверх
bilbobagginz
Дата 14.1.2006, 04:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 4
Всего: 317



open() ?
smile



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
diamond3351
Дата 14.1.2006, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 13.1.2006

Репутация: нет
Всего: нет



так open() что? пусть устройство называется driver, как его открывать? smile
PM MAIL   Вверх
bilbobagginz
Дата 15.1.2006, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 4
Всего: 317



все это делается в userland, ты хотел узнать fd для ioctl().
делаешь:
Код

....
/** где-то надо объявить о int myfd=-1; */
....
if (-1==(myfd=open("/dev/driver",O_NONBLOCK))){
    perror("блин...ошибка:");
    /* выход */
    return -1;
}
/** а теперь у нас есть живой дескриптор: */
ioctl(myfd,.....);
...
...


Это сообщение отредактировал(а) bilbobagginz - 15.1.2006, 02:18


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
diamond3351
Дата 15.1.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 13.1.2006

Репутация: нет
Всего: нет



Спасибо!...
Правда я вчера перерыл исзодники ifconfig, и вроде это слегка по другому делается
fd = socket( /* какие-то параметры */ );
ioctrl(fd, command, "device");

Мне кажется (может я ошибаюсь) что сетевые устройства на создают файлов в каталоге /dev/ ?
PM MAIL   Вверх
diamond3351
Дата 16.1.2006, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
cenix
Дата 16.1.2006, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/dev/null
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 7.8.2004

Репутация: нет
Всего: 4



diamond3351
Все устройства в никсах и не только они лежат в /dev, только так никсы работают с устройствами.
В том числе там находятся и сетевые устройства, и многое другое(мышь, клава, терминал, список процессов ...)
PM MAIL   Вверх
dwr_budr
Дата 16.1.2006, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 11.4.2004

Репутация: нет
Всего: 2



cenix
На сетевые устройства абстракция "устройство-файл" не распространяется и в /dev нет файлов представляющих сетевые интерфейсы.
PM MAIL   Вверх
cenix
Дата 17.1.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/dev/null
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 7.8.2004

Репутация: нет
Всего: 4



dwr_budr
Насколько я знаю, обращение ко всем устройствам идет через файлы,
точно утверждать не буду, но вот подтверждение того, что у меня есть в /dev файлы сетевых устройств.
Код

freebsd# ifconfig                                                      
de0: flags=108843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500     
        inet 192.168.123.7 netmask 0xffffff00 broadcast 192.168.123.255
        inet6 fe80::203:ffff:fe7f:84a0%de0 prefixlen 64 scopeid 0x1    
        ether 00:03:ff:7f:84:a0                                        
        media: Ethernet autoselect (100baseTX)     
        status: active     

freebsd# ls -laG /dev

dr-xr-xr-x   2 root   wheel          512 Dec 15 12:39 net              
lrwxr-xr-x   1 root   wheel            7 Dec 15 12:39 net1 -> net/de0  
lrwxr-xr-x   1 root   wheel            9 Dec 15 12:39 net2 -> net/plip0
lrwxr-xr-x   1 root   wheel            7 Dec 15 12:39 net3 -> net/lo0  

freebsd# ls -la net                                   
total 1                                               
dr-xr-xr-x  2 root  wheel       512 Dec 15 12:39 .    
dr-xr-xr-x  4 root  wheel       512 Dec 15 12:39 ..   
crw-------  1 root  wheel  253,   1 Dec 15 12:39 de0  
crw-------  1 root  wheel  253,   3 Dec 15 12:39 lo0  
crw-------  1 root  wheel  253,   2 Dec 15 12:39 plip0


не знаю как в линухе, но я думаю так же,
отсюда видно что у меня есть интерфейс de0(сетевая), которая есть ссылкой прямо в /dev под именем net1, и сам файл в каталоге /dev/net.
возражения, предложения ?..
PM MAIL   Вверх
dwr_budr
Дата 18.1.2006, 06:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 11.4.2004

Репутация: нет
Всего: 2



Я FreeBSD в глаза не видел и ничего о его ядре не читал, посему спорить не буду и поверю на слово.
Но мой пост был по поводу Линукса и я могу лишь еще раз повторить, что в Линуксе сетевые интерфейсы не представленны в виде файлов. Для подтверждения и разъяснения полистай самое начало 17й главы этой книги.
PM MAIL   Вверх
cenix
Дата 18.1.2006, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/dev/null
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 7.8.2004

Репутация: нет
Всего: 4



dwr_budr
видимо в линухе по-другому сделано, но в общем запустил в виртуалке линух, поглядел в /dev и не нашел там файла интерфейса, а потом почитал 17 главу, и нашел там это:
Цитата

There are a few important differences between mounted disks and packet-delivery interfaces.To begin with,a disk exists as a special file in the /dev directory, whereas a network interface has no such entrypoint.The normal file operations (read,write,and soon)do not make sense when applied to network interfaces,so it is not possible to apply the Unix “everythingisafile”approach to them.Thus, network interfaces exist in their own namespace and export a different set of operations.

это меня убедило окончательно smile
как я понял, походу в линухе устройства сетевые создаются динамически, а во фре только при старте системы они опознаются.
в общем походу оба правы, только я думал что не так сильно различается поддержка сети между ними.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.