【问题标题】:can send but cannot receive multicast packets可以发送但不能接收多播数据包
【发布时间】:2013-08-05 09:51:12
【问题描述】:

我正在尝试使用多播将多个 UDP 数据报发送到嵌入式 linux 单元。设备上的内核版本为:

/ # uname -r
2.6.24.6

出于测试目的,我使用找到的代码here(添加了几个标题并更改了 IP 地址以匹配单元的 IP 地址)

问题是同一组播组中的其他设备(Windows PC)能够接收数据,而该单元不能。我在某处读到必须修改 rp_filter 的值。我尝试了所有选项,但无济于事。

我可以毫无问题地将设备作为服务器运行。但它根本没有收到。

请注意,netstat -g 不起作用。

/ # netstat -g
netstat: invalid option -- g
BusyBox v1.11.2 () multi-call binary

Usage: netstat [-laentuwxr]

Display networking information

Options:
        -l      Display listening server sockets
        -a      Display all sockets (default: connected)
        -e      Display other/more information
        -n      Don't resolve names
        -t      Tcp sockets
        -u      Udp sockets
        -w      Raw sockets
        -x      Unix sockets
        -r      Display routing table

因此我无法检查组成员身份。

P.S:我在一台 linux PC 上运行了相同的程序(代码来自上面的链接),它运行正常。所以代码不是问题。

【问题讨论】:

  • 我设法检查了 /proc/net/igmp,它说 eth0 是 E2010101 -> 226.1.1.1 的成员,这是正确的。但是我仍然没有收到任何数据报
  • 您不需要 netstat -g 支持来查询组成员资格。如果你在一个盒子上 strace netstat -gn 你会看到 netstat 只是从 /proc 中读取这个信息。因此阅读 /proc/net/igmp (和 /proc/net/igmp6 用于 ipv6)将显示您当前的组成员身份。 (注意我的(x86)框组是 010000E0 代表 224.0.0.1,这意味着您可能需要切换一些字节顺序)。
  • @amo-ej1:是的,我想通了。检查我之前的评论。但是还是收不到任何数据报。
  • 4321 端口也打开了。刚刚签入 /proc/net/udp
  • 过去 2 天一直在努力让它工作。根据我到目前为止检查的所有内容(端口、组成员资格...),它应该可以工作...

标签: linux ip multicast


【解决方案1】:

解决了。在弄乱了我在系统上可以找到的所有东西之后,我通过在混杂模式下运行 eth0 来让它工作

ifconfig eth0 promisc

【讨论】:

  • 虽然我相信这是一个以太网驱动程序错误。它也应该在混杂模式下工作。
  • 编辑:非混杂模式*
猜你喜欢
  • 1970-01-01
  • 2011-05-28
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 2015-12-03
  • 2015-03-14
  • 2017-03-05
  • 1970-01-01
相关资源
最近更新 更多