lede icon indicating copy to clipboard operation
lede copied to clipboard

luci网络-接口显示不全,只显示以太网接口。OpenWrt R22.7.7

Open hpx502766238 opened this issue 1 year ago • 15 comments

详细叙述

如题,想给RedmiAX6S编译一个闭源驱动固件,mt7622平台,lede自带的闭源驱动暂不支持7622 但是https://github.com/bricco1981/MT7622-mtkwifi 这里有人做了闭源驱动移植,但经我多次克隆openwrt官方源码进行测试,这个驱动仅支持5.10内核 现在想用LEDE做一份相同的,所以选择了这个commit:https://github.com/coolsnowwolf/lede/tree/20220716 进行了编译: 1.将package/lean/mt移除,替换为上述闭源驱动 2.中途有报错,但找到了解决方法https://github.com/coolsnowwolf/lede/issues/11908 3.一切编译正常结束后,刷入路由器,有线连接成功进入web界面

但出现了问题: 进入无线设置勾选add rai0 to br-lan保存,重载驱动 但发现无线设备ra0、rai0始终无法成功桥接,在接口-物理设置,始终不显示ra和rai0设备,但在终端使用ifconfig命令却可以看见有ra0和rai0启用 反复重载驱动、重启路由都无效,终端连接wifi也始终无法获取IP地址,不知道如何解决这个问题

屏幕截图 2024-02-22 181650 屏幕截图 2024-02-22 181607 屏幕截图 2024-02-22 181541

重复 issue

  • [X] 没有类似的 issue

具体型号

XiaomiRedmiAX6S

详细日志

成功编译

hpx502766238 avatar Feb 22 '24 10:02 hpx502766238

补充一下,在状态-实时信息-流量信息也是可以看到rai0和ra0的,还显示wds之类的很多接口,但在网络-接口中却只显示几个物理以太网接口。openwrt官方修改桥接的地方,接口是全部显示的(包括wds之类的全都有),不知道是不是跟luci有关系

hpx502766238 avatar Feb 24 '24 08:02 hpx502766238

找到暂时解决办法,接口-lan-物理设置,勾选自定义接口,输入ra0、rai0,保存应用。 打开命令行,uci show network.lan,发现已成功修改,无线成功桥接 网络-接口-接口总览可以看到多了两个无线的图标,鼠标指上去显示ra0 rai0。 但是,再添加新接口时,可勾选的物理接口依然只有以太网口(eth0 lan1-lan3),没有出现ra0、rai0、wds等 所以我怀疑,是不是luci里对显示的接口做了过滤,官方openwrt是全部接口显示的

hpx502766238 avatar Feb 24 '24 12:02 hpx502766238

折腾了两天,桥接的问题已经解决了,通过改闭源驱动mtkwifi.lua脚本,实现了适配。 原来lean的代码uci相关命令和OP官方是有些区别的 官方: uci add_list network.cfg030f15.ports="ra0" uci add_list network.cfg030f15.ports="rai0" uci commit network /etc/init.d/network reload lean: uci set network.lan.ifname="$(uci get network.lan.ifname) ra0 rai0" uci commit network /etc/init.d/network reload

但是,luci界面管理的设备依然不显示除LAN、WAN以外的所有接口,只有在概览中显示,这依然是个问题

hpx502766238 avatar Feb 25 '24 11:02 hpx502766238

屏幕截图 2024-02-25 191520

hpx502766238 avatar Feb 25 '24 11:02 hpx502766238

屏幕截图 2024-02-25 191656

hpx502766238 avatar Feb 25 '24 11:02 hpx502766238

你那个 仓库别人都说了适配的 image 22.03,官方op 22.03 使用的luci和l的luci完全就是不同的 l的更老 ,所以自然命令不同了

WYC-2020 avatar Feb 26 '24 05:02 WYC-2020

你那个 仓库别人都说了适配的 image 22.03,官方op 22.03 使用的luci和l的luci完全就是不同的 l的更老 ,所以自然命令不同了

原来如此。希望lean能更新一下luci就好

hpx502766238 avatar Feb 26 '24 07:02 hpx502766238

你那个 仓库别人都说了适配的 image 22.03,官方op 22.03 使用的luci和l的luci完全就是不同的 l的更老 ,所以自然命令不同了

原来如此。希望lean能更新一下luci就好

别想 那个js版的luci 拉胯的很 lua 才是经典

WYC-2020 avatar Feb 26 '24 10:02 WYC-2020

