реклама на сайте
подробности

 
 
> stm32f217 MAC перестает считать CRC для исходящих пакетов
alexp74
сообщение May 28 2015, 12:59
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 20-05-15
Пользователь №: 86 787



Добрый день

Столкнулся с такой проблемой. Система на stm32f217 работает под FreeRTOS. Использую LWIP и самопальный вэб сервер. Помимо этого идет двунаправленный поток UDP пакетов и отдельно медленный TCP коннект к другому серверу. Если вэб сервер хорошо нагрузить, например с помошью JMeter, то через некоторое случайное время MAC начинает отправлять пакеты с нулевой CRC. Естественно комп их дропает. Все рвется. Потом медленный TCP коннект пытается подключится к компу и шлет повторно SYN пакет с CRC0 в попытке восстановить соединение. Пока помогает только перезагрузка. Дискрипторы в норме. TDES0: 0x30D00000.
Нашел жалобу на это, но без решения... http://lwip.100.n7.nabble.com/CRC-of-each-...F4-td23334.html
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
scifi
сообщение May 28 2015, 13:03
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(alexp74 @ May 28 2015, 15:59) *
Нашел жалобу на это, но без решения...

В этой жалобе путаница: контрольная сумма заголовка IP или некая CRC (Ethernet frame CRC?) Короче, непонятно.
Если речь идёт о контрольной сумме заголовка, то можно отключить подсчёт в железе, пусть lwip считает.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение May 28 2015, 13:20
Сообщение #3


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(alexp74 @ May 28 2015, 15:59) *
..Пока помогает только перезагрузка...


всё очень просто.
смотрите анализатором где именно косяк в пакете.
по пути формирования логической цепочки в LWIP ставите ловушки на специфичные для этой ошибки данные.
и ловите...

чиссо из опыта - очень смахивает на плохой анализ состояния канала
(это та логика, что отрабатывает по таймеру - очистка, подтверждения и прочая лабуда).
В своё время обнаружил там тупое отсутствие строк 5. Как последствие - долго рвётся соединения при определённых окончании сессии,
кушается память и дескрипторы, разрываются сессии и прочая хрень... такое очучение, что кто то тупо рабочий код "подкорректировал"
(отсутствует обработчик именно с одним состоянием канала). и проявляться будет не всегда.

и переиначивая знаменитые слова..
так, что либы либами, но надо же и думку иметь...sm.gif

удачи вам
Go to the top of the page
 
+Quote Post
alexp74
сообщение May 28 2015, 16:06
Сообщение #4





Группа: Участник
Сообщений: 11
Регистрация: 20-05-15
Пользователь №: 86 787



Цитата(scifi @ May 28 2015, 16:03) *
В этой жалобе путаница: контрольная сумма заголовка IP или некая CRC (Ethernet frame CRC?) Короче, непонятно.
Если речь идёт о контрольной сумме заголовка, то можно отключить подсчёт в железе, пусть lwip считает.
Если смотреть лог, то в пакете 451 уже нет CRC TCP, а в следующем пакете нет и контрольной суммы заголовка. Не суть важно, как их автор назвал.


Цитата(kolobok0 @ May 28 2015, 16:20) *
всё очень просто.
смотрите анализатором где именно косяк в пакете.
по пути формирования логической цепочки в LWIP ставите ловушки на специфичные для этой ошибки данные.
и ловите...

чиссо из опыта - очень смахивает на плохой анализ состояния канала
(это та логика, что отрабатывает по таймеру - очистка, подтверждения и прочая лабуда).
В своё время обнаружил там тупое отсутствие строк 5. Как последствие - долго рвётся соединения при определённых окончании сессии,
кушается память и дескрипторы, разрываются сессии и прочая хрень... такое очучение, что кто то тупо рабочий код "подкорректировал"
(отсутствует обработчик именно с одним состоянием канала). и проявляться будет не всегда.

и переиначивая знаменитые слова..
так, что либы либами, но надо же и думку иметь...sm.gif

удачи вам
контрольные суммы и CRC считает аппаратно MAC. Можно конечно это отключить, и считать ручками или встроенным CRC. Но проблема в том, что MAC неожиданно перестает считать.
Состояние канала роли не играет. После закрытия сокета, создания нового и вызова connect - формируется пакет SYN без CRC.
Go to the top of the page
 
+Quote Post
alexp74
сообщение May 29 2015, 08:37
Сообщение #5





Группа: Участник
Сообщений: 11
Регистрация: 20-05-15
Пользователь №: 86 787



пока помогает flush TX Fifo
осталось решить, когда его дергать
наверное сделаю пока профилактически перед отправкой пакета, если весь TX тракт отдыхает...
Go to the top of the page
 
+Quote Post
scifi
сообщение May 29 2015, 09:48
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(alexp74 @ May 28 2015, 19:06) *
Если смотреть лог, то в пакете 451 уже нет CRC TCP

Вы, наверное, не в курсе, что такое CRC. Почитайте на досуге. У TCP нет никакого CRC, там некая контрольная сумма.

Цитата(alexp74 @ May 28 2015, 19:06) *
Не суть важно, как их автор назвал.

Вообще-то важно. Поначалу я думал, что мы обсуждаем Ethernet Frame Check Sequence. Ну и зачем вносить эту путаницу на ровном месте?

Цитата(alexp74 @ May 29 2015, 11:37) *
пока помогает flush TX Fifo
осталось решить, когда его дергать
наверное сделаю пока профилактически перед отправкой пакета, если весь TX тракт отдыхает...

Похоже на танец с бубном. С другой стороны, на безрыбье и рак рыба...
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 29 2015, 10:46
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Вы, наверное, не в курсе, что такое CRC. Почитайте на досуге. У TCP нет никакого CRC, там некая контрольная сумма.

ТСР это одна из матрешек с обычной 16 битной суммой. Но если дойти до данных что пойдут по сети, там все таки CRC есть.

И хорошо когда ее считает железо. Я так понимаю происходит какой-то конфликт, данные застревают в ТХ, возможно их туда пихают быстрее чем они уходят в драйвере нет контроля. И потомувсе ломается. Сброс буфера - вовзрат в начальное состояние и CRC возвращается, мне кажется что как-то так...
Go to the top of the page
 
+Quote Post
alexp74
сообщение May 29 2015, 11:53
Сообщение #8





Группа: Участник
Сообщений: 11
Регистрация: 20-05-15
Пользователь №: 86 787



Цитата(Golikov A. @ May 29 2015, 13:46) *
И хорошо когда ее считает железо. Я так понимаю происходит какой-то конфликт, данные застревают в ТХ, возможно их туда пихают быстрее чем они уходят в драйвере нет контроля. И потомувсе ломается. Сброс буфера - вовзрат в начальное состояние и CRC возвращается, мне кажется что как-то так...

Возможно. Но тогда это проблема MAC контроллера. Он заведует наполнением Tx FIFO из буфера в памяти.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th July 2025 - 05:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01423 секунд с 7
ELECTRONIX ©2004-2016