Easyelectronics.ru

Электроника для всех
Текущее время: 22 авг 2019, 08:01

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: LWIP RAW и HTTPD
СообщениеДобавлено: 02 июл 2019, 12:10 
Только пришел

Зарегистрирован: 02 июл 2019, 10:27
Сообщения: 7
Доброго времени суток!
У меня возникла небольшая проблема при запуске httpd. Использую stm32f030, enc28j60 и lwip v.2.0.3 без RTOS. По st-шым примерам удалось запустить tcp-сервер, но вот при подключении библиотеки httpd, wireshark выдает мне такую картину (192.168.2.132 - комплюхтер, 192.168.0.242 - адрес платы):

Изображение

Насколько я понял, мк отвечает ACK-ом, который почему-то воспринимается wireshark-ом как http, при этом еще и total length в ip-заголовке какой-то кривой. Когда дебажил, я заметил, что сам http-ответ формируется корректно:

Изображение

Погружение в LwIP особого результата не дали, поэтому и решил обратиться сюда, может кто-то сталкивался с подобной проблемой и знает как ее победить?

Если убрать лишнее и оставить только LwIP, то код мой будет выглядеть так:

Код:
lwip_init();
Netif_Config();
enc.init(my_macaddr);
tcp_server_init();
httpd_init();

while(1) {
    ethernetif_input(&gnetif);
    sys_check_timeouts();
#if USE_DHCP
    /* handle periodic timers for DHCP */
    DHCP_Periodic_Handle(&gnetif);
#endif
}


Файл настроек lwipopts.h:
Код:

/**
  ******************************************************************************
  * File Name          : lwipopts.h
  * Description        : This file overrides LwIP stack default configuration
  *                      done in opt.h file.
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under Ultimate Liberty license
  * SLA0044, the "License"; You may not use this file except in compliance with
  * the License. You may obtain a copy of the License at:
  *                             www.st.com/SLA0044
  *
  ******************************************************************************
  */

/* Define to prevent recursive inclusion --------------------------------------*/
#ifndef __LWIPOPTS__H__
#define __LWIPOPTS__H__

#include "main.h"

/*-----------------------------------------------------------------------------*/
/* Current version of LwIP supported by CubeMx: 2.0.3 -*/
/*-----------------------------------------------------------------------------*/

/* Within 'USER CODE' section, code will be kept by default at each generation */
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

#ifdef __cplusplus
extern "C" {
#endif

/* STM32CubeMX Specific Parameters (not defined in opt.h) ---------------------*/
/* Parameters set in STM32CubeMX LwIP Configuration GUI -*/
/*----- WITH_RTOS disabled (Since FREERTOS is not set) -----*/
#define WITH_RTOS 0
/*----- CHECKSUM_BY_HARDWARE disabled -----*/
#define CHECKSUM_BY_HARDWARE 0
/*-----------------------------------------------------------------------------*/

/* LwIP Stack Parameters (modified compared to initialization value in opt.h) -*/
/* Parameters set in STM32CubeMX LwIP Configuration GUI -*/
/*----- Value in opt.h for NO_SYS: 0 -----*/
#define NO_SYS 1
/*----- Value in opt.h for LWIP_DHCP: 0*/
#define LWIP_DHCP       1
/*----- Value in opt.h for SYS_LIGHTWEIGHT_PROT: 1 -----*/
#define SYS_LIGHTWEIGHT_PROT 0
/*----- Value in opt.h for MEM_ALIGNMENT: 1 -----*/
#define MEM_ALIGNMENT 4
/*----- Default Value for MEMP_NUM_TCP_SEG: 16 ---*/
#define MEMP_NUM_TCP_SEG 24
/*----- Value in opt.h for LWIP_ETHERNET: LWIP_ARP || PPPOE_SUPPORT -*/
#define LWIP_ETHERNET 1
/*----- Value in opt.h for LWIP_DNS_SECURE: (LWIP_DNS_SECURE_RAND_XID | LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING | LWIP_DNS_SECURE_RAND_SRC_PORT) -*/
#define LWIP_DNS_SECURE 7
/*----- Default Value for TCP_WND: 1840 ---*/
#define TCP_WND 2048
/*----- Default Value for TCP_MSS: 536 ---*/
#define TCP_MSS 460
/*----- Default Value for TCP_SND_BUF: 920 ---*/
#define TCP_SND_BUF 1840
/*----- Value in opt.h for LWIP_NETCONN: 1 -----*/
#define LWIP_NETCONN 0
/*----- Value in opt.h for LWIP_SOCKET: 1 -----*/
#define LWIP_SOCKET 0
/*----- Value in opt.h for RECV_BUFSIZE_DEFAULT: INT_MAX -----*/
#define RECV_BUFSIZE_DEFAULT 2000000000
/*----- Value in opt.h for LWIP_STATS: 1 -----*/
#define LWIP_STATS 0
/*----- Value in opt.h for CHECKSUM_GEN_IP: 1 -----*/
#define CHECKSUM_GEN_IP 1
/*----- Value in opt.h for CHECKSUM_GEN_UDP: 1 -----*/
#define CHECKSUM_GEN_UDP 0
/*----- Value in opt.h for CHECKSUM_GEN_TCP: 1 -----*/
#define CHECKSUM_GEN_TCP 1
/*----- Value in opt.h for CHECKSUM_GEN_ICMP: 1 -----*/
#define CHECKSUM_GEN_ICMP 1
/*----- Value in opt.h for CHECKSUM_GEN_ICMP6: 1 -----*/
#define CHECKSUM_GEN_ICMP6 0
/*----- Value in opt.h for CHECKSUM_CHECK_IP: 1 -----*/
#define CHECKSUM_CHECK_IP 0
/*----- Value in opt.h for CHECKSUM_CHECK_UDP: 1 -----*/
#define CHECKSUM_CHECK_UDP 0
/*----- Value in opt.h for CHECKSUM_CHECK_TCP: 1 -----*/
#define CHECKSUM_CHECK_TCP 0
/*----- Value in opt.h for CHECKSUM_CHECK_ICMP: 1 -----*/
#define CHECKSUM_CHECK_ICMP 0
/*----- Value in opt.h for CHECKSUM_CHECK_ICMP6: 1 -----*/
#define CHECKSUM_CHECK_ICMP6 0
/*-----------------------------------------------------------------------------*/
/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

#ifdef __cplusplus
}
#endif
#endif /*__LWIPOPTS__H__ */

