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

 
 
> stm32 LwIp, Как работать с фреймами Ethernet
TolikG
сообщение Jan 21 2014, 13:19
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 86
Регистрация: 19-03-10
Пользователь №: 56 071



Использую STM32F4 + FreeRtos + LwIp.
Возникла задача принимать некоторые фреймы Ethernet, обрабатывать их не пропуская в стек LwIp, после обработки посилать в Ethernet. При этом не нарушить работоспособность стека LwIp.
Подскажите в каком месте следует перефатывать принятые фреймы, и как передать свой фрейм. Разобраться в исходниках ядра не смог - натыкаюсь на бесконечные переопределения, указатели, семафоры, очереди.
Вобщем не смог проследить путь от netconn_write() до места где данные уходят наружу, там мог бы и подменить буфер с фреймом.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 23)
Log_in
сообщение Jan 22 2014, 06:02
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 9-06-12
Пользователь №: 72 244



Вот пример от терраэлектроники как они реализуют прием и отправку по Ethernet. Можно попытаться сделать разграничение по двум типам приема: в ручную и стеком. http://forum.promelec.ru/index.php/topic,1828.15.html

Сообщение отредактировал Log_in - Jan 22 2014, 06:03
Прикрепленные файлы
Прикрепленный файл  _______.rar ( 1.61 мегабайт ) Кол-во скачиваний: 71
 
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 22 2014, 06:40
Сообщение #3


Гуру
******

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



Цитата(TolikG @ Jan 21 2014, 17:19) *
Подскажите в каком месте следует перефатывать принятые фреймы, и как передать свой фрейм. Разобраться в исходниках ядра не смог - натыкаюсь на бесконечные переопределения, указатели, семафоры, очереди.

Если прямо кадры Ethernet - то в так называемом "драйвере" STM32 Ethernet MAC. Драйвер написан кодерами-индусами из ST, так что разбираться тоже будет непросто. Кстати, мой самописный драйвер имеет размер всего 450 строк.
Если достаточно перехвата пакетов IP, то в lwip для этого есть штатные средства.
Go to the top of the page
 
+Quote Post
TolikG
сообщение Jan 23 2014, 06:14
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 86
Регистрация: 19-03-10
Пользователь №: 56 071



Цитата(scifi @ Jan 22 2014, 10:40) *
Если прямо кадры Ethernet - то в так называемом "драйвере" STM32 Ethernet MAC. Драйвер написан кодерами-индусами из ST, так что разбираться тоже будет непросто. Кстати, мой самописный драйвер имеет размер всего 450 строк.
Если достаточно перехвата пакетов IP, то в lwip для этого есть штатные средства.

В lwIp я не шибко силен - читал что есть raw-функции, которые можно использовать если не используется многозадачность. Я так понял, что либо FreeRtos без lwip - либо lwIp без многозадачности?
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 23 2014, 06:47
Сообщение #5


Гуру
******

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



Цитата(TolikG @ Jan 23 2014, 10:14) *
Я так понял, что либо FreeRtos без lwip - либо lwIp без многозадачности?

Неправильно поняли. Почитайте немного там. А вообще lwip плохо документирован, конечно. Информацию приходится собирать в разных местах, а также внимательно изучать имеющиеся примеры. И уж точно никто вам в форуме не даст волшебное заклинание, от которого всё сразу заработает.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jan 23 2014, 07:31
Сообщение #6


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

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



Цитата(scifi @ Jan 22 2014, 10:40) *
...размер всего 450 строк...


основное это не кол-во строк, хотя это не плохой показатель, а в большей правильности (читай продуктивности) использования железа...
в указанном стэке, в основе лежит поллинг (например), или использование DMA по фиксированным адресам... и т.п.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 23 2014, 08:10
Сообщение #7


Гуру
******

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



Цитата(TolikG @ Jan 23 2014, 10:14) *
В lwIp я не шибко силен - читал что есть raw-функции, которые можно использовать если не используется многозадачность. Я так понял, что либо FreeRtos без lwip - либо lwIp без многозадачности?


это не про LwIP просто, а про LwIP на софтварных процах микроблайза. Там LwIP завернут в библиотеку, и у него 2 режима работы. Raw и Socket, первый без операционок, а второй требует операционки. Но это все про ксалинкс, плис, и их микроблайз.

Для АРМ и прочего может быть не так, если вы только ихнюю же библиотеку как то не прикрутите, или вам не попались их исходники, или в LwIP для армов изначально тоже все это есть...
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 23 2014, 10:06
Сообщение #8


Гуру
******

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



Цитата(Golikov A. @ Jan 23 2014, 12:10) *
Для АРМ и прочего может быть не так, если вы только ихнюю же библиотеку как то не прикрутите, или вам не попались их исходники, или в LwIP для армов изначально тоже все это есть...

