Re: [PATCH 2/2] ipv4: Change rt->rt_iif encoding.
From: David Miller <davem@davemloft.net>
Date: 2012-07-24 00:43:15
From: Julian Anastasov <ja@ssi.bg> Date: Tue, 24 Jul 2012 03:24:38 +0300 (EEST)
On Mon, 23 Jul 2012, David Miller wrote:quoted
Hmmm, the problem is that when we decapsulate VLAN devices, we're left with the parent device's index in skb->skb_iif.Not sure if it is a problem with VLANs, can be also with some virtual devices but may be they use dev_forward_skb() where skb_iif is zeroed.
dev_forward_skb() gives the packet to netif_rx() which will thus send the packet down to __netif_receive_skb() which will set the skb->skb_iif to the new device's ifindex. It will not stay at zero :-)
I was also worrying about ip_mc_output looping packets with skb_iif because skb_clone copies the field but may be such loops happen only for locally originated traffic where skb_iif starts with 0.
Loopback of multicast packets is done in ip_mc_output(), via the clone that you mention, via dev_loopback_xmit(). dev_loopback_xmit() gives the packet to netif_rx_ni() which again lands it back at __netif_receive_skb(), which (with my changes) will adjust the skb->skb_iif to match whatever sits in skb->dev at the time. It should be alright.