mirror of
https://github.com/torvalds/linux.git
synced 2025-04-09 14:45:27 +00:00
net: vxlan: make vxlan_remcsum() return drop reasons
Make vxlan_remcsum() support skb drop reasons by changing the return value type of it from bool to enum skb_drop_reason. The only drop reason in vxlan_remcsum() comes from pskb_may_pull_reason(), so we just return it. Signed-off-by: Menglong Dong <dongml2@chinatelecom.cn> Reviewed-by: Simon Horman <horms@kernel.org> Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4c06d9daf8
commit
7b3e018f3e
@ -1551,9 +1551,11 @@ static void vxlan_sock_release(struct vxlan_dev *vxlan)
|
||||
#endif
|
||||
}
|
||||
|
||||
static bool vxlan_remcsum(struct vxlanhdr *unparsed,
|
||||
struct sk_buff *skb, u32 vxflags)
|
||||
static enum skb_drop_reason vxlan_remcsum(struct vxlanhdr *unparsed,
|
||||
struct sk_buff *skb,
|
||||
u32 vxflags)
|
||||
{
|
||||
enum skb_drop_reason reason;
|
||||
size_t start, offset;
|
||||
|
||||
if (!(unparsed->vx_flags & VXLAN_HF_RCO) || skb->remcsum_offload)
|
||||
@ -1562,15 +1564,17 @@ static bool vxlan_remcsum(struct vxlanhdr *unparsed,
|
||||
start = vxlan_rco_start(unparsed->vx_vni);
|
||||
offset = start + vxlan_rco_offset(unparsed->vx_vni);
|
||||
|
||||
if (!pskb_may_pull(skb, offset + sizeof(u16)))
|
||||
return false;
|
||||
reason = pskb_may_pull_reason(skb, offset + sizeof(u16));
|
||||
if (reason)
|
||||
return reason;
|
||||
|
||||
skb_remcsum_process(skb, (void *)(vxlan_hdr(skb) + 1), start, offset,
|
||||
!!(vxflags & VXLAN_F_REMCSUM_NOPARTIAL));
|
||||
out:
|
||||
unparsed->vx_flags &= ~VXLAN_HF_RCO;
|
||||
unparsed->vx_vni &= VXLAN_VNI_MASK;
|
||||
return true;
|
||||
|
||||
return SKB_NOT_DROPPED_YET;
|
||||
}
|
||||
|
||||
static void vxlan_parse_gbp_hdr(struct vxlanhdr *unparsed,
|
||||
@ -1723,9 +1727,11 @@ static int vxlan_rcv(struct sock *sk, struct sk_buff *skb)
|
||||
goto drop;
|
||||
}
|
||||
|
||||
if (vs->flags & VXLAN_F_REMCSUM_RX)
|
||||
if (unlikely(!vxlan_remcsum(&unparsed, skb, vs->flags)))
|
||||
if (vs->flags & VXLAN_F_REMCSUM_RX) {
|
||||
reason = vxlan_remcsum(&unparsed, skb, vs->flags);
|
||||
if (unlikely(reason))
|
||||
goto drop;
|
||||
}
|
||||
|
||||
if (vxlan_collect_metadata(vs)) {
|
||||
IP_TUNNEL_DECLARE_FLAGS(flags) = { };
|
||||
|
Loading…
x
Reference in New Issue
Block a user