+ self.configuredInterfaces = ifaces
+ print "read interfaces:", ifaces
+ for ifacename, iface in ifaces.items():
+ if self.ifaces.has_key(ifacename):
+ self.ifaces[ifacename]["dhcp"] = iface["dhcp"]
+
+ print "self.ifaces after loading:", self.ifaces
+
+ def loadNameserverConfig(self):
+ ipRegexp = "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
+ nameserverPattern = re_compile("nameserver +" + ipRegexp)
+ ipPattern = re_compile(ipRegexp)
+
+ resolv = []
+ try:
+ fp = file('/etc/resolv.conf', 'r')
+ resolv = fp.readlines()
+ fp.close()
+ self.nameservers = []
+ except:
+ print "[Network.py] resolv.conf - opening failed"
+
+ for line in resolv:
+ if self.regExpMatch(nameserverPattern, line) is not None:
+ ip = self.regExpMatch(ipPattern, line)
+ if ip is not None:
+ self.nameservers.append(self.convertIP(ip))
+
+ print "nameservers:", self.nameservers
+
+ def deactivateNetworkConfig(self):
+ for iface in self.ifaces.keys():
+ system("ip addr flush " + iface)
+ system("/etc/init.d/networking stop")
+ system("killall -9 udhcpc")
+ system("rm /var/run/udhcpc*")
+
+ def activateNetworkConfig(self):
+ system("/etc/init.d/networking start")
+ self.getInterfaces()
+
+ def getNumberOfAdapters(self):
+ return len(self.ifaces)
+
+ def getFriendlyAdapterName(self, x):
+ # maybe this needs to be replaced by an external list.
+ friendlyNames = {
+ "eth0": _("Integrated Ethernet"),
+ "wlan0": _("Wireless"),
+ "ath0": _("Integrated Wireless")
+ }
+ return friendlyNames.get(x, x) # when we have no friendly name, use adapter name
+
+ def getAdapterName(self, iface):
+ return iface
+
+ def getAdapterList(self):
+ return self.ifaces.keys()
+
+ def getAdapterAttribute(self, iface, attribute):
+ if self.ifaces.has_key(iface):
+ if self.ifaces[iface].has_key(attribute):
+ return self.ifaces[iface][attribute]
+ return None
+
+ def setAdapterAttribute(self, iface, attribute, value):
+ print "setting for adapter", iface, "attribute", attribute, " to value", value
+ if self.ifaces.has_key(iface):
+ self.ifaces[iface][attribute] = value
+
+ def removeAdapterAttribute(self, iface, attribute):
+ if self.ifaces.has_key(iface):
+ if self.ifaces[iface].has_key(attribute):
+ del self.ifaces[iface][attribute]
+
+ def getNameserverList(self):
+ if len(self.nameservers) == 0:
+ return [[0, 0, 0, 0], [0, 0, 0, 0]]
+ else:
+ return self.nameservers
+
+ def clearNameservers(self):
+ self.nameservers = []
+
+ def addNameserver(self, nameserver):
+ if nameserver not in self.nameservers:
+ self.nameservers.append(nameserver)
+
+ def removeNameserver(self, nameserver):
+ if nameserver in self.nameservers:
+ self.nameservers.remove(nameserver)
+
+ def changeNameserver(self, oldnameserver, newnameserver):
+ if oldnameserver in self.nameservers:
+ for i in range(len(self.nameservers)):
+ if self.nameservers[i] == oldnameserver:
+ self.nameservers[i] = newnameserver
+
+ def writeDefaultNetworkConfig(self,mode='lan'):
+ fp = file('/etc/network/interfaces', 'w')
+ fp.write("# automatically generated by enigma 2\n# do NOT change manually!\n\n")
+ fp.write("auto lo\n")
+ fp.write("iface lo inet loopback\n\n")
+ if mode == 'wlan':
+ fp.write("auto wlan0\n")
+ fp.write("iface wlan0 inet dhcp\n")
+ if mode == 'wlan-mpci':
+ fp.write("auto ath0\n")
+ fp.write("iface ath0 inet dhcp\n")
+ if mode == 'lan':
+ fp.write("auto eth0\n")
+ fp.write("iface eth0 inet dhcp\n")
+ fp.write("\n")
+ fp.close()
+
+ def resetNetworkConfig(self,mode='lan'):
+ self.deactivateNetworkConfig()
+ self.writeDefaultNetworkConfig(mode)
+ if mode == 'wlan':
+ system("ifconfig eth0 down")
+ system("ifconfig ath0 down")
+ system("ifconfig wlan0 up")
+ if mode == 'wlan-mpci':
+ system("ifconfig eth0 down")
+ system("ifconfig wlan0 down")
+ system("ifconfig ath0 up")
+ if mode == 'lan':
+ system("ifconfig eth0 up")
+ system("ifconfig wlan0 down")
+ system("ifconfig ath0 down")
+ self.getInterfaces()
+
+ def checkNetworkState(self):
+ # www.dream-multimedia-tv.de, www.heise.de, www.google.de
+ return system("ping -c 1 82.149.226.170") == 0 or \
+ system("ping -c 1 193.99.144.85") == 0 or \
+ system("ping -c 1 209.85.135.103") == 0
+
+ def restartNetwork(self):
+ iNetwork.deactivateNetworkConfig()
+ iNetwork.activateNetworkConfig()
+
+ def getLinkState(self,iface,callback):
+ self.dataAvail = callback
+ cmd = self.ethtool_bin + " " + iface
+ self.container.appClosed.get().append(self.cmdFinished)
+ self.container.dataAvail.get().append(callback)
+ self.container.execute(cmd)
+
+ def cmdFinished(self,retval):
+ self.container.appClosed.get().remove(self.cmdFinished)
+ self.container.dataAvail.get().remove(self.dataAvail)
+
+ def checkforInterface(self,iface):
+ if self.getAdapterAttribute(iface, 'up') is True:
+ return True
+ else:
+ ret=system("ifconfig " + iface + " up")
+ system("ifconfig " + iface + " down")
+ if ret == 0:
+ return True
+ else:
+ return False
+
+ def checkDNSLookup(self):
+ return system("nslookup www.dream-multimedia-tv.de") == 0 or \
+ system("nslookup www.heise.de") == 0 or \
+ system("nslookup www.google.de")
+
+ def deactivateInterface(self,iface):
+ system("ifconfig " + iface + " down")
+
+ def detectWlanModule(self):
+ self.wlanmodule = None
+ rt73_dir = "/sys/bus/usb/drivers/rt73/"
+ zd1211b_dir = "/sys/bus/usb/drivers/zd1211b/"
+ madwifi_dir = "/sys/bus/pci/drivers/ath_pci/"
+ if os_path.exists(madwifi_dir):
+ files = listdir(madwifi_dir)
+ if len(files) >= 1:
+ self.wlanmodule = 'madwifi'
+ elif os_path.exists(rt73_dir):
+ files = listdir(rt73_dir)
+ if len(files) >= 1:
+ self.wlanmodule = 'ralink'
+ elif os_path.exists(zd1211b_dir):
+ files = listdir(zd1211b_dir)
+ if len(files) != 0:
+ self.wlanmodule = 'zydas'
+ return self.wlanmodule
+
+
+iNetwork = Network()
+
+def InitNetwork():
+ pass