def test_ip_mask_v4(self): ipv4_masks = [ (0, 0x00000000), (1, 0x80000000), (2, 0xc0000000), (3, 0xe0000000), (4, 0xf0000000), (5, 0xf8000000), (6, 0xfc000000), (7, 0xfe000000), (8, 0xff000000), (9, 0xff800000), (10, 0xffc00000), (11, 0xffe00000), (12, 0xfff00000), (13, 0xfff80000), (14, 0xfffc0000), (15, 0xfffe0000), (16, 0xffff0000), (17, 0xffff8000), (18, 0xffffc000), (19, 0xffffe000), (20, 0xfffff000), (21, 0xfffff800), (22, 0xfffffc00), (23, 0xfffffe00), (24, 0xffffff00), (25, 0xffffff80), (26, 0xffffffc0), (27, 0xffffffe0), (28, 0xfffffff0), (29, 0xfffffff8), (30, 0xfffffffc), (31, 0xfffffffe), (32, 0xffffffff), ] for length, mask_int in ipv4_masks: self.assertEqual(ip_mask(length, bits=32), mask_int) with self.assertRaises(ValueError): ip_mask(-1, bits=32) ip_mask(33, bits=32)
def test_ip_mask_v6(self): # See: https://en.wikipedia.org/wiki/IPv6_subnetting_reference ipv6_masks = [ (12, 0xfff00000000000000000000000000000), (20, 0xfffff000000000000000000000000000), (24, 0xffffff00000000000000000000000000), (28, 0xfffffff0000000000000000000000000), (32, 0xffffffff000000000000000000000000), (36, 0xfffffffff00000000000000000000000), (48, 0xffffffffffff00000000000000000000), (52, 0xfffffffffffff0000000000000000000), (56, 0xffffffffffffff000000000000000000), (60, 0xfffffffffffffff00000000000000000), (64, 0xffffffffffffffff0000000000000000), (127, 0xfffffffffffffffffffffffffffffffe), (128, 0xffffffffffffffffffffffffffffffff), ] for length, mask_int in ipv6_masks: self.assertEqual(ip_mask(length, bits=128), mask_int) with self.assertRaises(ValueError): ip_mask(-1, bits=128) ip_mask(129, bits=128)