]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
selftests: rtnetlink: add neighbour update test
authorSabrina Dubroca <sd@queasysnail.net>
Tue, 10 Mar 2026 21:59:17 +0000 (22:59 +0100)
committerJakub Kicinski <kuba@kernel.org>
Thu, 12 Mar 2026 02:04:55 +0000 (19:04 -0700)
Check that protocol and flags are updated correctly for
neighbour and pneigh entries.

Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/d28f72b5b4ff4c9ecbbbde06146a938dcc4c264a.1772894876.git.sd@queasysnail.net
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/net/rtnetlink.sh

index 248c2b91fe42bc89cfda0937f9948c8715992e1a..5a5ff88321d578db9abcbae7b893739cdcf82c9e 100755 (executable)
@@ -28,6 +28,7 @@ ALL_TESTS="
        kci_test_fdb_get
        kci_test_fdb_del
        kci_test_neigh_get
+       kci_test_neigh_update
        kci_test_bridge_parent_id
        kci_test_address_proto
        kci_test_enslave_bonding
@@ -1160,6 +1161,60 @@ kci_test_neigh_get()
        end_test "PASS: neigh get"
 }
 
+kci_test_neigh_update()
+{
+       dstip=10.0.2.4
+       dstmac=de:ad:be:ef:13:37
+       local ret=0
+
+       for proxy in "" "proxy" ; do
+               # add a neighbour entry without any flags
+               run_cmd ip neigh add $proxy $dstip dev "$devdummy" lladdr $dstmac nud permanent
+               run_cmd_grep $dstip ip neigh show $proxy
+               run_cmd_grep_fail "$dstip dev $devdummy .*\(managed\|use\|router\|extern\)" ip neigh show $proxy
+
+               # set the extern_learn flag, but no other
+               run_cmd ip neigh change $proxy $dstip dev "$devdummy" extern_learn
+               run_cmd_grep "$dstip dev $devdummy .* extern_learn" ip neigh show $proxy
+               run_cmd_grep_fail "$dstip dev $devdummy .* \(managed\|use\|router\)" ip neigh show $proxy
+
+               # flags are reset when not provided
+               run_cmd ip neigh change $proxy $dstip dev "$devdummy"
+               run_cmd_grep $dstip ip neigh show $proxy
+               run_cmd_grep_fail "$dstip dev $devdummy .* extern_learn" ip neigh show $proxy
+
+               # add a protocol
+               run_cmd ip neigh change $proxy $dstip dev "$devdummy" protocol boot
+               run_cmd_grep "$dstip dev $devdummy .* proto boot" ip neigh show $proxy
+
+               # protocol is retained when not provided
+               run_cmd ip neigh change $proxy $dstip dev "$devdummy"
+               run_cmd_grep "$dstip dev $devdummy .* proto boot" ip neigh show $proxy
+
+               # change protocol
+               run_cmd ip neigh change $proxy $dstip dev "$devdummy" protocol static
+               run_cmd_grep "$dstip dev $devdummy .* proto static" ip neigh show $proxy
+
+               # also check an extended flag for non-proxy neighs
+               if [ "$proxy" = "" ]; then
+                       run_cmd ip neigh change $proxy $dstip dev "$devdummy" managed
+                       run_cmd_grep "$dstip dev $devdummy managed" ip neigh show $proxy
+
+                       run_cmd ip neigh change $proxy $dstip dev "$devdummy" lladdr $dstmac
+                       run_cmd_grep_fail "$dstip dev $devdummy managed" ip neigh show $proxy
+               fi
+
+               run_cmd ip neigh del $proxy $dstip dev "$devdummy"
+       done
+
+       if [ $ret -ne 0 ];then
+               end_test "FAIL: neigh update"
+               return 1
+       fi
+
+       end_test "PASS: neigh update"
+}
+
 kci_test_bridge_parent_id()
 {
        local ret=0