...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package utils
17
18 import (
19 "bufio"
20 "bytes"
21 "context"
22
23 "github.com/chaos-mesh/chaos-mesh/pkg/bpm"
24 )
25
26 func GetTcRulesNumberByNetNS(pid uint32) (int, error) {
27 return getTcRulesNumber(true, pid)
28 }
29
30 func getTcRulesNumber(enterNS bool, pid uint32) (int, error) {
31 builder := bpm.DefaultProcessBuilder("tc", "qdisc")
32 if enterNS {
33 builder = builder.SetNS(pid, bpm.NetNS)
34 }
35
36 out, err := builder.Build(context.TODO()).CombinedOutput()
37 if err != nil {
38 return 0, err
39 }
40
41 var lines int
42 scanner := bufio.NewScanner(bytes.NewReader(out))
43 scanner.Split(bufio.ScanLines)
44 for scanner.Scan() {
45 lines++
46 }
47
48 return lines, nil
49 }
50