snmpd.init (7493B)
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_agentx_add() { 19 local cfg="$1" 20 echo "master agentx" >> $CONFIGFILE 21 config_get agentxsocket "$cfg" agentxsocket 22 [ -n "$agentxsocket" ] && echo "agentXSocket $agentxsocket" >> $CONFIGFILE 23 } 24 25 snmpd_system_add() { 26 local cfg="$1" 27 config_get syslocation "$cfg" sysLocation 28 [ -n "$syslocation" ] && echo "sysLocation $syslocation" >> $CONFIGFILE 29 config_get syscontact "$cfg" sysContact 30 [ -n "$syscontact" ] && echo "sysContact $syscontact" >> $CONFIGFILE 31 config_get sysname "$cfg" sysName 32 [ -n "$sysname" ] && echo "sysName $sysname" >> $CONFIGFILE 33 config_get sysservice "$cfg" sysService 34 [ -n "$sysservice" ] && echo "sysService $sysservice" >> $CONFIGFILE 35 config_get sysdescr "$cfg" sysDescr 36 [ -n "$sysdescr" ] && echo "sysDescr $sysdescr" >> $CONFIGFILE 37 config_get sysobjectid "$cfg" sysObjectID 38 [ -n "$sysobjectid" ] && echo "sysObjectID $sysobjectid" >> $CONFIGFILE 39 } 40 41 snmpd_com2sec_add() { 42 local cfg="$1" 43 config_get secname "$cfg" secname 44 [ -n "$secname" ] || return 0 45 config_get source "$cfg" source 46 [ -n "$source" ] || return 0 47 config_get community "$cfg" community 48 [ -n "$community" ] || return 0 49 echo "com2sec $secname $source $community" >> $CONFIGFILE 50 } 51 52 snmpd_com2sec6_add() { 53 local cfg="$1" 54 config_get secname "$cfg" secname 55 [ -n "$secname" ] || return 0 56 config_get source "$cfg" source 57 [ -n "$source" ] || return 0 58 config_get community "$cfg" community 59 [ -n "$community" ] || return 0 60 echo "com2sec6 $secname $source $community" >> $CONFIGFILE 61 } 62 63 snmpd_group_add() { 64 local cfg="$1" 65 config_get group "$cfg" group 66 [ -n "$group" ] || return 0 67 config_get version "$cfg" version 68 [ -n "$version" ] || return 0 69 config_get secname "$cfg" secname 70 [ -n "$secname" ] || return 0 71 echo "group $group $version $secname" >> $CONFIGFILE 72 } 73 74 snmpd_view_add() { 75 local cfg="$1" 76 config_get viewname "$cfg" viewname 77 [ -n "$viewname" ] || return 0 78 config_get type "$cfg" type 79 [ -n "$type" ] || return 0 80 config_get oid "$cfg" oid 81 [ -n "$oid" ] || return 0 82 # optional mask 83 config_get mask "$cfg" mask 84 echo "view $viewname $type $oid $mask" >> $CONFIGFILE 85 } 86 87 snmpd_access_add() { 88 local cfg="$1" 89 config_get group "$cfg" group 90 [ -n "$group" ] || return 0 91 config_get context "$cfg" context 92 [ -n $context ] || return 0 93 [ "$context" == "none" ] && context='""' 94 config_get version "$cfg" version 95 [ -n "$version" ] || return 0 96 config_get level "$cfg" level 97 [ -n "$level" ] || return 0 98 config_get prefix "$cfg" prefix 99 [ -n "$prefix" ] || return 0 100 config_get read "$cfg" read 101 [ -n "$read" ] || return 0 102 config_get write "$cfg" write 103 [ -n "$write" ] || return 0 104 config_get notify "$cfg" notify 105 [ -n "$notify" ] || return 0 106 echo "access $group $context $version $level $prefix $read $write $notify" >> $CONFIGFILE 107 } 108 109 snmpd_trap_hostname_add() { 110 local cfg="$1" 111 config_get hostname "$cfg" HostName 112 config_get port "$cfg" Port 113 config_get community "$cfg" Community 114 config_get type "$cfg" Type 115 echo "$type $hostname $community $port" >> $CONFIGFILE 116 } 117 118 snmpd_trap_ip_add() { 119 local cfg="$1" 120 config_get host_ip "$cfg" HostIP 121 config_get port "$cfg" Port 122 config_get community "$cfg" Community 123 config_get type "$cfg" Type 124 echo "$type $host_ip $community $port" >> $CONFIGFILE 125 } 126 127 snmpd_access_default_add() { 128 local cfg="$1" 129 config_get mode "$cfg" Mode 130 config_get community "$cfg" CommunityName 131 config_get oidrestrict "$cfg" RestrictOID 132 config_get oid "$cfg" RestrictedOID 133 echo -n "$mode $community default" >> $CONFIGFILE 134 [ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE 135 [ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE 136 } 137 138 snmpd_access_HostName_add() { 139 local cfg="$1" 140 config_get hostname "$cfg" HostName 141 config_get mode "$cfg" Mode 142 config_get community "$cfg" CommunityName 143 config_get oidrestrict "$cfg" RestrictOID 144 config_get oid "$cfg" RestrictedOID 145 echo -n "$mode $community $hostname" >> $CONFIGFILE 146 [ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE 147 [ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE 148 } 149 150 snmpd_access_HostIP_add() { 151 local cfg="$1" 152 config_get host_ip "$cfg" HostIP 153 config_get ip_mask "$cfg" IPMask 154 config_get mode "$cfg" Mode 155 config_get community "$cfg" CommunityName 156 config_get oidrestrict "$cfg" RestrictOID 157 config_get oid "$cfg" RestrictedOID 158 echo -n "$mode $community $host_ip/$ip_mask" >> $CONFIGFILE 159 [ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE 160 [ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE 161 } 162 163 snmpd_pass_add() { 164 local cfg="$1" 165 local pass='pass' 166 167 config_get miboid "$cfg" miboid 168 [ -n "$miboid" ] || return 0 169 config_get prog "$cfg" prog 170 [ -n "$prog" ] || return 0 171 config_get_bool persist "$cfg" persist 0 172 [ $persist -ne 0 ] && pass='pass_persist' 173 config_get priority "$cfg" priority 174 priority=${priority:+-p $priority} 175 echo "$pass $priority $miboid $prog" >> $CONFIGFILE 176 } 177 178 snmpd_exec_add() { 179 local cfg="$1" 180 181 config_get name "$cfg" name 182 [ -n "$name" ] || return 0 183 config_get prog "$cfg" prog 184 [ -n "$prog" ] || return 0 185 config_get args "$cfg" args 186 config_get miboid "$cfg" miboid 187 echo "exec $miboid $name $prog $args" >> $CONFIGFILE 188 } 189 190 snmpd_disk_add() { 191 local cfg="$1" 192 local disk='disk' 193 194 config_get partition "$cfg" partition 195 [ -n "$partition" ] || return 0 196 config_get size "$cfg" size 197 [ -n "$size" ] || return 0 198 echo "$disk $partition $size" >> $CONFIGFILE 199 } 200 201 snmpd_engineid_add() { 202 local cfg="$1" 203 204 config_get engineid "$cfg" engineid 205 [ -n "$engineid" ] && echo "engineID $engineid" >> $CONFIGFILE 206 config_get engineidtype "$cfg" engineidtype 207 [ "$engineidtype" -ge 1 -a "$engineidtype" -le 3 ] && \ 208 echo "engineIDType $engineidtype" >> $CONFIGFILE 209 config_get engineidnic "$cfg" engineidnic 210 [ -n "$engineidnic" ] && echo "engineIDNic $engineidnic" >> $CONFIGFILE 211 } 212 213 start_service() { 214 [ -f "$CONFIGFILE" ] && rm -f "$CONFIGFILE" 215 216 procd_open_instance 217 218 config_load snmpd 219 220 config_foreach snmpd_agent_add agent 221 config_foreach snmpd_agentx_add agentx 222 config_foreach snmpd_system_add system 223 config_foreach snmpd_com2sec_add com2sec 224 config_foreach snmpd_com2sec6_add com2sec6 225 config_foreach snmpd_group_add group 226 config_foreach snmpd_view_add view 227 config_foreach snmpd_access_add access 228 config_foreach snmpd_trap_hostname_add trap_HostName 229 config_foreach snmpd_trap_ip_add trap_HostIP 230 config_foreach snmpd_access_default_add access_default 231 config_foreach snmpd_access_HostName_add access_HostName 232 config_foreach snmpd_access_HostIP_add access_HostIP 233 config_foreach snmpd_pass_add pass 234 config_foreach snmpd_exec_add exec 235 config_foreach snmpd_disk_add disk 236 config_foreach snmpd_engineid_add engineid 237 238 procd_set_param command $PROG -Lf /dev/null -f 239 procd_set_param file $CONFIGFILE 240 procd_set_param respawn 241 242 for iface in $(ls /sys/class/net 2>/dev/null); do 243 procd_append_param netdev "$iface" 244 done 245 246 procd_close_instance 247 } 248 249 stop_service() { 250 [ -f "$CONFIGFILE" ] && rm -f "$CONFIGFILE" 251 } 252 253 service_triggers(){ 254 local script=$(readlink "$initscript") 255 local name=$(basename ${script:-$initscript}) 256 257 procd_open_trigger 258 procd_add_raw_trigger "interface.*" 2000 /etc/init.d/$name reload 259 procd_close_trigger 260 261 procd_add_reload_trigger 'snmpd' 262 }