Страниц: [1] 2 3
  Печать  
Автор Тема: Чтение всех данных из сети  (Прочитано 15819 раз)
pvk
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« : Июня 23, 2005, 12:16:56 pm »

Помогите, плиз: необходимо вычитывать из сети всю поступающую информацию, включая адреса, служебные байты и т.д.
Функция recvfrom, естественно, не подходит, ибо читает только данные.
Может есть у кого ссылки на примеры и т.п.
Записан
MikeP
Участник
*
Offline Offline

Сообщений: 6


Просмотр профиля WWW
« Ответ #1 : Июня 23, 2005, 12:59:50 pm »

http://www.qnx.com/developers/docs/momentics621_docs/neutrino/lib_ref/r/recvmsg.html

А это не пробовали?
Записан
pvk
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #2 : Июня 23, 2005, 01:32:17 pm »

recvmsg  - это хорошо, но мне нужно получать из сети не только пакеты, которые адресованы на мой ip-шник и какой-то определенный порт, а все пакеты (на любой порт).
А recvmsg использует сокет, которые определяется портом.
Записан
MikeP
Участник
*
Offline Offline

Сообщений: 6


Просмотр профиля WWW
« Ответ #3 : Июня 23, 2005, 01:43:23 pm »

Тогда только свою приблуду к io-net писать:
http://mikep.qnx.org.ru/store/my/nfm-ntc.tar.gz
Записан
MikeP
Участник
*
Offline Offline

Сообщений: 6


Просмотр профиля WWW
« Ответ #4 : Июня 23, 2005, 01:44:40 pm »

Можете прям эту приблуду использовать - она именно для захвата предназначена.
Только об авторстве не забывайте
Записан
pvk
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #5 : Июня 23, 2005, 01:52:26 pm »

Спасибо, MikeP, наверное это как раз пригодится.
Мне это нужно для маршрутизатора.
А об авторстве не забуду - всем буду про Вас рассказывать
Записан
MikeP
Участник
*
Offline Offline

Сообщений: 6


Просмотр профиля WWW
« Ответ #6 : Июня 23, 2005, 02:36:22 pm »

мдя? для маршрутизатора?
что-то это мне напоминает.....

З.Ы. Тс-с-с... про меня никому не слова... только если спросят

З.З.Ы. Если что-то будет непонятно - обращайтесь...
Записан
pvk
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #7 : Июня 29, 2005, 12:03:25 pm »

To MikeP: спасибо за пример, он очень мне помого.
Но возникли еще кое-какие вопросы:
в каких случаях нужно после ф-ии tx_up вызывать ф-ю tx_done?
Записан
pvk
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #8 : Июня 29, 2005, 12:35:02 pm »

И вообще, есть ли какая-то документация по написанию приложения для io-net?
(хелп не считается )
Записан
MikeP
Участник
*
Offline Offline

Сообщений: 6


Просмотр профиля WWW
« Ответ #9 : Июня 29, 2005, 02:33:53 pm »

pvk
Приношу свои извинения, что пока не принес свежую версию nfm-ntc - завтра обязательно.

В Networking DDK help в принципе все есть.
Кроме того есть еще моя статья для книжки которую планируется выпустить. Там примеры написания фильтров и драйверов и с подробными объяснениями и рассмотрениями работы модулей и всего механизма io-net.
С книжкой пока все затихло... ничего про нее не известно...
Выложить в общий доступ пока не могу... вдруг все-таки выйдет книга - тогда проблемы с издательством. Но если еще какое-то время ничего про книгу не будет - выложу у себя на сайте для всеобщего обозрения.
Записан
pvk
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #10 : Июня 29, 2005, 03:01:17 pm »

To MikeP: про свежую nfm-ntc - буду ждать завтра

Про tx_up и tx_done - наблюдается следующая ситуация: если мы пакет не фильтруем (т.е. ntc_capture==0), то вызывается ф-я tx_up. После нее по тексту программы ВСЕГДА вызывается tx_done.
ntc_rx_up()
{
...
pass = ntc_capture();
if( pass == 0 )
{
  ntc_ion->tx_up();
}
ntc_ion->tx_done();
return 0;
}

В этом случае io-net падает SIGSEGV после ~128 принятых и переданных tx_up и tx_done пакетов.

Если же tx_done вызывать, когда ntc_capture!=0 (т.е. когда не вызывается tx_up), то все нормально.

Поэтому и возникает вопрос: когда все-таки надо вызывать tx_done после tx_up, и надо ли вообще.

В Networking DDK help сказано:
For upward-headed packets, this function is called by each module (including the originator) when finished with the packet. The single tx_done() stored in the packet is called when the ref_cnt member goes to zero.
Но я не совсем понял, что это значит

Плиз, помогите...
Записан
MikeP
Участник
*
Offline Offline

Сообщений: 6


Просмотр профиля WWW
« Ответ #11 : Июня 29, 2005, 03:24:08 pm »

При продвижении пакета вверх tx_done() нужно вызывать всегда (Если вызывается tx_up(), то после нее). Для вас этот пакет или для вышестоящего модуля.

В модуле все сделано как надо. Причина в чем-то другом.
Там не проверяется npkt на NULL. Посмотрите - может в этом причина - но это очень мало вероятно.
Записан
darkelf
QOR.Moderator
*****
Offline Offline

Сообщений: 259


Просмотр профиля
« Ответ #12 : Июня 29, 2005, 07:04:44 pm »

Кстати, может посмотрите в сторону libpcap?
Записан
pvk
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #13 : Июня 30, 2005, 12:40:53 pm »

To MikeP: Вы сегодня принесли новую nfm-ntc?
Записан
ksv
Участник
*
Offline Offline

Сообщений: 10


Просмотр профиля
« Ответ #14 : Июня 30, 2005, 03:39:28 pm »

MikeP
При продвижении пакета вверх tx_done() нужно вызывать всегда (Если вызывается tx_up(), то после нее).


Здесь попробую возразить. tx_done() внутри rx_up() вызывается в 2-х случаях:
 1. когда считаем, что пакет не должен быть передан вышестоящему модулю.
 2. если при выполнении функция tx_up() вернула признак ошибки (-1) или признак того, что пакет не был передан вышестоящему модулю по причине его отсутствия (0).

Вообще-то сценарий реализации функции rx_up зависит от типа разрабатываемого модуля (PRODUCER_DOWN, DOWN_FILTER, CONVERTER, UP_FILTER, PRODUCER_UP). В случае UP_FILTER он должен быть примерно следующим:

rx_up()
{
  ...

  pass = capture();
  if(pass == 0)
    {
     if( ion->tx_up() <= 0 )
        ion->tx_done();
    }
  else
     ion->tx_done();

  return 0;
}

  Еще, возможно, нужно пакеты с флагом _NPKT_MSG не анализировать в capture(), а передавать их наверх всегда, иначе модули протоколов могут не узнать о появлении новых устройств типа en0 ... en1 в случае их динамического подключения.
Записан
Страниц: [1] 2 3
  Печать  
 
Перейти в: