Skip to content

Commit ec43908

Browse files
menglongdongPaolo Abeni
authored andcommitted
net: skb: use auto-generation to convert skb drop reason to string
It is annoying to add new skb drop reasons to 'enum skb_drop_reason' and TRACE_SKB_DROP_REASON in trace/event/skb.h, and it's easy to forget to add the new reasons we added to TRACE_SKB_DROP_REASON. TRACE_SKB_DROP_REASON is used to convert drop reason of type number to string. For now, the string we passed to user space is exactly the same as the name in 'enum skb_drop_reason' with a 'SKB_DROP_REASON_' prefix. Therefore, we can use 'auto-generation' to generate these drop reasons to string at build time. The new source 'dropreason_str.c' will be auto generated during build time, which contains the string array 'const char * const drop_reasons[]'. Signed-off-by: Menglong Dong <[email protected]> Signed-off-by: Paolo Abeni <[email protected]>
1 parent ff8372a commit ec43908

File tree

6 files changed

+29
-102
lines changed

6 files changed

+29
-102
lines changed

include/net/dropreason.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,4 +181,6 @@ enum skb_drop_reason {
181181
SKB_DR_SET(name, reason); \
182182
} while (0)
183183

184+
extern const char * const drop_reasons[];
185+
184186
#endif

include/trace/events/skb.h

Lines changed: 1 addition & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -9,92 +9,6 @@
99
#include <linux/netdevice.h>
1010
#include <linux/tracepoint.h>
1111

