X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2FComponents%2FNetwork.py;h=732e862869a9133a50f5b55653cd0d729b552651;hp=32b8bdbe76dcb89f68d9c1eb152e2aadbbb7a64c;hb=a9984df92fc78bd4955b24502724b74b935dcc3f;hpb=62398546079455cab5f63f5988a1f2a6bc7e3e07 diff --git a/lib/python/Components/Network.py b/lib/python/Components/Network.py index 32b8bdb..732e862 100755 --- a/lib/python/Components/Network.py +++ b/lib/python/Components/Network.py @@ -46,7 +46,7 @@ class Network: return self.remoteRootFS def isBlacklisted(self, iface): - return iface in ('lo', 'wifi0', 'wmaster0') + return iface in ('lo', 'wifi0', 'wmaster0', 'sys0') def getInterfaces(self, callback = None): self.configuredInterfaces = [] @@ -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}' @@ -90,7 +90,7 @@ class Network: for line in result.splitlines(): split = line.strip().split(' ',2) - if (split[1][:-1] == iface): + if (split[1][:-1] == iface) or (split[1][:-1] == (iface + '@sys0')): up = self.regExpMatch(upPattern, split[2]) mac = self.regExpMatch(macPattern, self.regExpMatch(macLinePattern, split[2])) if up is not None: @@ -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): @@ -285,6 +290,9 @@ class Network: name += " " + str(len(self.lan_interfaces)+1) self.lan_interfaces.append(iface) return name + + def useWlCommand(self, iface): + return iface and os_path.exists("/tmp/bcm/%s" % iface) def getFriendlyAdapterDescription(self, iface): if not self.isWirelessInterface(iface): @@ -293,19 +301,41 @@ class Network: moduledir = self.getWlanModuleDir(iface) if moduledir: name = os_path.basename(os_path.realpath(moduledir)) - if name in ('ath_pci','ath5k'): + if name in ('ath_pci', 'ath5k'): name = 'Atheros' - elif name in ('rt73','rt73usb','rt3070sta'): + elif name in ('rt73','rt73usb','rt3070sta', 'rt5370sta'): name = 'Ralink' elif name == 'zd1211b': name = 'Zydas' - elif name == 'r871x_usb_drv': + elif name in ('r871x_usb_drv', 'rtw_usb_drv'): name = 'Realtek' + elif self.isRalinkModule(iface): + name = 'Ralink' + elif self.useWlCommand(iface): + name = 'BroadCom' else: name = _('Unknown') return name + ' ' + _('wireless network interface') + def isRalinkModule(self, iface): + import os +# check vendor ID for lagacy driver + vendorID = "148f" # ralink vendor ID + idVendorPath = "/sys/class/net/%s/device/idVendor" % iface + if os.access(idVendorPath, os.R_OK): + if open(idVendorPath, "r").read().strip() == vendorID: + return True + +# check sys driver path for kernel driver + ralinkKmod = "rt2800usb" # ralink kernel driver name + driverPath = "/sys/class/net/%s/device/driver/" % iface + if os.path.exists(driverPath): + driverName = os.path.basename(os_path.realpath(driverPath)) + if driverName == ralinkKmod: + return True + return False + def getAdapterName(self, iface): return iface @@ -409,15 +439,10 @@ class Network: callback(True,mode) def checkNetworkState(self,statecallback): - # www.dream-multimedia-tv.de, www.heise.de, www.google.de self.NetworkState = 0 - cmd1 = "ping -c 1 82.149.226.170" - cmd2 = "ping -c 1 193.99.144.85" - cmd3 = "ping -c 1 209.85.135.103" self.PingConsole = Console() - self.PingConsole.ePopen(cmd1, self.checkNetworkStateFinished,statecallback) - self.PingConsole.ePopen(cmd2, self.checkNetworkStateFinished,statecallback) - self.PingConsole.ePopen(cmd3, self.checkNetworkStateFinished,statecallback) + for testserver in ("www.heise.de", "www.google.de", "de.yahoo.com"): + self.PingConsole.ePopen("ping -c 1 %s" % testserver, self.checkNetworkStateFinished,statecallback) def checkNetworkStateFinished(self, result, retval,extra_args): (statecallback) = extra_args @@ -631,6 +656,9 @@ class Network: def getWlanModuleDir(self, iface = None): devicedir = self.sysfsPath(iface) + '/device' + if not os_path.exists(devicedir): + return None + moduledir = devicedir + '/driver/module' if os_path.isdir(moduledir): return moduledir @@ -687,7 +715,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():