def _change_dhcp_config(interface, enable_dhcp=True, filename=INTERFACES_CONFIG): ''' Enable or disable dhcp for an interface which isn't a service (in a config file) :param interface: interface label :param enable_dhcp: True to enable dhcp and False to disable dhcp. Default is True :param filename: Config file name. Default is INTERFACES_CONFIG. ''' parser = configparser.ConfigParser() parser.optionxform = str if os.path.exists(filename): try: with salt.utils.files.fopen(filename, 'r') as config_file: parser.readfp(config_file) except configparser.MissingSectionHeaderError: pass interface = pyiface.Interface(name=interface) hwaddr = interface.hwaddr[:-1] hwaddr_section_number = ''.join(hwaddr.split(':')) if parser.has_section('service_{0}'.format(hwaddr_section_number)): parser.remove_section('service_{0}'.format(hwaddr_section_number)) parser.add_section('service_{0}'.format(hwaddr_section_number)) parser.set('service_{0}'.format(hwaddr_section_number), 'MAC', hwaddr) parser.set('service_{0}'.format(hwaddr_section_number), 'Name', 'ethernet_cable_{0}'.format(hwaddr_section_number)) parser.set('service_{0}'.format(hwaddr_section_number), 'Type', 'ethernet') if enable_dhcp: parser.set('service_{0}'.format(hwaddr_section_number), 'IPv4.Method', 'dhcp') parser.set('service_{0}'.format(hwaddr_section_number), 'AutoConnect', 'true') parser.set('service_{0}'.format(hwaddr_section_number), 'Nameservers', '\'\'') else: parser.set('service_{0}'.format(hwaddr_section_number), 'IPv4', 'off') with salt.utils.files.fopen(filename, 'w') as config_file: parser.write(config_file) return True
def net_info(): ''' Gives basic networking info like local IP ''' net = Munch() net.interfaces = dict() net.def_if = interfaces()[1] try: net.def_if = gateways()['default'][AF_INET][1] except KeyError: pass net.ip = ifaddresses(net.def_if)[AF_INET][0]['addr'] net.def_mac = ifaddresses(net.def_if)[AF_PACKET][0]['addr'] for i in interfaces(): ifd = Munch() flags = pyiface.Interface(name=i).flags ifd.flags = "U" if flags & IFF_UP > 0 else "" ifd.flags += "R" if flags & IFF_RUNNING > 0 else "" try: ifd.addr = ifaddresses(i)[AF_INET][0]['addr'] except KeyError: pass net.interfaces[i] = dict(ifd) return dict(net)
def _enable_dhcp(interface): ''' Enable dhcp for an interface which isn't a service :param interface: interface label ''' parser = configparser.ConfigParser() parser.optionxform = str if os.path.exists(INTERFACES_CONFIG): try: with salt.utils.files.fopen(INTERFACES_CONFIG, 'r') as config_file: parser.readfp(config_file) except configparser.MissingSectionHeaderError: pass interface = pyiface.Interface(name=interface) hwaddr = interface.hwaddr[:-1] hwaddr_section_number = ''.join(hwaddr.split(':')) if parser.has_section('service_{0}'.format(hwaddr_section_number)): parser.remove_section('service_{0}'.format(hwaddr_section_number)) parser.add_section('service_{0}'.format(hwaddr_section_number)) parser.set('service_{0}'.format(hwaddr_section_number), 'MAC', hwaddr) parser.set('service_{0}'.format(hwaddr_section_number), 'Name', 'ethernet_cable_{0}'.format(hwaddr_section_number)) parser.set('service_{0}'.format(hwaddr_section_number), 'IPv4.method', 'dhcp') parser.set('service_{0}'.format(hwaddr_section_number), 'AutoConnect', 'true') with salt.utils.files.fopen(INTERFACES_CONFIG, 'w') as config_file: parser.write(config_file) return True
def testInterface(interface): try: iface = pyiface.Interface(name=interface) if iface.flags == iface.flags | pyiface.IFF_UP: return True except IOError as e: if e.errno == 19: # No such device print "Bad interface. No such device '%s'" % (interface) return False
def test_down(self): ''' Test ip.down function ''' interfaces = self.__interfaces() for interface in interfaces: result = self.run_function('ip.down', [interface.name]) self.assertTrue(result) info = self.run_function('ip.get_interfaces_details', timeout=300) for interface in info['interfaces']: self.assertEqual(interface['adapter_mode'], 'disabled') self.assertFalse(self.__connected(pyiface.Interface(name=interface['connectionid'])))
def test_down(self): """ Test ip.down function """ interfaces = self.__interfaces() for interface in interfaces: result = self.run_function("ip.down", [interface.name]) self.assertTrue(result) info = self.run_function("ip.get_interfaces_details", timeout=300) for interface in info["interfaces"]: self.assertEqual(interface["adapter_mode"], "disabled") self.assertFalse( self.__connected( pyiface.Interface(name=interface["connectionid"])))
def _configure_static_interface(interface, **settings): """ Configure an interface that is not detected as a service by Connman (i.e. link is down) :param interface: interface label :param settings: - ip - netmask - gateway - dns - name :return: True if settings were applied successfully. :rtype: bool """ interface = pyiface.Interface(name=interface) parser = configparser.ConfigParser() parser.optionxform = str if os.path.exists(INTERFACES_CONFIG): try: with salt.utils.files.fopen(INTERFACES_CONFIG, "r") as config_file: parser.readfp(config_file) except configparser.MissingSectionHeaderError: pass hwaddr = interface.hwaddr[:-1] hwaddr_section_number = "".join(hwaddr.split(":")) if parser.has_section("service_{}".format(hwaddr_section_number)): parser.remove_section("service_{}".format(hwaddr_section_number)) parser.add_section("service_{}".format(hwaddr_section_number)) ip_address = settings.get("ip", "0.0.0.0") netmask = settings.get("netmask", "0.0.0.0") gateway = settings.get("gateway", "0.0.0.0") dns_servers = settings.get("dns", "''") name = settings.get("name", "ethernet_cable_{}".format(hwaddr_section_number)) parser.set( "service_{}".format(hwaddr_section_number), "IPv4", "{}/{}/{}".format(ip_address, netmask, gateway), ) parser.set("service_{}".format(hwaddr_section_number), "Nameservers", dns_servers) parser.set("service_{}".format(hwaddr_section_number), "Name", name) parser.set("service_{}".format(hwaddr_section_number), "MAC", hwaddr) parser.set("service_{}".format(hwaddr_section_number), "Type", "ethernet") parser.set("service_{}".format(hwaddr_section_number), "IPv4.method", "manual") with salt.utils.files.fopen(INTERFACES_CONFIG, "w") as config_file: parser.write(config_file) return True
def _configure_static_interface(interface, **settings): ''' Configure an interface that is not detected as a service by Connman (i.e. link is down) :param interface: interface label :param settings: - ip - netmask - gateway - dns - name :return: True if settings were applied successfully. :rtype: bool ''' interface = pyiface.Interface(name=interface) parser = configparser.ConfigParser() parser.optionxform = str if os.path.exists(INTERFACES_CONFIG): try: with salt.utils.files.fopen(INTERFACES_CONFIG, 'r') as config_file: parser.readfp(config_file) except configparser.MissingSectionHeaderError: pass hwaddr = interface.hwaddr[:-1] hwaddr_section_number = ''.join(hwaddr.split(':')) if parser.has_section('service_{0}'.format(hwaddr_section_number)): parser.remove_section('service_{0}'.format(hwaddr_section_number)) parser.add_section('service_{0}'.format(hwaddr_section_number)) ip_address = settings.get('ip', '0.0.0.0') netmask = settings.get('netmask', '0.0.0.0') gateway = settings.get('gateway', '0.0.0.0') dns_servers = settings.get('dns', '\'\'') name = settings.get('name', 'ethernet_cable_{0}'.format(hwaddr_section_number)) parser.set('service_{0}'.format(hwaddr_section_number), 'IPv4', '{0}/{1}/{2}'.format(ip_address, netmask, gateway)) parser.set('service_{0}'.format(hwaddr_section_number), 'Nameservers', dns_servers) parser.set('service_{0}'.format(hwaddr_section_number), 'Name', name) parser.set('service_{0}'.format(hwaddr_section_number), 'MAC', hwaddr) parser.set('service_{0}'.format(hwaddr_section_number), 'Type', 'ethernet') parser.set('service_{0}'.format(hwaddr_section_number), 'IPv4.method', 'manual') with salt.utils.files.fopen(INTERFACES_CONFIG, 'w') as config_file: parser.write(config_file) return True
def _change_dhcp_config(interface, enable_dhcp=True, filename=INTERFACES_CONFIG): """ Enable or disable dhcp for an interface which isn't a service (in a config file) :param interface: interface label :param enable_dhcp: True to enable dhcp and False to disable dhcp. Default is True :param filename: Config file name. Default is INTERFACES_CONFIG. """ parser = configparser.ConfigParser() parser.optionxform = str if os.path.exists(filename): try: with salt.utils.files.fopen(filename, "r") as config_file: parser.readfp(config_file) except configparser.MissingSectionHeaderError: pass interface = pyiface.Interface(name=interface) hwaddr = interface.hwaddr[:-1] hwaddr_section_number = "".join(hwaddr.split(":")) if parser.has_section("service_{}".format(hwaddr_section_number)): parser.remove_section("service_{}".format(hwaddr_section_number)) parser.add_section("service_{}".format(hwaddr_section_number)) parser.set("service_{}".format(hwaddr_section_number), "MAC", hwaddr) parser.set( "service_{}".format(hwaddr_section_number), "Name", "ethernet_cable_{}".format(hwaddr_section_number), ) parser.set("service_{}".format(hwaddr_section_number), "Type", "ethernet") if enable_dhcp: parser.set("service_{}".format(hwaddr_section_number), "IPv4.Method", "dhcp") parser.set("service_{}".format(hwaddr_section_number), "AutoConnect", "true") parser.set("service_{}".format(hwaddr_section_number), "Nameservers", "''") else: parser.set("service_{}".format(hwaddr_section_number), "IPv4", "off") with salt.utils.files.fopen(filename, "w") as config_file: parser.write(config_file) return True
def _remove_interface_section(interface): ''' Remove interface section from connman config file ''' parser = configparser.ConfigParser() parser.optionxform = str if os.path.exists(INTERFACES_CONFIG): try: with salt.utils.files.fopen(INTERFACES_CONFIG, 'r') as config_file: parser.readfp(config_file) except configparser.MissingSectionHeaderError: pass interface = pyiface.Interface(name=interface) hwaddr = interface.hwaddr[:-1] hwaddr_section_number = ''.join(hwaddr.split(':')) if parser.has_section('service_{0}'.format(hwaddr_section_number)): parser.remove_section('service_{0}'.format(hwaddr_section_number)) with salt.utils.files.fopen(INTERFACES_CONFIG, 'w') as config_file: parser.write(config_file) return True