xref: /linux/tools/testing/selftests/net/rtnetlink.py (revision 4f280376e5318f17f7388999f9a0098ccaae931d)
1*4f280376SYuyang Huang#!/usr/bin/env python3
2*4f280376SYuyang Huang# SPDX-License-Identifier: GPL-2.0
3*4f280376SYuyang Huang
4*4f280376SYuyang Huangfrom lib.py import ksft_exit, ksft_run, ksft_ge, RtnlAddrFamily
5*4f280376SYuyang Huangimport socket
6*4f280376SYuyang Huang
7*4f280376SYuyang HuangIPV4_ALL_HOSTS_MULTICAST = b'\xe0\x00\x00\x01'
8*4f280376SYuyang Huang
9*4f280376SYuyang Huangdef dump_mcaddr_check(rtnl: RtnlAddrFamily) -> None:
10*4f280376SYuyang Huang    """
11*4f280376SYuyang Huang    Verify that at least one interface has the IPv4 all-hosts multicast address.
12*4f280376SYuyang Huang    At least the loopback interface should have this address.
13*4f280376SYuyang Huang    """
14*4f280376SYuyang Huang
15*4f280376SYuyang Huang    addresses = rtnl.getmaddrs({"ifa-family": socket.AF_INET}, dump=True)
16*4f280376SYuyang Huang
17*4f280376SYuyang Huang    all_host_multicasts = [
18*4f280376SYuyang Huang        addr for addr in addresses if addr['ifa-multicast'] == IPV4_ALL_HOSTS_MULTICAST
19*4f280376SYuyang Huang    ]
20*4f280376SYuyang Huang
21*4f280376SYuyang Huang    ksft_ge(len(all_host_multicasts), 1,
22*4f280376SYuyang Huang            "No interface found with the IPv4 all-hosts multicast address")
23*4f280376SYuyang Huang
24*4f280376SYuyang Huangdef main() -> None:
25*4f280376SYuyang Huang    rtnl = RtnlAddrFamily()
26*4f280376SYuyang Huang    ksft_run([dump_mcaddr_check], args=(rtnl, ))
27*4f280376SYuyang Huang    ksft_exit()
28*4f280376SYuyang Huang
29*4f280376SYuyang Huangif __name__ == "__main__":
30*4f280376SYuyang Huang    main()
31