xref: /linux/tools/testing/selftests/net/rtnetlink.py (revision 61f96e684edd28ca40555ec49ea1555df31ba619)
14f280376SYuyang Huang#!/usr/bin/env python3
24f280376SYuyang Huang# SPDX-License-Identifier: GPL-2.0
34f280376SYuyang Huang
44f280376SYuyang Huangfrom lib.py import ksft_exit, ksft_run, ksft_ge, RtnlAddrFamily
54f280376SYuyang Huangimport socket
64f280376SYuyang Huang
74f280376SYuyang HuangIPV4_ALL_HOSTS_MULTICAST = b'\xe0\x00\x00\x01'
84f280376SYuyang Huang
94f280376SYuyang Huangdef dump_mcaddr_check(rtnl: RtnlAddrFamily) -> None:
104f280376SYuyang Huang    """
114f280376SYuyang Huang    Verify that at least one interface has the IPv4 all-hosts multicast address.
124f280376SYuyang Huang    At least the loopback interface should have this address.
134f280376SYuyang Huang    """
144f280376SYuyang Huang
15524c0358SJakub Kicinski    addresses = rtnl.getmulticast({"ifa-family": socket.AF_INET}, dump=True)
164f280376SYuyang Huang
174f280376SYuyang Huang    all_host_multicasts = [
18*0c8e3025SJakub Kicinski        addr for addr in addresses if addr['multicast'] == IPV4_ALL_HOSTS_MULTICAST
194f280376SYuyang Huang    ]
204f280376SYuyang Huang
214f280376SYuyang Huang    ksft_ge(len(all_host_multicasts), 1,
224f280376SYuyang Huang            "No interface found with the IPv4 all-hosts multicast address")
234f280376SYuyang Huang
244f280376SYuyang Huangdef main() -> None:
254f280376SYuyang Huang    rtnl = RtnlAddrFamily()
264f280376SYuyang Huang    ksft_run([dump_mcaddr_check], args=(rtnl, ))
274f280376SYuyang Huang    ksft_exit()
284f280376SYuyang Huang
294f280376SYuyang Huangif __name__ == "__main__":
304f280376SYuyang Huang    main()
31