При чём тут плис и арм?
lwip - вполне себе нормальная библиотека, написанная на языке Си. Работает одинаково как на армах, так и на софткорах. Процессор - он ведь и в Африке процессор.
Полистайте для разнообразия исходники lwip. Возможно, развеются какие-нибудь заблуждения.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 23 2014, 10:20
Сообщение #9


Гуру
******

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



Цитата(scifi @ Jan 23 2014, 14:06) *
При чём тут плис и арм?


ТС сказал "читал что есть raw-функции, которые можно..." такого рода деления я видел в реализации LwIP для плис, в смысле где режим полинга по таймерам называли Raw. И провел некую цепь размышлений, возможно она была не верной... извиняюсь...



Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Jan 24 2014, 06:44
Сообщение #10


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Цитата
Вобщем не смог проследить путь от netconn_write() до места где данные уходят наружу, там мог бы и подменить буфер с фреймом.


1. Вам нужно найти место где инициализируется структура
Код
  ethif->output     = etharp_output;
  ethif->linkoutput = EthernetOutput;   //EthernetOutput - Это и есть вывод фремом естесно у Вас она может по другому называться скажем так low_level_output
  ethif->input       = tcpip_input;         //tcpip_input - Сюда принятые фреймы засовываются если используется ОС и ethernet_input - если неиспользуется ОС
  ethif->mtu         = 1500;        
  ethif->flags        = NETIF_FLAG_BROADCAST|NETIF_FLAG_ETHARP; //broadcast capability


P.S. Странный подход у Вас вам нужны вреймы а вы их пытаетесь проследить от netconn_write(), не стой стороны копаете, копайте со стороны драйвера МАС.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jan 24 2014, 10:08
Сообщение #11


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

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



Цитата(Golikov A. @ Jan 23 2014, 14:20) *
...режим полинга по таймерам называли Raw..


как бы роу - в контексте стэка, имеется ввиду сырые пакеты. т.е. юзверь стэка может формировать
сам пакеты и сказать - а теперь передатчик съешь это всё. это становится понятно, когда загляните в исходники lwip - там прямо
такие кейсы и встретите по коду
SOCK_RAW
LWIP_RAW
MEMP_RAW_PCB
PBUF_RAW
NETCONN_RAW

а как это обслуживает стэк - поллинг или прерывания или там сбоку подпрыгивает - пофигу...
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Jan 27 2014, 12:45
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Разбираюсь с исходниками lwip, настроек очень много, на какие стоит обратить внимание в первую очередь?
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Jan 28 2014, 06:03
Сообщение #13


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Цитата
как бы роу - в контексте стэка, имеется ввиду сырые пакеты. т.е. юзверь стэка может формировать
сам пакеты и сказать - а теперь передатчик съешь это всё. это становится понятно, когда загляните в исходники lwip - там прямо
такие кейсы и встретите по коду


Не стоит путать сырые пакеты IP с фреймами изернет где могут передаваться фреймы отличные от IP протокола, а RAW сокеты работают с IP пакетами.
Go to the top of the page
 
+Quote Post
TolikG
сообщение Jan 30 2014, 13:16
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 86
Регистрация: 19-03-10
Пользователь №: 56 071



Цитата(MALLOY2 @ Jan 24 2014, 10:44) *
1. Вам нужно найти место где инициализируется структура
Код
  ethif->output     = etharp_output;
  ethif->linkoutput = EthernetOutput;   //EthernetOutput - Это и есть вывод фремом естесно у Вас она может по другому называться скажем так low_level_output
  ethif->input       = tcpip_input;         //tcpip_input - Сюда принятые фреймы засовываются если используется ОС и ethernet_input - если неиспользуется ОС
  ethif->mtu         = 1500;        
  ethif->flags        = NETIF_FLAG_BROADCAST|NETIF_FLAG_ETHARP; //broadcast capability


P.S. Странный подход у Вас вам нужны вреймы а вы их пытаетесь проследить от netconn_write(), не стой стороны копаете, копайте со стороны драйвера МАС.

Устройство должно выполнять следующие задачи:
- WEB - cтраничка для оперативного управления
- FTP-сервер для удаленного обновления
- маршрутизация (пересылка некоторых фреймов в необработанном виде) в другие (не Eternet!) интерфейсы (UART, SPI...) и обратно из других интерфейсов в Eternet.

Покопался в исходниках LwIp со стороны обработчика прерываний - вышел на функции low_level_input(), low_level_output(). Думаю получится.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 30 2014, 13:34
Сообщение #15


Гуру
******

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



Цитата(TolikG @ Jan 30 2014, 17:16) *
- маршрутизация (пересылка некоторых фреймов в необработанном виде) в другие (не Eternet!) интерфейсы (UART, SPI...) и обратно из других интерфейсов в Eternet.

