![]() |
|
Модераторы: xvr |
![]()
|
|
| dima3351 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.3.2006 Репутация: нет Всего: нет |
Я учусь писать сетевые драйверы. Реализовал функцию hard_start_xmit, которая, как я понимаю, вызывается, если модуль передает пакет. Также реализовали и прием пакета через обработчик прерываний.
это все замечательно. теперь мы пытаемся написать прогу, работающую с этим драйвером. делаю в ней форк. в ветке N1 socket(AF_UNIX, SOCK_STREAM, 0) my_addr.sin_family = AF_UNIX; my_addr.sin_port = htons(50); my_addr.sin_addr.s_addr = "100.100.100.100"; memset( &(my_addr.sin_zero), '\0', 8); bind(sfd, (struct sockaddr*) &my_addr, sizeof(struct sockaddr); listen(sfd, 10); в ветке N2 socket(AF_UNIX, SOCK_STREAM, 0); dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(50); dest_addr.sin_addr.s_addr = "100.100.100.100"; memset( &(dest_addr.sin_zero), '\0', 8); connect(sfd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr)) connect не срабатывает, пишет Invalid parametr в чем дело? параметры у bind в ветке 1 и connect в ветке 2 одинаковы... |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
dima3351,
в ветке 2 что-то непонятно т. е создается локальный сокет
но в sin_family указывается почему то AF_INET что за тип у dest_addr? (должен быть struct sockaddr_un из <sys/un.h>) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| dima3351 |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.3.2006 Репутация: нет Всего: нет |
да, глюк, пробовал и так и так - не помогает.
читал вот тут, тип соответственно struct sockaddr_in. А реально, что именно это приводит к ошибке? Опробую. |
||||
|
|||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
dima3351
для локальных сокетов порт и адрес указывать не надо надо: - семейство протоколов (в данном случае AF_UNIX) - path т. е
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
dima3351, прежде чем грешить на свой драйвер, попробуй ту же программу запустить на одном из стандартных. Если заработает, то виноват драйвер, если нет - прога.
|
|||
|
||||
| dima3351 |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.3.2006 Репутация: нет Всего: нет |
спасибо за ответы)
мне нужно, чтобы к моему устройству можно было бы обращаться чезер IP. для этого я поднимаю его, указывая IP ifconfig mcb address 100.100.100.100 up (при этом драйвер реагирует нормально, запускается функция open) а потом пытаюсь работать в программе так
но уже эти строчки не работают: bind(): -1 Cannot assign requested address
хм, а не подскажите какой-нибудь несложный ethernet драйвер? Мне в нем покопаться оччень полезно будет. |
||||||
|
|||||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
за несложность ручаться не могу drivers/net/8139cp.c -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
MAKCim,
Это сложный ;p drivers/net/8139too.c - наш выбор dima3351, Извиняюсь что припозднился... Кода, так понимаю - не будет ? Значит так, на пальцах : Упс, сорри, прозевал две строчки ифконфа... Но вообще, там AF_INET должно быть везде, это точно Добавлено @ 12:37 Вот эту шнягу замените : my_addr.sin_addr.s_addr = "100.100.100.100"; на inet_aton ("100.100.100.100", &my_addr.sin_addr). формат-то сетевой........ Добавлено @ 12:39 Объясните мне кто-нибудь каким боком тут AF_UNIX ? Это сообщение отредактировал(а) GrayCardinal - 17.11.2006, 12:35 |
|||
|
||||
| dima3351 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.3.2006 Репутация: нет Всего: нет |
большое спасибо за ответы! потихоньку ситуация проясняется.
AF_UNIX здесь действительно абсолютно левый. на чем остановился сечас: (весь код не привожу, дабы не загромождать тему. если нужно - могу весть сюда скопипастить)
Ошибка возникает при connect(): Address family not supported by protocol При этом netstat -a пишет Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:9000 *:* LISTEN то есть все вроде нормально. теперь, как я понимаю, надо прикрутить в драйвере поддержку AF_INET? |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
dima3351,
Поддержка AF_INET там по дефолту Вообще пока пакеты не начнут уходить _через_ девайс, девайс ничего и не делает. Т.е. регистрация, все у тебя на компе локальный девайс с таким-то IP. И все это все равно через loopback А дальше /sbin/route GW, как я понимаю................................. ЗЫ
А вот этого быть не должно... Скорее всего просто надо в sizeof давать не sockaddr а sockaddr_in |
|||
|
||||
| dima3351 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.3.2006 Репутация: нет Всего: нет |
привет! Я опять вернулся к своему драйверу. Сеичас точно определил, что ошибка в нем, тестовые программы бегают под loopback, но не бегуют под мои драйвер.
Первая ошибка, которую я нашел было то, что не были проинициализированы поля структуры struct net_device. Помогите найти глюк... Ошибку прога выдает ту же: Address family not supported by protocol
Это сообщение отредактировал(а) dima3351 - 19.12.2006, 13:42 |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
dima3351,
И где в приведенном куске, даже чисто теоретически, может быть ошибка ? В куче операторов "=" ? |
|||
|
||||
| BlackStar |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 134 Регистрация: 13.12.2006 Репутация: 2 Всего: 5 |
И с чего бы им бегать если mcb2_hsx возращает ноль. Советую посмотреть реализацию сетевых драйверов здесь: * виртуальные /usr/src/linux/drivers/net/dummy.c /usr/src/linux/drivers/net/loopback.c *аппаратные /usr/src/linux/drivers/net/pci-skeleton.c /usr/src/linux/drivers/net/isa-skeleton.c Это сообщение отредактировал(а) BlackStar - 19.12.2006, 13:05 |
|||
|
||||
| dima3351 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.3.2006 Репутация: нет Всего: нет |
BlackStar
огромное спасибо, особенно за ссылку на /usr/src/linux/drivers/net/dummy.c! Как раз то, что мне нужно, чтоб разобраться. GrayCardinal а вот есть тут ошибки! не хватает тут многого... |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
dima3351,
И ? Предлагаете дописать ? |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под 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. |