23/07/12 Add W5500 iperf; Add lwip http test.

This commit is contained in:
涂煜洋
2023-07-12 17:45:45 +08:00
parent d7aa29e0df
commit edd5a5ccb9
15 changed files with 566 additions and 63 deletions

View File

@@ -1,3 +1,3 @@
SRC_FILES += lwiperf/lwiperf.c
SRC_FILES += lwiperf/lwiperf.c http/http_client.c
include $(KERNEL_ROOT)/compiler.mk

View File

@@ -64,7 +64,8 @@
* HTTPC_DEBUG: Enable debugging for HTTP client.
*/
#ifndef HTTPC_DEBUG
#define HTTPC_DEBUG LWIP_DBG_OFF
#define HTTPC_DEBUG LWIP_DBG_ON
// #define HTTPC_DEBUG LWIP_DBG_OFF
#endif
/** Set this to 1 to keep server name and uri in request state */

View File

@@ -32,7 +32,7 @@
/* ---------- Debug options ---------- */
#ifndef LWIP_DEBUG
#define LWIP_DEBUG
#define LWIP_DEBUG 1
#endif
#ifdef LWIP_DEBUG

View File

@@ -142,19 +142,19 @@
#endif
#ifdef LWIP_DEBUG
#define LWIP_DEBUG_FLAG 1
#define LWIP_DEBUGF(debug, message) do { \
#define LWIP_DEBUGF(debug_flag, message) do { \
if ( \
((LWIP_DEBUG_FLAG) & LWIP_DBG_ON) && \
((LWIP_DEBUG_FLAG) & LWIP_DBG_TYPES_ON) && \
((s16_t)((LWIP_DEBUG_FLAG) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_MIN_LEVEL)) { \
((debug_flag) & LWIP_DBG_ON) && \
((debug_flag) & LWIP_DBG_TYPES_ON) && \
(debug_flag)) { \
LWIP_PLATFORM_DIAG(message); \
if ((LWIP_DEBUG_FLAG) & LWIP_DBG_HALT) { \
if ((debug_flag) & LWIP_DBG_HALT) { \
while(1); \
} \
} \
} while(0)
// ((s16_t)((debug_flag) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_MIN_LEVEL)) { \
// #define LWIP_DEBUGF(debug, message) do { \
// LWIP_PLATFORM_DIAG(message); \
// } while(0)

View File

@@ -1,4 +1,4 @@
SRC_FILES := ping.c lwip_ping_demo.c lwip_tcp_demo.c tcpecho_raw.c lwip_config_demo.c lwip_dhcp_demo.c iperf.c
SRC_FILES := ping.c lwip_ping_demo.c lwip_tcp_demo.c tcpecho_raw.c lwip_config_demo.c lwip_dhcp_demo.c iperf.c http_test.c
# SRC_FILES := ping.c lwip_ping_demo.c lwip_tcp_demo.c lwip_udp_demo.c tcpecho_raw.c lwip_config_demo.c lwip_dhcp_demo.c iperf.c
include $(KERNEL_ROOT)/compiler.mk

View File

@@ -0,0 +1,68 @@
#include <string.h>
#include <shell.h>
#include <debug.h>
#include "lwip/apps/http_client.h"
void httpc_app_recv_end(void *arg, httpc_result_t httpc_result, u32_t rx_content_len, u32_t srv_res, err_t err) {
httpc_state_t **req = (httpc_state_t**)arg;
LWIP_DEBUGF(LWIP_DEBUG, ("[HTTPC] Transfer finished. rx_content_len is %lu\r\n", rx_content_len));
printf("[HTTPC] Transfer finished. rx_content_len is %lu\r\n", rx_content_len);
*req = NULL;
}
err_t httpc_app_headers_done(httpc_state_t *connection, void *arg, struct pbuf *hdr, u16_t hdr_len, u32_t content_len) {
LWIP_DEBUGF(LWIP_DEBUG, ("[%s] headers done call back.\n", __func__));
printf("[%s] headers done call back, content len: %d.\n", __func__, content_len);
return ERR_OK;
}
err_t httpc_app_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) {
printf("[%s] Get %d Data\n", __func__, p->len);
pbuf_free(p);
return ERR_OK;
}
ip_addr_t *get_server_ip() {
static ip_addr_t server_ip;
return &server_ip;
}
httpc_state_t **get_conn_state() {
static httpc_state_t *conn_state;
return &conn_state;
}
httpc_connection_t *get_conn_setting() {
static httpc_connection_t conn_setting;
return &conn_setting;
}
void httpc_get_file_app(int argc, char *argv[]) {
// deal input ip
// get file from server
const uint8_t server_ip_by_arr[4] = {39, 156, 66, 10};
// const uint8_t server_ip_by_arr[4] = {114, 215, 151, 106};
IP4_ADDR(get_server_ip(),
server_ip_by_arr[0], server_ip_by_arr[1], server_ip_by_arr[2], server_ip_by_arr[3]);
get_conn_setting()->use_proxy = 0;
get_conn_setting()->result_fn = httpc_app_recv_end;
get_conn_setting()->headers_done_fn = httpc_app_headers_done;
LWIP_DEBUGF(HTTPC_DEBUG, ("[%s] Calling httpc_get_file\n", __func__));
printf("[%s] Calling httpc_get_file\n", __func__);
err_t errnum = httpc_get_file(get_server_ip(), 80, "/index.html", get_conn_setting(), httpc_app_recv, NULL, get_conn_state());
// err_t errnum = httpc_get_file_dns("https://www.baidu.com", 80, "/index.html", get_conn_setting(), httpc_app_recv, NULL, get_conn_state());
if (errnum != ERR_OK) {
printf("httpc_get_file failed (%d)\n", errnum);
}
}
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN) | SHELL_CMD_PARAM_NUM(0),
lwip_http_test, httpc_get_file_app, get file from net server);

