diff options
author | Giampaolo Rodola <g.rodola@gmail.com> | 2020-10-05 15:36:10 +0200 |
---|---|---|
committer | Giampaolo Rodola <g.rodola@gmail.com> | 2020-10-05 15:36:10 +0200 |
commit | 5b519a2469ad21a5913035031c99029018dda4c1 (patch) | |
tree | a0990940365005c43c3c1dcd7a4e7bb756f8cd99 | |
parent | 5859f7f14fba32ae5d882157c617cdb1f28cd437 (diff) | |
download | psutil-5b519a2469ad21a5913035031c99029018dda4c1.tar.gz |
add linux tests for broadcast and netmask addresses
-rwxr-xr-x | psutil/tests/test_linux.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/psutil/tests/test_linux.py b/psutil/tests/test_linux.py index 75b7639f..163be0f9 100755 --- a/psutil/tests/test_linux.py +++ b/psutil/tests/test_linux.py @@ -53,6 +53,8 @@ HERE = os.path.abspath(os.path.dirname(__file__)) SIOCGIFADDR = 0x8915 SIOCGIFCONF = 0x8912 SIOCGIFHWADDR = 0x8927 +SIOCGIFNETMASK = 0x891b +SIOCGIFBRDADDR = 0x8919 if LINUX: SECTOR_SIZE = 512 EMPTY_TEMPERATURES = not glob.glob('/sys/class/hwmon/hwmon*') @@ -75,6 +77,32 @@ def get_ipv4_address(ifname): struct.pack('256s', ifname))[20:24]) +def get_ipv4_netmask(ifname): + import fcntl + ifname = ifname[:15] + if PY3: + ifname = bytes(ifname, 'ascii') + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + with contextlib.closing(s): + return socket.inet_ntoa( + fcntl.ioctl(s.fileno(), + SIOCGIFNETMASK, + struct.pack('256s', ifname))[20:24]) + + +def get_ipv4_broadcast(ifname): + import fcntl + ifname = ifname[:15] + if PY3: + ifname = bytes(ifname, 'ascii') + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + with contextlib.closing(s): + return socket.inet_ntoa( + fcntl.ioctl(s.fileno(), + SIOCGIFBRDADDR, + struct.pack('256s', ifname))[20:24]) + + def get_ipv6_address(ifname): with open("/proc/net/if_inet6", 'rt') as f: for line in f.readlines(): @@ -907,6 +935,12 @@ class TestSystemNetIfAddrs(PsutilTestCase): self.assertEqual(addr.address, get_mac_address(name)) elif addr.family == socket.AF_INET: self.assertEqual(addr.address, get_ipv4_address(name)) + self.assertEqual(addr.netmask, get_ipv4_netmask(name)) + if addr.broadcast is not None: + self.assertEqual(addr.broadcast, + get_ipv4_broadcast(name)) + else: + self.assertEqual(get_ipv4_broadcast(name), '0.0.0.0') elif addr.family == socket.AF_INET6: # IPv6 addresses can have a percent symbol at the end. # E.g. these 2 are equivalent: |