...
1
2
3
4
5
6
7
8
9
10
11
12
13
14 package procfs
15
16 import (
17 "bufio"
18 "bytes"
19 "errors"
20 "io"
21 "os"
22 "strconv"
23 "strings"
24
25 "github.com/prometheus/procfs/internal/util"
26 )
27
28
29 type ProcSnmp6 struct {
30
31 PID int
32 Ip6
33 Icmp6
34 Udp6
35 UdpLite6
36 }
37
38 type Ip6 struct {
39 InReceives *float64
40 InHdrErrors *float64
41 InTooBigErrors *float64
42 InNoRoutes *float64
43 InAddrErrors *float64
44 InUnknownProtos *float64
45 InTruncatedPkts *float64
46 InDiscards *float64
47 InDelivers *float64
48 OutForwDatagrams *float64
49 OutRequests *float64
50 OutDiscards *float64
51 OutNoRoutes *float64
52 ReasmTimeout *float64
53 ReasmReqds *float64
54 ReasmOKs *float64
55 ReasmFails *float64
56 FragOKs *float64
57 FragFails *float64
58 FragCreates *float64
59 InMcastPkts *float64
60 OutMcastPkts *float64
61 InOctets *float64
62 OutOctets *float64
63 InMcastOctets *float64
64 OutMcastOctets *float64
65 InBcastOctets *float64
66 OutBcastOctets *float64
67 InNoECTPkts *float64
68 InECT1Pkts *float64
69 InECT0Pkts *float64
70 InCEPkts *float64
71 }
72
73 type Icmp6 struct {
74 InMsgs *float64
75 InErrors *float64
76 OutMsgs *float64
77 OutErrors *float64
78 InCsumErrors *float64
79 InDestUnreachs *float64
80 InPktTooBigs *float64
81 InTimeExcds *float64
82 InParmProblems *float64
83 InEchos *float64
84 InEchoReplies *float64
85 InGroupMembQueries *float64
86 InGroupMembResponses *float64
87 InGroupMembReductions *float64
88 InRouterSolicits *float64
89 InRouterAdvertisements *float64
90 InNeighborSolicits *float64
91 InNeighborAdvertisements *float64
92 InRedirects *float64
93 InMLDv2Reports *float64
94 OutDestUnreachs *float64
95 OutPktTooBigs *float64
96 OutTimeExcds *float64
97 OutParmProblems *float64
98 OutEchos *float64
99 OutEchoReplies *float64
100 OutGroupMembQueries *float64
101 OutGroupMembResponses *float64
102 OutGroupMembReductions *float64
103 OutRouterSolicits *float64
104 OutRouterAdvertisements *float64
105 OutNeighborSolicits *float64
106 OutNeighborAdvertisements *float64
107 OutRedirects *float64
108 OutMLDv2Reports *float64
109 InType1 *float64
110 InType134 *float64
111 InType135 *float64
112 InType136 *float64
113 InType143 *float64
114 OutType133 *float64
115 OutType135 *float64
116 OutType136 *float64
117 OutType143 *float64
118 }
119
120 type Udp6 struct {
121 InDatagrams *float64
122 NoPorts *float64
123 InErrors *float64
124 OutDatagrams *float64
125 RcvbufErrors *float64
126 SndbufErrors *float64
127 InCsumErrors *float64
128 IgnoredMulti *float64
129 }
130
131 type UdpLite6 struct {
132 InDatagrams *float64
133 NoPorts *float64
134 InErrors *float64
135 OutDatagrams *float64
136 RcvbufErrors *float64
137 SndbufErrors *float64
138 InCsumErrors *float64
139 }
140
141 func (p Proc) Snmp6() (ProcSnmp6, error) {
142 filename := p.path("net/snmp6")
143 data, err := util.ReadFileNoStat(filename)
144 if err != nil {
145
146
147 if errors.Is(err, os.ErrNotExist) {
148 return ProcSnmp6{PID: p.PID}, nil
149 }
150
151 return ProcSnmp6{PID: p.PID}, err
152 }
153
154 procSnmp6, err := parseSNMP6Stats(bytes.NewReader(data))
155 procSnmp6.PID = p.PID
156 return procSnmp6, err
157 }
158
159
160
161 func parseSNMP6Stats(r io.Reader) (ProcSnmp6, error) {
162 var (
163 scanner = bufio.NewScanner(r)
164 procSnmp6 = ProcSnmp6{}
165 )
166
167 for scanner.Scan() {
168 stat := strings.Fields(scanner.Text())
169 if len(stat) < 2 {
170 continue
171 }
172
173 if sixIndex := strings.Index(stat[0], "6"); sixIndex != -1 {
174 protocol := stat[0][:sixIndex+1]
175 key := stat[0][sixIndex+1:]
176 value, err := strconv.ParseFloat(stat[1], 64)
177 if err != nil {
178 return procSnmp6, err
179 }
180
181 switch protocol {
182 case "Ip6":
183 switch key {
184 case "InReceives":
185 procSnmp6.Ip6.InReceives = &value
186 case "InHdrErrors":
187 procSnmp6.Ip6.InHdrErrors = &value
188 case "InTooBigErrors":
189 procSnmp6.Ip6.InTooBigErrors = &value
190 case "InNoRoutes":
191 procSnmp6.Ip6.InNoRoutes = &value
192 case "InAddrErrors":
193 procSnmp6.Ip6.InAddrErrors = &value
194 case "InUnknownProtos":
195 procSnmp6.Ip6.InUnknownProtos = &value
196 case "InTruncatedPkts":
197 procSnmp6.Ip6.InTruncatedPkts = &value
198 case "InDiscards":
199 procSnmp6.Ip6.InDiscards = &value
200 case "InDelivers":
201 procSnmp6.Ip6.InDelivers = &value
202 case "OutForwDatagrams":
203 procSnmp6.Ip6.OutForwDatagrams = &value
204 case "OutRequests":
205 procSnmp6.Ip6.OutRequests = &value
206 case "OutDiscards":
207 procSnmp6.Ip6.OutDiscards = &value
208 case "OutNoRoutes":
209 procSnmp6.Ip6.OutNoRoutes = &value
210 case "ReasmTimeout":
211 procSnmp6.Ip6.ReasmTimeout = &value
212 case "ReasmReqds":
213 procSnmp6.Ip6.ReasmReqds = &value
214 case "ReasmOKs":
215 procSnmp6.Ip6.ReasmOKs = &value
216 case "ReasmFails":
217 procSnmp6.Ip6.ReasmFails = &value
218 case "FragOKs":
219 procSnmp6.Ip6.FragOKs = &value
220 case "FragFails":
221 procSnmp6.Ip6.FragFails = &value
222 case "FragCreates":
223 procSnmp6.Ip6.FragCreates = &value
224 case "InMcastPkts":
225 procSnmp6.Ip6.InMcastPkts = &value
226 case "OutMcastPkts":
227 procSnmp6.Ip6.OutMcastPkts = &value
228 case "InOctets":
229 procSnmp6.Ip6.InOctets = &value
230 case "OutOctets":
231 procSnmp6.Ip6.OutOctets = &value
232 case "InMcastOctets":
233 procSnmp6.Ip6.InMcastOctets = &value
234 case "OutMcastOctets":
235 procSnmp6.Ip6.OutMcastOctets = &value
236 case "InBcastOctets":
237 procSnmp6.Ip6.InBcastOctets = &value
238 case "OutBcastOctets":
239 procSnmp6.Ip6.OutBcastOctets = &value
240 case "InNoECTPkts":
241 procSnmp6.Ip6.InNoECTPkts = &value
242 case "InECT1Pkts":
243 procSnmp6.Ip6.InECT1Pkts = &value
244 case "InECT0Pkts":
245 procSnmp6.Ip6.InECT0Pkts = &value
246 case "InCEPkts":
247 procSnmp6.Ip6.InCEPkts = &value
248
249 }
250 case "Icmp6":
251 switch key {
252 case "InMsgs":
253 procSnmp6.Icmp6.InMsgs = &value
254 case "InErrors":
255 procSnmp6.Icmp6.InErrors = &value
256 case "OutMsgs":
257 procSnmp6.Icmp6.OutMsgs = &value
258 case "OutErrors":
259 procSnmp6.Icmp6.OutErrors = &value
260 case "InCsumErrors":
261 procSnmp6.Icmp6.InCsumErrors = &value
262 case "InDestUnreachs":
263 procSnmp6.Icmp6.InDestUnreachs = &value
264 case "InPktTooBigs":
265 procSnmp6.Icmp6.InPktTooBigs = &value
266 case "InTimeExcds":
267 procSnmp6.Icmp6.InTimeExcds = &value
268 case "InParmProblems":
269 procSnmp6.Icmp6.InParmProblems = &value
270 case "InEchos":
271 procSnmp6.Icmp6.InEchos = &value
272 case "InEchoReplies":
273 procSnmp6.Icmp6.InEchoReplies = &value
274 case "InGroupMembQueries":
275 procSnmp6.Icmp6.InGroupMembQueries = &value
276 case "InGroupMembResponses":
277 procSnmp6.Icmp6.InGroupMembResponses = &value
278 case "InGroupMembReductions":
279 procSnmp6.Icmp6.InGroupMembReductions = &value
280 case "InRouterSolicits":
281 procSnmp6.Icmp6.InRouterSolicits = &value
282 case "InRouterAdvertisements":
283 procSnmp6.Icmp6.InRouterAdvertisements = &value
284 case "InNeighborSolicits":
285 procSnmp6.Icmp6.InNeighborSolicits = &value
286 case "InNeighborAdvertisements":
287 procSnmp6.Icmp6.InNeighborAdvertisements = &value
288 case "InRedirects":
289 procSnmp6.Icmp6.InRedirects = &value
290 case "InMLDv2Reports":
291 procSnmp6.Icmp6.InMLDv2Reports = &value
292 case "OutDestUnreachs":
293 procSnmp6.Icmp6.OutDestUnreachs = &value
294 case "OutPktTooBigs":
295 procSnmp6.Icmp6.OutPktTooBigs = &value
296 case "OutTimeExcds":
297 procSnmp6.Icmp6.OutTimeExcds = &value
298 case "OutParmProblems":
299 procSnmp6.Icmp6.OutParmProblems = &value
300 case "OutEchos":
301 procSnmp6.Icmp6.OutEchos = &value
302 case "OutEchoReplies":
303 procSnmp6.Icmp6.OutEchoReplies = &value
304 case "OutGroupMembQueries":
305 procSnmp6.Icmp6.OutGroupMembQueries = &value
306 case "OutGroupMembResponses":
307 procSnmp6.Icmp6.OutGroupMembResponses = &value
308 case "OutGroupMembReductions":
309 procSnmp6.Icmp6.OutGroupMembReductions = &value
310 case "OutRouterSolicits":
311 procSnmp6.Icmp6.OutRouterSolicits = &value
312 case "OutRouterAdvertisements":
313 procSnmp6.Icmp6.OutRouterAdvertisements = &value
314 case "OutNeighborSolicits":
315 procSnmp6.Icmp6.OutNeighborSolicits = &value
316 case "OutNeighborAdvertisements":
317 procSnmp6.Icmp6.OutNeighborAdvertisements = &value
318 case "OutRedirects":
319 procSnmp6.Icmp6.OutRedirects = &value
320 case "OutMLDv2Reports":
321 procSnmp6.Icmp6.OutMLDv2Reports = &value
322 case "InType1":
323 procSnmp6.Icmp6.InType1 = &value
324 case "InType134":
325 procSnmp6.Icmp6.InType134 = &value
326 case "InType135":
327 procSnmp6.Icmp6.InType135 = &value
328 case "InType136":
329 procSnmp6.Icmp6.InType136 = &value
330 case "InType143":
331 procSnmp6.Icmp6.InType143 = &value
332 case "OutType133":
333 procSnmp6.Icmp6.OutType133 = &value
334 case "OutType135":
335 procSnmp6.Icmp6.OutType135 = &value
336 case "OutType136":
337 procSnmp6.Icmp6.OutType136 = &value
338 case "OutType143":
339 procSnmp6.Icmp6.OutType143 = &value
340 }
341 case "Udp6":
342 switch key {
343 case "InDatagrams":
344 procSnmp6.Udp6.InDatagrams = &value
345 case "NoPorts":
346 procSnmp6.Udp6.NoPorts = &value
347 case "InErrors":
348 procSnmp6.Udp6.InErrors = &value
349 case "OutDatagrams":
350 procSnmp6.Udp6.OutDatagrams = &value
351 case "RcvbufErrors":
352 procSnmp6.Udp6.RcvbufErrors = &value
353 case "SndbufErrors":
354 procSnmp6.Udp6.SndbufErrors = &value
355 case "InCsumErrors":
356 procSnmp6.Udp6.InCsumErrors = &value
357 case "IgnoredMulti":
358 procSnmp6.Udp6.IgnoredMulti = &value
359 }
360 case "UdpLite6":
361 switch key {
362 case "InDatagrams":
363 procSnmp6.UdpLite6.InDatagrams = &value
364 case "NoPorts":
365 procSnmp6.UdpLite6.NoPorts = &value
366 case "InErrors":
367 procSnmp6.UdpLite6.InErrors = &value
368 case "OutDatagrams":
369 procSnmp6.UdpLite6.OutDatagrams = &value
370 case "RcvbufErrors":
371 procSnmp6.UdpLite6.RcvbufErrors = &value
372 case "SndbufErrors":
373 procSnmp6.UdpLite6.SndbufErrors = &value
374 case "InCsumErrors":
375 procSnmp6.UdpLite6.InCsumErrors = &value
376 }
377 }
378 }
379 }
380 return procSnmp6, scanner.Err()
381 }
382
View as plain text