你那个 仓库别人都说了适配的 image 22.03,官方op 22.03 使用的luci和l的luci完全就是不同的 l的更老 ,所以自然命令不同了

原来如此。希望lean能更新一下luci就好

别想 那个js版的luci 拉胯的很 lua 才是经典

但这个接口显示不全还是得修复一下吧,强迫症看着难受

hpx502766238 avatar Feb 26 '24 12:02 hpx502766238

屏幕截图 2024-02-25 191656

  • 你这个问题我也碰到过,这跟luci里的一个接口扫描函数有关。
  • 这个界面的接口是通过luci/modules/luci-base/luasrc/model/network.lua中的get_interfaces函数扫描列举的。标准的openwrt会将接口分为以太网接口,vlan接口和wireless接口,分别记录在network.interface,network.switch_vlan,以及wireless.wifi-iface中,你打开这个页面的时候,get_interfaces就会通过uci从这些属性中读取。
  • openwrt自带的开源驱动是符合前面所说的规范的,但闭源驱动似乎都不符合,也就是使用闭源驱动的时候wireless.wifi-iface其实是空的。
  • 但是我用padavanonly的immortalwrt源码编译固件时,这个界面又看得到各个无线接口。然后我对比了一下他和官方源码,发现padavanonly将network.lua开头的接口判别列表(IFACE_PATTERNS_WIRELESS)给删了不少东西。再仔细看一下get_interfaces的逻辑,原来它在读取network.interface的时候会排除“被忽略的接口“,”虚拟接口“,以及”无线接口”。也就是说network.interface里实际上是有无线接口的,但函数只想从这里获取以太网接口,所以就把它们排除了。
  • 我自己是稍微改了改get_interfaces的逻辑,让它读取到network.interface的无线接口时不要排除掉,直接列入无线接口列表。
  • 但以上两种做法仅仅只适合为特殊机型更改,因为这个问题说到底是闭源驱动没有完全符合openwrt规范,直接把lede源码改了是不合适的,毕竟还有不少正常的机型。但是我不知道怎么改,大雕估计也不想费事。不过这个问题要命的地方在于,大雕只是简单粗暴地用uci set network.lan.ifname="$(uci get network.lan.ifname) ra0 rai0"将无线接口加入lan,而luci界面里实际上读不到ra0 rai0,因此一旦用页面修改network配置,再保存应用,lan口会立即丢失ra0 rai0,必须手动重新加入。

blzadx avatar Mar 12 '24 11:03 blzadx

屏幕截图 2024-02-25 191656

  • 你这个问题我也碰到过,这跟luci里的一个接口扫描函数有关。
  • 这个界面的接口是通过luci/modules/luci-base/luasrc/model/network.lua中的get_interfaces函数扫描列举的。标准的openwrt会将接口分为以太网接口,vlan接口和wireless接口,分别记录在network.interface,network.switch_vlan,以及wireless.wifi-iface中,你打开这个页面的时候,get_interfaces就会通过uci从这些属性中读取。
  • openwrt自带的开源驱动是符合前面所说的规范的,但闭源驱动似乎都不符合,也就是使用闭源驱动的时候wireless.wifi-iface其实是空的。
  • 但是我用padavanonly的immortalwrt源码编译固件时,这个界面又看得到各个无线接口。然后我对比了一下他和官方源码,发现padavanonly将network.lua开头的接口判别列表(IFACE_PATTERNS_WIRELESS)给删了不少东西。再仔细看一下get_interfaces的逻辑,原来它在读取network.interface的时候会排除“被忽略的接口“,”虚拟接口“,以及”无线接口”。也就是说network.interface里实际上是有无线接口的,但函数只想从这里获取以太网接口,所以就把它们排除了。
  • 我自己是稍微改了改get_interfaces的逻辑,让它读取到network.interface的无线接口时不要排除掉,直接列入无线接口列表。
  • 但以上两种做法仅仅只适合为特殊机型更改,因为这个问题说到底是闭源驱动没有完全符合openwrt规范,直接把lede源码改了是不合适的,毕竟还有不少正常的机型。但是我不知道怎么改,大雕估计也不想费事。不过这个问题要命的地方在于,大雕只是简单粗暴地用uci set network.lan.ifname="$(uci get network.lan.ifname) ra0 rai0"将无线接口加入lan,而luci界面里实际上读不到ra0 rai0,因此一旦用页面修改network配置,再保存应用,lan口会立即丢失ra0 rai0,必须手动重新加入。

那有没有办法让闭源驱动符合openwrt规范呢?从而让openwrt识别到?

hpx502766238 avatar Mar 22 '24 14:03 hpx502766238

