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