Ubuntu 14.04 IPv6 多播

Ubuntu 14.04 IPv6 多播

我在使用 Ubuntu 14.04 设置 IPv6 多播服务器时遇到了麻烦,当尝试绑定到 IPv6 多播地址时,服务器因参数无效而失败,使用 mcfirst 工具检查后发现出现相同的错误。

mcfirst -6 ff01::1:1 10000
bind [multicast]: Invalid argument
errno=22

这与 Ubuntu 12.04 完美兼容

mcfirst -6 ff01::1:1 10000
mcfirst joined (*,G) = (*,ff01::1:1)

编辑:1(Ifconfig 输出)

eth0      Link encap:Ethernet  HWaddr 00:0c:29:53:a1:fb  
          inet addr:192.168.50.5  Bcast:192.168.50.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe53:a1fb/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:22424 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11825 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:29238784 (29.2 MB)  TX bytes:1061497 (1.0 MB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1838133 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1838133 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1026295857 (1.0 GB)  TX bytes:1026295857 (1.0 GB)

编辑:2(ip 地址)输出

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:53:a1:fb brd ff:ff:ff:ff:ff:ff
    inet 192.168.50.5/24 brd 192.168.50.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe53:a1fb/64 scope link 
       valid_lft forever preferred_lft forever

答案1

将 IPv6 链路本地地址、多播链路本地地址或多播节点本地地址绑定到 IPv6 套接字时,内核需要一个范围标识符。

这些语法例如是ff01::1:1%eth0。请确保您的应用程序正确支持它们。此语法由支持getaddressinfo(),因此正确编写的应用程序应该没有任何问题。


此行为在低于 3.10 的内核版本中不存在,显然无法正确处理节点本地多播。请参阅实际的内核补丁可以执行此操作函数定义__ipv6_addr_needs_scope_id

相关内容