/************************* (C) COPYRIGHT STMicroelectronics *****END OF FILE****/



Последний раз редактировалось RataTony 02 июл 2019, 12:37, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LWIP RAW и HTTPD
СообщениеДобавлено: 02 июл 2019, 12:14 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 816
А можно переформулировать вопрос? Что именно не так? Я поднимал httpd вроде проблем не испытал.. За исключением одного мелкого косяка. Но может пока просто не заметил.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LWIP RAW и HTTPD
СообщениеДобавлено: 02 июл 2019, 12:20 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2128
Скрин с wireshark'а не грузится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LWIP RAW и HTTPD
СообщениеДобавлено: 02 июл 2019, 12:32 
Только пришел

Зарегистрирован: 02 июл 2019, 10:27
Сообщения: 7
kos писал(а):
А можно переформулировать вопрос? Что именно не так? Я поднимал httpd вроде проблем не испытал.. За исключением одного мелкого косяка. Но может пока просто не заметил.


Если честно, я сам не понимаю, что не так, когда проделывал то же самое на плате STM32F746G-DISCO все работало хорошо, а здесь встало колом и хоть за голову хватайся, третий день уже дебагером тыкаю, а почему вместо tcp-сообщения ACK wiresharck ловит непонятное пустое http-сообщение понять не могу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LWIP RAW и HTTPD
СообщениеДобавлено: 02 июл 2019, 12:53 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2128
Цитата:
(192.168.2.132 - комплюхтер, 192.168.0.242 - адрес платы)

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

Цитата:
Насколько я понял, мк отвечает ACK-ом, который почему-то воспринимается wireshark-ом как http

А как он еще должен восприниматься, если порт 80 и изначально на 7ом уровне пошел HTTP? Всё нормально. Служебная часть 3-стороннего установления соединения TCP в Wireshark'е всё-равно показывается по протоколу самого верхнего уровня ( в данном случае 7го - HTTP). Это норма.

Цитата:
, при этом еще и total length в ip-заголовке какой-то кривой

А вот тут беда. Попробуйте TCP_MSS поднять. У вас он 460 почему-то, хотя буфер дальше большой. Возможно 1460 имелось в виду - это стандартный обычный максимум для Ethernet без Jumbo-фрэймов. (1460 TCP + 40 байт заголовков до TCP = 1500 байт ровно размер пакета).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LWIP RAW и HTTPD
СообщениеДобавлено: 02 июл 2019, 14:09 
Только пришел

