package procfs
import (
"bufio"
"bytes"
"errors"
"io"
"os"
"strconv"
"strings"
"github.com/prometheus/procfs/internal/util"
)
type ProcSnmp6 struct {
PID int
Ip6
Icmp6
Udp6
UdpLite6
}
type Ip6 struct {
InReceives *float64
InHdrErrors *float64
InTooBigErrors *float64
InNoRoutes *float64
InAddrErrors *float64
InUnknownProtos *float64
InTruncatedPkts *float64
InDiscards *float64
InDelivers *float64
OutForwDatagrams *float64
OutRequests *float64
OutDiscards *float64
OutNoRoutes *float64
ReasmTimeout *float64
ReasmReqds *float64
ReasmOKs *float64
ReasmFails *float64
FragOKs *float64
FragFails *float64
FragCreates *float64
InMcastPkts *float64
OutMcastPkts *float64
InOctets *float64
OutOctets *float64
InMcastOctets *float64
OutMcastOctets *float64
InBcastOctets *float64
OutBcastOctets *float64
InNoECTPkts *float64
InECT1Pkts *float64
InECT0Pkts *float64
InCEPkts *float64
}
type Icmp6 struct {
InMsgs *float64
InErrors *float64
OutMsgs *float64
OutErrors *float64
InCsumErrors *float64
InDestUnreachs *float64
InPktTooBigs *float64
InTimeExcds *float64
InParmProblems *float64
InEchos *float64
InEchoReplies *float64
InGroupMembQueries *float64
InGroupMembResponses *float64
InGroupMembReductions *float64
InRouterSolicits *float64
InRouterAdvertisements *float64
InNeighborSolicits *float64
InNeighborAdvertisements *float64
InRedirects *float64
InMLDv2Reports *float64
OutDestUnreachs *float64
OutPktTooBigs *float64
OutTimeExcds *float64
OutParmProblems *float64
OutEchos *float64
OutEchoReplies *float64
OutGroupMembQueries *float64
OutGroupMembResponses *float64
OutGroupMembReductions *float64
OutRouterSolicits *float64
OutRouterAdvertisements *float64
OutNeighborSolicits *float64
OutNeighborAdvertisements *float64
OutRedirects *float64
OutMLDv2Reports *float64
InType1 *float64
InType134 *float64
InType135 *float64
InType136 *float64
InType143 *float64
OutType133 *float64
OutType135 *float64
OutType136 *float64
OutType143 *float64
}
type Udp6 struct {
InDatagrams *float64
NoPorts *float64
InErrors *float64
OutDatagrams *float64
RcvbufErrors *float64
SndbufErrors *float64
InCsumErrors *float64
IgnoredMulti *float64
}
type UdpLite6 struct {
InDatagrams *float64
NoPorts *float64
InErrors *float64
OutDatagrams *float64
RcvbufErrors *float64
SndbufErrors *float64
InCsumErrors *float64
}
func (p Proc ) Snmp6 () (ProcSnmp6 , error ) {
filename := p .path ("net/snmp6" )
data , err := util .ReadFileNoStat (filename )
if err != nil {
if errors .Is (err , os .ErrNotExist ) {
return ProcSnmp6 {PID : p .PID }, nil
}
return ProcSnmp6 {PID : p .PID }, err
}
procSnmp6 , err := parseSNMP6Stats (bytes .NewReader (data ))
procSnmp6 .PID = p .PID
return procSnmp6 , err
}
func parseSNMP6Stats(r io .Reader ) (ProcSnmp6 , error ) {
var (
scanner = bufio .NewScanner (r )
procSnmp6 = ProcSnmp6 {}
)
for scanner .Scan () {
stat := strings .Fields (scanner .Text ())
if len (stat ) < 2 {
continue
}
if sixIndex := strings .Index (stat [0 ], "6" ); sixIndex != -1 {
protocol := stat [0 ][:sixIndex +1 ]
key := stat [0 ][sixIndex +1 :]
value , err := strconv .ParseFloat (stat [1 ], 64 )
if err != nil {
return procSnmp6 , err
}
switch protocol {
case "Ip6" :
switch key {
case "InReceives" :
procSnmp6 .InReceives = &value
case "InHdrErrors" :
procSnmp6 .InHdrErrors = &value
case "InTooBigErrors" :
procSnmp6 .InTooBigErrors = &value
case "InNoRoutes" :
procSnmp6 .InNoRoutes = &value
case "InAddrErrors" :
procSnmp6 .InAddrErrors = &value
case "InUnknownProtos" :
procSnmp6 .InUnknownProtos = &value
case "InTruncatedPkts" :
procSnmp6 .InTruncatedPkts = &value
case "InDiscards" :
procSnmp6 .InDiscards = &value
case "InDelivers" :
procSnmp6 .InDelivers = &value
case "OutForwDatagrams" :
procSnmp6 .OutForwDatagrams = &value
case "OutRequests" :
procSnmp6 .OutRequests = &value
case "OutDiscards" :
procSnmp6 .OutDiscards = &value
case "OutNoRoutes" :
procSnmp6 .OutNoRoutes = &value
case "ReasmTimeout" :
procSnmp6 .ReasmTimeout = &value
case "ReasmReqds" :
procSnmp6 .ReasmReqds = &value
case "ReasmOKs" :
procSnmp6 .ReasmOKs = &value
case "ReasmFails" :
procSnmp6 .ReasmFails = &value
case "FragOKs" :
procSnmp6 .FragOKs = &value
case "FragFails" :
procSnmp6 .FragFails = &value
case "FragCreates" :
procSnmp6 .FragCreates = &value
case "InMcastPkts" :
procSnmp6 .InMcastPkts = &value
case "OutMcastPkts" :
procSnmp6 .OutMcastPkts = &value
case "InOctets" :
procSnmp6 .InOctets = &value
case "OutOctets" :
procSnmp6 .OutOctets = &value
case "InMcastOctets" :
procSnmp6 .InMcastOctets = &value
case "OutMcastOctets" :
procSnmp6 .OutMcastOctets = &value
case "InBcastOctets" :
procSnmp6 .InBcastOctets = &value
case "OutBcastOctets" :
procSnmp6 .OutBcastOctets = &value
case "InNoECTPkts" :
procSnmp6 .InNoECTPkts = &value
case "InECT1Pkts" :
procSnmp6 .InECT1Pkts = &value
case "InECT0Pkts" :
procSnmp6 .InECT0Pkts = &value
case "InCEPkts" :
procSnmp6 .InCEPkts = &value
}
case "Icmp6" :
switch key {
case "InMsgs" :
procSnmp6 .InMsgs = &value
case "InErrors" :
procSnmp6 .Icmp6 .InErrors = &value
case "OutMsgs" :
procSnmp6 .OutMsgs = &value
case "OutErrors" :
procSnmp6 .OutErrors = &value
case "InCsumErrors" :
procSnmp6 .Icmp6 .InCsumErrors = &value
case "InDestUnreachs" :
procSnmp6 .InDestUnreachs = &value
case "InPktTooBigs" :
procSnmp6 .InPktTooBigs = &value
case "InTimeExcds" :
procSnmp6 .InTimeExcds = &value
case "InParmProblems" :
procSnmp6 .InParmProblems = &value
case "InEchos" :
procSnmp6 .InEchos = &value
case "InEchoReplies" :
procSnmp6 .InEchoReplies = &value
case "InGroupMembQueries" :
procSnmp6 .InGroupMembQueries = &value
case "InGroupMembResponses" :
procSnmp6 .InGroupMembResponses = &value
case "InGroupMembReductions" :
procSnmp6 .InGroupMembReductions = &value
case "InRouterSolicits" :
procSnmp6 .InRouterSolicits = &value
case "InRouterAdvertisements" :
procSnmp6 .InRouterAdvertisements = &value
case "InNeighborSolicits" :
procSnmp6 .InNeighborSolicits = &value
case "InNeighborAdvertisements" :
procSnmp6 .InNeighborAdvertisements = &value
case "InRedirects" :
procSnmp6 .InRedirects = &value
case "InMLDv2Reports" :
procSnmp6 .InMLDv2Reports = &value
case "OutDestUnreachs" :
procSnmp6 .OutDestUnreachs = &value
case "OutPktTooBigs" :
procSnmp6 .OutPktTooBigs = &value
case "OutTimeExcds" :
procSnmp6 .OutTimeExcds = &value
case "OutParmProblems" :
procSnmp6 .OutParmProblems = &value
case "OutEchos" :
procSnmp6 .OutEchos = &value
case "OutEchoReplies" :
procSnmp6 .OutEchoReplies = &value
case "OutGroupMembQueries" :
procSnmp6 .OutGroupMembQueries = &value
case "OutGroupMembResponses" :
procSnmp6 .OutGroupMembResponses = &value
case "OutGroupMembReductions" :
procSnmp6 .OutGroupMembReductions = &value
case "OutRouterSolicits" :
procSnmp6 .OutRouterSolicits = &value
case "OutRouterAdvertisements" :
procSnmp6 .OutRouterAdvertisements = &value
case "OutNeighborSolicits" :
procSnmp6 .OutNeighborSolicits = &value
case "OutNeighborAdvertisements" :
procSnmp6 .OutNeighborAdvertisements = &value
case "OutRedirects" :
procSnmp6 .OutRedirects = &value
case "OutMLDv2Reports" :
procSnmp6 .OutMLDv2Reports = &value
case "InType1" :
procSnmp6 .InType1 = &value
case "InType134" :
procSnmp6 .InType134 = &value
case "InType135" :
procSnmp6 .InType135 = &value
case "InType136" :
procSnmp6 .InType136 = &value
case "InType143" :
procSnmp6 .InType143 = &value
case "OutType133" :
procSnmp6 .OutType133 = &value
case "OutType135" :
procSnmp6 .OutType135 = &value
case "OutType136" :
procSnmp6 .OutType136 = &value
case "OutType143" :
procSnmp6 .OutType143 = &value
}
case "Udp6" :
switch key {
case "InDatagrams" :
procSnmp6 .Udp6 .InDatagrams = &value
case "NoPorts" :
procSnmp6 .Udp6 .NoPorts = &value
case "InErrors" :
procSnmp6 .Udp6 .InErrors = &value
case "OutDatagrams" :
procSnmp6 .Udp6 .OutDatagrams = &value
case "RcvbufErrors" :
procSnmp6 .Udp6 .RcvbufErrors = &value
case "SndbufErrors" :
procSnmp6 .Udp6 .SndbufErrors = &value
case "InCsumErrors" :
procSnmp6 .Udp6 .InCsumErrors = &value
case "IgnoredMulti" :
procSnmp6 .IgnoredMulti = &value
}
case "UdpLite6" :
switch key {
case "InDatagrams" :
procSnmp6 .UdpLite6 .InDatagrams = &value
case "NoPorts" :
procSnmp6 .UdpLite6 .NoPorts = &value
case "InErrors" :
procSnmp6 .UdpLite6 .InErrors = &value
case "OutDatagrams" :
procSnmp6 .UdpLite6 .OutDatagrams = &value
case "RcvbufErrors" :
procSnmp6 .UdpLite6 .RcvbufErrors = &value
case "SndbufErrors" :
procSnmp6 .UdpLite6 .SndbufErrors = &value
case "InCsumErrors" :
procSnmp6 .UdpLite6 .InCsumErrors = &value
}
}
}
}
return procSnmp6 , scanner .Err ()
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .