#plc #communication #discover #sockets #homeplug #ethertype

powerline

进行中:电力线通信库

1 个不稳定版本

0.1.0 2021年2月20日

#14 in #discover

BSD-2-Clause

61KB
1.5K SLoC

Rust 电力线通信管理库

这是一个实验性的 Rust 库,用于发现 PLC 设备并管理它们,还包括一个使用该库的命令行工具。

当前支持的协议

  • HomePlug AV 1.1/2.0 (Ethertype 0x88e1)
  • Broadcom/Gigle 协议 (Ethertype 0x8912, "Mediaxtream"?)

这些协议是第二层(数据链路)协议,因此需要发送和接收原始以太网帧的能力。此库具有跨平台层,以高效地实现这一功能。

当前支持的操作系统

  • Linux(使用 AF_PACKET 套接字)
  • macOS(使用 /dev/bpf 设备)

库的核心是 no_std,以便在资源有限的设备(如路由器)中使用。

基于高通/atheros 的设备

这些设备似乎实现了 HomePlug AV 规范中记录的所有 HomePlug AV H1 管理帧。它们还有许多由高通在 open-plc-utils 中实现的供应商扩展。

测试设备

  • QCA7420 - Netcomm NP505F(500Mbps HomePlug AV 1.1)

Broadcom/Gigle 设备

虽然这些设备似乎与其他 HomePlug AV 设备在电力线级别上具有互操作性,但它们对 H1 管理帧的支持有限。它们似乎在 ethertype 0x8912 上公开了大多数功能,这似乎是 Gigle/Mediaxtream 的遗留功能。

测试设备

  • BCM60355 - D-Link DHP-601AV(1000Mbps HomePlug AV 2.0)

资源

HomePlug 规范 高通 open-plc-utils

命令行工具

使用此工具可能需要 root 权限!

用法

    powerline [FLAGS] [OPTIONS] [SUBCOMMAND]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information
    -v               Increase verbosity

OPTIONS:
        --interface <interfaces>...    Select the interface(s) to discover with

SUBCOMMANDS:
    find        Find which interface a specific device is reachable
    help        Prints this message or the help of the given subcommand(s)
    scan        Discover and list devices
    set-name    Set the name of a device

构建并安装到 ~/.cargo/bin

cargo install --example powerline --path .

示例输出

$ powerline 
eth0: [60:63:4c:11:22:33] HPAV2.0 Broadcom 3Ethers 'Lounge'
eth0: [60:63:4c:44:55:66] HPAV2.0 Broadcom 5Ethers 'Gateway'
eth0: [00:60:64:77:88:99] HPAV1.1 Qualcomm 8Ethers 'Upstairs'

输出显示在 eth0 网络接口上发现了三个 HomePlug AV 设备。
两个是 Broadcom 的 HPAV2.0 设备,一个是高通的 HPAV1.1 设备。
XEthers 字段显示了由 HPAV 设备桥接的以太网设备数量。
最后引号内的文本是设备的友好名称。

依赖项

~130KB