diff --git a/test/README.md b/test/README.md
index 51729bf4..cec07035 100644
--- a/test/README.md
+++ b/test/README.md
@@ -150,6 +150,15 @@ If you do not have them, generate self-signed certs, eg as follows:
There are also client-cert tests, eg `test_ssl_certs.sh`
+## SNMP
+
+Clixon snmp frontend tests require a running netsnmpd and converted YANG files from MIB.
+
+Netsnmpd is 5.9 or later and can be started via systemd. For the tests
+to run, the systems IFMIB should be disabled: `-I -ifTable,ifNumber,ifXTable`
+
+Converted YANG files are available at `https://github.com/clicon/mib-yangs` or alternatively use `smidump` version 0.5 or later.
+
## Known issues
[Workaround: Unicode double-quote in iana-if-type@2022-03-07.yang](https://github.com/clicon/clixon/issues/315)
diff --git a/test/test_snmp_set.sh b/test/test_snmp_set.sh
index 1bd481c1..081d1bec 100755
--- a/test/test_snmp_set.sh
+++ b/test/test_snmp_set.sh
@@ -105,7 +105,7 @@ OID5="${MIB}.1.5" # ifType
OID6="${MIB}.1.6" # ifSpeed
OID7="${MIB}.1.7" # ifAdminStatus
OID8="${MIB}.1.8" # ifInOctets
-OID9="${MIB}.1.9" # ifHCInOctets
+OID9="${MIB}.1.9" # ifHCInOctets NB 64-bit not tested and seems not supported
OID10="${MIB}.1.10" # ifPromiscuousMode
OID11="${MIB}.1.11" # ifCounterDiscontinuityTime
OID12="${MIB}.1.12" # ifStackStatus
@@ -121,32 +121,42 @@ OID21="${MIB}.2.2.1.3" # netSnmpHostAddress
OID22="${MIB}.2.2.1.4" # netSnmpHostStorage
OID23="${MIB}.2.2.1.5" # netSnmpHostRowStatus
-new "Test SNMP get for default value"
-expectpart "$($snmpget $OID1)" 0 "$OID1 = INTEGER: 42"
+NAME=netSnmpExampleInteger
+OID=$OID1
+VALUE=1234
+TYPE=INTEGER # Integer32
-new "Set new value to OID1"
-expectpart "$($snmpset $OID1 i 1234)" 0 "$OID1 = INTEGER: 1234"
+new "Get $NAME default"
+expectpart "$($snmpget $OID)" 0 "$OID = $TYPE: 42"
-new "Get new value"
-expectpart "$($snmpget $OID1)" 0 "$OID1 = INTEGER: 1234"
+new "Set $NAME $VALUE"
+expectpart "$($snmpset $OID i "$VALUE")" 0 "$OID = $TYPE: $VALUE"
+new "Get $NAME $VALUE"
+expectpart "$($snmpget $OID)" 0 "$OID = $TYPE: $VALUE"
+
new "Set new value via NETCONF"
-expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "none999" "" ""
+expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "none<$NAME>999$NAME>" "" ""
new "netconf commit"
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "" "" ""
-new "Get new value"
-expectpart "$($snmpget $OID1)" 0 "$OID1 = INTEGER: 999"
+new "Get $NAME again"
+expectpart "$($snmpget $OID)" 0 "$OID = $TYPE: 999"
-new "Test SNMP get string for default value"
-expectpart "$($snmpget $OID3)" 0 "$OID3 = STRING: So long, and thanks for all the fish!."
+NAME=netSnmpExampleString
+OID=$OID3
+VALUE="foo bar"
+TYPE=STRING # SnmpAdminString
-new "Set new string value to OID3"
-expectpart "$($snmpset $OID3 s foobar)" 0 "$OID3 = STRING: foobar"
+new "Get $NAME default"
+expectpart "$($snmpget $OID)" 0 "$OID = $TYPE: So long, and thanks for all the fish!."
-new "Get new value"
-expectpart "$($snmpget $OID3)" 0 "$OID3 = STRING: foobar"
+new "Set $NAME $VALUE"
+expectpart "$($snmpset $OID s "$VALUE")" 0 "$OID = $TYPE: $VALUE"
+
+new "Get $NAME $VALUE"
+expectpart "$($snmpget $OID)" 0 "$OID = $TYPE: $VALUE"
NAME=ifTableLastChange
OID=$OID4
@@ -165,7 +175,7 @@ expectpart "$($snmpget $OID)" 0 "$OID = $TYPE: $VALUE"
NAME=ifType
OID=$OID5
VALUE=48 # modem(48)
-TYPE=INTEGER # enum IANAifType modem(48)
+TYPE=INTEGER # IANAifType /enum
new "Set $NAME $VALUE"
expectpart "$($snmpset $OID i $VALUE)" 0 "$OID = $TYPE: $VALUE"
@@ -198,7 +208,7 @@ expectpart "$($snmpget $OID)" 0 "$OID = $TYPE: $VALUE"
NAME=ifInOctets
OID=$OID8
VALUE=123456
-TYPE=Gauge32
+TYPE=Gauge32 # Counter32
new "Set $NAME $VALUE"
expectpart "$($snmpset $OID u $VALUE)" 0 "$OID = $TYPE: $VALUE"
@@ -206,25 +216,10 @@ expectpart "$($snmpset $OID u $VALUE)" 0 "$OID = $TYPE: $VALUE"
new "Get $NAME $VALUE"
expectpart "$($snmpget $OID)" 0 "$OID = $TYPE: $VALUE"
-if false; then # XXX i/u/c doesnt work for counter64?
-NAME=ifHCInOctets
-OID=$OID9
-VALUE=4294967296
-TYPE=Counter64
-
-new "Set $NAME $VALUE"
-echo "$snmpset $OID C $VALUE"
-expectpart "$($snmpset $OID C $VALUE)" 0 "$OID = $TYPE: $VALUE"
-exit
-new "Get $NAME $VALUE"
-expectpart "$($snmpget $OID)" 0 "$OID = $TYPE: $VALUE"
-
-fi
-
NAME=ifPromiscuousMode
OID=$OID10
VALUE=1 # true(1)
-TYPE=INTEGER
+TYPE=INTEGER # TruthValue
new "Set $NAME $VALUE"
expectpart "$($snmpset $OID i $VALUE)" 0 "$OID = $TYPE: $VALUE"
@@ -235,7 +230,7 @@ expectpart "$($snmpget $OID)" 0 "$OID = $TYPE: $VALUE"
NAME=ifCounterDiscontinuityTime
OID=$OID11
VALUE=1234567890
-TYPE=Gauge32
+TYPE=Gauge32 # TomeStamp
new "Set $NAME $VALUE"
expectpart "$($snmpset $OID u $VALUE)" 0 "$OID = $TYPE: $VALUE"
@@ -246,7 +241,7 @@ expectpart "$($snmpget $OID)" 0 "$OID = $TYPE: $VALUE"
NAME=ifStackStatus
OID=$OID12
VALUE=1 # active(1)
-TYPE=INTEGER
+TYPE=INTEGER # RowStatus / enum
new "Set $NAME $VALUE"
expectpart "$($snmpset $OID i $VALUE)" 0 "$OID = $TYPE: $VALUE"