Зарегистрирован: 02 июл 2019, 10:27
Сообщения: 7
NStorm писал(а):
А маска подсети какая? Обычно в этих диапазонах делают маску 255.255.255.0, что соотв. помещает их разные сегменты сети.


Маска: 255.255.253.0


NStorm писал(а):
А вот тут беда. Попробуйте TCP_MSS поднять. У вас он 460 почему-то, хотя буфер дальше большой. Возможно 1460 имелось в виду - это стандартный обычный максимум для Ethernet без Jumbo-фрэймов. (1460 TCP + 40 байт заголовков до TCP = 1500 байт ровно размер пакета).


Спасибо за совет, но на 1460 мне памяти на контроллере не хватает:(
Эти настройки я брал из вот этой статейке: http://narodstream.ru/stm-urok-102-lan8720-lwip-http-raw-chast-1/, на плате STM32F746G-DISCO они работали исправно.
И еще я заметил, что при смене TCP_MSS, меняется и Total Length в ip-заголовке на TCP_MSS + 40...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LWIP RAW и HTTPD
СообщениеДобавлено: 02 июл 2019, 14:23 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2128
Цитата:
Маска: 255.255.253.0

Такой маски не может быть. Наверное 255.255.252.0?

Цитата:
И еще я заметил, что при смене TCP_MSS, меняется и Total Length в ip-заголовке на TCP_MSS + 40...

Ну так правильно, я об этом и говорю. Всё, что до TCP по уровням занимает 40 байт.

Ну ладно памяти не хватает, ок, фрагментация должна работать. У вас остаток пакета не помещается в те самые 460 байт. И приходит кусочек на оставшиеся 6 байт. Только фактически данных 40+6 = 46 байт, а в заголовке написано что их 500 как максимальный пакет для вашего MSS. Где-то неправильно формируется заголовок при фрагментации пакета.

Цитата:
Спасибо за совет, но на 1460 мне памяти на контроллере не хватает:(

Попробуйте уменьшить MEMP_NUM_TCP_SEG, но поднять размер MSS. Ну например SEG сделать 16, как было по-умолчанию, а MSS сделать 560. Хотя бы на время для теста.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LWIP RAW и HTTPD
СообщениеДобавлено: 02 июл 2019, 14:38 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2128
А, стоп, это не сегментация. Не заметил, что пакет до выделенного еще был с компа, а не ответ с платы. Скиньте лучше целиком pcap, гадать по скриншотам сложнее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LWIP RAW и HTTPD
СообщениеДобавлено: 02 июл 2019, 15:09 
Только пришел

Зарегистрирован: 02 июл 2019, 10:27
Сообщения: 7
NStorm писал(а):
А, стоп, это не сегментация. Не заметил, что пакет до выделенного еще был с компа, а не ответ с платы. Скиньте лучше целиком pcap, гадать по скриншотам сложнее.


Вложения:
1.zip [1.91 Кб]
Скачиваний: 31
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LWIP RAW и HTTPD
СообщениеДобавлено: 02 июл 2019, 15:38 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2128
Не, что-то у вас в коде не то видимо. У вас же на клиентский запрос прилетает ответ просто с 6 байтами нулей. Данных нет:
Вложение:
Screenshot_20190702_133748.png
Screenshot_20190702_133748.png [ 44.22 Кб | Просмотров: 347 ]

У вас стек размер пакета посчитал 500, а данных вы положили 6 нулей. Где-то у вас ошибочка с выдачей данных, поэтому такое поведение. Буфер проверьте и т.п.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LWIP RAW и HTTPD
СообщениеДобавлено: 03 июл 2019, 06:55 
Только пришел

Зарегистрирован: 02 июл 2019, 10:27
Сообщения: 7
NStorm писал(а):
Не, что-то у вас в коде не то видимо. У вас же на клиентский запрос прилетает ответ просто с 6 байтами нулей. Данных нет:
Вложение:
Screenshot_20190702_133748.png

У вас стек размер пакета посчитал 500, а данных вы положили 6 нулей. Где-то у вас ошибочка с выдачей данных, поэтому такое поведение. Буфер проверьте и т.п.


Хорошо, буду копать в ту сторону, спасибо за помощь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LWIP RAW и HTTPD
СообщениеДобавлено: 16 июл 2019, 08:50 
Только пришел

Зарегистрирован: 02 июл 2019, 10:27
Сообщения: 7
Нашел проблему. Она крылась в функции передачи данных low_level_output, для больших пакетов lwip разделяла заголовки и данные по двум разным pbuf-ам, я их просто не соединял при отправке.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB