[PATCH 9/9] SNMP-TARGET-MIB: Add SNMPv3 USM trap testcases

Bart Van Assche <[email protected]>
Newsgroups gmane.network.net-snmp.devel
Message-ID <[email protected]>
From: Anders Wallin <[email protected]>

Added 6 test case for sending traps from snmpd. The test cases includes
traps or informs, statically configured trapsess in snmpd and dynamically
configured traps using snmpset.

Signed-off-by: Anders Wallin <[email protected]>
[bvanassche: Fixed shellcheck warnings / introduced settmib() and setnmib()]
---
 testing/fulltests/default/Sv3usmtraps         | 162 ++++++++++++++++++
 .../default/T031snmpv3dynamicinform_simple    |  18 ++
 .../default/T031snmpv3dynamictrap_simple      |  18 ++
 .../fulltests/default/T031snmpv3inform_simple |  18 ++
 .../default/T031snmpv3staticinform_simple     |  18 ++
 .../default/T031snmpv3statictrap_simple       |  18 ++
 .../fulltests/default/T031snmpv3trap_simple   |  18 ++
 7 files changed, 270 insertions(+)
 create mode 100644 testing/fulltests/default/Sv3usmtraps
 create mode 100644 testing/fulltests/default/T031snmpv3dynamicinform_simple
 create mode 100644 testing/fulltests/default/T031snmpv3dynamictrap_simple
 create mode 100644 testing/fulltests/default/T031snmpv3inform_simple
 create mode 100644 testing/fulltests/default/T031snmpv3staticinform_simple
 create mode 100644 testing/fulltests/default/T031snmpv3statictrap_simple
 create mode 100644 testing/fulltests/default/T031snmpv3trap_simple

