git: 9f26a03fdbdc - stable/13 - tests/netlink: Assert the route scope of interface's addresses

From: Zhenlei Huang <zlei_at_FreeBSD.org>
Date: Mon, 10 Mar 2025 10:24:29 UTC
The branch stable/13 has been updated by zlei:

URL: https://cgit.FreeBSD.org/src/commit/?id=9f26a03fdbdc94196e062aa34066143279f7ca8d

commit 9f26a03fdbdc94196e062aa34066143279f7ca8d
Author:     Zhenlei Huang <zlei@FreeBSD.org>
AuthorDate: 2025-03-07 04:14:44 +0000
Commit:     Zhenlei Huang <zlei@FreeBSD.org>
CommitDate: 2025-03-10 10:23:11 +0000

    tests/netlink: Assert the route scope of interface's addresses
    
    While here, add one additional IPv4 link-local address to test_46_nofilter
    to cover the IPv4 RT_SCOPE_LINK case.
    
    Reviewed by:    melifaro, #network
    MFC after:      3 days
    Differential Revision:  https://reviews.freebsd.org/D49226
    
    (cherry picked from commit 5d8b48487acc8375675f2b7c4507c98ac5d0bf75)
    (cherry picked from commit e84a17db1cc034b87df7660dadb709a019140c3c)
---
 tests/sys/netlink/test_rtnl_ifaddr.py | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/tests/sys/netlink/test_rtnl_ifaddr.py b/tests/sys/netlink/test_rtnl_ifaddr.py
index ec349fcd6fde..fd0a2a7686ee 100644
--- a/tests/sys/netlink/test_rtnl_ifaddr.py
+++ b/tests/sys/netlink/test_rtnl_ifaddr.py
@@ -20,7 +20,10 @@ class TestRtNlIfaddr(NetlinkTestTemplate, SingleVnetTestTemplate):
     def setup_method(self, method):
         method_name = method.__name__
         if "4" in method_name:
-            self.IPV4_PREFIXES = ["192.0.2.1/24"]
+            if "nofilter" in method_name:
+                self.IPV4_PREFIXES = ["192.0.2.1/24", "169.254.169.254/16"]
+            else:
+                self.IPV4_PREFIXES = ["192.0.2.1/24"]
         if "6" in method_name:
             self.IPV6_PREFIXES = ["2001:db8::1/64"]
         super().setup_method(method)
@@ -38,14 +41,21 @@ class TestRtNlIfaddr(NetlinkTestTemplate, SingleVnetTestTemplate):
         for rx_msg in self.read_msg_list(msg.nl_hdr.nlmsg_seq, NlRtMsgType.RTM_NEWADDR):
             ifname = socket.if_indextoname(rx_msg.base_hdr.ifa_index)
             family = rx_msg.base_hdr.ifa_family
-            ret.append((ifname, family, rx_msg))
+            scope = rx_msg.base_hdr.ifa_scope
+            ret.append((ifname, family, scope))
 
         ifname = "lo0"
-        assert len([r for r in ret if r[0] == ifname]) > 0
+        assert len([r for r in ret if r[0] == ifname and r[1] == socket.AF_INET and r[2] == RtScope.RT_SCOPE_HOST.value]) == 1
+        assert len([r for r in ret if r[0] == ifname and r[1] == socket.AF_INET6 and r[2] == RtScope.RT_SCOPE_HOST.value]) == 1
+        assert len([r for r in ret if r[0] == ifname and r[1] == socket.AF_INET6 and r[2] == RtScope.RT_SCOPE_LINK.value]) == 1
+        assert len([r for r in ret if r[0] == ifname]) == 3
 
         ifname = self.vnet.iface_alias_map["if1"].name
-        assert len([r for r in ret if r[0] == ifname and r[1] == socket.AF_INET]) == 1
-        assert len([r for r in ret if r[0] == ifname and r[1] == socket.AF_INET6]) == 2
+        assert len([r for r in ret if r[0] == ifname and r[1] == socket.AF_INET and r[2] == RtScope.RT_SCOPE_LINK.value]) == 1
+        assert len([r for r in ret if r[0] == ifname and r[1] == socket.AF_INET and r[2] == RtScope.RT_SCOPE_UNIVERSE.value]) == 1
+        assert len([r for r in ret if r[0] == ifname and r[1] == socket.AF_INET6 and r[2] == RtScope.RT_SCOPE_LINK.value]) == 1
+        assert len([r for r in ret if r[0] == ifname and r[1] == socket.AF_INET6 and r[2] == RtScope.RT_SCOPE_UNIVERSE.value]) == 1
+        assert len([r for r in ret if r[0] == ifname]) == 4
 
     def test_46_filter_iface(self):
         """Tests that listing outputs both IPv4/IPv6 for the specific interface"""