From bd1476c4800f2d3d9025db14fcb8fc168d87006a Mon Sep 17 00:00:00 2001 From: hschang Date: Wed, 20 Feb 2013 17:47:45 +0900 Subject: [PATCH] NetworkSetup: use manual-nameserver. --- lib/python/Components/Network.py | 23 +++++- .../SystemPlugins/WirelessLanSetup/plugin.py | 89 +++++++++++++++++----- lib/python/Screens/NetworkSetup.py | 40 ++++++++-- 3 files changed, 122 insertions(+), 30 deletions(-) diff --git a/lib/python/Components/Network.py b/lib/python/Components/Network.py index 32b8bdb..c39d1ba 100755 --- a/lib/python/Components/Network.py +++ b/lib/python/Components/Network.py @@ -74,7 +74,7 @@ class Network: def IPaddrFinished(self, result, retval, extra_args): (iface, callback ) = extra_args - data = { 'up': False, 'dhcp': False, 'preup' : False, 'predown' : False } + data = { 'up': False, 'dhcp': False, 'preup' : False, 'predown' : False, 'dns-nameservers' : False } globalIPpattern = re_compile("scope global") ipRegexp = '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' netRegexp = '[0-9]{1,2}' @@ -162,10 +162,12 @@ class Network: fp.write(iface["preup"]) if iface["predown"] is not False and not iface.has_key("configStrings"): fp.write(iface["predown"]) + if iface["dns-nameservers"] is not False and len(iface["dns-nameservers"])>0: + fp.write("%s" % (iface["dns-nameservers"])) fp.write("\n") fp.close() self.configuredNetworkAdapters = self.configuredInterfaces - self.writeNameserverConfig() +# self.writeNameserverConfig() def writeNameserverConfig(self): fp = file('/etc/resolv.conf', 'w') @@ -216,6 +218,9 @@ class Network: if (split[0] in ("pre-down","post-down")): if self.ifaces[currif].has_key("predown"): self.ifaces[currif]["predown"] = i + if (split[0] == "dns-nameservers"): + if self.ifaces[currif].has_key("dns-nameservers"): + self.ifaces[currif]["dns-nameservers"] = i for ifacename, iface in ifaces.items(): if self.ifaces.has_key(ifacename): @@ -687,7 +692,19 @@ class Network: if self.config_ready is not None: for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKCONFIG_READ): p(reason=self.config_ready) - + + def getInterfacesNameserverList(self, iface): + result = [] + nameservers = self.getAdapterAttribute(iface, "dns-nameservers") + if nameservers: + ipRegexp = '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' + ipPattern = re_compile(ipRegexp) + for x in nameservers.split()[1:]: + ip = self.regExpMatch(ipPattern, x) + if ip: + result.append( [ int(n) for n in ip.split('.') ] ) + return result + iNetwork = Network() def InitNetwork(): diff --git a/lib/python/Plugins/SystemPlugins/WirelessLanSetup/plugin.py b/lib/python/Plugins/SystemPlugins/WirelessLanSetup/plugin.py index e31075f..fdd1d53 100755 --- a/lib/python/Plugins/SystemPlugins/WirelessLanSetup/plugin.py +++ b/lib/python/Plugins/SystemPlugins/WirelessLanSetup/plugin.py @@ -261,7 +261,7 @@ class WlanSetup(Screen,HelpableScreen): menu = [] menu.append((_("Adapter settings"), "setting")) menu.append((_("Scan Wireless AP"), "scanap")) - menu.append((_("Nameserver settings"), "dns")) +# menu.append((_("Nameserver settings"), "dns")) if iNetwork.getAdapterAttribute(self.iface, "up"): menu.append((_("Show WLAN Status"), "status")) menu.append((_("Network test"), "test")) @@ -323,14 +323,18 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): - - - - - - - - + + + + + + + + + + + + @@ -340,9 +344,16 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): self.session = session self["key_red"] = StaticText(_("Close")) self["key_green"] = StaticText(_("Ok")) + self["ipaddresstext"] = StaticText(_("IP Address")) self["ipaddress"] = StaticText(_("[ N/A ]")) - self["netmask"] = StaticText(_("[ N/A ]")) + self["netmasktext"] = StaticText(_("NetMask")) + self["netmask"] = StaticText(_("[ N/A ]")) + self["gatewaytext"] = StaticText(_("Gateway")) self["gateway"] = StaticText(_("[ N/A ]")) + self["DNS1text"] = StaticText(_("Primary DNS")) + self["DNS1"] = StaticText(_("[ N/A ]")) + self["DNS2text"] = StaticText(_("Secondary DNS")) + self["DNS2"] = StaticText(_("[ N/A ]")) self["OkCancelActions"] = ActionMap(["ShortcutActions", "SetupActions" ], { "ok": self.saveWlanConfig, @@ -397,6 +408,12 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): default_tmp = "off" wlanconfig.usedhcp = ConfigSelection(default=default_tmp, choices = [("off", _("no")), ("on", _("yes"))]) + if iNetwork.getAdapterAttribute(self.iface, "dns-nameservers"): + self.dnsconfigdefault="on" + else: + self.dnsconfigdefault="off" + wlanconfig.hasdnsconfigentry = ConfigSelection(default=self.dnsconfigdefault, choices = [("off", _("no")), ("on", _("yes"))]) + wlanconfig.ip = ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "ip")) or [0,0,0,0] wlanconfig.netmask = ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "netmask") or [255,0,0,0]) @@ -412,6 +429,12 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): self["netmask"].setText(_(self.formatip(iNetwork.getAdapterAttribute(self.iface, "netmask")))) self["gateway"].setText(_(self.formatip(iNetwork.getAdapterAttribute(self.iface, "gateway")))) + nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2] + self.primaryDNS = NoSave(ConfigIP(default=nameserver[0])) + self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1])) + self["DNS1"].setText(self.primaryDNS.getText()) + self["DNS2"].setText(self.secondaryDNS.getText()) + if self.encryption_key is not None: default_tmp = "on" else: @@ -510,6 +533,16 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): self.usegatewayEntry = getConfigListEntry(_("Use Gateway"), wlanconfig.usegateway) self.gatewayEntry = getConfigListEntry(_("Gateway"), wlanconfig.gateway) + manualNameservers = (iNetwork.getInterfacesNameserverList(self.iface) + [[0,0,0,0]] * 2)[0:2] + self.manualPrimaryDNS = NoSave(ConfigIP(default=manualNameservers[0])) + self.manualSecondaryDNS = NoSave(ConfigIP(default=manualNameservers[1])) + nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2] + self.primaryDNS = NoSave(ConfigIP(default=nameserver[0])) + self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1])) + self.DNSConfigEntry = getConfigListEntry(_("Use Manual dns-nameserver"), wlanconfig.hasdnsconfigentry) + self.primaryDNSConfigEntry = getConfigListEntry(_('Primary DNS'), self.manualPrimaryDNS) + self.secondaryDNSConfigEntry = getConfigListEntry(_('Secondary DNS'), self.manualSecondaryDNS) + self.configList.append( self.usedeviceEntry ) if wlanconfig.usedevice.value is "on": self.configList.append( self.usedhcpEntry ) @@ -519,6 +552,12 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): self.configList.append(self.usegatewayEntry) if wlanconfig.usegateway.value is "on": self.configList.append(self.gatewayEntry) + if wlanconfig.usedhcp.value is "on": + self.configList.append(self.DNSConfigEntry) + if wlanconfig.hasdnsconfigentry.value is "on" or wlanconfig.usedhcp.value is "off": + self.configList.append(self.primaryDNSConfigEntry) + self.configList.append(self.secondaryDNSConfigEntry) + self.configList.append( self.essidEntry ) if wlanconfig.essid.value == 'Input hidden ESSID': self.configList.append( self.hiddenessidEntry ) @@ -611,7 +650,8 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): def newConfig(self): if self["config"].getCurrent() == self.usedeviceEntry or self["config"].getCurrent() == self.encryptEntry \ or self["config"].getCurrent() == self.usedhcpEntry or self["config"].getCurrent() == self.usegatewayEntry \ - or self["config"].getCurrent() == self.essidEntry or self["config"].getCurrent() == self.methodEntry: + or self["config"].getCurrent() == self.essidEntry or self["config"].getCurrent() == self.methodEntry \ + or self["config"].getCurrent() == self.DNSConfigEntry: self.createConfig() def saveWlanConfig(self): @@ -762,21 +802,15 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): print "content = \n"+contents wpafd.write(contents) wpafd.close() - self.writeNetConfig(0) + self.writeNetConfig() else : self.session.open(MessageBox, _("wpa_supplicant.conf open error."), type = MessageBox.TYPE_ERROR, timeout = 10) - self.writeNetConfig(-1) + return else: - self.writeNetConfig(-2) - - def writeNetConfig(self,ret = -1): - if ret == -1: - self.session.open(MessageBox, _("wpa_supplicant.conf open error."), type = MessageBox.TYPE_ERROR, timeout = 10) - return - elif ret == -2: self.session.open(MessageBox, _("Can NOT generate passphrase"), type = MessageBox.TYPE_ERROR, timeout = 10) return + def writeNetConfig(self): if wlanconfig.usedevice.value=="on": iNetwork.setAdapterAttribute(self.iface, "up", True) if wlanconfig.usedhcp.value =="on": @@ -787,17 +821,30 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen): iNetwork.setAdapterAttribute(self.iface, "netmask", wlanconfig.netmask.value) if wlanconfig.usegateway.value == "on": iNetwork.setAdapterAttribute(self.iface, "gateway", wlanconfig.gateway.value) + if wlanconfig.hasdnsconfigentry.value == "on" or wlanconfig.usedhcp.value == "off": + interfacesDnsLines = self.makeLineDnsNameservers([self.manualPrimaryDNS.value, self.manualSecondaryDNS.value]) + if interfacesDnsLines == "" : + interfacesDnsLines = False + iNetwork.setAdapterAttribute(self.iface, "dns-nameservers", interfacesDnsLines) + else: + iNetwork.setAdapterAttribute(self.iface, "dns-nameservers", False) else: iNetwork.setAdapterAttribute(self.iface, "up", False) iNetwork.deactivateInterface(self.iface) contents = "\tpre-up wpa_supplicant -i"+self.iface+" -c/etc/wpa_supplicant.conf -B -D"+iNetwork.detectWlanModule(self.iface)+"\n" - contents += "\tpost-down wpa_cli terminate\n\n" + contents += "\tpost-down wpa_cli terminate\n" iNetwork.setAdapterAttribute(self.iface, "configStrings", contents) iNetwork.writeNetworkConfig() iNetwork.restartNetwork(self.updateCurrentInterfaces) self.configurationmsg = None self.configurationmsg = self.session.openWithCallback(self.configFinished, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False) + def makeLineDnsNameservers(self, nameservers = []): + line = "" + entry = ' '.join([("%d.%d.%d.%d" % tuple(x)) for x in nameservers if x != [0, 0, 0, 0] ]) + if len(entry): + line+="\tdns-nameservers %s\n" % entry + return line def updateCurrentInterfaces(self,ret): if ret is True: diff --git a/lib/python/Screens/NetworkSetup.py b/lib/python/Screens/NetworkSetup.py index c2f818b..e5eb740 100755 --- a/lib/python/Screens/NetworkSetup.py +++ b/lib/python/Screens/NetworkSetup.py @@ -324,7 +324,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["ColorActions"] = HelpableActionMap(self, "ColorActions", { "red": (self.keyCancel, _("exit network adapter configuration")), - "blue": (self.KeyBlue, _("open nameserver configuration")), }) self["actions"] = NumberActionMap(["SetupActions"], @@ -356,7 +355,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["Adapter"] = StaticText() self["introduction2"] = StaticText(_("Press OK to activate the settings.")) self["key_red"] = StaticText(_("Cancel")) - self["key_blue"] = StaticText(_("Edit DNS")) + self["key_blue"] = StaticText() self["VKeyIcon"] = Boolean(False) self["HelpWindow"] = Pixmap() @@ -395,6 +394,7 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self.InterfaceEntry = None self.dhcpEntry = None self.gatewayEntry = None + self.DNSConfigEntry = None self.hiddenSSID = None self.wlanSSID = None self.encryption = None @@ -438,6 +438,14 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self.dhcpdefault=False self.hasGatewayConfigEntry = NoSave(ConfigYesNo(default=self.dhcpdefault or False)) self.gatewayConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "gateway") or [0,0,0,0])) + if iNetwork.getAdapterAttribute(self.iface, "dns-nameservers"): + self.dnsconfigdefault=True + else: + self.dnsconfigdefault=False + self.hasDNSConfigEntry = NoSave(ConfigYesNo(default=self.dnsconfigdefault or False)) + manualNameservers = (iNetwork.getInterfacesNameserverList(self.iface) + [[0,0,0,0]] * 2)[0:2] + self.manualPrimaryDNS = NoSave(ConfigIP(default=manualNameservers[0])) + self.manualSecondaryDNS = NoSave(ConfigIP(default=manualNameservers[1])) nameserver = (iNetwork.getNameserverList() + [[0,0,0,0]] * 2)[0:2] self.primaryDNS = NoSave(ConfigIP(default=nameserver[0])) self.secondaryDNS = NoSave(ConfigIP(default=nameserver[1])) @@ -458,6 +466,13 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): if self.hasGatewayConfigEntry.value: self.list.append(getConfigListEntry(_('Gateway'), self.gatewayConfigEntry)) + self.DNSConfigEntry = getConfigListEntry(_("Use Manual dns-nameserver"), self.hasDNSConfigEntry) + if self.dhcpConfigEntry.value: + self.list.append(self.DNSConfigEntry) + if self.hasDNSConfigEntry.value or not self.dhcpConfigEntry.value: + self.list.append(getConfigListEntry(_('Primary DNS'), self.manualPrimaryDNS)) + self.list.append(getConfigListEntry(_('Secondary DNS'), self.manualSecondaryDNS)) + self.extended = None self.configStrings = None for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKSETUP): @@ -485,9 +500,6 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self["config"].list = self.list self["config"].l.setList(self.list) - def KeyBlue(self): - self.session.openWithCallback(self.NameserverSetupClosed, NameserverSetup) - def newConfig(self): if self["config"].getCurrent() == self.InterfaceEntry: self.createSetup() @@ -495,6 +507,8 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): self.createSetup() if self["config"].getCurrent() == self.gatewayEntry: self.createSetup() + if self["config"].getCurrent() == self.DNSConfigEntry: + self.createSetup() if iNetwork.isWirelessInterface(self.iface): if self["config"].getCurrent() == self.encryption: self.createSetup() @@ -557,6 +571,14 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): else: iNetwork.removeAdapterAttribute(self.iface, "gateway") + if self.hasDNSConfigEntry.value or not self.dhcpConfigEntry.value: + interfacesDnsLines = self.makeLineDnsNameservers([self.manualPrimaryDNS.value, self.manualSecondaryDNS.value]) + if interfacesDnsLines == "" : + interfacesDnsLines = False + iNetwork.setAdapterAttribute(self.iface, "dns-nameservers", interfacesDnsLines) + else: + iNetwork.setAdapterAttribute(self.iface, "dns-nameservers", False) + if (self.extended is not None and self.configStrings is not None): iNetwork.setAdapterAttribute(self.iface, "configStrings", self.configStrings(self.iface)) self.ws.writeConfig(self.iface) @@ -647,6 +669,12 @@ class AdapterSetup(Screen, ConfigListScreen, HelpableScreen): if current[1].help_window.instance is not None: current[1].help_window.instance.hide() + def makeLineDnsNameservers(self, nameservers = []): + line = "" + entry = ' '.join([("%d.%d.%d.%d" % tuple(x)) for x in nameservers if x != [0, 0, 0, 0] ]) + if len(entry): + line+="\tdns-nameservers %s\n" % entry + return line class AdapterSetupConfiguration(Screen, HelpableScreen): def __init__(self, session,iface): @@ -836,7 +864,7 @@ class AdapterSetupConfiguration(Screen, HelpableScreen): def genMainMenu(self): menu = [] menu.append((_("Adapter settings"), "edit")) - menu.append((_("Nameserver settings"), "dns")) +# menu.append((_("Nameserver settings"), "dns")) menu.append((_("Network test"), "test")) menu.append((_("Restart network"), "lanrestart")) -- 2.7.4