diff --git a/testing/fulltests/default/Sv3usmtraps b/testing/fulltests/default/Sv3usmtraps
new file mode 100644
index 000000000000..3f110c4acfe2
--- /dev/null
+++ b/testing/fulltests/default/Sv3usmtraps
@@ -0,0 +1,162 @@
+#!/bin/sh
+#
+# SNMPv3 dynamic trap config
+#
+# Input variables:
+#   NOTIFYTYPE     trap|inform
+#   TRAPSESS       yes|no
+#   DYNTRAP        yes|no
+#
+
+SKIPIFNOT NETSNMP_SECMOD_USM
+
+## Defaults
+[ "x$NOTIFYTYPE" = "x" ] && NOTIFYTYPE="trap"
+[ "x$TRAPSESS"   = "x" ] && TRAPSESS="yes"
+[ "x$DYNTRAP"    = "x" ] && DYNTRAP="no"
+
+case "$NOTIFYTYPE" in
+    "trap")
+        notifytype=1
+        trapsess_arg="";;
+    "inform")
+        notifytype=2
+        trapsess_arg="-Ci";;
+    *)
+        echo "Error: NOTIFYTYPE = $NOTIFYTYPE is not supported"
+        return 1;;
+esac
+
+ipv4_2_hex() {
+    # remove the ':' at the end of the first argument
+    local host=${1%:}
+    local port=$2
+
+    printf "0x"
+    for i in $(echo "$host" | tr '.' ' '); do
+	printf "%02x" "$i"
+    done
+    printf "%04x\\n" "$port"
+}
+
+ipv6_2_hex() {
+    # remove the ':' at the end of the first argument
+    local host=${1%:}
+    local port=$2
+
+    printf "0x"
+    if echo "$host" | grep -q ::; then
+	no_of_colons=$(echo "$host" | tr -d -c ':' | awk '{ print length }')
+	case $no_of_colons in
+	    7) host=$(echo "$host" | sed 's/::/:0:/') ;;
+	    6) host=$(echo "$host" | sed 's/::/:0:0:/') ;;
+	    5) host=$(echo "$host" | sed 's/::/:0:0:0:/') ;;
+	    4) host=$(echo "$host" | sed 's/::/:0:0:0:0:/') ;;
+	esac
+    fi
+    for i in $(echo "$host" | tr ':' ' '); do
+	printf "%04x" "${i:-0}"
+    done
+    printf "%04x\\n" "$port"
+}
+
+settmib() {
+    CAPTURE "snmpset -t 3 -r 0 -d $TESTAUTHARGS $SNMP_TRANSPORT_SPEC:$SNMP_TEST_DEST$SNMP_SNMPD_PORT SNMP-TARGET-MIB::$1 $2 $3"
+}
+
+setnmib() {
+    CAPTURE "snmpset -t 3 -r 0 -d $TESTAUTHARGS $SNMP_TRANSPORT_SPEC:$SNMP_TEST_DEST$SNMP_SNMPD_PORT SNMP-NOTIFICATION-MIB::$1 $2 $3"
+}
+
+dyntrap_config() {
+    if [ "$SNMP_TRANSPORT_SPEC" = "udp" ]; then
+	tdomain="SNMPv2-TM::snmpUDPDomain"
+	targetaddr=$(ipv4_2_hex "$SNMP_TEST_DEST" "$SNMP_SNMPTRAPD_PORT")
+    elif [ "$SNMP_TRANSPORT_SPEC" = "udp6" ]; then
+	tdomain="SNMPv2-SMI::mib-2.100.1.2"
+	targetaddr=$(ipv6_2_hex "$SNMP_TEST_DEST" "$SNMP_SNMPTRAPD_PORT")
+    else
+	tdomain="NA"
+	targetaddr="NA"
+    fi
+
+    obj="'dynamictrap'"
+    link=dynamictrap
+
+    settmib "snmpTargetParamsRowStatus.$obj"     = 5
+    settmib "snmpTargetParamsStorageType.$obj"   = 3 # nonVolatile
+    settmib "snmpTargetParamsMPModel.$obj"       = 3 # USM
+    settmib "snmpTargetParamsSecurityModel.$obj" = 3 # USM
+    settmib "snmpTargetParamsSecurityName.$obj"  = "$TESTAUTHUSER"
+    settmib "snmpTargetParamsSecurityLevel.$obj" = 2 # authNoPriv
+
+    # snmpNotify
+    setnmib "snmpNotifyRowStatus.$obj"   = 5
+    setnmib "snmpNotifyTag.$obj"         = "$link"
+    setnmib "snmpNotifyType.$obj"        = "$notifytype"
+    setnmib "snmpNotifyStorageType.$obj" = 3
+
+    # snmpTargetAddr
+    settmib "snmpTargetAddrRowStatus.$obj"   = 5
+    settmib "snmpTargetAddrTimeout.$obj"     = 1000
+    settmib "snmpTargetAddrRetryCount.$obj"  = 5
+    settmib "snmpTargetAddrTagList.$obj"     = "$link"
+    settmib "snmpTargetAddrParams.$obj"      = "$link"
+    settmib "snmpTargetAddrStorageType.$obj" = 3
+    settmib "snmpTargetAddrTDomain.$obj"     = "$tdomain"
+    settmib "snmpTargetAddrTAddress.$obj"    x "$targetaddr"
+
+    # enable the trap
+    settmib "snmpTargetAddrRowStatus.$obj" = 1
+    settmib "snmpTargetParamsRowStatus.$obj" = 1
+    setnmib "snmpNotifyRowStatus.$obj" = 1
+
+    if [ "$SNMP_VERBOSE" -gt 0 ]; then
+        for table in SNMP-TARGET-MIB::snmpTargetAddrTable   \
+                     SNMP-TARGET-MIB::snmpTargetParamsTable \
+                     SNMP-NOTIFICATION-MIB::snmpNotifyTable; do
+	    CAPTURE "snmpwalk -v 3 -r 2 -t 10 $TESTAUTHARGS $SNMP_TRANSPORT_SPEC:$SNMP_TEST_DEST$SNMP_SNMPD_PORT ${table}"
+        done
+    fi
+}
+
+
+## common SNMPv3 USM config
+CREATEUSERENGINEID=0x80001f88802b3d0e1111111111
+. ./Sv3usmconfigbase
+
+CONFIGTRAPD "[snmp]" persistentDir "$SNMP_TMP_PERSISTENTDIR"
+CONFIGTRAPD oldEngineID "$CREATEUSERENGINEID"
+CONFIGTRAPD "$CREATEAUTHUSER"
+CONFIGTRAPD authUser log $TESTAUTHUSER
+
+STARTTRAPD
+
+CONFIGAGENT "[snmp]" persistentdir "$SNMP_TMP_PERSISTENTDIR"
+CONFIGAGENT oldEngineID "$CREATEUSERENGINEID"
+CONFIGAGENT "$CREATEAUTHUSER"
+CONFIGAGENT rwuser "$TESTAUTHUSER" auth
+
+if [ "x$TRAPSESS" = "xyes" ]; then
+    CONFIGAGENT trapsess $trapsess_arg -e $CREATEUSERENGINEID $TESTAUTHARGS \
+		"${SNMP_TRANSPORT_SPEC}:${SNMP_TEST_DEST}${SNMP_SNMPTRAPD_PORT}"
+fi
+
+#AGENT_FLAGS="$AGENT_FLAGS -Dtrap -Dsend_notifications -DsnmpTargetAddrEntry -Dtarget_sessions -DsnmpNotifyTable_data"
+STARTAGENT
+
+[ "x$DYNTRAP" = "xyes" ] && dyntrap_config
+
+CAPTURE "snmpset -On -t 3 -r 0 -d $TESTAUTHARGS $SNMP_TRANSPORT_SPEC:$SNMP_TEST_DEST$SNMP_SNMPD_PORT .1.3.6.1.4.1.2021.254.8.0 i 1"
+
+STOPAGENT
+
+STOPTRAPD
+
+NO_OF_TRAPS=0
+[ "x$TRAPSESS" = "xyes" ] && NO_OF_TRAPS=$((NO_OF_TRAPS+1))
+[ "x$DYNTRAP"  = "xyes" ] && NO_OF_TRAPS=$((NO_OF_TRAPS+1))
+
+CHECKTRAPDCOUNT $NO_OF_TRAPS "life the universe and everything"
+
+FINISHED
diff --git a/testing/fulltests/default/T031snmpv3dynamicinform_simple b/testing/fulltests/default/T031snmpv3dynamicinform_simple
new file mode 100644
index 000000000000..dbff2e67c3fe
--- /dev/null
+++ b/testing/fulltests/default/T031snmpv3dynamicinform_simple
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+. ../support/simple_eval_tools.sh
+
+HEADER "snmpv3 dynamic informs are sent by snmpd API"
+
+SKIPIFNOT NETSNMP_SECMOD_USM
+SKIPIFNOT USING_EXAMPLES_EXAMPLE_MODULE
+
+NOTIFYTYPE=inform
+TRAPSESS=no
+DYNTRAP=yes
+
+#
+# Begin test
+#
+
+. ./Sv3usmtraps
diff --git a/testing/fulltests/default/T031snmpv3dynamictrap_simple b/testing/fulltests/default/T031snmpv3dynamictrap_simple
new file mode 100644
index 000000000000..1991e53701fa
--- /dev/null
+++ b/testing/fulltests/default/T031snmpv3dynamictrap_simple
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+. ../support/simple_eval_tools.sh
+
+HEADER "snmpv3 dynamic traps are sent by snmpd API"
+
+SKIPIFNOT NETSNMP_SECMOD_USM
+SKIPIFNOT USING_EXAMPLES_EXAMPLE_MODULE
+
+NOTIFYTYPE="trap"
+TRAPSESS="no"
+DYNTRAP="yes"
+
+#
+# Begin test
+#
+
+. ./Sv3usmtraps
diff --git a/testing/fulltests/default/T031snmpv3inform_simple b/testing/fulltests/default/T031snmpv3inform_simple
new file mode 100644
index 000000000000..4e0306372384
--- /dev/null
+++ b/testing/fulltests/default/T031snmpv3inform_simple
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+. ../support/simple_eval_tools.sh
+
+HEADER "snmpv3 dynamic and static informs are sent by snmpd API"
+
+SKIPIFNOT NETSNMP_SECMOD_USM
+SKIPIFNOT USING_EXAMPLES_EXAMPLE_MODULE
+
+NOTIFYTYPE=inform
+TRAPSESS=yes
+DYNTRAP=yes
+
+#
+# Begin test
+#
+
+. ./Sv3usmtraps
diff --git a/testing/fulltests/default/T031snmpv3staticinform_simple b/testing/fulltests/default/T031snmpv3staticinform_simple
new file mode 100644
index 000000000000..58912d12f26f
--- /dev/null
+++ b/testing/fulltests/default/T031snmpv3staticinform_simple
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+. ../support/simple_eval_tools.sh
+
+HEADER "snmpv3 static informs are sent by snmpd API"
+
+SKIPIFNOT NETSNMP_SECMOD_USM
+SKIPIFNOT USING_EXAMPLES_EXAMPLE_MODULE
+
+NOTIFYTYPE=inform
+TRAPSESS=yes
+DYNTRAP=no
+
+#
+# Begin test
+#
+
+. ./Sv3usmtraps
diff --git a/testing/fulltests/default/T031snmpv3statictrap_simple b/testing/fulltests/default/T031snmpv3statictrap_simple
new file mode 100644
index 000000000000..e8dcb7bdd9f6
--- /dev/null
+++ b/testing/fulltests/default/T031snmpv3statictrap_simple
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+. ../support/simple_eval_tools.sh
+
+HEADER "snmpv3 static traps are sent by snmpd API"
+
+SKIPIFNOT NETSNMP_SECMOD_USM
+SKIPIFNOT USING_EXAMPLES_EXAMPLE_MODULE
+
+NOTIFYTYPE="trap"
+TRAPSESS="yes"
+DYNTRAP="no"
+
+#
+# Begin test
+#
+
+. ./Sv3usmtraps
diff --git a/testing/fulltests/default/T031snmpv3trap_simple b/testing/fulltests/default/T031snmpv3trap_simple
new file mode 100644
index 000000000000..c1bfd718f0e5
--- /dev/null
+++ b/testing/fulltests/default/T031snmpv3trap_simple
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+. ../support/simple_eval_tools.sh
+
+HEADER "snmpv3 dynamic and static traps are sent by snmpd API"
+
+SKIPIFNOT NETSNMP_SECMOD_USM
+SKIPIFNOT USING_EXAMPLES_EXAMPLE_MODULE
+
+NOTIFYTYPE="trap"
+TRAPSESS="yes"
+DYNTRAP="yes"
+
+#
+# Begin test
+#
+
+. ./Sv3usmtraps
-- 
2.17.1


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.