嵌入式技术william hill官网
直播中

王利祥

7年用户 1406经验值
私信 关注
[问答]

netdev设备状态标志位异常无法上线是为什么?

在初始化eth device后,netdev设备成功创建,但是使用ifconfig命令发现设备状态始终为DOWN,手动调用netdev_set_up函数也无法让设备上线变为UP,通过debug发现



在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 >

回帖(1)

张宇

2022-5-18 17:46:59
在初始化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 >

举报

更多回帖

发帖
×
20
完善资料,
赚取积分