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

 
 
> stm32F4 ethernet отправка фрейма
Fobes
сообщение Mar 13 2016, 14:13
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 19-01-16
Пользователь №: 90 105



Всем доброго времени суток. Уже совсем измучился... Нужно отправить чисто ethernet фрейм + vlan tag + свои данные. Т.е. только канальный уровень по ОСИ.
Взял LwIp библиотеку. Как я понял в ней отправка данных происходит через буфер pbuf и при помощи функции low_level_output().
Собственно сделал свои структуры дабы время сэкономить:
CODE

struct ethernet_header
{
uint8_t dstAdr[6];
uint8_t srcAdr[6];
uint8_t type[2];
} __attribute__((packed));

struct vlan_header
{
uint8_t param[2];
uint8_t type[2];
} __attribute__((packed));

struct my_header
{
struct ethernet_header eth_hdr;
struct vlan_header vlan_hdr;
//дальше мои данные
} __attribute__((packed));


Дальше заполняю и отправляю вот так:

CODE

struct pbuf *pbuf_my;
struct my_header my_hdr;

uint32_t errCnt;
err_t error;

my_hdr.eth_hdr.dstAdr[0] = 0x01; my_hdr.eth_hdr.dstAdr[1] = 0x0C;
my_hdr.eth_hdr.dstAdr[2] = 0xCD; my_hdr.eth_hdr.dstAdr[3] = 0x04;
my_hdr.eth_hdr.dstAdr[4] = 0x00; my_hdr.eth_hdr.dstAdr[5] = 0x01;

my_hdr.eth_hdr.srcAdr[0] = 0x06; my_hdr.eth_hdr.srcAdr[1] = 0x02;
my_hdr.eth_hdr.srcAdr[2] = 0x00; my_hdr.eth_hdr.srcAdr[3] = 0xFF;
my_hdr.eth_hdr.srcAdr[4] = 0xFF; my_hdr.eth_hdr.srcAdr[4] = 0x10;

my_hdr.eth_hdr.type[0] = 0x81; my_hdr.eth_hdr.type[1] = 0x00;
//------------
my_hdr.vlan_hdr.param[0] = 0x80; my_hdr.vlan_hdr.param[1] = 0x00;
my_hdr.vlan_hdr.type[0] = 0x88; my_hdr.vlan_hdr.type[1] = 0xba;
//-----

//вот это верно делаю ? sad.gif
pbuf_my= pbuf_alloc(PBUF_RAW,sizeof(struct my_header), PBUF_RAM);
pbuf_my->payload = &my_hdr;


while (1)
{
error = gnetif.linkoutput(&gnetif, pbuf_my);

if (error != ERR_OK)
{
errCnt++;
}
}


Длина одного фрейма порядка 820 байт... Фреймы передаются,но wireshark периодически показывает "Malformed packet". И в error появляется "#define ERR_BUF -2 /* Buffer error. */" Что я делаю не так ? Как правильно использовать буфер ? sad.gif помогите плиз, знающие люди !!!
И второй вопрос, фрейм передается правильно, но vlan tag вырезается почему-то, оно где-то разрешаться должно чтоли ?

п.с. с фреймами меньшей длины такие проблемы возникают, но реже

может ли это быть связано с повреждением микросхемы физического уровня ?

Сообщение отредактировал Fobes - Mar 13 2016, 16:27
Go to the top of the page
 
+Quote Post



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

 


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


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