mirror of https://github.com/gogits/gogs.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
4.8 KiB
187 lines
4.8 KiB
// Copyright 2017 Prometheus Team |
|
// Licensed under the Apache License, Version 2.0 (the "License"); |
|
// you may not use this file except in compliance with the License. |
|
// You may obtain a copy of the License at |
|
// |
|
// http://www.apache.org/licenses/LICENSE-2.0 |
|
// |
|
// Unless required by applicable law or agreed to in writing, software |
|
// distributed under the License is distributed on an "AS IS" BASIS, |
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
// See the License for the specific language governing permissions and |
|
// limitations under the License. |
|
|
|
package procfs |
|
|
|
import ( |
|
"bufio" |
|
"fmt" |
|
"os" |
|
"strconv" |
|
"strings" |
|
) |
|
|
|
// XfrmStat models the contents of /proc/net/xfrm_stat. |
|
type XfrmStat struct { |
|
// All errors which are not matched by other |
|
XfrmInError int |
|
// No buffer is left |
|
XfrmInBufferError int |
|
// Header Error |
|
XfrmInHdrError int |
|
// No state found |
|
// i.e. either inbound SPI, address, or IPSEC protocol at SA is wrong |
|
XfrmInNoStates int |
|
// Transformation protocol specific error |
|
// e.g. SA Key is wrong |
|
XfrmInStateProtoError int |
|
// Transformation mode specific error |
|
XfrmInStateModeError int |
|
// Sequence error |
|
// e.g. sequence number is out of window |
|
XfrmInStateSeqError int |
|
// State is expired |
|
XfrmInStateExpired int |
|
// State has mismatch option |
|
// e.g. UDP encapsulation type is mismatched |
|
XfrmInStateMismatch int |
|
// State is invalid |
|
XfrmInStateInvalid int |
|
// No matching template for states |
|
// e.g. Inbound SAs are correct but SP rule is wrong |
|
XfrmInTmplMismatch int |
|
// No policy is found for states |
|
// e.g. Inbound SAs are correct but no SP is found |
|
XfrmInNoPols int |
|
// Policy discards |
|
XfrmInPolBlock int |
|
// Policy error |
|
XfrmInPolError int |
|
// All errors which are not matched by others |
|
XfrmOutError int |
|
// Bundle generation error |
|
XfrmOutBundleGenError int |
|
// Bundle check error |
|
XfrmOutBundleCheckError int |
|
// No state was found |
|
XfrmOutNoStates int |
|
// Transformation protocol specific error |
|
XfrmOutStateProtoError int |
|
// Transportation mode specific error |
|
XfrmOutStateModeError int |
|
// Sequence error |
|
// i.e sequence number overflow |
|
XfrmOutStateSeqError int |
|
// State is expired |
|
XfrmOutStateExpired int |
|
// Policy discads |
|
XfrmOutPolBlock int |
|
// Policy is dead |
|
XfrmOutPolDead int |
|
// Policy Error |
|
XfrmOutPolError int |
|
XfrmFwdHdrError int |
|
XfrmOutStateInvalid int |
|
XfrmAcquireError int |
|
} |
|
|
|
// NewXfrmStat reads the xfrm_stat statistics. |
|
func NewXfrmStat() (XfrmStat, error) { |
|
fs, err := NewFS(DefaultMountPoint) |
|
if err != nil { |
|
return XfrmStat{}, err |
|
} |
|
|
|
return fs.NewXfrmStat() |
|
} |
|
|
|
// NewXfrmStat reads the xfrm_stat statistics from the 'proc' filesystem. |
|
func (fs FS) NewXfrmStat() (XfrmStat, error) { |
|
file, err := os.Open(fs.Path("net/xfrm_stat")) |
|
if err != nil { |
|
return XfrmStat{}, err |
|
} |
|
defer file.Close() |
|
|
|
var ( |
|
x = XfrmStat{} |
|
s = bufio.NewScanner(file) |
|
) |
|
|
|
for s.Scan() { |
|
fields := strings.Fields(s.Text()) |
|
|
|
if len(fields) != 2 { |
|
return XfrmStat{}, fmt.Errorf( |
|
"couldn't parse %s line %s", file.Name(), s.Text()) |
|
} |
|
|
|
name := fields[0] |
|
value, err := strconv.Atoi(fields[1]) |
|
if err != nil { |
|
return XfrmStat{}, err |
|
} |
|
|
|
switch name { |
|
case "XfrmInError": |
|
x.XfrmInError = value |
|
case "XfrmInBufferError": |
|
x.XfrmInBufferError = value |
|
case "XfrmInHdrError": |
|
x.XfrmInHdrError = value |
|
case "XfrmInNoStates": |
|
x.XfrmInNoStates = value |
|
case "XfrmInStateProtoError": |
|
x.XfrmInStateProtoError = value |
|
case "XfrmInStateModeError": |
|
x.XfrmInStateModeError = value |
|
case "XfrmInStateSeqError": |
|
x.XfrmInStateSeqError = value |
|
case "XfrmInStateExpired": |
|
x.XfrmInStateExpired = value |
|
case "XfrmInStateInvalid": |
|
x.XfrmInStateInvalid = value |
|
case "XfrmInTmplMismatch": |
|
x.XfrmInTmplMismatch = value |
|
case "XfrmInNoPols": |
|
x.XfrmInNoPols = value |
|
case "XfrmInPolBlock": |
|
x.XfrmInPolBlock = value |
|
case "XfrmInPolError": |
|
x.XfrmInPolError = value |
|
case "XfrmOutError": |
|
x.XfrmOutError = value |
|
case "XfrmInStateMismatch": |
|
x.XfrmInStateMismatch = value |
|
case "XfrmOutBundleGenError": |
|
x.XfrmOutBundleGenError = value |
|
case "XfrmOutBundleCheckError": |
|
x.XfrmOutBundleCheckError = value |
|
case "XfrmOutNoStates": |
|
x.XfrmOutNoStates = value |
|
case "XfrmOutStateProtoError": |
|
x.XfrmOutStateProtoError = value |
|
case "XfrmOutStateModeError": |
|
x.XfrmOutStateModeError = value |
|
case "XfrmOutStateSeqError": |
|
x.XfrmOutStateSeqError = value |
|
case "XfrmOutStateExpired": |
|
x.XfrmOutStateExpired = value |
|
case "XfrmOutPolBlock": |
|
x.XfrmOutPolBlock = value |
|
case "XfrmOutPolDead": |
|
x.XfrmOutPolDead = value |
|
case "XfrmOutPolError": |
|
x.XfrmOutPolError = value |
|
case "XfrmFwdHdrError": |
|
x.XfrmFwdHdrError = value |
|
case "XfrmOutStateInvalid": |
|
x.XfrmOutStateInvalid = value |
|
case "XfrmAcquireError": |
|
x.XfrmAcquireError = value |
|
} |
|
|
|
} |
|
|
|
return x, s.Err() |
|
}
|
|
|