+ self.ifaces[iface] = data
+ self.loadNetworkConfig(iface,callback)
+
+ def writeNetworkConfig(self):
+ self.configuredInterfaces = []
+ 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")
+ for ifacename, iface in self.ifaces.items():
+ if iface['up'] == True:
+ fp.write("auto " + ifacename + "\n")
+ self.configuredInterfaces.append(ifacename)
+ if iface['dhcp'] == True:
+ fp.write("iface "+ ifacename +" inet dhcp\n")
+ if iface['dhcp'] == False:
+ fp.write("iface "+ ifacename +" inet static\n")
+ if iface.has_key('ip'):
+ print tuple(iface['ip'])
+ fp.write(" address %d.%d.%d.%d\n" % tuple(iface['ip']))
+ fp.write(" netmask %d.%d.%d.%d\n" % tuple(iface['netmask']))
+ if iface.has_key('gateway'):
+ fp.write(" gateway %d.%d.%d.%d\n" % tuple(iface['gateway']))
+ if iface.has_key("configStrings"):
+ fp.write("\n" + iface["configStrings"] + "\n")
+ if iface["preup"] is not False and not iface.has_key("configStrings"):
+ fp.write(iface["preup"])
+ fp.write(iface["postdown"])
+ fp.write("\n")
+ fp.close()
+ self.writeNameserverConfig()
+
+ def writeNameserverConfig(self):
+ fp = file('/etc/resolv.conf', 'w')
+ for nameserver in self.nameservers:
+ fp.write("nameserver %d.%d.%d.%d\n" % tuple(nameserver))
+ fp.close()
+
+ def loadNetworkConfig(self,iface,callback = None):
+ interfaces = []
+ # parse the interfaces-file
+ try:
+ fp = file('/etc/network/interfaces', 'r')
+ interfaces = fp.readlines()
+ fp.close()
+ except:
+ print "[Network.py] interfaces - opening failed"
+
+ ifaces = {}
+ currif = ""
+ for i in interfaces:
+ split = i.strip().split(' ')
+ if (split[0] == "iface"):
+ currif = split[1]
+ ifaces[currif] = {}
+ if (len(split) == 4 and split[3] == "dhcp"):
+ ifaces[currif]["dhcp"] = True
+ else:
+ ifaces[currif]["dhcp"] = False
+ if (currif == iface): #read information only for available interfaces
+ if (split[0] == "address"):
+ ifaces[currif]["address"] = map(int, split[1].split('.'))
+ if self.ifaces[currif].has_key("ip"):
+ if self.ifaces[currif]["ip"] != ifaces[currif]["address"] and ifaces[currif]["dhcp"] == False:
+ self.ifaces[currif]["ip"] = map(int, split[1].split('.'))
+ if (split[0] == "netmask"):
+ ifaces[currif]["netmask"] = map(int, split[1].split('.'))
+ if self.ifaces[currif].has_key("netmask"):
+ if self.ifaces[currif]["netmask"] != ifaces[currif]["netmask"] and ifaces[currif]["dhcp"] == False:
+ self.ifaces[currif]["netmask"] = map(int, split[1].split('.'))
+ if (split[0] == "gateway"):
+ ifaces[currif]["gateway"] = map(int, split[1].split('.'))
+ if self.ifaces[currif].has_key("gateway"):
+ if self.ifaces[currif]["gateway"] != ifaces[currif]["gateway"] and ifaces[currif]["dhcp"] == False:
+ self.ifaces[currif]["gateway"] = map(int, split[1].split('.'))
+ if (split[0] == "pre-up"):
+ if self.ifaces[currif].has_key("preup"):
+ self.ifaces[currif]["preup"] = i
+ if (split[0] == "post-down"):
+ if self.ifaces[currif].has_key("postdown"):
+ self.ifaces[currif]["postdown"] = i
+
+ for ifacename, iface in ifaces.items():
+ if self.ifaces.has_key(ifacename):
+ self.ifaces[ifacename]["dhcp"] = iface["dhcp"]
+ if len(self.Console.appContainers) == 0:
+ # save configured interfacelist
+ self.configuredNetworkAdapters = self.configuredInterfaces
+ # load ns only once
+ self.loadNameserverConfig()
+ print "read configured interfac:", ifaces
+ print "self.ifaces after loading:", self.ifaces
+ if callback is not None:
+ callback(True)
+
+ 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, callback = None):
+ self.deactivateConsole = Console()
+ self.commands = []
+ self.commands.append("/etc/init.d/avahi-daemon stop")
+ for iface in self.ifaces.keys():
+ cmd = "ip addr flush " + iface
+ self.commands.append(cmd)
+ self.commands.append("/etc/init.d/networking stop")
+ self.commands.append("killall -9 udhcpc")
+ self.commands.append("rm /var/run/udhcpc*")
+ self.deactivateConsole.eBatch(self.commands, self.deactivateNetworkFinished, callback, debug=True)