1 // Copyright 2017 Prometheus Team
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
6 // http://www.apache.org/licenses/LICENSE-2.0
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
24 // XfrmStat models the contents of /proc/net/xfrm_stat.
25 type XfrmStat struct {
26 // All errors which are not matched by other
33 // i.e. either inbound SPI, address, or IPSEC protocol at SA is wrong
35 // Transformation protocol specific error
36 // e.g. SA Key is wrong
37 XfrmInStateProtoError int
38 // Transformation mode specific error
39 XfrmInStateModeError int
41 // e.g. sequence number is out of window
42 XfrmInStateSeqError int
44 XfrmInStateExpired int
45 // State has mismatch option
46 // e.g. UDP encapsulation type is mismatched
47 XfrmInStateMismatch int
49 XfrmInStateInvalid int
50 // No matching template for states
51 // e.g. Inbound SAs are correct but SP rule is wrong
52 XfrmInTmplMismatch int
53 // No policy is found for states
54 // e.g. Inbound SAs are correct but no SP is found
60 // All errors which are not matched by others
62 // Bundle generation error
63 XfrmOutBundleGenError int
65 XfrmOutBundleCheckError int
68 // Transformation protocol specific error
69 XfrmOutStateProtoError int
70 // Transportation mode specific error
71 XfrmOutStateModeError int
73 // i.e sequence number overflow
74 XfrmOutStateSeqError int
76 XfrmOutStateExpired int
84 XfrmOutStateInvalid int
88 // NewXfrmStat reads the xfrm_stat statistics.
89 func NewXfrmStat() (XfrmStat, error) {
90 fs, err := NewFS(DefaultMountPoint)
92 return XfrmStat{}, err
95 return fs.NewXfrmStat()
98 // NewXfrmStat reads the xfrm_stat statistics from the 'proc' filesystem.
99 func (fs FS) NewXfrmStat() (XfrmStat, error) {
100 file, err := os.Open(fs.Path("net/xfrm_stat"))
102 return XfrmStat{}, err
108 s = bufio.NewScanner(file)
112 fields := strings.Fields(s.Text())
114 if len(fields) != 2 {
115 return XfrmStat{}, fmt.Errorf(
116 "couldn't parse %s line %s", file.Name(), s.Text())
120 value, err := strconv.Atoi(fields[1])
122 return XfrmStat{}, err
127 x.XfrmInError = value
128 case "XfrmInBufferError":
129 x.XfrmInBufferError = value
130 case "XfrmInHdrError":
131 x.XfrmInHdrError = value
132 case "XfrmInNoStates":
133 x.XfrmInNoStates = value
134 case "XfrmInStateProtoError":
135 x.XfrmInStateProtoError = value
136 case "XfrmInStateModeError":
137 x.XfrmInStateModeError = value
138 case "XfrmInStateSeqError":
139 x.XfrmInStateSeqError = value
140 case "XfrmInStateExpired":
141 x.XfrmInStateExpired = value
142 case "XfrmInStateInvalid":
143 x.XfrmInStateInvalid = value
144 case "XfrmInTmplMismatch":
145 x.XfrmInTmplMismatch = value
147 x.XfrmInNoPols = value
148 case "XfrmInPolBlock":
149 x.XfrmInPolBlock = value
150 case "XfrmInPolError":
151 x.XfrmInPolError = value
153 x.XfrmOutError = value
154 case "XfrmInStateMismatch":
155 x.XfrmInStateMismatch = value
156 case "XfrmOutBundleGenError":
157 x.XfrmOutBundleGenError = value
158 case "XfrmOutBundleCheckError":
159 x.XfrmOutBundleCheckError = value
160 case "XfrmOutNoStates":
161 x.XfrmOutNoStates = value
162 case "XfrmOutStateProtoError":
163 x.XfrmOutStateProtoError = value
164 case "XfrmOutStateModeError":
165 x.XfrmOutStateModeError = value
166 case "XfrmOutStateSeqError":
167 x.XfrmOutStateSeqError = value
168 case "XfrmOutStateExpired":
169 x.XfrmOutStateExpired = value
170 case "XfrmOutPolBlock":
171 x.XfrmOutPolBlock = value
172 case "XfrmOutPolDead":
173 x.XfrmOutPolDead = value
174 case "XfrmOutPolError":
175 x.XfrmOutPolError = value
176 case "XfrmFwdHdrError":
177 x.XfrmFwdHdrError = value
178 case "XfrmOutStateInvalid":
179 x.XfrmOutStateInvalid = value
180 case "XfrmAcquireError":
181 x.XfrmAcquireError = value