如何将物理 USB 调制解调器分配给 NetworkManager 连接

如何将物理 USB 调制解调器分配给 NetworkManager 连接

我在双独立调制解调器设备(基于 yocto)上工作。我想将每个分配给不同的 NM 连接。我使用 cmd 注册它们:

nmcli c add type gsm ifname cdc-wdm[0|1] con-name mdm1orange apn internet

有用。问题是,cdc-wdm后缀来自设备注册/开机顺序。我想将它与 USB 端口关联(它们将使用不同的运营商 SIM、APN、配置等),因此我创建了一个 udev 规则:

SUBSYSTEM=="usbmisc", SUBSYSTEMS=="usb", KERNELS=="1-1.3:1.4", SYMLINK+="modem2", TAG+="systemd"
SUBSYSTEM=="usbmisc", SUBSYSTEMS=="usb", KERNELS=="1-1.4:1.4", SYMLINK+="modem1", TAG+="systemd"

它确实有效,我可以看到/dev/modem1/dev/modem2正在注册,但调用:

nmcli c add type gsm ifname modem[1|2] con-name mdm1orange apn internet

只是失败了。 NM 不知道我想使用哪个设备进行连接。

那么,如何将基于 USB 端口别名或索引(使用 udev 或其他任何东西)分配给调制解调器网络接口,而不仅仅是符号/dev/链接?最好也创建一个 WWAN 接口别名。

谢谢!

答案1

网络接口的名称只是一个名称,而不是设备节点,因此符号链接不能指向网络设备。您的 udev 规则生成一个指向 usbmisc 设备而不是网络接口的符号链接,因此这就是它不起作用的原因。

网络设备是否cdc-wdm具有任何持久属性,例如 MAC 地址或同等属性?如果您运行eg ethtool --show-permaddr cdc-wdm0,您是否会获得一个从一次调制解调器打开到下一次打开都保持不变的唯一标识符?或者,如果您运行udevadm info -q all -p /sys/class/net/cdc-wdm0,它是否会显示从一个调制解调器打开到下一个调制解调器打开时持续存在且对于单个调制解调器而言唯一的任何属性?

如果您的基于 yocto 的设备具有systemd-udevd,那么您也许能够使用/etc/systemd/network/*.link文件为调制解调器分配持久的网络接口名称。

我最近使用了 Zyxel WAH7601,这是一款 4G (LTE) USB 调制解调器/移动 WiFi 接入点。通过 USB 连接时,它使用rndis_host网络驱动程序,并且每次打开时都会显示一个新的 MAC 地址。我发现这对我的笔记本电脑来说很烦人,因为它导致 NetworkManager 在每次启动时将其检测为“新”连接。

解决这个问题的第一步是为其创建一个持久的网络设备名称。上述udevadm info命令表明该设备具有ID_SERIAL_SHORT=xxxxxxxxxxxx序列号属性(出于隐私考虑,对实际序列号进行了编辑)。和重新启动调制解调器时保持不变(如设备序列号所预期的那样)。所以我创建了一个/etc/systemd/network/72-zyxel.link这样的文件:

[Match]
Driver=rndis_host
Property=ID_SERIAL_SHORT=xxxxxxxxxxxx

[Link]
Description=Zyxel WAH7601
NamePolicy=
Name=zyxelmodem0

这为我提供了调制解调器的持久网络接口名称,并锁定调制解调器的序列号。该Property=行指的是上述udevadm info ...命令输出中的属性,用于将链接文件与实际网络设备进行匹配。空NamePolicy=很重要,因为它仅取消此设备的系统范围默认 NamePolicy。该Name=行仅指定我想要的设备名称(仅当 NamePolicy 为 null 或无法生成更“标准”的名称时才会生效)。

对我来说,解决方案的第二部分是为调制解调器创建一个 NetworkManager 连接,然后将其修改为仅使用设备名称(而不是 MAC 地址,因为它因调制解调器而异)将连接绑定到特定设备:

 <creating a connection using NetworkManager GUI>
 nmcli c mod ZyxelModem connection.interface-name zyxelmodem0
 nmcli c mod ZyxelModem 802-3-ethernet.mac-address ""

答案2

所以经过检查,udev我们只更改网络接口的名称。你不能更改文件夹中文件的名称/dev/,您可以创建一个别名/符号链接/标签ETC。

此(符号链接或新的网络开发名称)不适用于 ModemManager 和网络管理器。对于MM来说,可以用特殊的udev规则在 CLI 中识别调制解调器。但这对于 DBus 接口不起作用。而且它对 NM 不起作用。

我搬到了这里qmicli,我对此感到非常满意;)

相关内容