mirror of
https://github.com/torvalds/linux.git
synced 2025-04-12 06:49:52 +00:00
net: vxlan: add drop reasons support to vxlan_xmit_one()
Replace kfree_skb/dev_kfree_skb with kfree_skb_reason in vxlan_xmit_one. No drop reasons are introduced in this commit. The only concern of mine is replacing dev_kfree_skb with kfree_skb_reason. The dev_kfree_skb is equal to consume_skb, and I'm not sure if we can change it to kfree_skb here. In my option, the skb is "dropped" here, isn't it? Signed-off-by: Menglong Dong <dongml2@chinatelecom.cn> Reviewed-by: Simon Horman <horms@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b71a576e45
commit
e7c700aaa6
@ -2374,13 +2374,16 @@ void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
|
||||
bool use_cache;
|
||||
bool udp_sum = false;
|
||||
bool xnet = !net_eq(vxlan->net, dev_net(vxlan->dev));
|
||||
enum skb_drop_reason reason;
|
||||
bool no_eth_encap;
|
||||
__be32 vni = 0;
|
||||
|
||||
no_eth_encap = flags & VXLAN_F_GPE && skb->protocol != htons(ETH_P_TEB);
|
||||
if (skb_vlan_inet_prepare(skb, no_eth_encap))
|
||||
reason = skb_vlan_inet_prepare(skb, no_eth_encap);
|
||||
if (reason)
|
||||
goto drop;
|
||||
|
||||
reason = SKB_DROP_REASON_NOT_SPECIFIED;
|
||||
old_iph = ip_hdr(skb);
|
||||
|
||||
info = skb_tunnel_info(skb);
|
||||
@ -2484,6 +2487,7 @@ void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
|
||||
tos, use_cache ? dst_cache : NULL);
|
||||
if (IS_ERR(rt)) {
|
||||
err = PTR_ERR(rt);
|
||||
reason = SKB_DROP_REASON_IP_OUTNOROUTES;
|
||||
goto tx_error;
|
||||
}
|
||||
|
||||
@ -2535,8 +2539,10 @@ void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
|
||||
ttl = ttl ? : ip4_dst_hoplimit(&rt->dst);
|
||||
err = vxlan_build_skb(skb, ndst, sizeof(struct iphdr),
|
||||
vni, md, flags, udp_sum);
|
||||
if (err < 0)
|
||||
if (err < 0) {
|
||||
reason = SKB_DROP_REASON_NOMEM;
|
||||
goto tx_error;
|
||||
}
|
||||
|
||||
udp_tunnel_xmit_skb(rt, sock4->sock->sk, skb, saddr,
|
||||
pkey->u.ipv4.dst, tos, ttl, df,
|
||||
@ -2556,6 +2562,7 @@ void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
|
||||
if (IS_ERR(ndst)) {
|
||||
err = PTR_ERR(ndst);
|
||||
ndst = NULL;
|
||||
reason = SKB_DROP_REASON_IP_OUTNOROUTES;
|
||||
goto tx_error;
|
||||
}
|
||||
|
||||
@ -2596,8 +2603,10 @@ void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
|
||||
skb_scrub_packet(skb, xnet);
|
||||
err = vxlan_build_skb(skb, ndst, sizeof(struct ipv6hdr),
|
||||
vni, md, flags, udp_sum);
|
||||
if (err < 0)
|
||||
if (err < 0) {
|
||||
reason = SKB_DROP_REASON_NOMEM;
|
||||
goto tx_error;
|
||||
}
|
||||
|
||||
udp_tunnel6_xmit_skb(ndst, sock6->sock->sk, skb, dev,
|
||||
&saddr, &pkey->u.ipv6.dst, tos, ttl,
|
||||
@ -2612,7 +2621,7 @@ out_unlock:
|
||||
drop:
|
||||
dev_core_stats_tx_dropped_inc(dev);
|
||||
vxlan_vnifilter_count(vxlan, vni, NULL, VXLAN_VNI_STATS_TX_DROPS, 0);
|
||||
dev_kfree_skb(skb);
|
||||
kfree_skb_reason(skb, reason);
|
||||
return;
|
||||
|
||||
tx_error:
|
||||
@ -2624,7 +2633,7 @@ tx_error:
|
||||
dst_release(ndst);
|
||||
DEV_STATS_INC(dev, tx_errors);
|
||||
vxlan_vnifilter_count(vxlan, vni, NULL, VXLAN_VNI_STATS_TX_ERRORS, 0);
|
||||
kfree_skb(skb);
|
||||
kfree_skb_reason(skb, reason);
|
||||
}
|
||||
|
||||
static void vxlan_xmit_nh(struct sk_buff *skb, struct net_device *dev,
|
||||
|
Loading…
x
Reference in New Issue
Block a user