MCPcopy Create free account
hub / github.com/prometheus/procfs / parseSoftnet

Function parseSoftnet

net_softnet.go:73–141  ·  view source on GitHub ↗
(r io.Reader)

Source from the content-addressed store, hash-verified

71}
72
73func parseSoftnet(r io.Reader) ([]SoftnetStat, error) {
74 const minColumns = 9
75
76 s := bufio.NewScanner(r)
77
78 var stats []SoftnetStat
79 cpuIndex := 0
80 for s.Scan() {
81 columns := strings.Fields(s.Text())
82 width := len(columns)
83 softnetStat := SoftnetStat{}
84
85 if width < minColumns {
86 return nil, fmt.Errorf("%w: detected %d columns, but expected at least %d", ErrFileParse, width, minColumns)
87 }
88
89 // Linux 2.6.23 https://elixir.bootlin.com/linux/v2.6.23/source/net/core/dev.c#L2347
90 if width >= minColumns {
91 us, err := parseHexUint32s(columns[0:9])
92 if err != nil {
93 return nil, err
94 }
95
96 softnetStat.Processed = us[0]
97 softnetStat.Dropped = us[1]
98 softnetStat.TimeSqueezed = us[2]
99 softnetStat.CPUCollision = us[8]
100 }
101
102 // Linux 2.6.39 https://elixir.bootlin.com/linux/v2.6.39/source/net/core/dev.c#L4086
103 if width >= 10 {
104 us, err := parseHexUint32s(columns[9:10])
105 if err != nil {
106 return nil, err
107 }
108
109 softnetStat.ReceivedRps = us[0]
110 }
111
112 // Linux 4.18 https://elixir.bootlin.com/linux/v4.18/source/net/core/net-procfs.c#L162
113 if width >= 11 {
114 us, err := parseHexUint32s(columns[10:11])
115 if err != nil {
116 return nil, err
117 }
118
119 softnetStat.FlowLimitCount = us[0]
120 }
121
122 // Linux 5.14 https://elixir.bootlin.com/linux/v5.14/source/net/core/net-procfs.c#L169
123 if width >= 13 {
124 us, err := parseHexUint32s(columns[11:13])
125 if err != nil {
126 return nil, err
127 }
128
129 softnetStat.SoftnetBacklogLen = us[0]
130 softnetStat.Index = us[1]

Callers 1

NetSoftnetStatMethod · 0.85

Calls 1

parseHexUint32sFunction · 0.85

Tested by

no test coverage detected