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