000a992d48f5263097a2c3777d512bf028e0b49f
[feed/packages.git] / net / net-snmp / files / snmpd.init
1 #!/bin/sh /etc/rc.common
2 # Copyright (C) 2008 OpenWrt.org
3 START=50
4
5 USE_PROCD=1
6 PROG="/usr/sbin/snmpd"
7
8 CONFIGFILE="/var/run/snmpd.conf"
9
10 snmpd_agent_add() {
11 local cfg="$1"
12
13 config_get agentaddress "$cfg" agentaddress
14 [ -n "$agentaddress" ] || return 0
15 echo "agentaddress $agentaddress" >> $CONFIGFILE
16 }
17
18 snmpd_system_add() {
19 local cfg="$1"
20 config_get syslocation "$cfg" sysLocation
21 [ -n "$syslocation" ] && echo "sysLocation $syslocation" >> $CONFIGFILE
22 config_get syscontact "$cfg" sysContact
23 [ -n "$syscontact" ] && echo "sysContact $syscontact" >> $CONFIGFILE
24 config_get sysname "$cfg" sysName
25 [ -n "$sysname" ] && echo "sysName $sysname" >> $CONFIGFILE
26 config_get sysservice "$cfg" sysService
27 [ -n "$sysservice" ] && echo "sysService $sysservice" >> $CONFIGFILE
28 config_get sysdescr "$cfg" sysDescr
29 [ -n "$sysdescr" ] && echo "sysDescr $sysdescr" >> $CONFIGFILE
30 config_get sysobjectid "$cfg" sysObjectID
31 [ -n "$sysobjectid" ] && echo "sysObjectID $sysobjectid" >> $CONFIGFILE
32 }
33
34 snmpd_com2sec_add() {
35 local cfg="$1"
36 config_get secname "$cfg" secname
37 [ -n "$secname" ] || return 0
38 config_get source "$cfg" source
39 [ -n "$source" ] || return 0
40 config_get community "$cfg" community
41 [ -n "$community" ] || return 0
42 echo "com2sec $secname $source $community" >> $CONFIGFILE
43 }
44
45 snmpd_com2sec6_add() {
46 local cfg="$1"
47 config_get secname "$cfg" secname
48 [ -n "$secname" ] || return 0
49 config_get source "$cfg" source
50 [ -n "$source" ] || return 0
51 config_get community "$cfg" community
52 [ -n "$community" ] || return 0
53 echo "com2sec6 $secname $source $community" >> $CONFIGFILE
54 }
55
56 snmpd_group_add() {
57 local cfg="$1"
58 config_get group "$cfg" group
59 [ -n "$group" ] || return 0
60 config_get version "$cfg" version
61 [ -n "$version" ] || return 0
62 config_get secname "$cfg" secname
63 [ -n "$secname" ] || return 0
64 echo "group $group $version $secname" >> $CONFIGFILE
65 }
66
67 snmpd_view_add() {
68 local cfg="$1"
69 config_get viewname "$cfg" viewname
70 [ -n "$viewname" ] || return 0
71 config_get type "$cfg" type
72 [ -n "$type" ] || return 0
73 config_get oid "$cfg" oid
74 [ -n "$oid" ] || return 0
75 # optional mask
76 config_get mask "$cfg" mask
77 echo "view $viewname $type $oid $mask" >> $CONFIGFILE
78 }
79
80 snmpd_access_add() {
81 local cfg="$1"
82 config_get group "$cfg" group
83 [ -n "$group" ] || return 0
84 config_get context "$cfg" context
85 [ -n $context ] || return 0
86 [ "$context" == "none" ] && context='""'
87 config_get version "$cfg" version
88 [ -n "$version" ] || return 0
89 config_get level "$cfg" level
90 [ -n "$level" ] || return 0
91 config_get prefix "$cfg" prefix
92 [ -n "$prefix" ] || return 0
93 config_get read "$cfg" read
94 [ -n "$read" ] || return 0
95 config_get write "$cfg" write
96 [ -n "$write" ] || return 0
97 config_get notify "$cfg" notify
98 [ -n "$notify" ] || return 0
99 echo "access $group $context $version $level $prefix $read $write $notify" >> $CONFIGFILE
100 }
101
102 snmpd_trap_hostname_add() {
103 local cfg="$1"
104 config_get hostname "$cfg" HostName
105 config_get port "$cfg" Port
106 config_get community "$cfg" Community
107 config_get type "$cfg" Type
108 echo "$type $hostname $community $port" >> $CONFIGFILE
109 }
110
111 snmpd_trap_ip_add() {
112 local cfg="$1"
113 config_get host_ip "$cfg" HostIP
114 config_get port "$cfg" Port
115 config_get community "$cfg" Community
116 config_get type "$cfg" Type
117 echo "$type $host_ip $community $port" >> $CONFIGFILE
118 }
119
120 snmpd_access_default_add() {
121 local cfg="$1"
122 config_get mode "$cfg" Mode
123 config_get community "$cfg" CommunityName
124 config_get oidrestrict "$cfg" RestrictOID
125 config_get oid "$cfg" RestrictedOID
126 echo -n "$mode $community default" >> $CONFIGFILE
127 [ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE
128 [ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE
129 }
130
131 snmpd_access_HostName_add() {
132 local cfg="$1"
133 config_get hostname "$cfg" HostName
134 config_get mode "$cfg" Mode
135 config_get community "$cfg" CommunityName
136 config_get oidrestrict "$cfg" RestrictOID
137 config_get oid "$cfg" RestrictedOID
138 echo -n "$mode $community $hostname" >> $CONFIGFILE
139 [ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE
140 [ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE
141 }
142
143 snmpd_access_HostIP_add() {
144 local cfg="$1"
145 config_get host_ip "$cfg" HostIP
146 config_get ip_mask "$cfg" IPMask
147 config_get mode "$cfg" Mode
148 config_get community "$cfg" CommunityName
149 config_get oidrestrict "$cfg" RestrictOID
150 config_get oid "$cfg" RestrictedOID
151 echo -n "$mode $community $host_ip/$ip_mask" >> $CONFIGFILE
152 [ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE
153 [ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE
154 }
155
156 snmpd_pass_add() {
157 local cfg="$1"
158 local pass='pass'
159
160 config_get miboid "$cfg" miboid
161 [ -n "$miboid" ] || return 0
162 config_get prog "$cfg" prog
163 [ -n "$prog" ] || return 0
164 config_get_bool persist "$cfg" persist 0
165 [ $persist -ne 0 ] && pass='pass_persist'
166 config_get priority "$cfg" priority
167 priority=${priority:+-p $priority}
168 echo "$pass $priority $miboid $prog" >> $CONFIGFILE
169 }
170
171 snmpd_exec_add() {
172 local cfg="$1"
173
174 config_get name "$cfg" name
175 [ -n "$name" ] || return 0
176 config_get prog "$cfg" prog
177 [ -n "$prog" ] || return 0
178 config_get args "$cfg" args
179 config_get miboid "$cfg" miboid
180 echo "exec $miboid $name $prog $args" >> $CONFIGFILE
181 }
182
183 snmpd_disk_add() {
184 local cfg="$1"
185 local disk='disk'
186
187 config_get partition "$cfg" partition
188 [ -n "$partition" ] || return 0
189 config_get size "$cfg" size
190 [ -n "$size" ] || return 0
191 echo "$disk $partition $size" >> $CONFIGFILE
192 }
193
194 start_service() {
195 [ -f "$CONFIGFILE" ] && rm -f "$CONFIGFILE"
196
197 procd_open_instance
198
199 config_load snmpd
200
201 config_foreach snmpd_agent_add agent
202 config_foreach snmpd_system_add system
203 config_foreach snmpd_com2sec_add com2sec
204 config_foreach snmpd_com2sec6_add com2sec6
205 config_foreach snmpd_group_add group
206 config_foreach snmpd_view_add view
207 config_foreach snmpd_access_add access
208 config_foreach snmpd_trap_hostname_add trap_HostName
209 config_foreach snmpd_trap_ip_add trap_HostIP
210 config_foreach snmpd_access_default_add access_default
211 config_foreach snmpd_access_HostName_add access_HostName
212 config_foreach snmpd_access_HostIP_add access_HostIP
213 config_foreach snmpd_pass_add pass
214 config_foreach snmpd_exec_add exec
215 config_foreach snmpd_disk_add disk
216
217 procd_set_param command $PROG -Lf /dev/null -f
218 procd_set_param file $CONFIGFILE
219 procd_set_param respawn
220
221 for iface in $(ls /sys/class/net 2>/dev/null); do
222 procd_append_param netdev "$iface"
223 done
224
225 procd_close_instance
226 }
227
228 stop_service() {
229 [ -f "$CONFIGFILE" ] && rm -f "$CONFIGFILE"
230 }
231
232 service_triggers(){
233 procd_add_reload_trigger 'snmpd'
234 }