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 (
	
	
	
	
	
)
XfrmStat models the contents of /proc/net/xfrm_stat.
All errors which are not matched by other
No buffer is left
Header Error
No state found i.e. either inbound SPI, address, or IPSEC protocol at SA is wrong
Transformation protocol specific error e.g. SA Key is wrong
Transformation mode specific error
Sequence error e.g. sequence number is out of window
State is expired
State has mismatch option e.g. UDP encapsulation type is mismatched
State is invalid
No matching template for states e.g. Inbound SAs are correct but SP rule is wrong
No policy is found for states e.g. Inbound SAs are correct but no SP is found
Policy discards
Policy error
All errors which are not matched by others
Bundle generation error
Bundle check error
No state was found
Transformation protocol specific error
Transportation mode specific error
Sequence error i.e sequence number overflow
State is expired
Policy discads
Policy is dead
NewXfrmStat reads the xfrm_stat statistics.
func () (XfrmStat, error) {
	,  := NewFS(DefaultMountPoint)
	if  != nil {
		return XfrmStat{}, 
	}

	return .NewXfrmStat()
}
NewXfrmStat reads the xfrm_stat statistics from the 'proc' filesystem.
func ( FS) () (XfrmStat, error) {
	,  := os.Open(.proc.Path("net/xfrm_stat"))
	if  != nil {
		return XfrmStat{}, 
	}
	defer .Close()

	var (
		 = XfrmStat{}
		 = bufio.NewScanner()
	)

	for .Scan() {
		 := strings.Fields(.Text())

		if len() != 2 {
			return XfrmStat{}, fmt.Errorf(
				"couldn't parse %s line %s", .Name(), .Text())
		}

		 := [0]
		,  := strconv.Atoi([1])
		if  != nil {
			return XfrmStat{}, 
		}

		switch  {
		case "XfrmInError":
			.XfrmInError = 
		case "XfrmInBufferError":
			.XfrmInBufferError = 
		case "XfrmInHdrError":
			.XfrmInHdrError = 
		case "XfrmInNoStates":
			.XfrmInNoStates = 
		case "XfrmInStateProtoError":
			.XfrmInStateProtoError = 
		case "XfrmInStateModeError":
			.XfrmInStateModeError = 
		case "XfrmInStateSeqError":
			.XfrmInStateSeqError = 
		case "XfrmInStateExpired":
			.XfrmInStateExpired = 
		case "XfrmInStateInvalid":
			.XfrmInStateInvalid = 
		case "XfrmInTmplMismatch":
			.XfrmInTmplMismatch = 
		case "XfrmInNoPols":
			.XfrmInNoPols = 
		case "XfrmInPolBlock":
			.XfrmInPolBlock = 
		case "XfrmInPolError":
			.XfrmInPolError = 
		case "XfrmOutError":
			.XfrmOutError = 
		case "XfrmInStateMismatch":
			.XfrmInStateMismatch = 
		case "XfrmOutBundleGenError":
			.XfrmOutBundleGenError = 
		case "XfrmOutBundleCheckError":
			.XfrmOutBundleCheckError = 
		case "XfrmOutNoStates":
			.XfrmOutNoStates = 
		case "XfrmOutStateProtoError":
			.XfrmOutStateProtoError = 
		case "XfrmOutStateModeError":
			.XfrmOutStateModeError = 
		case "XfrmOutStateSeqError":
			.XfrmOutStateSeqError = 
		case "XfrmOutStateExpired":
			.XfrmOutStateExpired = 
		case "XfrmOutPolBlock":
			.XfrmOutPolBlock = 
		case "XfrmOutPolDead":
			.XfrmOutPolDead = 
		case "XfrmOutPolError":
			.XfrmOutPolError = 
		case "XfrmFwdHdrError":
			.XfrmFwdHdrError = 
		case "XfrmOutStateInvalid":
			.XfrmOutStateInvalid = 
		case "XfrmAcquireError":
			.XfrmAcquireError = 
		}

	}

	return , .Err()