mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
net: ip: add skb drop reasons for ip egress path
Replace kfree_skb() which is used in the packet egress path of IP layer with kfree_skb_reason(). Functions that are involved include: __ip_queue_xmit() ip_finish_output() ip_mc_finish_output() ip6_output() ip6_finish_output() ip6_finish_output2() Following new drop reasons are introduced: SKB_DROP_REASON_IP_OUTNOROUTES SKB_DROP_REASON_BPF_CGROUP_EGRESS SKB_DROP_REASON_IPV6DISABLED SKB_DROP_REASON_NEIGH_CREATEFAIL Reviewed-by: Mengen Sun <mengensun@tencent.com> Reviewed-by: Hao Peng <flyingpeng@tencent.com> Signed-off-by: Menglong Dong <imagedong@tencent.com> Reviewed-by: David Ahern <dsahern@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0cc70c6eec
commit
5e187189ec
@ -380,6 +380,15 @@ enum skb_drop_reason {
|
||||
* the ofo queue, corresponding to
|
||||
* LINUX_MIB_TCPOFOMERGE
|
||||
*/
|
||||
SKB_DROP_REASON_IP_OUTNOROUTES, /* route lookup failed */
|
||||
SKB_DROP_REASON_BPF_CGROUP_EGRESS, /* dropped by
|
||||
* BPF_PROG_TYPE_CGROUP_SKB
|
||||
* eBPF program
|
||||
*/
|
||||
SKB_DROP_REASON_IPV6DISABLED, /* IPv6 is disabled on the device */
|
||||
SKB_DROP_REASON_NEIGH_CREATEFAIL, /* failed to create neigh
|
||||
* entry
|
||||
*/
|
||||
SKB_DROP_REASON_MAX,
|
||||
};
|
||||
|
||||
|
@ -37,6 +37,11 @@
|
||||
EM(SKB_DROP_REASON_TCP_OLD_DATA, TCP_OLD_DATA) \
|
||||
EM(SKB_DROP_REASON_TCP_OVERWINDOW, TCP_OVERWINDOW) \
|
||||
EM(SKB_DROP_REASON_TCP_OFOMERGE, TCP_OFOMERGE) \
|
||||
EM(SKB_DROP_REASON_IP_OUTNOROUTES, IP_OUTNOROUTES) \
|
||||
EM(SKB_DROP_REASON_BPF_CGROUP_EGRESS, \
|
||||
BPF_CGROUP_EGRESS) \
|
||||
EM(SKB_DROP_REASON_IPV6DISABLED, IPV6DISABLED) \
|
||||
EM(SKB_DROP_REASON_NEIGH_CREATEFAIL, NEIGH_CREATEFAIL) \
|
||||
EMe(SKB_DROP_REASON_MAX, MAX)
|
||||
|
||||
#undef EM
|
||||
|
@ -233,7 +233,7 @@ static int ip_finish_output2(struct net *net, struct sock *sk, struct sk_buff *s
|
||||
|
||||
net_dbg_ratelimited("%s: No header cache and no neighbour!\n",
|
||||
__func__);
|
||||
kfree_skb(skb);
|
||||
kfree_skb_reason(skb, SKB_DROP_REASON_NEIGH_CREATEFAIL);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@ -317,7 +317,7 @@ static int ip_finish_output(struct net *net, struct sock *sk, struct sk_buff *sk
|
||||
case NET_XMIT_CN:
|
||||
return __ip_finish_output(net, sk, skb) ? : ret;
|
||||
default:
|
||||
kfree_skb(skb);
|
||||
kfree_skb_reason(skb, SKB_DROP_REASON_BPF_CGROUP_EGRESS);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
@ -337,7 +337,7 @@ static int ip_mc_finish_output(struct net *net, struct sock *sk,
|
||||
case NET_XMIT_SUCCESS:
|
||||
break;
|
||||
default:
|
||||
kfree_skb(skb);
|
||||
kfree_skb_reason(skb, SKB_DROP_REASON_BPF_CGROUP_EGRESS);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -536,7 +536,7 @@ packet_routed:
|
||||
no_route:
|
||||
rcu_read_unlock();
|
||||
IP_INC_STATS(net, IPSTATS_MIB_OUTNOROUTES);
|
||||
kfree_skb(skb);
|
||||
kfree_skb_reason(skb, SKB_DROP_REASON_IP_OUTNOROUTES);
|
||||
return -EHOSTUNREACH;
|
||||
}
|
||||
EXPORT_SYMBOL(__ip_queue_xmit);
|
||||
|
@ -130,7 +130,7 @@ static int ip6_finish_output2(struct net *net, struct sock *sk, struct sk_buff *
|
||||
rcu_read_unlock_bh();
|
||||
|
||||
IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTNOROUTES);
|
||||
kfree_skb(skb);
|
||||
kfree_skb_reason(skb, SKB_DROP_REASON_NEIGH_CREATEFAIL);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@ -202,7 +202,7 @@ static int ip6_finish_output(struct net *net, struct sock *sk, struct sk_buff *s
|
||||
case NET_XMIT_CN:
|
||||
return __ip6_finish_output(net, sk, skb) ? : ret;
|
||||
default:
|
||||
kfree_skb(skb);
|
||||
kfree_skb_reason(skb, SKB_DROP_REASON_BPF_CGROUP_EGRESS);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
@ -217,7 +217,7 @@ int ip6_output(struct net *net, struct sock *sk, struct sk_buff *skb)
|
||||
|
||||
if (unlikely(idev->cnf.disable_ipv6)) {
|
||||
IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTDISCARDS);
|
||||
kfree_skb(skb);
|
||||
kfree_skb_reason(skb, SKB_DROP_REASON_IPV6DISABLED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user