在初始化eth device后,netdev设备成功创建,但是使用ifconfig命令发现设备状态始终为DOWN,手动调用netdev_set_up函数也无法让设备上线变为UP,通过debug发现
[img]https://oss-club.rt-thread.org/uploads/20220517/6fad9eea0e60c550468ed690adfa8a48.png[/img]
在netdev中,设备的状态flag为0x2A,代表设备UP的标志位为0,但是在netif中的设备flag标志位却为0x2B,使得手动netdev_set_up时会自动跳过设置命令,直接从下面函数的if中出去了
void
netif_set_up(struct netif *netif)
{
LWIP_ASSERT_CORE_LOCKED();
LWIP_ERROR("netif_set_up: invalid netif", netif != NULL, return);
if (!(netif->flags & NETIF_FLAG_UP)) {
netif_set_flags(netif, NETIF_FLAG_UP);
MIB2_COPY_SYSUPTIME_TO(&netif->ts);
NETIF_STATUS_CALLBACK(netif);
#if LWIP_NETIF_EXT_STATUS_CALLBACK
{
netif_ext_callback_args_t args;
args.status_changed.state = 1;
netif_invoke_ext_callback(netif, LWIP_NSC_STATUS_CHANGED, &args);
}
#endif
netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV4 | NETIF_REPORT_TYPE_IPV6);
#if LWIP_IPV6
nd6_restart_netif(netif);
#endif /* LWIP_IPV6 */
}
}
请问这个问题是什么原因导致的?是我哪里设置的不对吗导致flag不一致?
我将ethernetif.c文件内的命令导出,使用list_if可以看出设备实际上是上线了的,使用DHCP也已经成功分配了IP
msh >list_if
network interface: e0 (Default)
MTU: 1500
MAC: 00 04 9f 05 44 e5
FLAGS: UP LINK_UP ETHARP BROADCAST
ip address: 192.168.1.19
gw address: 192.168.1.1
net mask : 255.255.255.0
dns server #0: 100.15.0.32
dns server #1: 104.15.0.32
msh >ifconfig
network interface device: e0 (Default)
MTU: 1500
MAC: 00 04 9f 05 44 e5
FLAGS: DOWN LINK_DOWN INTERNET_DOWN DHCP_ENABLE ETHARP BROADCAST
ip address: 0.0.0.0
gw address: 0.0.0.0
net mask : 0.0.0.0
dns server #0: 0.0.0.0
dns server #1: 0.0.0.0
msh >
在初始化eth device后,netdev设备成功创建,但是使用ifconfig命令发现设备状态始终为DOWN,手动调用netdev_set_up函数也无法让设备上线变为UP,通过debug发现
[img]https://oss-club.rt-thread.org/uploads/20220517/6fad9eea0e60c550468ed690adfa8a48.png[/img]
在netdev中,设备的状态flag为0x2A,代表设备UP的标志位为0,但是在netif中的设备flag标志位却为0x2B,使得手动netdev_set_up时会自动跳过设置命令,直接从下面函数的if中出去了
void
netif_set_up(struct netif *netif)
{
LWIP_ASSERT_CORE_LOCKED();
LWIP_ERROR("netif_set_up: invalid netif", netif != NULL, return);
if (!(netif->flags & NETIF_FLAG_UP)) {
netif_set_flags(netif, NETIF_FLAG_UP);
MIB2_COPY_SYSUPTIME_TO(&netif->ts);
NETIF_STATUS_CALLBACK(netif);
#if LWIP_NETIF_EXT_STATUS_CALLBACK
{
netif_ext_callback_args_t args;
args.status_changed.state = 1;
netif_invoke_ext_callback(netif, LWIP_NSC_STATUS_CHANGED, &args);
}
#endif
netif_issue_reports(netif, NETIF_REPORT_TYPE_IPV4 | NETIF_REPORT_TYPE_IPV6);
#if LWIP_IPV6
nd6_restart_netif(netif);
#endif /* LWIP_IPV6 */
}
}
请问这个问题是什么原因导致的?是我哪里设置的不对吗导致flag不一致?
我将ethernetif.c文件内的命令导出,使用list_if可以看出设备实际上是上线了的,使用DHCP也已经成功分配了IP
msh >list_if
network interface: e0 (Default)
MTU: 1500
MAC: 00 04 9f 05 44 e5
FLAGS: UP LINK_UP ETHARP BROADCAST
ip address: 192.168.1.19
gw address: 192.168.1.1
net mask : 255.255.255.0
dns server #0: 100.15.0.32
dns server #1: 104.15.0.32
msh >ifconfig
network interface device: e0 (Default)
MTU: 1500
MAC: 00 04 9f 05 44 e5
FLAGS: DOWN LINK_DOWN INTERNET_DOWN DHCP_ENABLE ETHARP BROADCAST
ip address: 0.0.0.0
gw address: 0.0.0.0
net mask : 0.0.0.0
dns server #0: 0.0.0.0
dns server #1: 0.0.0.0
msh >
举报