forked from mirrors/linux
		
	net: Make skb->skb_iif always track skb->dev
Make it follow device decapsulation, from things such as VLAN and bonding. The stuff that actually cares about pre-demuxed device pointers, is handled by the "orig_dev" variable in __netif_receive_skb(). And the only consumer of that is the po->origdev feature of AF_PACKET sockets. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									92101b3b2e
								
							
						
					
					
						commit
						b68581778c
					
				
					 1 changed files with 1 additions and 2 deletions
				
			
		| 
						 | 
					@ -3173,8 +3173,6 @@ static int __netif_receive_skb(struct sk_buff *skb)
 | 
				
			||||||
	if (netpoll_receive_skb(skb))
 | 
						if (netpoll_receive_skb(skb))
 | 
				
			||||||
		return NET_RX_DROP;
 | 
							return NET_RX_DROP;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!skb->skb_iif)
 | 
					 | 
				
			||||||
		skb->skb_iif = skb->dev->ifindex;
 | 
					 | 
				
			||||||
	orig_dev = skb->dev;
 | 
						orig_dev = skb->dev;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	skb_reset_network_header(skb);
 | 
						skb_reset_network_header(skb);
 | 
				
			||||||
| 
						 | 
					@ -3186,6 +3184,7 @@ static int __netif_receive_skb(struct sk_buff *skb)
 | 
				
			||||||
	rcu_read_lock();
 | 
						rcu_read_lock();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
another_round:
 | 
					another_round:
 | 
				
			||||||
 | 
						skb->skb_iif = skb->dev->ifindex;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	__this_cpu_inc(softnet_data.processed);
 | 
						__this_cpu_inc(softnet_data.processed);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue