IPv6: Fix multicast routing bugs.
authorThomas Goff <thomas.goff@boeing.com>
Wed, 28 Jan 2009 06:39:59 +0000 (22:39 -0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 28 Jan 2009 06:39:59 +0000 (22:39 -0800)
commit1d6e55f195128813f96458203a9fa14204f9251e
tree8fb8d332a9d5a0df98401f0b49a86173a0c3f25a
parent6c06a478c9e59d1584a5dc1b2b3519bae5d6546a
IPv6: Fix multicast routing bugs.

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: Thomas Goff <thomas.goff@boeing.com>
Reviewed-by: Fred Templin <fred.l.templin@boeing.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/ip6_input.c
net/ipv6/ip6mr.c
net/ipv6/route.c