Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
rt-thread
提交
fede47a7
R
rt-thread
项目概览
BaiXuePrincess
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
fede47a7
编写于
11月 17, 2021
作者:
B
Bernard Xiong
提交者:
GitHub
11月 17, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #5282 from xiangxistu/lwip
ping cmd with specified netif in lwip-2.1.2
上级
c1d7eaa0
8e518f23
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
89 addition
and
43 deletion
+89
-43
components/net/lwip-2.1.2/src/arch/sys_arch.c
components/net/lwip-2.1.2/src/arch/sys_arch.c
+24
-0
components/net/lwip-2.1.2/src/lwipopts.h
components/net/lwip-2.1.2/src/lwipopts.h
+1
-0
components/net/lwip-2.1.2/src/netif/ethernetif.c
components/net/lwip-2.1.2/src/netif/ethernetif.c
+46
-39
components/net/netdev/src/netdev.c
components/net/netdev/src/netdev.c
+18
-4
未找到文件。
components/net/lwip-2.1.2/src/arch/sys_arch.c
浏览文件 @
fede47a7
...
...
@@ -779,6 +779,30 @@ void ppp_trace(int level, const char *format, ...)
}
#endif
struct
netif
*
lwip_ip4_route_src
(
const
ip4_addr_t
*
dest
,
const
ip4_addr_t
*
src
)
{
struct
netif
*
netif
;
/* iterate through netifs */
for
(
netif
=
netif_list
;
netif
!=
NULL
;
netif
=
netif
->
next
)
{
/* is the netif up, does it have a link and a valid address? */
if
(
netif_is_up
(
netif
)
&&
netif_is_link_up
(
netif
)
&&
!
ip4_addr_isany_val
(
*
netif_ip4_addr
(
netif
)))
{
/* gateway matches on a non broadcast interface? (i.e. peer in a point to point interface) */
if
(
src
!=
NULL
)
{
if
(
ip4_addr_cmp
(
src
,
netif_ip4_addr
(
netif
)))
{
return
netif
;
}
}
}
}
netif
=
netif_default
;
return
netif
;
}
/*
* export bsd socket symbol for RT-Thread Application Module
*/
...
...
components/net/lwip-2.1.2/src/lwipopts.h
浏览文件 @
fede47a7
...
...
@@ -648,4 +648,5 @@
#endif
#define LWIP_HOOK_IP4_ROUTE_SRC(dest, src) lwip_ip4_route_src(dest, src)
#endif
/* __LWIPOPTS_H__ */
components/net/lwip-2.1.2/src/netif/ethernetif.c
浏览文件 @
fede47a7
/*
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
* COPYRIGHT (C) 2006-20
18
, RT-Thread Development Team
* COPYRIGHT (C) 2006-20
21
, RT-Thread Development Team
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
...
...
@@ -167,16 +167,16 @@ static int lwip_netdev_set_dns_server(struct netdev *netif, uint8_t dns_num, ip_
static
int
lwip_netdev_set_dhcp
(
struct
netdev
*
netif
,
rt_bool_t
is_enabled
)
{
netdev_low_level_set_dhcp_status
(
netif
,
is_enabled
);
if
(
RT_TRUE
==
is_enabled
)
{
dhcp_start
((
struct
netif
*
)
netif
->
user_data
);
}
else
{
dhcp_stop
((
struct
netif
*
)
netif
->
user_data
);
dhcp_stop
((
struct
netif
*
)
netif
->
user_data
);
}
return
ERR_OK
;
}
#endif
/* RT_LWIP_DHCP */
...
...
@@ -186,7 +186,7 @@ static int lwip_netdev_set_dhcp(struct netdev *netif, rt_bool_t is_enabled)
extern
int
lwip_ping_recv
(
int
s
,
int
*
ttl
);
extern
err_t
lwip_ping_send
(
int
s
,
ip_addr_t
*
addr
,
int
size
);
int
lwip_netdev_ping
(
struct
netdev
*
netif
,
const
char
*
host
,
size_t
data_len
,
int
lwip_netdev_ping
(
struct
netdev
*
netif
,
const
char
*
host
,
size_t
data_len
,
uint32_t
timeout
,
struct
netdev_ping_resp
*
ping_resp
)
{
int
s
,
ttl
,
recv_len
,
result
=
0
;
...
...
@@ -201,7 +201,8 @@ int lwip_netdev_ping(struct netdev *netif, const char *host, size_t data_len,
struct
addrinfo
hint
,
*
res
=
RT_NULL
;
struct
sockaddr_in
*
h
=
RT_NULL
;
struct
in_addr
ina
;
struct
sockaddr_in
local
;
RT_ASSERT
(
netif
);
RT_ASSERT
(
host
);
RT_ASSERT
(
ping_resp
);
...
...
@@ -220,13 +221,19 @@ int lwip_netdev_ping(struct netdev *netif, const char *host, size_t data_len,
return
-
RT_ERROR
;
}
SMEMCPY
(
&
(
ping_resp
->
ip_addr
),
&
target_addr
,
sizeof
(
ip_addr_t
));
/* new a socket */
if
((
s
=
lwip_socket
(
AF_INET
,
SOCK_RAW
,
IP_PROTO_ICMP
))
<
0
)
{
return
-
RT_ERROR
;
}
local
.
sin_len
=
sizeof
(
local
);
local
.
sin_family
=
AF_INET
;
local
.
sin_port
=
0
;
local
.
sin_addr
.
s_addr
=
(
netif
->
ip_addr
.
addr
);
lwip_bind
(
s
,
(
struct
sockaddr
*
)
&
local
,
sizeof
(
struct
sockaddr_in
));
lwip_setsockopt
(
s
,
SOL_SOCKET
,
SO_RCVTIMEO
,
&
recv_timeout
,
sizeof
(
recv_timeout
));
if
(
lwip_ping_send
(
s
,
&
target_addr
,
data_len
)
==
ERR_OK
)
...
...
@@ -288,7 +295,7 @@ const struct netdev_ops lwip_netdev_ops =
lwip_netdev_set_addr_info
,
#ifdef RT_LWIP_DNS
lwip_netdev_set_dns_server
,
#else
#else
NULL
,
#endif
/* RT_LWIP_DNS */
...
...
@@ -327,7 +334,7 @@ static int netdev_add(struct netif *lwip_netif)
{
return
-
ERR_IF
;
}
#ifdef SAL_USING_LWIP
extern
int
sal_lwip_netdev_set_pf_info
(
struct
netdev
*
netdev
);
/* set the lwIP network interface device protocol family information */
...
...
@@ -336,7 +343,7 @@ static int netdev_add(struct netif *lwip_netif)
rt_strncpy
(
name
,
lwip_netif
->
name
,
LWIP_NETIF_NAME_LEN
);
result
=
netdev_register
(
netdev
,
name
,
(
void
*
)
lwip_netif
);
/* Update netdev info after registered */
netdev
->
flags
=
lwip_netif
->
flags
;
netdev
->
mtu
=
lwip_netif
->
mtu
;
...
...
@@ -379,7 +386,7 @@ static int netdev_flags_sync(struct netif *lwip_netif)
{
return
-
ERR_IF
;
}
netdev
->
mtu
=
lwip_netif
->
mtu
;
netdev
->
flags
|=
lwip_netif
->
flags
;
...
...
@@ -441,7 +448,7 @@ static err_t eth_netif_device_init(struct netif *netif)
/* copy device flags to netif flags */
netif
->
flags
=
(
ethif
->
flags
&
0xff
);
netif
->
mtu
=
ETHERNET_MTU
;
/* set output */
netif
->
output
=
etharp_output
;
...
...
@@ -534,7 +541,7 @@ rt_err_t eth_device_init_with_flag(struct eth_device *dev, const char *name, rt_
/* set linkoutput */
netif
->
linkoutput
=
ethernetif_linkoutput
;
/* get hardware MAC address */
rt_device_control
(
&
(
dev
->
parent
),
NIOCTL_GADDR
,
netif
->
hwaddr
);
...
...
@@ -554,7 +561,7 @@ rt_err_t eth_device_init_with_flag(struct eth_device *dev, const char *name, rt_
ipaddr
.
addr
=
inet_addr
(
RT_LWIP_IPADDR
);
gw
.
addr
=
inet_addr
(
RT_LWIP_GWADDR
);
netmask
.
addr
=
inet_addr
(
RT_LWIP_MSKADDR
);
#else
#else
IP4_ADDR
(
&
ipaddr
,
0
,
0
,
0
,
0
);
IP4_ADDR
(
&
gw
,
0
,
0
,
0
,
0
);
IP4_ADDR
(
&
netmask
,
0
,
0
,
0
,
0
);
...
...
@@ -719,7 +726,7 @@ static void eth_rx_thread_entry(void* parameter)
while
(
1
)
{
if
(
device
->
eth_rx
==
RT_NULL
)
break
;
p
=
device
->
eth_rx
(
&
(
device
->
parent
));
if
(
p
!=
RT_NULL
)
{
...
...
@@ -742,9 +749,9 @@ static void eth_rx_thread_entry(void* parameter)
}
#endif
/* this function does not need,
* use eth_system_device_init_private()
* call by lwip_system_init().
/* this function does not need,
* use eth_system_device_init_private()
* call by lwip_system_init().
*/
int
eth_system_device_init
(
void
)
{
...
...
@@ -887,27 +894,27 @@ void list_if(void)
rt_kprintf
(
"gw address: %s
\n
"
,
ipaddr_ntoa
(
&
(
netif
->
gw
)));
rt_kprintf
(
"net mask : %s
\n
"
,
ipaddr_ntoa
(
&
(
netif
->
netmask
)));
#if LWIP_IPV6
{
ip6_addr_t
*
addr
;
int
addr_state
;
int
i
;
addr
=
(
ip6_addr_t
*
)
&
netif
->
ip6_addr
[
0
];
addr_state
=
netif
->
ip6_addr_state
[
0
];
rt_kprintf
(
"
\n
ipv6 link-local: %s state:%02X %s
\n
"
,
ip6addr_ntoa
(
addr
),
addr_state
,
ip6_addr_isvalid
(
addr_state
)
?
"VALID"
:
"INVALID"
);
for
(
i
=
1
;
i
<
LWIP_IPV6_NUM_ADDRESSES
;
i
++
)
{
addr
=
(
ip6_addr_t
*
)
&
netif
->
ip6_addr
[
i
];
addr_state
=
netif
->
ip6_addr_state
[
i
];
rt_kprintf
(
"ipv6[%d] address: %s state:%02X %s
\n
"
,
i
,
ip6addr_ntoa
(
addr
),
addr_state
,
ip6_addr_isvalid
(
addr_state
)
?
"VALID"
:
"INVALID"
);
}
}
{
ip6_addr_t
*
addr
;
int
addr_state
;
int
i
;
addr
=
(
ip6_addr_t
*
)
&
netif
->
ip6_addr
[
0
];
addr_state
=
netif
->
ip6_addr_state
[
0
];
rt_kprintf
(
"
\n
ipv6 link-local: %s state:%02X %s
\n
"
,
ip6addr_ntoa
(
addr
),
addr_state
,
ip6_addr_isvalid
(
addr_state
)
?
"VALID"
:
"INVALID"
);
for
(
i
=
1
;
i
<
LWIP_IPV6_NUM_ADDRESSES
;
i
++
)
{
addr
=
(
ip6_addr_t
*
)
&
netif
->
ip6_addr
[
i
];
addr_state
=
netif
->
ip6_addr_state
[
i
];
rt_kprintf
(
"ipv6[%d] address: %s state:%02X %s
\n
"
,
i
,
ip6addr_ntoa
(
addr
),
addr_state
,
ip6_addr_isvalid
(
addr_state
)
?
"VALID"
:
"INVALID"
);
}
}
rt_kprintf
(
"
\r\n
"
);
#endif
/* LWIP_IPV6 */
netif
=
netif
->
next
;
...
...
components/net/netdev/src/netdev.c
浏览文件 @
fede47a7
...
...
@@ -1052,7 +1052,7 @@ MSH_CMD_EXPORT_ALIAS(netdev_ifconfig, ifconfig, list the information of all netw
#endif
/* NETDEV_USING_IFCONFIG */
#ifdef NETDEV_USING_PING
int
netdev_cmd_ping
(
char
*
target_name
,
rt_uint32_t
times
,
rt_size_t
size
)
int
netdev_cmd_ping
(
char
*
target_name
,
char
*
netdev_name
,
rt_uint32_t
times
,
rt_size_t
size
)
{
#define NETDEV_PING_DATA_SIZE 32
/** ping receive timeout - in milliseconds */
...
...
@@ -1073,6 +1073,16 @@ int netdev_cmd_ping(char* target_name, rt_uint32_t times, rt_size_t size)
size
=
NETDEV_PING_DATA_SIZE
;
}
if
(
netdev_name
!=
RT_NULL
)
{
netdev
=
netdev_get_by_name
(
netdev_name
);
if
(
netdev
==
RT_NULL
)
{
netdev
=
netdev_default
;
rt_kprintf
(
"ping: not found specified netif, using default netdev %s.
\n
"
,
netdev
->
name
);
}
}
if
(
NETDEV_PING_IS_COMMONICABLE
(
netdev_default
))
{
/* using default network interface device for ping */
...
...
@@ -1144,11 +1154,15 @@ int netdev_ping(int argc, char **argv)
{
if
(
argc
==
1
)
{
rt_kprintf
(
"Please input: ping <host address>
\n
"
);
rt_kprintf
(
"Please input: ping
[netdev name]
<host address>
\n
"
);
}
else
else
if
(
argc
==
2
)
{
netdev_cmd_ping
(
argv
[
1
],
RT_NULL
,
4
,
0
);
}
else
if
(
argc
==
3
)
{
netdev_cmd_ping
(
argv
[
1
],
4
,
0
);
netdev_cmd_ping
(
argv
[
1
],
argv
[
2
],
4
,
0
);
}
return
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录