12-
#define TRACE_SKB_DROP_REASON \
13-
EM(SKB_DROP_REASON_NOT_SPECIFIED, NOT_SPECIFIED) \
14-
EM(SKB_DROP_REASON_NO_SOCKET, NO_SOCKET) \
15-
EM(SKB_DROP_REASON_PKT_TOO_SMALL, PKT_TOO_SMALL) \
16-
EM(SKB_DROP_REASON_TCP_CSUM, TCP_CSUM) \
17-
EM(SKB_DROP_REASON_SOCKET_FILTER, SOCKET_FILTER) \
18-
EM(SKB_DROP_REASON_UDP_CSUM, UDP_CSUM) \
19-
EM(SKB_DROP_REASON_NETFILTER_DROP, NETFILTER_DROP) \
20-
EM(SKB_DROP_REASON_OTHERHOST, OTHERHOST) \
21-
EM(SKB_DROP_REASON_IP_CSUM, IP_CSUM) \
22-
EM(SKB_DROP_REASON_IP_INHDR, IP_INHDR) \
23-
EM(SKB_DROP_REASON_IP_RPFILTER, IP_RPFILTER) \
24-
EM(SKB_DROP_REASON_UNICAST_IN_L2_MULTICAST, \
25-
UNICAST_IN_L2_MULTICAST) \
26-
EM(SKB_DROP_REASON_XFRM_POLICY, XFRM_POLICY) \
27-
EM(SKB_DROP_REASON_IP_NOPROTO, IP_NOPROTO) \
28-
EM(SKB_DROP_REASON_SOCKET_RCVBUFF, SOCKET_RCVBUFF) \
29-
EM(SKB_DROP_REASON_PROTO_MEM, PROTO_MEM) \
30-
EM(SKB_DROP_REASON_TCP_MD5NOTFOUND, TCP_MD5NOTFOUND) \
31-
EM(SKB_DROP_REASON_TCP_MD5UNEXPECTED, \
32-
TCP_MD5UNEXPECTED) \
33-
EM(SKB_DROP_REASON_TCP_MD5FAILURE, TCP_MD5FAILURE) \
34-
EM(SKB_DROP_REASON_SOCKET_BACKLOG, SOCKET_BACKLOG) \
35-
EM(SKB_DROP_REASON_TCP_FLAGS, TCP_FLAGS) \
36-
EM(SKB_DROP_REASON_TCP_ZEROWINDOW, TCP_ZEROWINDOW) \
37-
EM(SKB_DROP_REASON_TCP_OLD_DATA, TCP_OLD_DATA) \
38-
EM(SKB_DROP_REASON_TCP_OVERWINDOW, TCP_OVERWINDOW) \
39-
EM(SKB_DROP_REASON_TCP_OFOMERGE, TCP_OFOMERGE) \
40-
EM(SKB_DROP_REASON_TCP_OFO_DROP, TCP_OFO_DROP) \
41-
EM(SKB_DROP_REASON_TCP_RFC7323_PAWS, TCP_RFC7323_PAWS) \
42-
EM(SKB_DROP_REASON_TCP_INVALID_SEQUENCE, \
43-
TCP_INVALID_SEQUENCE) \
44-
EM(SKB_DROP_REASON_TCP_RESET, TCP_RESET) \
45-
EM(SKB_DROP_REASON_TCP_INVALID_SYN, TCP_INVALID_SYN) \
46-
EM(SKB_DROP_REASON_TCP_CLOSE, TCP_CLOSE) \
47-
EM(SKB_DROP_REASON_TCP_FASTOPEN, TCP_FASTOPEN) \
48-
EM(SKB_DROP_REASON_TCP_OLD_ACK, TCP_OLD_ACK) \
49-
EM(SKB_DROP_REASON_TCP_TOO_OLD_ACK, TCP_TOO_OLD_ACK) \
50-
EM(SKB_DROP_REASON_TCP_ACK_UNSENT_DATA, \
51-
TCP_ACK_UNSENT_DATA) \
52-
EM(SKB_DROP_REASON_TCP_OFO_QUEUE_PRUNE, \
53-
TCP_OFO_QUEUE_PRUNE) \
54-
EM(SKB_DROP_REASON_IP_OUTNOROUTES, IP_OUTNOROUTES) \
55-
EM(SKB_DROP_REASON_BPF_CGROUP_EGRESS, \
56-
BPF_CGROUP_EGRESS) \
57-
EM(SKB_DROP_REASON_IPV6DISABLED, IPV6DISABLED) \
58-
EM(SKB_DROP_REASON_NEIGH_CREATEFAIL, NEIGH_CREATEFAIL) \
59-
EM(SKB_DROP_REASON_NEIGH_FAILED, NEIGH_FAILED) \
60-
EM(SKB_DROP_REASON_NEIGH_QUEUEFULL, NEIGH_QUEUEFULL) \
61-
EM(SKB_DROP_REASON_NEIGH_DEAD, NEIGH_DEAD) \
62-
EM(SKB_DROP_REASON_TC_EGRESS, TC_EGRESS) \
63-
EM(SKB_DROP_REASON_QDISC_DROP, QDISC_DROP) \
64-
EM(SKB_DROP_REASON_CPU_BACKLOG, CPU_BACKLOG) \
65-
EM(SKB_DROP_REASON_XDP, XDP) \
66-
EM(SKB_DROP_REASON_TC_INGRESS, TC_INGRESS) \
67-
EM(SKB_DROP_REASON_UNHANDLED_PROTO, UNHANDLED_PROTO) \
68-
EM(SKB_DROP_REASON_SKB_CSUM, SKB_CSUM) \
69-
EM(SKB_DROP_REASON_SKB_GSO_SEG, SKB_GSO_SEG) \
70-
EM(SKB_DROP_REASON_SKB_UCOPY_FAULT, SKB_UCOPY_FAULT) \
71-
EM(SKB_DROP_REASON_DEV_HDR, DEV_HDR) \
72-
EM(SKB_DROP_REASON_DEV_READY, DEV_READY) \
73-
EM(SKB_DROP_REASON_FULL_RING, FULL_RING) \
74-
EM(SKB_DROP_REASON_NOMEM, NOMEM) \
75-
EM(SKB_DROP_REASON_HDR_TRUNC, HDR_TRUNC) \
76-
EM(SKB_DROP_REASON_TAP_FILTER, TAP_FILTER) \
77-
EM(SKB_DROP_REASON_TAP_TXFILTER, TAP_TXFILTER) \
78-
EM(SKB_DROP_REASON_ICMP_CSUM, ICMP_CSUM) \
79-
EM(SKB_DROP_REASON_INVALID_PROTO, INVALID_PROTO) \
80-
EM(SKB_DROP_REASON_IP_INADDRERRORS, IP_INADDRERRORS) \
81-
EM(SKB_DROP_REASON_IP_INNOROUTES, IP_INNOROUTES) \
82-
EM(SKB_DROP_REASON_PKT_TOO_BIG, PKT_TOO_BIG) \
83-
EMe(SKB_DROP_REASON_MAX, MAX)
84-
85-
#undef EM
86-
#undef EMe
87-
88-
#define EM(a, b) TRACE_DEFINE_ENUM(a);
89-
#define EMe(a, b) TRACE_DEFINE_ENUM(a);
90-
91-
TRACE_SKB_DROP_REASON
92-
93-
#undef EM
94-
#undef EMe
95-
#define EM(a, b) { a, #b },
96-
#define EMe(a, b) { a, #b }
97-
9812
/*
9913
* Tracepoint for free an sk_buff:
10014
*/
@@ -121,8 +35,7 @@ TRACE_EVENT(kfree_skb,
12135

12236
TP_printk("skbaddr=%p protocol=%u location=%p reason: %s",
12337
__entry->skbaddr, __entry->protocol, __entry->location,
124-
__print_symbolic(__entry->reason,
125-
TRACE_SKB_DROP_REASON))
38+
drop_reasons[__entry->reason])
12639
);
12740

