ASR_BASE
Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/package/network/utils/net-snmp/files/snmpd.conf b/package/network/utils/net-snmp/files/snmpd.conf
new file mode 100644
index 0000000..e18864d
--- /dev/null
+++ b/package/network/utils/net-snmp/files/snmpd.conf
@@ -0,0 +1,130 @@
+config agent
+ option agentaddress UDP:161,UDP6:161
+
+config agentx
+ option agentxsocket /var/run/agentx.sock
+
+config com2sec public
+ option secname ro
+ option source default
+ option community public
+
+config com2sec private
+ option secname rw
+ option source localhost
+ option community private
+
+config com2sec6 public6
+ option secname ro
+ option source default
+ option community public
+
+config com2sec6 private6
+ option secname rw
+ option source localhost
+ option community private
+
+config group public_v1
+ option group public
+ option version v1
+ option secname ro
+
+config group public_v2c
+ option group public
+ option version v2c
+ option secname ro
+
+config group public_usm
+ option group public
+ option version usm
+ option secname ro
+
+config group private_v1
+ option group private
+ option version v1
+ option secname rw
+
+config group private_v2c
+ option group private
+ option version v2c
+ option secname rw
+
+config group private_usm
+ option group private
+ option version usm
+ option secname rw
+
+config view all
+ option viewname all
+ option type included
+ option oid .1
+
+config access public_access
+ option group public
+ option context none
+ option version any
+ option level noauth
+ option prefix exact
+ option read all
+ option write none
+ option notify none
+
+config access private_access
+ option group private
+ option context none
+ option version any
+ option level noauth
+ option prefix exact
+ option read all
+ option write all
+ option notify all
+
+config system
+ option sysLocation 'office'
+ option sysContact 'bofh@example.com'
+ option sysName 'HeartOfGold'
+# option sysServices 72
+# option sysDescr 'adult playground'
+# option sysObjectID '1.2.3.4'
+
+config exec
+ option name filedescriptors
+ option prog /bin/cat
+ option args /proc/sys/fs/file-nr
+# option miboid 1.2.3.4
+
+config engineid
+# option engineid 'LEDE'
+ option engineidtype '3'
+ option engineidnic 'eth0'
+
+#config trapcommunity 'trapcommunity'
+# option community 'public'
+
+#config trapsink
+# option host 'nms.system.com'
+# option community 'public'
+# option port '162'
+
+#config trap2sink
+# option host 'nms.system.com'
+# option community 'secret'
+# option port '162'
+
+#config informsink
+# option host 'nms.sytem.com'
+# option community 'public'
+# option port '162'
+
+#config authtrapenable 'authtrapenable'
+# option enable '1'
+
+#config v1trapaddress 'v1trapaddress'
+# option host '1.2.3.4'
+
+#config trapsess 'trapsess'
+# option trapsess '-v 3 -e 0x80001f88808c18d3f7b0000 -u trapuser -a MD5 -A administrator -l authPriv -x DES -X rootpasswd udp:127.0.0.1:162'
+
+config snmpd general
+ option enabled '1'
+# list network 'wan'
diff --git a/package/network/utils/net-snmp/files/snmpd.init b/package/network/utils/net-snmp/files/snmpd.init
new file mode 100644
index 0000000..fbae9c2
--- /dev/null
+++ b/package/network/utils/net-snmp/files/snmpd.init
@@ -0,0 +1,359 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2008 OpenWrt.org
+START=50
+
+USE_PROCD=1
+PROG="/usr/sbin/snmpd"
+
+CONFIGFILE="/var/run/snmpd.conf"
+
+snmpd_agent_add() {
+ local cfg="$1"
+
+ config_get agentaddress "$cfg" agentaddress
+ [ -n "$agentaddress" ] || return 0
+ echo "agentaddress $agentaddress" >> $CONFIGFILE
+}
+
+snmpd_agentx_add() {
+ local cfg="$1"
+ echo "master agentx" >> $CONFIGFILE
+ config_get agentxsocket "$cfg" agentxsocket
+ [ -n "$agentxsocket" ] && echo "agentXSocket $agentxsocket" >> $CONFIGFILE
+}
+
+snmpd_system_add() {
+ local cfg="$1"
+ config_get syslocation "$cfg" sysLocation
+ [ -n "$syslocation" ] && echo "sysLocation $syslocation" >> $CONFIGFILE
+ config_get syscontact "$cfg" sysContact
+ [ -n "$syscontact" ] && echo "sysContact $syscontact" >> $CONFIGFILE
+ config_get sysname "$cfg" sysName
+ [ -n "$sysname" ] && echo "sysName $sysname" >> $CONFIGFILE
+ config_get sysservice "$cfg" sysService
+ [ -n "$sysservice" ] && echo "sysService $sysservice" >> $CONFIGFILE
+ config_get sysdescr "$cfg" sysDescr
+ [ -n "$sysdescr" ] && echo "sysDescr $sysdescr" >> $CONFIGFILE
+ config_get sysobjectid "$cfg" sysObjectID
+ [ -n "$sysobjectid" ] && echo "sysObjectID $sysobjectid" >> $CONFIGFILE
+}
+
+snmpd_com2sec_add() {
+ local cfg="$1"
+ config_get secname "$cfg" secname
+ [ -n "$secname" ] || return 0
+ config_get source "$cfg" source
+ [ -n "$source" ] || return 0
+ config_get community "$cfg" community
+ [ -n "$community" ] || return 0
+ echo "com2sec $secname $source $community" >> $CONFIGFILE
+}
+
+snmpd_com2sec6_add() {
+ local cfg="$1"
+ config_get secname "$cfg" secname
+ [ -n "$secname" ] || return 0
+ config_get source "$cfg" source
+ [ -n "$source" ] || return 0
+ config_get community "$cfg" community
+ [ -n "$community" ] || return 0
+ echo "com2sec6 $secname $source $community" >> $CONFIGFILE
+}
+
+snmpd_group_add() {
+ local cfg="$1"
+ config_get group "$cfg" group
+ [ -n "$group" ] || return 0
+ config_get version "$cfg" version
+ [ -n "$version" ] || return 0
+ config_get secname "$cfg" secname
+ [ -n "$secname" ] || return 0
+ echo "group $group $version $secname" >> $CONFIGFILE
+}
+
+snmpd_view_add() {
+ local cfg="$1"
+ config_get viewname "$cfg" viewname
+ [ -n "$viewname" ] || return 0
+ config_get type "$cfg" type
+ [ -n "$type" ] || return 0
+ config_get oid "$cfg" oid
+ [ -n "$oid" ] || return 0
+ # optional mask
+ config_get mask "$cfg" mask
+ echo "view $viewname $type $oid $mask" >> $CONFIGFILE
+}
+
+snmpd_access_add() {
+ local cfg="$1"
+ config_get group "$cfg" group
+ [ -n "$group" ] || return 0
+ config_get context "$cfg" context
+ [ -n $context ] || return 0
+ [ "$context" == "none" ] && context='""'
+ config_get version "$cfg" version
+ [ -n "$version" ] || return 0
+ config_get level "$cfg" level
+ [ -n "$level" ] || return 0
+ config_get prefix "$cfg" prefix
+ [ -n "$prefix" ] || return 0
+ config_get read "$cfg" read
+ [ -n "$read" ] || return 0
+ config_get write "$cfg" write
+ [ -n "$write" ] || return 0
+ config_get notify "$cfg" notify
+ [ -n "$notify" ] || return 0
+ echo "access $group $context $version $level $prefix $read $write $notify" >> $CONFIGFILE
+}
+
+snmpd_trap_hostname_add() {
+ local cfg="$1"
+ config_get hostname "$cfg" HostName
+ config_get port "$cfg" Port
+ config_get community "$cfg" Community
+ config_get type "$cfg" Type
+ echo "$type $hostname $community $port" >> $CONFIGFILE
+}
+
+snmpd_trap_ip_add() {
+ local cfg="$1"
+ config_get host_ip "$cfg" HostIP
+ config_get port "$cfg" Port
+ config_get community "$cfg" Community
+ config_get type "$cfg" Type
+ echo "$type $host_ip $community $port" >> $CONFIGFILE
+}
+
+snmpd_access_default_add() {
+ local cfg="$1"
+ config_get mode "$cfg" Mode
+ config_get community "$cfg" CommunityName
+ config_get oidrestrict "$cfg" RestrictOID
+ config_get oid "$cfg" RestrictedOID
+ echo -n "$mode $community default" >> $CONFIGFILE
+ [ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE
+ [ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE
+}
+
+snmpd_access_HostName_add() {
+ local cfg="$1"
+ config_get hostname "$cfg" HostName
+ config_get mode "$cfg" Mode
+ config_get community "$cfg" CommunityName
+ config_get oidrestrict "$cfg" RestrictOID
+ config_get oid "$cfg" RestrictedOID
+ echo -n "$mode $community $hostname" >> $CONFIGFILE
+ [ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE
+ [ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE
+}
+
+snmpd_access_HostIP_add() {
+ local cfg="$1"
+ config_get host_ip "$cfg" HostIP
+ config_get ip_mask "$cfg" IPMask
+ config_get mode "$cfg" Mode
+ config_get community "$cfg" CommunityName
+ config_get oidrestrict "$cfg" RestrictOID
+ config_get oid "$cfg" RestrictedOID
+ echo -n "$mode $community $host_ip/$ip_mask" >> $CONFIGFILE
+ [ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE
+ [ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE
+}
+
+snmpd_pass_add() {
+ local cfg="$1"
+ local pass='pass'
+
+ config_get miboid "$cfg" miboid
+ [ -n "$miboid" ] || return 0
+ config_get prog "$cfg" prog
+ [ -n "$prog" ] || return 0
+ config_get_bool persist "$cfg" persist 0
+ [ $persist -ne 0 ] && pass='pass_persist'
+ config_get priority "$cfg" priority
+ priority=${priority:+-p $priority}
+ echo "$pass $priority $miboid $prog" >> $CONFIGFILE
+}
+
+snmpd_exec_add() {
+ local cfg="$1"
+
+ config_get name "$cfg" name
+ [ -n "$name" ] || return 0
+ config_get prog "$cfg" prog
+ [ -n "$prog" ] || return 0
+ config_get args "$cfg" args
+ config_get miboid "$cfg" miboid
+ echo "exec $miboid $name $prog $args" >> $CONFIGFILE
+}
+
+snmpd_extend_add() {
+ local cfg="$1"
+
+ config_get name "$cfg" name
+ [ -n "$name" ] || return 0
+ config_get prog "$cfg" prog
+ [ -n "$prog" ] || return 0
+ config_get args "$cfg" args
+ config_get miboid "$cfg" miboid
+ echo "extend $miboid $name $prog $args" >> $CONFIGFILE
+}
+
+snmpd_disk_add() {
+ local cfg="$1"
+ local disk='disk'
+
+ config_get partition "$cfg" partition
+ [ -n "$partition" ] || return 0
+ config_get size "$cfg" size
+ [ -n "$size" ] || return 0
+ echo "$disk $partition $size" >> $CONFIGFILE
+}
+
+snmpd_engineid_add() {
+ local cfg="$1"
+
+ config_get engineid "$cfg" engineid
+ [ -n "$engineid" ] && echo "engineID $engineid" >> $CONFIGFILE
+ config_get engineidtype "$cfg" engineidtype
+ [ "$engineidtype" -ge 1 -a "$engineidtype" -le 3 ] && \
+ echo "engineIDType $engineidtype" >> $CONFIGFILE
+ config_get engineidnic "$cfg" engineidnic
+ [ -n "$engineidnic" ] && echo "engineIDNic $engineidnic" >> $CONFIGFILE
+}
+
+snmpd_sink_add() {
+ local cfg="$1"
+ local section="$2"
+ local community
+ local port
+ local host
+
+ config_get host "$cfg" host
+ [ -n "section" -a -n "$host" ] || return 0
+ # optional community
+ config_get community "$cfg" community
+ # optional port
+ config_get port "$cfg" port
+ port=${port:+:$port}
+ echo "$section $host$port $community" >> $CONFIGFILE
+}
+
+append_parm() {
+ local section="$1"
+ local option="$2"
+ local switch="$3"
+ local _loctmp
+ config_get _loctmp "$section" "$option"
+ [ -z "$_loctmp" ] && return 0
+ echo "$switch $_loctmp" >> $CONFIGFILE
+}
+
+append_authtrapenable() {
+ local section="$1"
+ local option="$2"
+ local switch="$3"
+ local _loctmp
+ config_get_bool _loctmp "$section" "$option"
+ [ -z "$_loctmp" ] && return 0
+ [ "$_loctmp" -gt 0 ] && echo "$switch $_loctmp" >> $CONFIGFILE
+}
+
+snmpd_setup_fw_rules() {
+ local net="$1"
+ local zone
+
+ zone=$(fw3 -q network "$net" 2>/dev/null)
+
+ local handled_zone
+ for handled_zone in $HANDLED_SNMP_ZONES; do
+ [ "$handled_zone" = "$zone" ] && return
+ done
+
+ json_add_object ""
+ json_add_string type rule
+ json_add_string src "$zone"
+ json_add_string proto udp
+ json_add_string dest_port 161
+ json_add_string target ACCEPT
+ json_close_object
+
+ HANDLED_SNMP_ZONES="$HANDLED_SNMP_ZONES $zone"
+}
+
+start_service() {
+ [ -f "$CONFIGFILE" ] && rm -f "$CONFIGFILE"
+
+ config_load snmpd
+
+ config_get_bool snmp_enabled general enabled 1
+ [ "$snmp_enabled" -eq 0 ] && return
+
+ procd_open_instance
+
+ config_foreach snmpd_agent_add agent
+ config_foreach snmpd_agentx_add agentx
+ config_foreach snmpd_system_add system
+ config_foreach snmpd_com2sec_add com2sec
+ config_foreach snmpd_com2sec6_add com2sec6
+ config_foreach snmpd_group_add group
+ config_foreach snmpd_view_add view
+ config_foreach snmpd_access_add access
+ config_foreach snmpd_trap_hostname_add trap_HostName
+ config_foreach snmpd_trap_ip_add trap_HostIP
+ config_foreach snmpd_access_default_add access_default
+ config_foreach snmpd_access_HostName_add access_HostName
+ config_foreach snmpd_access_HostIP_add access_HostIP
+ config_foreach snmpd_pass_add pass
+ config_foreach snmpd_exec_add exec
+ config_foreach snmpd_extend_add extend
+ config_foreach snmpd_disk_add disk
+ config_foreach snmpd_engineid_add engineid
+ append_parm trapcommunity community trapcommunity
+ config_foreach snmpd_sink_add trapsink trapsink
+ config_foreach snmpd_sink_add trap2sink trap2sink
+ config_foreach snmpd_sink_add informsink informsink
+ append_authtrapenable authtrapenable enable authtrapenable
+ append_parm v1trapaddress host v1trapaddress
+ append_parm trapsess trapsess trapsess
+
+ procd_set_param command $PROG -Lf /dev/null -f -r
+ procd_set_param file $CONFIGFILE
+ procd_set_param respawn
+
+ for iface in $(ls /sys/class/net 2>/dev/null); do
+ procd_append_param netdev "$iface"
+ done
+
+ procd_open_data
+
+ json_add_array firewall
+ config_list_foreach general network snmpd_setup_fw_rules
+ json_close_array
+
+ procd_close_data
+
+ procd_close_instance
+}
+
+stop_service() {
+ [ -f "$CONFIGFILE" ] || return
+ rm -f "$CONFIGFILE"
+ procd_set_config_changed firewall
+}
+
+service_triggers(){
+ local script=$(readlink "$initscript")
+ local name=$(basename ${script:-$initscript})
+
+ procd_open_trigger
+ procd_add_raw_trigger "interface.*" 2000 /etc/init.d/$name reload
+ procd_close_trigger
+
+ procd_add_reload_trigger 'snmpd'
+}
+
+service_started() {
+ [ "$snmp_enabled" -eq 0 ] && return
+ procd_set_config_changed firewall
+}
diff --git a/package/network/utils/net-snmp/files/snmptrapd.init b/package/network/utils/net-snmp/files/snmptrapd.init
new file mode 100644
index 0000000..43278a2
--- /dev/null
+++ b/package/network/utils/net-snmp/files/snmptrapd.init
@@ -0,0 +1,15 @@
+#!/bin/sh /etc/rc.common
+
+START=50
+
+USE_PROCD=1
+PROG="/usr/sbin/snmptrapd"
+
+start_service() {
+ procd_open_instance
+
+ procd_set_param command $PROG -Lf /dev/null -f
+ procd_set_param respawn
+
+ procd_close_instance
+}