• Thomas Goff's avatar
    IPv6: Fix multicast routing bugs. · 1d6e55f1
    Thomas Goff authored
    This patch addresses the IPv6 multicast routing issues described
    below.  It was tested with XORP 1.4/1.5 as the IPv6 PIM-SM routing
    daemon against FreeBSD peers.
    
    net/ipv6/ip6_input.c:
    
      - Don't try to forward link-local multicast packets.
    
      - Don't reset skb2->dev before calling ip6_mr_input() so packets can
        be identified as coming from the PIM register vif properly.
    
    net/ipv6/ip6mr.c:
    
      - Fix incoming PIM register messages processing:
    
        * The IPv6 pseudo-header should be included when checksumming PIM
          messages (RFC 4601 section 4.9; RFC 3973 section 4.7.1).
    
        * Packets decapsulated from PIM register messages should have
          skb->protocol ETH_P_IPV6.
    
      - Enable/disable IPv6 multicast forwarding on the corresponding
        interface when a routing daemon adds/removes a multicast virtual
        interface.
    
      - Remove incorrect skb_pull() to fix userspace signaling.
    
      - Enable/disable global IPv6 multicast forwarding when an IPv6
        multicast routing socket is opened/closed.
    
    net/ipv6/route.c:
    
      - Don't use strict routing logic for packets decapsulated from PIM
        register messages (similar to disabling rp_filter for the IPv4
        case).
    Signed-off-by: default avatarThomas Goff <thomas.goff@boeing.com>
    Reviewed-by: default avatarFred Templin <fred.l.templin@boeing.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    1d6e55f1
ip6mr.c 39.7 KB