...
1
2
3
4
5
6
7
8
9
10
11
12
13
14 package procfs
15
16 import (
17 "bufio"
18 "fmt"
19 "os"
20 "strconv"
21 "strings"
22 )
23
24
25 type XfrmStat struct {
26
27 XfrmInError int
28
29 XfrmInBufferError int
30
31 XfrmInHdrError int
32
33
34 XfrmInNoStates int
35
36
37 XfrmInStateProtoError int
38
39 XfrmInStateModeError int
40
41
42 XfrmInStateSeqError int
43
44 XfrmInStateExpired int
45
46
47 XfrmInStateMismatch int
48
49 XfrmInStateInvalid int
50
51
52 XfrmInTmplMismatch int
53
54
55 XfrmInNoPols int
56
57 XfrmInPolBlock int
58
59 XfrmInPolError int
60
61 XfrmOutError int
62
63 XfrmOutBundleGenError int
64
65 XfrmOutBundleCheckError int
66
67 XfrmOutNoStates int
68
69 XfrmOutStateProtoError int
70
71 XfrmOutStateModeError int
72
73
74 XfrmOutStateSeqError int
75
76 XfrmOutStateExpired int
77
78 XfrmOutPolBlock int
79
80 XfrmOutPolDead int
81
82 XfrmOutPolError int
83
84 XfrmFwdHdrError int
85
86 XfrmOutStateInvalid int
87
88 XfrmAcquireError int
89 }
90
91
92 func NewXfrmStat() (XfrmStat, error) {
93 fs, err := NewFS(DefaultMountPoint)
94 if err != nil {
95 return XfrmStat{}, err
96 }
97
98 return fs.NewXfrmStat()
99 }
100
101
102 func (fs FS) NewXfrmStat() (XfrmStat, error) {
103 file, err := os.Open(fs.proc.Path("net/xfrm_stat"))
104 if err != nil {
105 return XfrmStat{}, err
106 }
107 defer file.Close()
108
109 var (
110 x = XfrmStat{}
111 s = bufio.NewScanner(file)
112 )
113
114 for s.Scan() {
115 fields := strings.Fields(s.Text())
116
117 if len(fields) != 2 {
118 return XfrmStat{}, fmt.Errorf("%w: %q line %q", ErrFileParse, file.Name(), s.Text())
119 }
120
121 name := fields[0]
122 value, err := strconv.Atoi(fields[1])
123 if err != nil {
124 return XfrmStat{}, err
125 }
126
127 switch name {
128 case "XfrmInError":
129 x.XfrmInError = value
130 case "XfrmInBufferError":
131 x.XfrmInBufferError = value
132 case "XfrmInHdrError":
133 x.XfrmInHdrError = value
134 case "XfrmInNoStates":
135 x.XfrmInNoStates = value
136 case "XfrmInStateProtoError":
137 x.XfrmInStateProtoError = value
138 case "XfrmInStateModeError":
139 x.XfrmInStateModeError = value
140 case "XfrmInStateSeqError":
141 x.XfrmInStateSeqError = value
142 case "XfrmInStateExpired":
143 x.XfrmInStateExpired = value
144 case "XfrmInStateInvalid":
145 x.XfrmInStateInvalid = value
146 case "XfrmInTmplMismatch":
147 x.XfrmInTmplMismatch = value
148 case "XfrmInNoPols":
149 x.XfrmInNoPols = value
150 case "XfrmInPolBlock":
151 x.XfrmInPolBlock = value
152 case "XfrmInPolError":
153 x.XfrmInPolError = value
154 case "XfrmOutError":
155 x.XfrmOutError = value
156 case "XfrmInStateMismatch":
157 x.XfrmInStateMismatch = value
158 case "XfrmOutBundleGenError":
159 x.XfrmOutBundleGenError = value
160 case "XfrmOutBundleCheckError":
161 x.XfrmOutBundleCheckError = value
162 case "XfrmOutNoStates":
163 x.XfrmOutNoStates = value
164 case "XfrmOutStateProtoError":
165 x.XfrmOutStateProtoError = value
166 case "XfrmOutStateModeError":
167 x.XfrmOutStateModeError = value
168 case "XfrmOutStateSeqError":
169 x.XfrmOutStateSeqError = value
170 case "XfrmOutStateExpired":
171 x.XfrmOutStateExpired = value
172 case "XfrmOutPolBlock":
173 x.XfrmOutPolBlock = value
174 case "XfrmOutPolDead":
175 x.XfrmOutPolDead = value
176 case "XfrmOutPolError":
177 x.XfrmOutPolError = value
178 case "XfrmFwdHdrError":
179 x.XfrmFwdHdrError = value
180 case "XfrmOutStateInvalid":
181 x.XfrmOutStateInvalid = value
182 case "XfrmAcquireError":
183 x.XfrmAcquireError = value
184 }
185
186 }
187
188 return x, s.Err()
189 }
190
View as plain text