Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IGMP+ - IGMP Snooping Router-Port Forwarding Daemon

简介

IGMP+ 是一个 Linux 应用层守护进程,用于补齐硬件 offload 网桥的 IGMP Report/Leave 转发功能。

在开启 IGMP snooping 的网桥系统中,硬件 offload 路径能够:

  • 广播 IGMP General Query
  • 生成 multicast router port
  • 从网桥从属接口接收 IGMP Report/Join/Leave
  • 将这些报文上送到网桥层处理

但是不会按协议转发到 router port。IGMP+ 通过用户态 raw socket 补齐这一转发行为,确保上游组播路由器能够完整感知下游主机成员关系变化。

功能特性

  • ✅ 支持 IGMPv2/v3(Membership Report、Leave Group)
  • ✅ 自动发现 bridge ports 和 router ports
  • ✅ 5 秒刷新周期适配拓扑变化
  • ✅ 支持 VLAN-tagged 以太网帧(802.1Q/802.1ad)
  • ✅ 不转发 IGMP Query,避免回灌
  • ✅ 不转发回接收端口,避免环路
  • ✅ 支持 daemon 模式和前台调试模式
  • ✅ 目标平台:arm64 Linux

使用方法

命令行

igmp+ [-v] -b <bridge-name>

选项:

  • -b <bridge-name>:指定网桥名称(必需)
  • -v:verbose 模式,前台运行并打印调试信息

运行模式:

  • -v:前台运行,输出调试信息到终端
  • 不带 -v:自动以 daemon 模式在后台运行

示例:

# 前台运行,带调试输出
igmp+ -v -b br-lan

# daemon 模式运行(无输出)
igmp+ -b br-lan

# 停止 daemon
pkill igmp+

构建

原生编译:

make
sudo make install PREFIX=/usr/local

arm64 交叉编译:

make CROSS_COMPILE=aarch64-linux-gnu-

显式指定编译器和 sysroot:

make CC=aarch64-linux-gnu-gcc CFLAGS="--sysroot=/path/to/sysroot -O2 -Wall -Wextra -std=c11"

工作原理

数据面

  1. 创建 AF_PACKET/SOCK_RAW socket,协议为 ETH_P_ALL
  2. 接收从网桥从属端口进入的二层帧
  3. 解析以太网头、VLAN 标签、IPv4 头
  4. 识别 IGMP 报文类型(0x12、0x16、0x17、0x22)
  5. 从非 router port 收到的 IGMP Report/Leave 转发到所有 router port
  6. 跳过接收端口,避免环路

控制面

  1. 通过 rtnetlink RTM_GETLINK 获取网桥从属端口列表
  2. 通过 rtnetlink RTM_GETMDB 获取 router port 列表
  3. 每 5 秒刷新一次状态

技术要求

  • Linux 系统 API(netlink、AF_PACKET socket)
  • 需要 root 权限或 CAP_NET_RAWCAP_NET_ADMIN
  • 目标架构:arm64(aarch64)
  • 不依赖外部命令(ip、bridge、brctl 等)

验证建议

  1. 在带 IGMP snooping 的网桥上启动程序
  2. 下游主机加入/离开组播组
  3. 在 router port 对端抓包,确认 IGMPv2/v3 Report/Leave 被转发
  4. 确认 General Query 不被应用回灌
  5. 动态切换 multicast router port,确认刷新周期后转发目标变化

许可证

MIT License — 详见 LICENSE 文件。

相关文档

详细需求和技术设计文档请参阅 docs/requirements.md

About

IGMP Snooping Router-Port Forwarding Patch for XG-140-TF or XG-040-MD.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages