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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> 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
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

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

 


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


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