Пересылка голых кадров Ethernet? Зачем? Через UDP было бы удобнее.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 30 2014, 16:19
Сообщение #16


Гуру
******

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



ну да. Вам и контрольную сумму посчитают, и мак адрес проверят, зачем эту работу самому то делать? А главное чего вы выиграете, только стэк сбивать будите.

Сделайте доп порт UDP, а лучше TCP. И все что льется на него просто транслируйте в другие интерфейсы, стэк все равно крутиться...
Go to the top of the page
 
+Quote Post
TolikG
сообщение Jan 31 2014, 05:49
Сообщение #17


Частый гость
**

Группа: Свой
Сообщений: 86
Регистрация: 19-03-10
Пользователь №: 56 071



Цитата(scifi @ Jan 30 2014, 17:34) *
Пересылка голых кадров Ethernet? Зачем? Через UDP было бы удобнее.

Чтобы не зависеть от протокола - отбор кадров по МАС адресу источника.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 31 2014, 06:03
Сообщение #18


Гуру
******

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



Цитата(TolikG @ Jan 31 2014, 09:49) *
Чтобы не зависеть от протокола - отбор кадров по МАС адресу источника.

Ни капли ясности не прибавилось. Какая такая "зависимость от протокола"? Чем это плохо? Весь мир зависит от ARP, IP, TCP и т.д. - и не тужит.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 31 2014, 11:07
Сообщение #19


Гуру
******

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



и не понятно откуда возьмутся независящие от протокола кадры? Вы уверены что все свичи, маршрутиризаторы и хабы в езернет сети пропустят какие - то голые кадры?

Даже если представить что у вас сеть состоит из нормальной ТСР, и ваших устройств где вы не хотите морочиться со стэком для обмена между устройствами, то уж UDP пакет собрать вообще ничего не стоит, контрольную сумму то к данным всяко добавлять надо, как и адрес назначения.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jan 31 2014, 20:00
Сообщение #20


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

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



Цитата(Golikov A. @ Jan 31 2014, 15:07) *
..то уж UDP пакет собрать вообще ничего не стоит, контрольную сумму то к данным всяко добавлять надо, как и адрес назначения.


это пока какой нить (программно настраиваемый) свитч не порежет IP по 100 байт sm.gif
вот тогда все костыли идут лесом...
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 1 2014, 10:27
Сообщение #21


Гуру
******

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



Цитата(kolobok0 @ Feb 1 2014, 00:00) *
это пока какой нить (программно настраиваемый) свитч не порежет IP по 100 байт sm.gif
вот тогда все костыли идут лесом...

Между прочим, lwip умеет как разбивать IP пакеты на кусочки, так и собирать их обратно.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Feb 2 2014, 10:34
Сообщение #22


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

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



Цитата(scifi @ Feb 1 2014, 14:27) *
Между прочим, lwip...


апсолютно верно (если скомпилировали с опцией реассемблирования).
Вы бы хоть почитали реплику на которую я так ответилsm.gif
Go to the top of the page
 
+Quote Post
TolikG
сообщение Feb 3 2014, 06:19
Сообщение #23


Частый гость
**

Группа: Свой
Сообщений: 86
Регистрация: 19-03-10
Пользователь №: 56 071



Цитата(scifi @ Jan 31 2014, 10:03) *
Ни капли ясности не прибавилось. Какая такая "зависимость от протокола"? Чем это плохо? Весь мир зависит от ARP, IP, TCP и т.д. - и не тужит.

Так поставлена задача. Неизвестно, какой протокол нужно будет маршрутизировать. К "другим" интерфейсам будет подключен некий модем (проводной, радио...) через который будут передаваться-приниматься фреймы с аналогичного устройства. Модем - не моя задача. Руководитель проекта - программист верхнего уровня - не воспринимает перечисленные Вами аргументы, хотя я с большинством замечаний полностью согласен smile3046.gif
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 3 2014, 08:23
Сообщение #24


Гуру
******

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



какой бы протокол ни был всегда можно его посылку завернуть в UDP/TCP, а в проце, взять данные и послать дальше, обратный канал аналогично. В этом случае вы не нарушаете сеть, и можете принимать-посылать данные виндусом, и прочими операционками.

Мне трудно представить хоть какое-то готовое устройство с Езернет подключением, у которого на выходе был бы свой какой-то неизвестный протокол. Это кто же такое сделает, и как оно работать то будет?

Обратите внимание вашего верховного программистаsm.gif что ему не предлагают делать свой протокол, просто в качестве транспорта данных (капсулы для них) разумно использовать стандартный протокол, поддержанный стэком, с обеспечением целостности данных и прочего. Процессор получает пакет, извлекает из него данные и не думаю что там шлет их дальше. Полученные данные из вне, также не думаю заворачивает в UDP и шлет обратно. Да все так делают...
Go to the top of the page
 
+Quote Post

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

 


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


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