View File

@@ -678,8 +678,6 @@ lwiperf_example_init(void)
}
// SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN) | SHELL_CMD_PARAM_NUM(8),
// iperf, iperf, netutils iperf);
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN) | SHELL_CMD_PARAM_NUM(8),
iperf, iperf, netutils iperf);

View File

@@ -30,6 +30,7 @@ static void LwipSetIPTask(void *param)
{
uint8_t enet_port = *(uint8_t *)param; ///< test enet port
printf("lw: [%s] config netport id[%d]\n", __func__, enet_port);
// lwip_config_net(enet_port, lwip_ipaddr, lwip_netmask, lwip_gwaddr);
lwip_config_tcp(enet_port, lwip_ipaddr, lwip_netmask, lwip_gwaddr);
}

View File

@@ -37,59 +37,17 @@
ip4_addr_t ping_addr;
/******************************************************************************/
char arg_ip[20] = {192, 168, 130, 50};
void LwipPingTest(int argc, char *argv[])
{
int result = 0;
uint8_t enet_port = 0; ///< test enet port 0
if(argc >= 4)
{
printf("lw: [%s] ip %s mask %s gw %s for netport %s\n", __func__, argv[1], argv[2], argv[3], argv[4]);
sscanf(argv[1], "%d.%d.%d.%d", &lwip_ipaddr[0], &lwip_ipaddr[1], &lwip_ipaddr[2], &lwip_ipaddr[3]);
sscanf(argv[2], "%d.%d.%d.%d", &lwip_netmask[0], &lwip_netmask[1], &lwip_netmask[2], &lwip_netmask[3]);
sscanf(argv[3], "%d.%d.%d.%d", &lwip_gwaddr[0], &lwip_gwaddr[1], &lwip_gwaddr[2], &lwip_gwaddr[3]);
sscanf(argv[4], "%d", &enet_port);
if(0 == enet_port)
{
memcpy(lwip_eth0_ipaddr, lwip_ipaddr, strlen(lwip_ipaddr));
memcpy(lwip_eth0_netmask, lwip_netmask, strlen(lwip_netmask));
memcpy(lwip_eth0_gwaddr, lwip_gwaddr, strlen(lwip_gwaddr));
}
if(1 == enet_port)
{
memcpy(lwip_eth1_ipaddr, lwip_ipaddr, strlen(lwip_ipaddr));
memcpy(lwip_eth1_netmask, lwip_netmask, strlen(lwip_netmask));
memcpy(lwip_eth1_gwaddr, lwip_gwaddr, strlen(lwip_gwaddr));
}
}
else if(argc == 3)
{
sscanf(argv[2], "%d", &enet_port);
printf("lw: [%s] gw %s netport %d\n", __func__, argv[1], enet_port);
if (argc == 2) {
printf("lw: [%s] ping %s\n", __func__, argv[1]);
if(isdigit(argv[1][0]))
{
if(sscanf(argv[1], "%d.%d.%d.%d", &lwip_gwaddr[0], &lwip_gwaddr[1], &lwip_gwaddr[2], &lwip_gwaddr[3]) == EOF)
{
lw_notice("input wrong ip\n");
return;
}
}
#if (LWIP_DHCP) && (PING_USE_SOCKETS)
else
{
get_url_ip(argv[1]);
return;
}
#endif
}
else if(argc == 2)
{
printf("lw: [%s] gw %s\n", __func__, argv[1]);
if(isdigit(argv[1][0]))
{
if(sscanf(argv[1], "%d.%d.%d.%d", &lwip_gwaddr[0], &lwip_gwaddr[1], &lwip_gwaddr[2], &lwip_gwaddr[3]) == EOF)
if(sscanf(argv[1], "%d.%d.%d.%d", &arg_ip[0], &arg_ip[1], &arg_ip[2], &arg_ip[3]) == EOF)
{
lw_notice("input wrong ip\n");
return;
@@ -106,12 +64,11 @@ void LwipPingTest(int argc, char *argv[])
printf("lw: [%s] argc %d\n", __func__, argc);
IP4_ADDR(&ping_addr, lwip_gwaddr[0], lwip_gwaddr[1], lwip_gwaddr[2], lwip_gwaddr[3]);
lwip_config_net(enet_port, lwip_ipaddr, lwip_netmask, lwip_gwaddr);
IP4_ADDR(&ping_addr, arg_ip[0], arg_ip[1], arg_ip[2], arg_ip[3]);
ping_init(&ping_addr);
}
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN) | SHELL_CMD_PARAM_NUM(5),
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN) | SHELL_CMD_PARAM_NUM(2),
ping, LwipPingTest, ping [IP] 10 times);
#endif