|
|
  |
Вышла предварительная версия TN NET TCP/IP stack |
|
|
|
May 25 2010, 18:23
|
Частый гость
 
Группа: Участник
Сообщений: 180
Регистрация: 5-04-09
Пользователь №: 47 205

|
Цитата(yuri_t @ May 25 2010, 21:59)  Можно Здоровско! Цитата(yuri_t @ May 25 2010, 21:59)  На какой процессор собрались портировать ? Два процессора - LM3S6965 и MCF52236.
|
|
|
|
|
Jun 4 2010, 20:32
|
Группа: Участник
Сообщений: 12
Регистрация: 15-07-09
Пользователь №: 51 296

|
Во время разработки своего проекта столкнулся со следующей проблемой: На одном сокете UDP происходит приём запроса через s_recvfrom, а затем отправка ответа через s_sendto. Так вот, после получения запроса данные в полях sin_addr.s__addr и sin_port структуры sockaddr__in указывающей на отправителя запроса содержатся в перевёрнутом виде (в intel формате). Перед отправкой данных порядок байтов данных полей приходится переворачивать. В для устранения данной ситуации недрах стека в функции udp_s_recvfrom модифицировал код: Код // sin->sin_port = ntohs(ui->ui_sport); // sin->sin_addr.s__addr = ntohl(ui->ui_src.s__addr); sin->sin_port = ui->ui_sport; sin->sin_addr.s__addr = ui->ui_src.s__addr; Всё заработало. Вопрос: корректна ли данная модификация или необходимо лезть глубже? Или вообще ничего модифицировать не надо, а так и должно быть? Контроллер lpc2368. Сильно не пинайте - это мои первые потуги в сетевом программировании, сетевым программированием я раньше не занимался, а на изучение исходного кода к сожалению нет времени.
|
|
|
|
|
Sep 17 2010, 15:19
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 2-01-09
Пользователь №: 42 891

|
Добрый день. Есть устройство, работающее по TCP с Win хостом. Проблема в следующем: при активном подключении, если на устройстве сделать аппаратный RESET, оно как и положено в оставшийся открытым с точки зрения Win хоста сокет шлет RST. Но Win при этом продолжает делать посылки\перепослыки не воспринимая RST и не сообщая на верх об ошибке. Это приводит к тому, что реальное отключение приложения от сокета происходит только через минуту, что в моем случае неприемлемо. Есть ли какие нибудь варианты решить эту проблему? На устройстве стек TN_NET. На картинке суть проблемы. Всем заранее спасибо.
Сообщение отредактировал grinux - Sep 17 2010, 15:23
Эскизы прикрепленных изображений
|
|
|
|
|
Sep 20 2010, 17:07
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 2-01-09
Пользователь №: 42 891

|
Сравнил работу устройства с Wiznet(правое окно), такой проблемы не обнаружил. Отличия только в дополнительном ARP запросе со стороны TN_NET, а также в том, что в пакете от Wiznet ack number отличен от нуля. Пробовал и в TN_NET вставлять ненулевой ack, но безрезультатно. Возможно дело в предварительном ARP запросе, но чтобы это отключить, нужно порядком поковыряться в исходниках.
Сообщение отредактировал grinux - Sep 20 2010, 17:10
Эскизы прикрепленных изображений
|
|
|
|
|
Sep 21 2010, 14:03
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 2-01-09
Пользователь №: 42 891

|
Цитата(Rst7 @ Sep 21 2010, 16:49)  Перенес в топик посты из соседней темы по просьбе топикстартера. По совету Rst7 выкладываю фалы дампов. Дампы иллюстрируют следующую последовательность действий: установить телнет сессию, перезагрузить устройство, послать символ с клавиатуры в окно терминала установленной до перезагрузки устрйоства телнет сессии.
|
|
|
|
|
Sep 21 2010, 15:54
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 2-01-09
Пользователь №: 42 891

|
Цитата(Rst7 @ Sep 21 2010, 18:44)  Секундочку, а почему контрольная сумма TCP для пакетов c RST некорректна?
В стеке забыли вызвать считатель контрольной суммы при отсылке пакета с RST? Стек не трогал, только экспериментировал с ненулевым ack в пакете с RST. Проверка КС для TCP была отключена в настройках WS, сейчас включил и увидел это у себя Сейчас буду смотреть, что там с подсчетом КС. Ошибка в функции tcp_respond(). Калькуляция КС TCP делалась по всему IP пакету (закомментировано), скопировал правильный вызов из tcp_output(). Все заработало. Код //th->th_sum = in_cksum(m, tlen); th->th_sum = in4_cksum(m, IPPROTO_TCP, //-- to force calc TCP pseudo header sizeof(struct ip), //-- off; see above m->m_tlen - sizeof(struct ip)); //-- len = TCP header + data Спасибо Дмитрию.
Сообщение отредактировал grinux - Sep 21 2010, 14:59
|
|
|
|
|
Sep 22 2010, 11:33
|
Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937

|
Большое спасибо Григорию, Дмитрию и вообше всем пользователям TN NET за найденные (и, главное, исправленные) ошибки !!! К сожалению, мои возможности тестирования (и, следовательно, улучшения) TN NET очень ограничены. Поэтому большая просьба ко всем пользователям TN NET - пишите, пожалуйста, обо всех проблемах и найденных багах(в любой форме - через e-mail конференции, на e-mail yuri at tnkernel.com, задавая вопросы в конференции etc.) .
|
|
|
|
|
Sep 27 2010, 13:11
|
Частый гость
 
Группа: Свой
Сообщений: 92
Регистрация: 22-06-05
Из: Украина, г.Боярка
Пользователь №: 6 238

|
Цитата(yuri_t @ Sep 22 2010, 14:33)  Большое спасибо Григорию, Дмитрию и вообше всем пользователям TN NET за найденные (и, главное, исправленные) ошибки !!! К сожалению, мои возможности тестирования (и, следовательно, улучшения) TN NET очень ограничены. Есть небольшое пожелание - обновите, с учетом исправленых ошибок, версию на сайте.
|
|
|
|
|
Sep 30 2010, 08:56
|

Частый гость
 
Группа: Участник
Сообщений: 123
Регистрация: 28-06-05
Из: Тула
Пользователь №: 6 361

|
Цитата(yuri_t @ Sep 22 2010, 15:33)  ... Поэтому большая просьба ко всем пользователям TN NET - пишите, пожалуйста, обо всех проблемах и найденных багах(в любой форме - через e-mail конференции, на e-mail yuri at tnkernel.com, задавая вопросы в конференции etc.) . Заметил, что ARP запросы идут со случайным МАС отправителя. Так и должно быть? Поправить просто: в функции arp_request() добавить строку CODE eh = mtod(mb, struct ether_header *); ea = (struct ether_arp *)(mb->m_data + sizeof(struct ether_header));
bzero((unsigned char *)ea, sizeof (*ea)); bcopy((unsigned char *)etherbroadcastaddr, (unsigned char *)eh->ether_dhost, MAC_SIZE); bcopy((unsigned char *)&ni->hw_addr, (unsigned char *)eh->ether_shost, MAC_SIZE); //add
Результат:
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|