12841
TRACE_EVENT(consume_skb,

net/core/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
dropreason_str.c

net/core/Makefile

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
#
55

66
obj-y := sock.o request_sock.o skbuff.o datagram.o stream.o scm.o \
7-
gen_stats.o gen_estimator.o net_namespace.o secure_seq.o flow_dissector.o
7+
gen_stats.o gen_estimator.o net_namespace.o secure_seq.o \
8+
flow_dissector.o dropreason_str.o
89

910
obj-$(CONFIG_SYSCTL) += sysctl_net_core.o
1011

@@ -39,3 +40,23 @@ obj-$(CONFIG_NET_SOCK_MSG) += skmsg.o
3940
obj-$(CONFIG_BPF_SYSCALL) += sock_map.o
4041
obj-$(CONFIG_BPF_SYSCALL) += bpf_sk_storage.o
4142
obj-$(CONFIG_OF) += of_net.o
43+
44+
clean-files := dropreason_str.c
45+
46+
quiet_cmd_dropreason_str = GEN $@
47+
cmd_dropreason_str = awk -F ',' 'BEGIN{ print "\#include <net/dropreason.h>\n"; \
48+
print "const char * const drop_reasons[] = {" }\
49+
/^enum skb_drop/ { dr=1; }\
50+
/^\};/ { dr=0; }\
51+
/^\tSKB_DROP_REASON_/ {\
52+
if (dr) {\
53+
sub(/\tSKB_DROP_REASON_/, "", $$1);\
54+
printf "\t[SKB_DROP_REASON_%s] = \"%s\",\n", $$1, $$1;\
55+
}\
56+
}\
57+
END{ print "};" }' $< > $@
58+
59+
$(obj)/dropreason_str.c: $(srctree)/include/net/dropreason.h
60+
$(call cmd,dropreason_str)
61+
62+
$(obj)/dropreason_str.o: $(obj)/dropreason_str.c

net/core/drop_monitor.c

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,19 +48,6 @@
4848
static int trace_state = TRACE_OFF;
4949
static bool monitor_hw;
5050

51-
#undef EM
52-
#undef EMe
53-
54-
#define EM(a, b) [a] = #b,
55-
#define EMe(a, b) [a] = #b
56-
57-
/* drop_reasons is used to translate 'enum skb_drop_reason' to string,
58-
* which is reported to user space.
59-
*/
60-
static const char * const drop_reasons[] = {
61-
TRACE_SKB_DROP_REASON
62-
};
63-
6451
/* net_dm_mutex
6552
*
6653
* An overall lock guarding every operation coming from userspace.

net/core/skbuff.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ static struct kmem_cache *skbuff_ext_cache __ro_after_init;
9191
int sysctl_max_skb_frags __read_mostly = MAX_SKB_FRAGS;
9292
EXPORT_SYMBOL(sysctl_max_skb_frags);
9393

94+
/* The array 'drop_reasons' is auto-generated in dropreason_str.c */
95+
EXPORT_SYMBOL(drop_reasons);
96+
9497
/**
9598
* skb_panic - private function for out-of-line support
9699
* @skb: buffer

0 commit comments

Comments
 (0)