屏幕截图 2024-02-25 191656

  • 你这个问题我也碰到过,这跟luci里的一个接口扫描函数有关。
  • 这个界面的接口是通过luci/modules/luci-base/luasrc/model/network.lua中的get_interfaces函数扫描列举的。标准的openwrt会将接口分为以太网接口,vlan接口和wireless接口,分别记录在network.interface,network.switch_vlan,以及wireless.wifi-iface中,你打开这个页面的时候,get_interfaces就会通过uci从这些属性中读取。
  • openwrt自带的开源驱动是符合前面所说的规范的,但闭源驱动似乎都不符合,也就是使用闭源驱动的时候wireless.wifi-iface其实是空的。
  • 但是我用padavanonly的immortalwrt源码编译固件时,这个界面又看得到各个无线接口。然后我对比了一下他和官方源码,发现padavanonly将network.lua开头的接口判别列表(IFACE_PATTERNS_WIRELESS)给删了不少东西。再仔细看一下get_interfaces的逻辑,原来它在读取network.interface的时候会排除“被忽略的接口“,”虚拟接口“,以及”无线接口”。也就是说network.interface里实际上是有无线接口的,但函数只想从这里获取以太网接口,所以就把它们排除了。
  • 我自己是稍微改了改get_interfaces的逻辑,让它读取到network.interface的无线接口时不要排除掉,直接列入无线接口列表。
  • 但以上两种做法仅仅只适合为特殊机型更改,因为这个问题说到底是闭源驱动没有完全符合openwrt规范,直接把lede源码改了是不合适的,毕竟还有不少正常的机型。但是我不知道怎么改,大雕估计也不想费事。不过这个问题要命的地方在于,大雕只是简单粗暴地用uci set network.lan.ifname="$(uci get network.lan.ifname) ra0 rai0"将无线接口加入lan,而luci界面里实际上读不到ra0 rai0,因此一旦用页面修改network配置,再保存应用,lan口会立即丢失ra0 rai0,必须手动重新加入。

那有没有办法让闭源驱动符合openwrt规范呢?从而让openwrt识别到?

很遗憾我不知道具体要改哪些东西,只知道是跟netifd有关的内容。

blzadx avatar Mar 24 '24 07:03 blzadx

屏幕截图 2024-02-25 191656

  • 你这个问题我也碰到过,这跟luci里的一个接口扫描函数有关。
  • 这个界面的接口是通过luci/modules/luci-base/luasrc/model/network.lua中的get_interfaces函数扫描列举的。标准的openwrt会将接口分为以太网接口,vlan接口和wireless接口,分别记录在network.interface,network.switch_vlan,以及wireless.wifi-iface中,你打开这个页面的时候,get_interfaces就会通过uci从这些属性中读取。
  • openwrt自带的开源驱动是符合前面所说的规范的,但闭源驱动似乎都不符合,也就是使用闭源驱动的时候wireless.wifi-iface其实是空的。
  • 但是我用padavanonly的immortalwrt源码编译固件时,这个界面又看得到各个无线接口。然后我对比了一下他和官方源码,发现padavanonly将network.lua开头的接口判别列表(IFACE_PATTERNS_WIRELESS)给删了不少东西。再仔细看一下get_interfaces的逻辑,原来它在读取network.interface的时候会排除“被忽略的接口“,”虚拟接口“,以及”无线接口”。也就是说network.interface里实际上是有无线接口的,但函数只想从这里获取以太网接口,所以就把它们排除了。
  • 我自己是稍微改了改get_interfaces的逻辑,让它读取到network.interface的无线接口时不要排除掉,直接列入无线接口列表。
  • 但以上两种做法仅仅只适合为特殊机型更改,因为这个问题说到底是闭源驱动没有完全符合openwrt规范,直接把lede源码改了是不合适的,毕竟还有不少正常的机型。但是我不知道怎么改,大雕估计也不想费事。不过这个问题要命的地方在于,大雕只是简单粗暴地用uci set network.lan.ifname="$(uci get network.lan.ifname) ra0 rai0"将无线接口加入lan,而luci界面里实际上读不到ra0 rai0,因此一旦用页面修改network配置,再保存应用,lan口会立即丢失ra0 rai0,必须手动重新加入。

那有没有办法让闭源驱动符合openwrt规范呢?从而让openwrt识别到?

很遗憾我不知道具体要改哪些东西,只知道是跟netifd有关的内容。

