11

I've got a basic network with 3 nodes (VM's).

One node publishes an event, the other nodes listen for it and print something when received. It used to work one-on-one (so node gives event to each other node seperately), but I'd like to implement multicasting.

As a quick experiment, I want to do a basic 'broadcast' on the network, but I've been unable to figure out the correct IPv6 address. Using the IPv4 broadcast address works, both nodes print something then So the address of node 1 is: inet addr:192.168.56.101 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fef7:30a7/64 Scope:Link

Node 2: inet addr:192.168.56.102 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe56:a2f7/64 Scope:Link

Node 3: inet addr:192.168.56.103 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe82:ae4a/64 Scope:Link

So IPv6 doesn't have broadcast and instead uses multicast. These multicast addresses always start with ff. Then you've got the flag, which is 0 by default for assigned mlc and 1 for transient. And then the scope. Wanting to do a basic broadcast equivalent, I tried ff01::1 which should reach all nodes and ff01::2 for all routers. But that doesn't work. I've also tried ff02, ff05 and ff0e. I'm misunderstanding something here, what is the correct multicast/broadcast ipv6 address to reach node 2 and node 3 when node 1 publishes an event?

EDIT:

After some experimentation, I've discovered I can't even ping the inet6 addresses, but I can the ipv4 addresses! Any clue whats going on?

3 Answers 3

16

The right address to multicast to all nodes on a link is ff02::1%<interface>. You probably forgot the interface ID, which is required for link-scoped addresses.

For example:

# ping6 ff02::1%br0
PING ff02::1%br0(ff02::1) 56 data bytes
64 bytes from fe80::6e62:6dff:fed1:dfad: icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from fe80::5054:ff:fede:b69c: icmp_seq=1 ttl=64 time=0.455 ms (DUP!)
64 bytes from fe80::5054:ff:fe90:de19: icmp_seq=1 ttl=64 time=0.650 ms (DUP!)
64 bytes from fe80::6e62:6dff:fed1:dfad: icmp_seq=2 ttl=64 time=0.046 ms
64 bytes from fe80::5054:ff:fe90:de19: icmp_seq=2 ttl=64 time=0.203 ms (DUP!)
64 bytes from fe80::5054:ff:fede:b69c: icmp_seq=2 ttl=64 time=0.241 ms (DUP!)
64 bytes from fe80::6e62:6dff:fed1:dfad: icmp_seq=3 ttl=64 time=0.064 ms
64 bytes from fe80::5054:ff:fe90:de19: icmp_seq=3 ttl=64 time=0.237 ms (DUP!)
64 bytes from fe80::5054:ff:fede:b69c: icmp_seq=3 ttl=64 time=0.254 ms (DUP!)
^C
--- ff02::1%br0 ping statistics ---
3 packets transmitted, 3 received, +6 duplicates, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.046/0.244/0.650/0.189 ms

Addresses in ff01::/16 are for interface-local multicast, which is only really useful to multicast to the local host.

References: RFC 4291

1
  • 1
    Thank you. When pinging ff02::1%<interface> I succesfully reach all other nodes. My publish receive doesn't work, but the ping does so thats another issue altoghether.
    – Sven
    Nov 16, 2014 at 8:23
0

Remember to include the Interface in the argument so:

ping6 ff02::1 won't work.

ping6 ff02::1%en0 should work but depends on your interface name in this case en0.

0

Use

ping6 -I eth0 ff02::1 

where, eth0 is the interface name from which your link local is communicating. You can get all the available interface of your machine using

ifconfig

ff02::1 is the well-known multicast address, assigned by IANA

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .