4 from enigma import eTimer, eConsoleAppContainer
9 self.configuredInterfaces = {}
12 self.ethtool_bin = "/usr/sbin/ethtool"
13 self.container = eConsoleAppContainer()
15 def getInterfaces(self):
16 devicesPattern = re.compile('[a-z]+[0-9]+')
18 fp = file('/proc/net/dev', 'r')
19 result = fp.readlines()
23 device = devicesPattern.search(line).group()
24 self.ifaces[device] = self.getDataForInterface(device)
25 # Show only UP Interfaces in E2
26 if self.getAdapterAttribute(device, 'up') is False:
27 del self.ifaces[device]
28 except AttributeError:
31 print "self.ifaces:", self.ifaces
32 self.loadNetworkConfig()
33 #self.writeNetworkConfig()
39 def regExpMatch(self, pattern, string):
43 return pattern.search(string).group()
44 except AttributeError:
47 # helper function to convert ips from a sring to a list of ints
48 def convertIP(self, ip):
55 def getDataForInterface(self, iface):
56 #ipRegexp = '[0-9]{1,2,3}\.[0-9]{1,2,3}\.[0-9]{1,2,3}\.[0-9]{1,2,3}'
57 ipRegexp = '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
58 ipLinePattern = re.compile('inet addr:' + ipRegexp)
59 netmaskLinePattern = re.compile('Mask:' + ipRegexp)
60 bcastLinePattern = re.compile('Bcast:' + ipRegexp)
61 ipPattern = re.compile(ipRegexp)
62 upPattern = re.compile('UP ')
63 macPattern = re.compile('[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{2}')
65 fp = os.popen("ifconfig " + iface)
66 result = fp.readlines()
68 data = { 'up': False, 'dhcp': False }
70 ip = self.regExpMatch(ipPattern, self.regExpMatch(ipLinePattern, line))
71 netmask = self.regExpMatch(ipPattern, self.regExpMatch(netmaskLinePattern, line))
72 bcast = self.regExpMatch(ipPattern, self.regExpMatch(bcastLinePattern, line))
73 up = self.regExpMatch(upPattern, line)
74 mac = self.regExpMatch(macPattern, line)
76 data['ip'] = self.convertIP(ip)
77 if netmask is not None:
78 data['netmask'] = self.convertIP(netmask)
80 data['bcast'] = self.convertIP(bcast)
85 if not data.has_key('ip'):
87 data['ip'] = [192, 168, 1, 2]
88 data['netmask'] = [255, 255, 255, 0]
89 data['gateway'] = [192, 168, 1, 1]
91 fp = os.popen("route -n | grep " + iface)
92 result = fp.readlines()
96 if line[0:7] == "0.0.0.0":
97 gateway = self.regExpMatch(ipPattern, line[16:31])
98 if gateway is not None:
99 data['gateway'] = self.convertIP(gateway)
102 def writeNetworkConfig(self):
103 fp = file('/etc/network/interfaces', 'w')
104 fp.write("# automatically generated by enigma 2\n# do NOT change manually!\n\n")
105 fp.write("auto lo\n")
106 fp.write("iface lo inet loopback\n\n")
108 for ifacename, iface in self.ifaces.items():
109 if iface['up'] == True:
110 fp.write("auto " + ifacename + "\n")
111 if iface['dhcp'] == True:
112 fp.write("iface "+ ifacename +" inet dhcp\n")
114 fp.write("iface "+ ifacename +" inet static\n")
115 if iface.has_key('ip'):
116 print tuple(iface['ip'])
117 fp.write(" address %d.%d.%d.%d\n" % tuple(iface['ip']))
118 fp.write(" netmask %d.%d.%d.%d\n" % tuple(iface['netmask']))
119 if iface.has_key('gateway'):
120 fp.write(" gateway %d.%d.%d.%d\n" % tuple(iface['gateway']))
122 if iface.has_key("configStrings"):
123 fp.write("\n" + iface["configStrings"] + "\n")
126 self.writeNameserverConfig()
128 def writeNameserverConfig(self):
129 fp = file('/etc/resolv.conf', 'w')
130 for nameserver in self.nameservers:
131 fp.write("nameserver %d.%d.%d.%d\n" % tuple(nameserver))
134 def loadNetworkConfig(self):
135 self.loadNameserverConfig()
137 # parse the interfaces-file
139 fp = file('/etc/network/interfaces', 'r')
140 interfaces = fp.readlines()
143 print "[Network.py] interfaces - opening failed"
148 split = i.strip().split(' ')
149 if (split[0] == "iface"):
152 if (len(split) == 4 and split[3] == "dhcp"):
153 ifaces[currif]["dhcp"] = True
155 ifaces[currif]["dhcp"] = False
157 if (split[0] == "address"):
158 ifaces[currif]["address"] = map(int, split[1].split('.'))
159 if (split[0] == "netmask"):
160 ifaces[currif]["netmask"] = map(int, split[1].split('.'))
161 if (split[0] == "gateway"):
162 ifaces[currif]["gateway"] = map(int, split[1].split('.'))
164 self.configuredInterfaces = ifaces
165 print "read interfaces:", ifaces
166 for ifacename, iface in ifaces.items():
167 if self.ifaces.has_key(ifacename):
168 self.ifaces[ifacename]["dhcp"] = iface["dhcp"]
170 print "self.ifaces after loading:", self.ifaces
172 def loadNameserverConfig(self):
173 ipRegexp = "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
174 nameserverPattern = re.compile("nameserver +" + ipRegexp)
175 ipPattern = re.compile(ipRegexp)
179 fp = file('/etc/resolv.conf', 'r')
180 resolv = fp.readlines()
182 self.nameservers = []
184 print "[Network.py] resolv.conf - opening failed"
187 if self.regExpMatch(nameserverPattern, line) is not None:
188 ip = self.regExpMatch(ipPattern, line)
190 self.nameservers.append(self.convertIP(ip))
192 print "nameservers:", self.nameservers
194 def deactivateNetworkConfig(self):
195 for iface in self.ifaces.keys():
196 os.system("ip addr flush " + iface)
197 os.system("/etc/init.d/networking stop")
198 os.system("killall -9 udhcpc")
199 os.system("rm /var/run/udhcpc*")
201 def activateNetworkConfig(self):
202 os.system("/etc/init.d/networking start")
205 def getNumberOfAdapters(self):
206 return len(self.ifaces)
208 def getFriendlyAdapterName(self, x):
209 # maybe this needs to be replaced by an external list.
211 "eth0": _("Integrated Ethernet"),
212 "wlan0": _("Wireless")
214 return friendlyNames.get(x, x) # when we have no friendly name, use adapter name
216 def getAdapterName(self, iface):
219 def getAdapterList(self):
220 return self.ifaces.keys()
222 def getAdapterAttribute(self, iface, attribute):
223 if self.ifaces.has_key(iface):
224 if self.ifaces[iface].has_key(attribute):
225 return self.ifaces[iface][attribute]
228 def setAdapterAttribute(self, iface, attribute, value):
229 print "setting for adapter", iface, "attribute", attribute, " to value", value
230 if self.ifaces.has_key(iface):
231 self.ifaces[iface][attribute] = value
233 def removeAdapterAttribute(self, iface, attribute):
234 if self.ifaces.has_key(iface):
235 if self.ifaces[iface].has_key(attribute):
236 del self.ifaces[iface][attribute]
238 def getNameserverList(self):
239 if len(self.nameservers) == 0:
240 return [[0, 0, 0, 0], [0, 0, 0, 0]]
242 return self.nameservers
244 def clearNameservers(self):
245 self.nameservers = []
247 def addNameserver(self, nameserver):
248 if nameserver not in self.nameservers:
249 self.nameservers.append(nameserver)
251 def removeNameserver(self, nameserver):
252 if nameserver in self.nameservers:
253 self.nameservers.remove(nameserver)
255 def changeNameserver(self, oldnameserver, newnameserver):
256 if oldnameserver in self.nameservers:
257 for i in range(len(self.nameservers)):
258 if self.nameservers[i] == oldnameserver:
259 self.nameservers[i] = newnameserver
261 def writeDefaultNetworkConfig(self,mode='lan'):
262 fp = file('/etc/network/interfaces', 'w')
263 fp.write("# automatically generated by enigma 2\n# do NOT change manually!\n\n")
264 fp.write("auto lo\n")
265 fp.write("iface lo inet loopback\n\n")
267 fp.write("auto wlan0\n")
268 fp.write("iface wlan0 inet dhcp\n")
270 fp.write("auto eth0\n")
271 fp.write("iface eth0 inet dhcp\n")
275 def resetNetworkConfig(self,mode='lan'):
276 self.deactivateNetworkConfig()
277 self.writeDefaultNetworkConfig(mode)
279 os.system("ifconfig eth0 down")
280 os.system("ifconfig wlan0 up")
282 os.system("ifconfig eth0 up")
283 os.system("ifconfig wlan0 down")
285 def checkNetworkState(self):
287 ret1=os.system("ping -c 1 www.dream-multimedia-tv.de")
289 ok_counter = ok_counter + 1
290 ret2=os.system("ping -c 1 www.heise.de")
292 ok_counter = ok_counter + 1
293 ret3=os.system("ping -c 1 www.google.de")
295 ok_counter = ok_counter + 1
301 def restartNetwork(self):
302 iNetwork.deactivateNetworkConfig()
303 iNetwork.activateNetworkConfig()
305 def getLinkState(self,iface,callback):
306 self.dataAvail = callback
307 cmd = self.ethtool_bin + " " + iface
308 self.container.appClosed.get().append(self.cmdFinished)
309 self.container.dataAvail.get().append(callback)
310 self.container.execute(cmd)
312 def cmdFinished(self,retval):
313 self.container.appClosed.get().remove(self.cmdFinished)
314 self.container.dataAvail.get().remove(self.dataAvail)