net: Enable support for VRF with ipv4 multicast
authorDavid Ahern <dsa@cumulusnetworks.com>
Mon, 31 Oct 2016 22:54:00 +0000 (15:54 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 1 Nov 2016 15:54:26 +0000 (11:54 -0400)
commite58e415968110648231ed6783d38e78032661cee
tree25d5ed4792bddd6ffe33ea76d0c74460fc10bd60
parent1c851758edecd1ccbdfed7dcb0e5ee869e94615b
net: Enable support for VRF with ipv4 multicast

Enable support for IPv4 multicast:
- similar to unicast the flow struct is updated to L3 master device
  if relevant prior to calling fib_rules_lookup. The table id is saved
  to the lookup arg so the rule action for ipmr can return the table
  associated with the device.

- ip_mr_forward needs to check for master device mismatch as well
  since the skb->dev is set to it

- allow multicast address on VRF device for Rx by checking for the
  daddr in the VRF device as well as the original ingress device

- on Tx need to drop to __mkroute_output when FIB lookup fails for
  multicast destination address.

- if CONFIG_IP_MROUTE_MULTIPLE_TABLES is enabled VRF driver creates
  IPMR FIB rules on first device create similar to FIB rules. In
  addition the VRF driver does not divert IPv4 multicast packets:
  it breaks on Tx since the fib lookup fails on the mcast address.

With this patch, ipmr forwarding and local rx/tx work.

Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/vrf.c
net/ipv4/ipmr.c
net/ipv4/route.c