def update_connection(self, connection): """Update NM RemoteConnection from the object. :param connection: connection to be updated from the object :type connection: NM.RemoteConnection """ # ipv4 settings if self.ip == "dhcp": method4 = NM.SETTING_IP4_CONFIG_METHOD_AUTO elif self.ip: method4 = NM.SETTING_IP4_CONFIG_METHOD_MANUAL else: method4 = NM.SETTING_IP4_CONFIG_METHOD_DISABLED connection.remove_setting(NM.SettingIP4Config) s_ip4 = NM.SettingIP4Config.new() s_ip4.set_property(NM.SETTING_IP_CONFIG_METHOD, method4) if method4 == NM.SETTING_IP4_CONFIG_METHOD_MANUAL: prefix4 = network.netmask_to_prefix(self.netmask) addr4 = NM.IPAddress.new(socket.AF_INET, self.ip, prefix4) s_ip4.add_address(addr4) if self.gateway: s_ip4.props.gateway = self.gateway connection.add_setting(s_ip4) # ipv6 settings if self.ipv6 == "ignore": method6 = NM.SETTING_IP6_CONFIG_METHOD_IGNORE elif not self.ipv6 or self.ipv6 == "auto": method6 = NM.SETTING_IP6_CONFIG_METHOD_AUTO elif self.ipv6 == "dhcp": method6 = NM.SETTING_IP6_CONFIG_METHOD_DHCP else: method6 = NM.SETTING_IP6_CONFIG_METHOD_MANUAL connection.remove_setting(NM.SettingIP6Config) s_ip6 = NM.SettingIP6Config.new() s_ip6.set_property(NM.SETTING_IP_CONFIG_METHOD, method6) if method6 == NM.SETTING_IP6_CONFIG_METHOD_MANUAL: addr6, _slash, prefix6 = self.ipv6.partition("/") if prefix6: prefix6 = int(prefix6) else: prefix6 = 64 addr6 = NM.IPAddress.new(socket.AF_INET6, addr6, prefix6) s_ip6.add_address(addr6) if self.ipv6gateway: s_ip6.props.gateway = self.ipv6gateway connection.add_setting(s_ip6) # nameservers if self.nameserver: for ns in [str.strip(i) for i in self.nameserver.split(",")]: if NM.utils_ipaddr_valid(socket.AF_INET6, ns): s_ip6.add_dns(ns) elif NM.utils_ipaddr_valid(socket.AF_INET, ns): s_ip4.add_dns(ns) else: log.error("IP address %s is not valid", ns)
def test_prefix2netmask2prefix(self): """Test netmask and prefix conversion.""" lore = [ (0, "0.0.0.0"), (1, "128.0.0.0"), (2, "192.0.0.0"), (3, "224.0.0.0"), (4, "240.0.0.0"), (5, "248.0.0.0"), (6, "252.0.0.0"), (7, "254.0.0.0"), (8, "255.0.0.0"), (9, "255.128.0.0"), (10, "255.192.0.0"), (11, "255.224.0.0"), (12, "255.240.0.0"), (13, "255.248.0.0"), (14, "255.252.0.0"), (15, "255.254.0.0"), (16, "255.255.0.0"), (17, "255.255.128.0"), (18, "255.255.192.0"), (19, "255.255.224.0"), (20, "255.255.240.0"), (21, "255.255.248.0"), (22, "255.255.252.0"), (23, "255.255.254.0"), (24, "255.255.255.0"), (25, "255.255.255.128"), (26, "255.255.255.192"), (27, "255.255.255.224"), (28, "255.255.255.240"), (29, "255.255.255.248"), (30, "255.255.255.252"), (31, "255.255.255.254"), (32, "255.255.255.255"), ] for prefix, netmask in lore: assert network.prefix_to_netmask(prefix) == netmask assert network.netmask_to_prefix(netmask) == prefix assert network.prefix_to_netmask(33) == "255.255.255.255"
def prefix2netmask2prefix_test(self): lore = [ (0, "0.0.0.0"), (1, "128.0.0.0"), (2, "192.0.0.0"), (3, "224.0.0.0"), (4, "240.0.0.0"), (5, "248.0.0.0"), (6, "252.0.0.0"), (7, "254.0.0.0"), (8, "255.0.0.0"), (9, "255.128.0.0"), (10, "255.192.0.0"), (11, "255.224.0.0"), (12, "255.240.0.0"), (13, "255.248.0.0"), (14, "255.252.0.0"), (15, "255.254.0.0"), (16, "255.255.0.0"), (17, "255.255.128.0"), (18, "255.255.192.0"), (19, "255.255.224.0"), (20, "255.255.240.0"), (21, "255.255.248.0"), (22, "255.255.252.0"), (23, "255.255.254.0"), (24, "255.255.255.0"), (25, "255.255.255.128"), (26, "255.255.255.192"), (27, "255.255.255.224"), (28, "255.255.255.240"), (29, "255.255.255.248"), (30, "255.255.255.252"), (31, "255.255.255.254"), (32, "255.255.255.255"), ] for prefix, netmask in lore: self.assertEqual(network.prefix_to_netmask(prefix), netmask) self.assertEqual(network.netmask_to_prefix(netmask), prefix) self.assertEqual(network.prefix_to_netmask(33), "255.255.255.255")