Skip to content

Commit d6d8da2

Browse files
committed
'drop' mode support for nettrace and remove droptrace
Introduce the mode 'drop' for nettrace. Therefore, 'droptrace' is not needed anymore. With 'nettrace --drop', it performs the same as droptrace. Signed-off-by: Menglong Dong <imagedong@tencent.com>
1 parent a41d511 commit d6d8da2

28 files changed

Lines changed: 215 additions & 484 deletions

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ export VERSION = 1.2.1
33
RELEASE ?= .tl3
44
export RELEASE
55

6-
targets := droptrace nodetrace src legacy
6+
targets := nodetrace src legacy
77
targets-call = for i in $1; do make $2 -C $$i $@; done
88
man-target := script/zh_CN/nettrace.8
99

@@ -45,7 +45,7 @@ install:
4545
done
4646

4747
@mkdir -p $(BCOMP); cd $(BCOMP); cp $(SCRIPT)/bash-completion.sh \
48-
./nettrace; ln -s nettrace droptrace
48+
./nettrace
4949

5050
pack:
5151
@make clean

README.md

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
- 报文生命周期跟踪:跟踪网络报文从进入到内核协议栈到释放/丢弃的过程中在内核中所走过的路径,实现报文整个生命周期的监控,并采集生命周期各个阶段的事件、信息。通过观察报文在内核中的路径,对于有一定内核协议栈经验的人来说可以快速、有效地发现网络问题。
2222
- 网络故障诊断:将以往的经验集成到工具的知识库,通过知识匹配的方式来主动诊断当前网络故障,给出诊断结果以及修复建议。该功能入手简单、易用性强,无需过多的网络经验即可进行网络问题定位。
2323
- 网络异常监控:常态化地部署到生产环境中,主动地发现、上报环境上的网络异常。
24-
- `droptrace`:用于跟踪、监控系统中的丢包事件的工具,点击[这里](droptrace/README.md)查看详情介绍。该工具计划后面合入到`nettrace`功能中
24+
- `droptrace`:用于跟踪、监控系统中的丢包事件的工具,点击[这里](docs/droptrace.md)查看详情介绍。该功能已被遗弃,可以使用`nettrace --drop`实现相同的功能
2525

2626
## 二、安装方法
2727

@@ -131,7 +131,7 @@ make COMPAT=1 KERN_VER=266002 all
131131

132132
## 三、使用方法
133133

134-
`droptrace`主要用来进行系统丢包事件的监控,点击[这里](droptrace/README.md)可查看droptrace的用户文档,这里不再赘述,重点介绍nettrace的相关功能。nettrace是用来跟踪内核报文和诊断网络故障的,在进行报文跟踪时可以使用一定的过滤条件来跟踪特定的报文。其基本命令行参数为:
134+
nettrace是用来跟踪内核报文和诊断网络故障的,在进行报文跟踪时可以使用一定的过滤条件来跟踪特定的报文。其基本命令行参数为:
135135