我尝试了用padavanonly的network.lua替代,发现可以识别了,但识别为以太网接口,而原先虽然接口列表不显示,但在概览中是可以看到ra0被识别为无线接口的。看来padavan的逻辑是直接把闭源驱动当作普通以太网接口处理,虽然这样可以解决问题,但自己还是有些强迫症,觉得图标和文字与实际不匹配看着不舒服,还是希望op将它识别为无线接口。我看了开源驱动固件下的无线接口识别情况,luci界面会获取无线ssid、工作模式,而这些对于闭源驱动来说获取方法是完全不一样的,闭源驱动使用wireless-tools中iwconfig获取,所以我觉得是不是op获取不到无线信息导致了界面不显示,所以我是想改一下op无线信息的获取逻辑,就是不知道要改哪些代码。

hpx502766238 avatar Apr 05 '24 05:04 hpx502766238

屏幕截图 2024-02-25 191656

  • 你这个问题我也碰到过,这跟luci里的一个接口扫描函数有关。
  • 这个界面的接口是通过luci/modules/luci-base/luasrc/model/network.lua中的get_interfaces函数扫描列举的。标准的openwrt会将接口分为以太网接口,vlan接口和wireless接口,分别记录在network.interface,network.switch_vlan,以及wireless.wifi-iface中,你打开这个页面的时候,get_interfaces就会通过uci从这些属性中读取。
  • openwrt自带的开源驱动是符合前面所说的规范的,但闭源驱动似乎都不符合,也就是使用闭源驱动的时候wireless.wifi-iface其实是空的。
  • 但是我用padavanonly的immortalwrt源码编译固件时,这个界面又看得到各个无线接口。然后我对比了一下他和官方源码,发现padavanonly将network.lua开头的接口判别列表(IFACE_PATTERNS_WIRELESS)给删了不少东西。再仔细看一下get_interfaces的逻辑,原来它在读取network.interface的时候会排除“被忽略的接口“,”虚拟接口“,以及”无线接口”。也就是说network.interface里实际上是有无线接口的,但函数只想从这里获取以太网接口,所以就把它们排除了。
  • 我自己是稍微改了改get_interfaces的逻辑,让它读取到network.interface的无线接口时不要排除掉,直接列入无线接口列表。
  • 但以上两种做法仅仅只适合为特殊机型更改,因为这个问题说到底是闭源驱动没有完全符合openwrt规范,直接把lede源码改了是不合适的,毕竟还有不少正常的机型。但是我不知道怎么改,大雕估计也不想费事。不过这个问题要命的地方在于,大雕只是简单粗暴地用uci set network.lan.ifname="$(uci get network.lan.ifname) ra0 rai0"将无线接口加入lan,而luci界面里实际上读不到ra0 rai0,因此一旦用页面修改network配置,再保存应用,lan口会立即丢失ra0 rai0,必须手动重新加入。

那有没有办法让闭源驱动符合openwrt规范呢?从而让openwrt识别到?

很遗憾我不知道具体要改哪些东西,只知道是跟netifd有关的内容。

我尝试了用padavanonly的network.lua替代,发现可以识别了,但识别为以太网接口,而原先虽然接口列表不显示,但在概览中是可以看到ra0被识别为无线接口的。看来padavan的逻辑是直接把闭源驱动当作普通以太网接口处理,虽然这样可以解决问题,但自己还是有些强迫症,觉得图标和文字与实际不匹配看着不舒服,还是希望op将它识别为无线接口。我看了开源驱动固件下的无线接口识别情况,luci界面会获取无线ssid、工作模式,而这些对于闭源驱动来说获取方法是完全不一样的,闭源驱动使用wireless-tools中iwconfig获取,所以我觉得是不是op获取不到无线信息导致了界面不显示,所以我是想改一下op无线信息的获取逻辑,就是不知道要改哪些代码。

折腾了一下午,尝试了手动新建/etc/config/wireless配置文件(也就是wireless.wifi-iface等配置的来源),发现原生无线配置界面出来了,但只能读到部分无线信息(ssid,bssid等),而其他很多设置残缺,接口中也显示了无线接口,但是为灰色,尝试在原生无线配置界面重启无线,接口依然为灰色。看来确实存在闭源驱动与openwrt管理方式不完全兼容的问题(可能驱动缺少部分API吧)。所以综上,还是照padavanonly将其识别为以太网接口为最佳方案。 屏幕截图 2024-04-05 212847

hpx502766238 avatar Apr 05 '24 13:04 hpx502766238

有详细的步骤吗 ? 我也遇到这个问题了呢

lucian521 avatar Aug 05 '24 23:08 lucian521