Yifan Lu

Results 23 comments of Yifan Lu

这里只展示了ip显示错误的原因,其他条目,包括FLAGS中的打印也是如此原因

将第二块网卡改名为长度为1的字符串"d"后,打印就正常了,如下: ```bash msh />ifconfig network interface device: e0 (Default) MTU: 1500 MAC: 00 80 e1 15 41 51 FLAGS: UP LINK_DOWN INTERNET_DOWN DHCP_ENABLE ETHARP BROADCAST IGMP ip address: 0.0.0.0 gw...

> ncmp传入的长度参数是1还是2?如果是2,此时应该会忽略第2个字符之后的内容的吧? > > 可以单步调下ncmp里面。或改用strncmp对比下 请教一下ncmp是在哪里看,我感觉问题应该就是这个查找netdev的时候没考虑到netif的name属性不是一个标准的字符串?

> > 没考虑到netif的name属性不是一个标准的字符串? > > 所以这里用了ncmp,而不是直接strcmp。 代码在这 > > https://github.com/RT-Thread/rt-thread/blob/f5fe1a5d7b9117339ffce00035fd58a2c0ff3f3a/src/kservice.c#L563 > > 多网口在多个项目中用过,所以你这里我感觉是第2个网卡的名称及配置信息与netdev中不同步,而非名称对比不成功,毕竟第1个成功了,且你第2个网卡虽然显示为0却实际有IP还能ping通。 我用e1时,用netif->name查询netdev会失败,此时netif->name可以被正确printf出来是e1。用常量字符串"e1"查询netdev却可以查询成功

> ncmp传入的长度参数是1还是2?如果是2,此时应该会忽略第2个字符之后的内容的吧? > > 可以单步调下ncmp里面。或改用strncmp对比下 ncmp传入的貌似是netdev中定义的一个最大名字长度的宏

> > > 没考虑到netif的name属性不是一个标准的字符串? > > > > > > 所以这里用了ncmp,而不是直接strcmp。 代码在这 > > https://github.com/RT-Thread/rt-thread/blob/f5fe1a5d7b9117339ffce00035fd58a2c0ff3f3a/src/kservice.c#L563 > > > > 多网口在多个项目中用过,所以你这里我感觉是第2个网卡的名称及配置信息与netdev中不同步,而非名称对比不成功,毕竟第1个成功了,且你第2个网卡虽然显示为0却实际有IP还能ping通。 > > 我用e1时,用netif->name查询netdev会失败,此时netif->name可以被正确printf出来是e1。用常量字符串"e1"查询netdev却可以查询成功 我曾经试过把第一块网卡直接不初始化,系统中只有一块网卡,第二块网卡一样的初始化流程,命名为e1,最后ifconfig出来是正确的

/> > 没考虑到netif的name属性不是一个标准的字符串? > > 所以这里用了ncmp,而不是直接strcmp。 代码在这 > > https://github.com/RT-Thread/rt-thread/blob/f5fe1a5d7b9117339ffce00035fd58a2c0ff3f3a/src/kservice.c#L563 > > 多网口在多个项目中用过,所以你这里我感觉是第2个网卡的名称及配置信息与netdev中不同步,而非名称对比不成功,毕竟第1个成功了,且你第2个网卡虽然显示为0却实际有IP还能ping通。 单步调试进入netdev_get_by_name中发现,传入的netif->name变成了如下图: ![image](https://github.com/RT-Thread/rt-thread/assets/34731910/0bb25369-3ed9-4f0c-ad82-0cf333298296) 传入参数的地址是没有错的,但是传入参数后貌似出现了问题 传入前,netif->name查看如下: ![image](https://github.com/RT-Thread/rt-thread/assets/34731910/a1e16014-5809-4e10-8840-3a2c84415e3b) 作为对比,传入常量字符串"e1"进行查询时,进入netdev_get_by_name中的name如下: ![image](https://github.com/RT-Thread/rt-thread/assets/34731910/a6852707-de90-4252-9a93-b297d6cdd763)

> ncmp传入的长度参数是1还是2?如果是2,此时应该会忽略第2个字符之后的内容的吧? > > 可以单步调下ncmp里面。或改用strncmp对比下 所以我觉得对于netif中要操作netdev的地方,查找网卡是不是单独写一个用netif->name查找netdev的函数,比netdev的那个按名称查找函数的通用方法要更合适,这个地方估计就是因为没用终止符导致查找错误的,再加上第二块网卡会把netif->name后一个netif->num从0变成1,如图: ![image](https://github.com/RT-Thread/rt-thread/assets/34731910/c180991f-f135-4d9c-80f0-69a07e204568) 所以导致了字符串识别失败了 @aozima

/我测试了一下,实际再netif.c中加入如下代码就一切正常了 ```c static struct netdev* netif_get_netdev_by_netifname(const char* netifname) { char temp[3] = {0}; rt_strncpy(temp, netifname, 2); return netdev_get_by_name(temp); } #define netdev_get_by_name netif_get_netdev_by_netifname ``` 输出如下: ```bash msh />ifconfig network interface device:...

> > 将第二块网卡改名为长度为1的字符串"d"后,打印就正常了,如下: > > ```shell > > msh />ifconfig > > network interface device: e0 (Default) > > MTU: 1500 > > MAC: 00 80 e1 15 41 51...