mirror of https://gitee.com/openkylin/linux.git
net: add skb_pop_rcv_encapsulation
This function is used by UDP encapsulation protocols in RX when crossing encapsulation boundary. If ip_summed is set to CHECKSUM_UNNECESSARY and encapsulation is not set, change to CHECKSUM_NONE since the checksum has not been validated within the encapsulation. Clears csum_valid by the same rationale. Signed-off-by: Tom Herbert <therbert@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
bbdff225ed
commit
e5eb4e30a5
|
@ -1854,6 +1854,18 @@ static inline int pskb_network_may_pull(struct sk_buff *skb, unsigned int len)
|
|||
return pskb_may_pull(skb, skb_network_offset(skb) + len);
|
||||
}
|
||||
|
||||
static inline void skb_pop_rcv_encapsulation(struct sk_buff *skb)
|
||||
{
|
||||
/* Only continue with checksum unnecessary if device indicated
|
||||
* it is valid across encapsulation (skb->encapsulation was set).
|
||||
*/
|
||||
if (skb->ip_summed == CHECKSUM_UNNECESSARY && !skb->encapsulation)
|
||||
skb->ip_summed = CHECKSUM_NONE;
|
||||
|
||||
skb->encapsulation = 0;
|
||||
skb->csum_valid = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* CPUs often take a performance hit when accessing unaligned memory
|
||||
* locations. The actual performance hit varies, it can be small if the
|
||||
|
|
Loading…
Reference in New Issue