MCPcopy Create free account
hub / github.com/cloudwan/gohan / startSNMPProcess

Function startSNMPProcess

server/snmp.go:29–85  ·  view source on GitHub ↗

SNMP Process Experimental

(server *Server)

Source from the content-addressed store, hash-verified

27//SNMP Process
28//Experimental
29func startSNMPProcess(server *Server) {
30 config := util.GetConfig()
31 enabled := config.GetParam("snmp", nil)
32 if enabled == nil {
33 return
34 }
35 host := config.GetString("snmp/address", "localhost:162")
36
37 path := "snmp://"
38 env, err := server.NewEnvironmentForPath("snmp", path)
39 if err != nil {
40 log.Fatal(err.Error())
41 }
42
43 addr, err := net.ResolveUDPAddr("udp", host)
44 if err != nil {
45 log.Fatal(err)
46 }
47
48 conn, err := net.ListenUDP("udp", addr)
49 if err != nil {
50 log.Fatal(err)
51 }
52
53 buf := make([]byte, 1024)
54 go func() {
55 defer l.FatalPanic(log)
56 defer conn.Close()
57 for server.running {
58 rlen, remote, err := conn.ReadFromUDP(buf)
59 if err != nil {
60 log.Error(fmt.Sprintf("[SNMP] failed read bytes %s", err))
61 return
62 }
63 decoded, err := wapsnmp.DecodeSequence(buf[:rlen])
64 if err != nil {
65 log.Error(fmt.Sprintf("[SNMP] failed decode bytes %s", err))
66 continue
67 }
68 infos := decoded[3].([]interface{})[4].([]interface{})[1:]
69 trap := map[string]string{}
70 for _, info := range infos {
71 listInfo := info.([]interface{})
72 oid := listInfo[1].(wapsnmp.Oid)
73 trap[oid.String()] = fmt.Sprintf("%v", listInfo[2])
74 }
75
76 context := map[string]interface{}{
77 "trap": trap,
78 "remote": remote,
79 }
80 if err := env.HandleEvent("notification", context); err != nil {
81 log.Warning(fmt.Sprintf("extension error: %s", err))
82 }
83 }
84 }()
85}
86

Callers 1

RunServerFunction · 0.85

Calls 9

GetParamMethod · 0.80
GetStringMethod · 0.80
NewEnvironmentForPathMethod · 0.80
FatalMethod · 0.80
ErrorMethod · 0.65
CloseMethod · 0.65
HandleEventMethod · 0.65
WarningMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected