• Kirill Smelkov's avatar
    Kernel part of "mesh multicast" problem solved · 3e684fcf
    Kirill Smelkov authored
    Packets delivery in IPv4/IPv6 multicast is handled together by
    multicast-routing daemon and by kernel. The MR daemon installs routes
    into kernel, and the kernel actually routes the traffic.
    
    We want the overall solution to obey to the following properties:
    
    	every member of the group
    
    	* can send a packet to the group via single uniform send call.
    	* That packet will be delivered to all members of the group -
    	  both on the same and on other machines, exactly once to each recipient.
    
    This suggests sending/reception to be organized via one virtual
    interface and then forwarded outside/into-inside as needed.
    
    This patch adds topo-ABCDloop which creates a 4-nodes network with
    cycle. It then manually installs static multicast routes the way, with
    avoiding loops and that a packet sent from particular sender is
    delivered to all other members of the network exactly once.
    
    The sending/reception is organized via mcast-rx/mcast-tx veth pair, or
    via loopback if the kernel has the following fixes
    
    	linux@25bcc760
    	linux@43eadf90
    
    It was tested to work ok via
    
    	# on A
    	# ./tmcast.py txrx6 A
    	joining ff1e::1 @ [7]mcast-rx
    	tx: A.1 ...
    	rx: A.1
    	tx: A.2 ...
    	rx: A.2
    	tx: A.3 ...
    	rx: A.3
    
    	# on B
    	# ./tmcast.py rx6
    	joining ff1e::1 @ [7]mcast-rx
    	rx: A.1
    	rx: A.2
    	rx: A.3
    
    	# on C
    	# ./tmcast.py rx6
    	joining ff1e::1 @ [7]mcast-rx
    	rx: A.1
    	rx: A.2
    	rx: A.3
    
    	# on D
    	# ./tmcast.py rx6
    	joining ff1e::1 @ [7]mcast-rx
    	rx: A.1
    	rx: A.2
    	rx: A.3
    
    and similarly for also B, C or D being sender and all that with also IPv4.
    
    Please see inside for details.
    
    See also the following patch for more in-depth debugging of used approach.
    3e684fcf
lib.sh 1.72 KB