...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package utils
17
18 import (
19 "context"
20 "encoding/xml"
21
22 "github.com/romana/ipset"
23
24 "github.com/chaos-mesh/chaos-mesh/pkg/bpm"
25 )
26
27 func GetIPSetRulesNumberByNetNS(pid uint32) (int, error) {
28 return getIPSetRulesNumber(true, pid)
29 }
30
31 func getIPSetRulesNumber(enterNS bool, pid uint32) (int, error) {
32 builder := bpm.DefaultProcessBuilder("ipset", "save", "-o", "xml")
33 if enterNS {
34 builder = builder.SetNS(pid, bpm.NetNS)
35 }
36
37 out, err := builder.Build(context.TODO()).CombinedOutput()
38 if err != nil {
39 return 0, err
40 }
41
42 var sets ipset.Ipset
43 if err = xml.Unmarshal(out, &sets); err != nil {
44 return 0, err
45 }
46
47 var members int
48 for _, set := range sets.Sets {
49 members += len(set.Members)
50 }
51 return members, nil
52 }
53