136136
```shell
137137
$ nettrace -h
@@ -157,6 +157,7 @@ Usage:
157157
--diag-quiet only print abnormal packet
158158
--diag-keep don't quit when abnormal packet found
159159
--hooks print netfilter hooks if dropping by netfilter
160+
--drop skb drop monitor mode, for replace of 'droptrace'
160161
161162
-v show log information
162163
--debug show debug information
@@ -173,6 +174,7 @@ Usage:
173174
- `diag-quiet`:只显示出现存在问题的报文,不显示正常的报文
174175
- `diag-keep`:持续跟踪。`diag`模式下,默认在跟踪到异常报文后会停止跟踪,使用该参数后,会持续跟踪下去。
175176
- `hooks`:结合netfilter做的适配,详见下文
177+
- `drop`:进行系统丢包监控,取代原先的`droptrace`
176178
177179
下面我们首先来看一下默认模式下的工具使用方法。
178180
@@ -513,3 +515,25 @@ begin trace...
513515
514516
analysis finished!
515517
```
518+
519+
## 3.3 丢包监控
520+
521+
使用命令`nettrace --drop`可以对系统中的丢包事件进行监控,对于支持内核特性`skb drop reason`的内核,这里还会打印出丢包原因。可以通过查看`/tracing/events/skb/kfree_skb/format`来判断当前系统是否支持该特性:
522+
523+
```shell
524+
cat /tracing/events/skb/kfree_skb/format
525+
name: kfree_skb
526+
ID: 1524
527+
format:
528+
field:unsigned short common_type; offset:0; size:2; signed:0;
529+
field:unsigned char common_flags; offset:2; size:1; signed:0;
530+
field:unsigned char common_preempt_count; offset:3; size:1; signed:0;
531+
field:int common_pid; offset:4; size:4; signed:1;
532+
533+
field:void * skbaddr; offset:8; size:8; signed:0;
534+
field:void * location; offset:16; size:8; signed:0;
535+
field:unsigned short protocol; offset:24; size:2; signed:0;
536+
field:enum skb_drop_reason reason; offset:28; size:4; signed:0;
537+
538+
print fmt: "skbaddr=%p protocol=%u location=%p reason: %s", REC->skbaddr, REC->protocol, REC->location, __print_symbolic(REC->reason, { 1, "NOT_SPECIFIED" }, { 2, "NO_SOCKET" }, { 3, "PKT_TOO_SMALL" }, { 4, "TCP_CSUM" }, { 5, "SOCKET_FILTER" }, { 6, "UDP_CSUM" }, { 7, "NETFILTER_DROP" }, { 8, "OTHERHOST" }, { 9, "IP_CSUM" }, { 10, "IP_INHDR" }, { 11, "IP_RPFILTER" }, { 12, "UNICAST_IN_L2_MULTICAST" }, { 13, "XFRM_POLICY" }, { 14, "IP_NOPROTO" }, { 15, "SOCKET_RCVBUFF" }, { 16, "PROTO_MEM" }, { 17, "TCP_MD5NOTFOUND" }, { 18, "TCP_MD5UNEXPECTED" }, { 19, "TCP_MD5FAILURE" }, { 20, "SOCKET_BACKLOG" }, { 21, "TCP_FLAGS" }, { 22, "TCP_ZEROWINDOW" }, { 23, "TCP_OLD_DATA" }, { 24, "TCP_OVERWINDOW" }, { 25, "TCP_OFOMERGE" }, { 26, "TCP_RFC7323_PAWS" }, { 27, "TCP_INVALID_SEQUENCE" }, { 28, "TCP_RESET" }, { 29, "TCP_INVALID_SYN" }, { 30, "TCP_CLOSE" }, { 31, "TCP_FASTOPEN" }, { 32, "TCP_OLD_ACK" }, { 33, "TCP_TOO_OLD_ACK" }, { 34, "TCP_ACK_UNSENT_DATA" }, { 35, "TCP_OFO_QUEUE_PRUNE" }, { 36, "TCP_OFO_DROP" }, { 37, "IP_OUTNOROUTES" }, { 38, "BPF_CGROUP_EGRESS" }, { 39, "IPV6DISABLED" }, { 40, "NEIGH_CREATEFAIL" }, { 41, "NEIGH_FAILED" }, { 42, "NEIGH_QUEUEFULL" }, { 43, "NEIGH_DEAD" }, { 44, "TC_EGRESS" }, { 45, "QDISC_DROP" }, { 46, "CPU_BACKLOG" }, { 47, "XDP" }, { 48, "TC_INGRESS" }, { 49, "UNHANDLED_PROTO" }, { 50, "SKB_CSUM" }, { 51, "SKB_GSO_SEG" }, { 52, "SKB_UCOPY_FAULT" }, { 53, "DEV_HDR" }, { 54, "DEV_READY" }, { 55, "FULL_RING" }, { 56, "NOMEM" }, { 57, "HDR_TRUNC" }, { 58, "TAP_FILTER" }, { 59, "TAP_TXFILTER" }, { 60, "ICMP_CSUM" }, { 61, "INVALID_PROTO" }, { 62, "IP_INADDRERRORS" }, { 63, "IP_INNOROUTES" }, { 64, "PKT_TOO_BIG" }, { 65, "MAX" })
539+
```

common.mk

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -56,24 +56,12 @@ ifeq ($(if $(VMLINUX),$(wildcard $(VMLINUX)),"pass"),)
5656
$(error vmlinux path not exist)
5757
endif
5858

