I having troubles to setup an IPv6 multicast server with Ubuntu 14.04, the server fails with Invalid argument when try to bind to IPv6 multicast address, checked with mcfirst tool and got the same error.
mcfirst -6 ff01::1:1 10000
bind [multicast]: Invalid argument
errno=22
This worked perfectly with Ubuntu 12.04
mcfirst -6 ff01::1:1 10000
mcfirst joined (*,G) = (*,ff01::1:1)
Edit: 1 (Ifconfig output)
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)
Edit: 2 (ip addr) output
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
Best Answer
The kernel expect a scope identifier when binding an IPv6 Link local address, a multicast link local address or a multicast node local address to an IPv6 socket.
The syntax for these is e.g.
ff01::1:1%eth0
. Make sure that your applications support them correctly. This syntax is supported bygetaddressinfo()
, so applications that are correctly written should have nothing to do.This behavior was not present in kernel versions below 3.10, which apparently didn't handle node-local multicast properly. See the actual kernel patch that enforces this and the function definition of
__ipv6_addr_needs_scope_id
.