Skip to content

Commit 8732b55

Browse files
committed
Merge branch 'master' of https://github.com/OpenCloudOS/nettrace
2 parents c327e13 + deb9415 commit 8732b55

3 files changed

Lines changed: 49 additions & 28 deletions

File tree

nettrace.py

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,6 @@ class Tracer:
2323
_cata_enabled = []
2424
_cata_all = None
2525

26-
_v_tracer = {
27-
'4.14': [
28-
{'name': '__netif_receive_skb_core', 'skb': 0, 'level': 1},
29-
],
30-
'5.4': [
31-
{'name': '__netif_receive_skb_core', 'pskb': 0, 'level': 1},
32-
]
33-
}
34-
3526
@staticmethod
3627
def get_cata_all():
3728
if Tracer._cata_all:
@@ -139,22 +130,16 @@ def print_tracer(tracer, tab=''):
139130
Tracer.print_tracer(i, tab + ' ')
140131

141132
@staticmethod
142-
def fix_version():
143-
import subprocess
144-
code, ver_str = subprocess.getstatusoutput('uname -r')
145-
if code != 0:
146-
return
147-
m = re.match(r'([0-9]+\.[0-9]+)\.', ver_str)
148-
if not m:
149-
return
150-
ver = m.group(1)
151-
if ver not in Tracer._v_tracer:
152-
Helper.pr_warn('''kernel version not found! You can add your kernel
153-
version in '_v_tracer' of nettrace.py\n''')
154-
return
155-
for tracer in Tracer._v_tracer[ver]:
156-
origin = Tracer.get_cata_or_tracer(tracer['name'])
157-
origin.update(tracer)
133+
def check_if(tracer):
134+
if 'if' not in tracer:
135+
return True
136+
cond = tracer['if']
137+
kernelVersion = kernel_version_cur()
138+
cond = cond.replace('kernelVersion', str(kernelVersion))
139+
ret = {'value': False}
140+
cond = '''value = %s''' % cond
141+
exec(cond, ret)
142+
return ret['value']
158143

159144
@staticmethod
160145
def prepare_cata(root=None):
@@ -192,7 +177,11 @@ def init_tracers():
192177
if not cata:
193178
Helper.pr_warn('the tracer:%s not found' % cata_str)
194179
continue
195-
tracers += Tracer.get_tracers(cata)
180+
for tracer in Tracer.get_tracers(cata):
181+
if Tracer.check_if(tracer):
182+
tracers.append(tracer)
183+
else:
184+
tracer['hidden'] = True
196185
catalogs.append(cata)
197186

198187
for t in set(Helper.get_stack_tracer()):
@@ -221,7 +210,6 @@ def init_tracers():
221210
Tracer._tracer_enabled = tracers
222211
Tracer._cata_enabled = catalogs
223212
Tracer.bind_parent(Tracer.get_cata_all())
224-
Tracer.fix_version()
225213

226214
for t in tracers:
227215
p = t['parent']
@@ -447,6 +435,8 @@ def init_args():
447435
Helper._user_args = args
448436

449437
if args.tracer == '?':
438+
args.tracer = 'all'
439+
Tracer.init_tracers()
450440
print('available tracer:')
451441
print('---------------------------------------------------\n')
452442
Tracer.print_tracer(Tracer.get_cata_all())

skb.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,18 @@ children:
1111
children:
1212
- napi_gro_receive:1
1313
- enqueue_to_backlog:0
14-
- __netif_receive_skb_core
1514
- name: do_xdp_generic
1615
regex: do_xdp_generic\..*
1716
skb: 1
1817
- xdp_do_generic_redirect:1
1918
- generic_xdp_tx:1
2019
- sch_handle_ingress:0
20+
- name: __netif_receive_skb_core
21+
skb: 0
22+
if: kernelVersion < 504
23+
- name: __netif_receive_skb_core
24+
pskb: 0
25+
if: kernelVersion >= 504
2126
- name: link-out
2227
desc: link layer (L2) of packet out
2328
visual: true

utils.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
import os
22
import struct
33
import socket
4+
import subprocess
5+
import re
6+
7+
from numpy import mat
48

59
cur_dir = os.path.dirname(os.path.abspath(__file__))
10+
_cur_version = None
611

712

813
def project_file(name):
@@ -12,6 +17,27 @@ def project_file(name):
1217
def b2str(b):
1318
return 'true' if b else 'false'
1419

20+
def kernel_version_num(version):
21+
if not version:
22+
return 0
23+
24+
match = re.match("([0-9]+)\.([0-9]+)\.", version)
25+
if not match:
26+
return None
27+
return int(match.group(1)) * 100 + int(match.group(2))
28+
29+
def kernel_version_cur():
30+
return kernel_version_num(kernel_version())
31+
32+
def kernel_version():
33+
global _cur_version
34+
if _cur_version:
35+
return _cur_version
36+
(code, result) = subprocess.getstatusoutput('uname -r')
37+
if code != 0:
38+
return None
39+
_cur_version = result
40+
return result
1541

1642
class NetUtils:
1743

0 commit comments

Comments
 (0)