59-
# preferred to generate drop reason from
60-
ifeq ("$(KERNEL)$(VMLINUX)","")
61-
DROP_REASON := $(call cmd_or_exist,$(HEADERS)/include/net/dropreason.h,\
62-
$(call cmd_or_exist,$(HEADERS)/include/linux/skbuff.h,\
63-
$(call cmd_exist,$(BTF),vmlinux.h,)))
64-
endif
65-
6659
# preferred to compile from kernel headers, then BTF
6760
mode := $(if $(VMLINUX),'btf',$(call cmd_exist,$(HEADERS),'kernel','btf'))
6861
ifeq ($(mode),'btf')
69-
DROP_REASON ?= vmlinux.h
7062
kheaders_cmd := ln -s vmlinux.h kheaders.h
7163
kheaders_dep := vmlinux.h
7264
else
73-
ifndef DROP_REASON
74-
DROP_REASON := $(call cmd_or_exist,$(HEADERS)/include/net/dropreason.h,\
75-
$(call cmd_or_exist,$(HEADERS)/include/linux/skbuff.h,))
76-
endif
7765
kheaders_cmd := ln -s vmlinux_header.h kheaders.h
7866
BPF_CFLAGS += $(KERNEL_CFLAGS)
7967
endif
@@ -92,30 +80,6 @@ vmlinux.h:
9280
kheaders.h: $(kheaders_dep)
9381
$(call kheaders_cmd)
9482

95-
drop_reason.h: $(DROP_REASON)
96-
rm -rf $@
97-
ifneq ($(strip $(DROP_REASON)),)
98-
@awk 'BEGIN{ print "#ifndef _H_SKB_DROP_REASON"; \
99-
print "#define _H_SKB_DROP_REASON\n";\
100-
system("sed -e \"/enum skb_drop_reason {/,/}/!d\" $< >> $@");\
101-
print "\n#define __DEFINE_SKB_REASON(FN) \\";\
102-
}\
103-
/^enum skb_drop/ { dr=1; }\
104-
/^\};/ { dr=0; }\
105-
/^\tSKB_DROP_REASON_/ {\
106-
if (dr) {\
107-
sub(/SKB_DROP_REASON_/, "", $$1);\
108-
sub(/,/, "", $$1);\
109-
printf "\tFN(%s)\t\\\n", $$1;\
110-
}\
111-
}\
112-
END{ print "\n#endif" }' $< >> $@
113-
@echo generated drop_reason.h
114-
else
115-
touch $@
116-
@echo drop reason not supported, skips
117-
endif
118-
11983
progs/%.o: progs/%.c kheaders.h
12084
clang -O2 -c -g -S -Wall -Wno-pointer-sign -Wno-unused-value \
12185
-Wno-incompatible-pointer-types-discards-qualifiers \

component/sys_utils.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,14 @@ int liberate_l()
5757
struct rlimit lim = {RLIM_INFINITY, RLIM_INFINITY};
5858
return setrlimit(RLIMIT_MEMLOCK, &lim);
5959
}
60+
61+
bool fsearch(FILE *f, char *target)
62+
{
63+
char tmp[128];
64+
65+
while (fscanf(f, "%s", tmp) == 1) {
66+
if (strstr(tmp, target))
67+
return true;
68+
}
69+
return false;
70+
}

component/sys_utils.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,17 @@
66
#include <stdlib.h>
77
#include <unistd.h>
88
#include <stdbool.h>
9+
#include <sys/types.h>
10+
#include <sys/stat.h>
11+
#include <fcntl.h>
12+
#include <stdio.h>
913

1014
extern int log_level;
1115

1216
int execf(char *output, char *fmt, ...);
1317
int exec(char *cmd, char *output);
1418
int liberate_l();
19+
bool fsearch(FILE *f, char *target);
1520

1621
static inline int simple_exec(char *cmd)
1722
{

droptrace/.gitignore

Lines changed: 0 additions & 5 deletions
This file was deleted.

droptrace/Makefile

Lines changed: 0 additions & 31 deletions
This file was deleted.

droptrace/README.md

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)