4 from enigma import eTimer, eConsoleAppContainer
11 self.ethtool_bin = "/usr/sbin/ethtool"
12 self.container = eConsoleAppContainer()
14 def getInterfaces(self):
15 devicesPattern = re.compile('[a-z]+[0-9]+')
17 fp = file('/proc/net/dev', 'r')
18 result = fp.readlines()
22 device = devicesPattern.search(line).group()
23 self.ifaces[device] = self.getDataForInterface(device)
24 # Show only UP Interfaces in E2
25 if self.getAdapterAttribute(device, 'up') is False:
26 del self.ifaces[device]
27 except AttributeError:
30 print "self.ifaces:", self.ifaces
31 self.loadNetworkConfig()
32 #self.writeNetworkConfig()
38 def regExpMatch(self, pattern, string):
42 return pattern.search(string).group()
43 except AttributeError:
46 # helper function to convert ips from a sring to a list of ints
47 def convertIP(self, ip):
54 def getDataForInterface(self, iface):
55 #ipRegexp = '[0-9]{1,2,3}\.[0-9]{1,2,3}\.[0-9]{1,2,3}\.[0-9]{1,2,3}'
56 ipRegexp = '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
57 ipLinePattern = re.compile('inet addr:' + ipRegexp)
58 netmaskLinePattern = re.compile('Mask:' + ipRegexp)
59 bcastLinePattern = re.compile('Bcast:' + ipRegexp)
60 ipPattern = re.compile(ipRegexp)
61 upPattern = re.compile('UP ')
62 macPattern = re.compile('[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{2}')
64 fp = os.popen("ifconfig " + iface)
65 result = fp.readlines()
67 data = { 'up': False, 'dhcp': False }
69 ip = self.regExpMatch(ipPattern, self.regExpMatch(ipLinePattern, line))
70 netmask = self.regExpMatch(ipPattern, self.regExpMatch(netmaskLinePattern, line))
71 bcast = self.regExpMatch(ipPattern, self.regExpMatch(bcastLinePattern, line))
72 up = self.regExpMatch(upPattern, line)
73 mac = self.regExpMatch(macPattern, line)
75 data['ip'] = self.convertIP(ip)
76 if netmask is not None:
77 data['netmask'] = self.convertIP(netmask)
79 data['bcast'] = self.convertIP(bcast)
84 if not data.has_key('ip'):
86 data['ip'] = [192, 168, 1, 2]
87 data['netmask'] = [255, 255, 255, 0]
88 data['gateway'] = [192, 168, 1, 1]
90 fp = os.popen("route -n | grep " + iface)
91 result = fp.readlines()
95 if line[0:7] == "0.0.0.0":
96 gateway = self.regExpMatch(ipPattern, line[16:31])
97 if gateway is not None:
98 data['gateway'] = self.convertIP(gateway)
101 def writeNetworkConfig(self):
102 fp = file('/etc/network/interfaces', 'w')
103 fp.write("# automatically generated by enigma 2\n# do NOT change manually!\n\n")
104 fp.write("auto lo\n")
105 fp.write("iface lo inet loopback\n\n")
107 for ifacename, iface in self.ifaces.items():
108 if iface['up'] == True:
109 fp.write("auto " + ifacename + "\n")
110 if iface['dhcp'] == True:
111 fp.write("iface "+ ifacename +" inet dhcp\n")
113 fp.write("iface "+ ifacename +" inet static\n")
114 if iface.has_key('ip'):
115 print tuple(iface['ip'])
116 fp.write(" address %d.%d.%d.%d\n" % tuple(iface['ip']))
117 fp.write(" netmask %d.%d.%d.%d\n" % tuple(iface['netmask']))
118 if iface.has_key('gateway'):
119 fp.write(" gateway %d.%d.%d.%d\n" % tuple(iface['gateway']))
121 if iface.has_key("configStrings"):
122 fp.write("\n" + iface["configStrings"] + "\n")
125 self.writeNameserverConfig()
127 def writeNameserverConfig(self):
128 fp = file('/etc/resolv.conf', 'w')
129 for nameserver in self.nameservers:
130 fp.write("nameserver %d.%d.%d.%d\n" % tuple(nameserver))
133 def loadNetworkConfig(self):
134 self.loadNameserverConfig()
136 # parse the interfaces-file
138 fp = file('/etc/network/interfaces', 'r')
139 interfaces = fp.readlines()
142 print "[Network.py] interfaces - opening failed"
147 split = i.strip().split(' ')
148 if (split[0] == "iface"):
151 if (len(split) == 4 and split[3] == "dhcp"):
152 ifaces[currif]["dhcp"] = True
154 ifaces[currif]["dhcp"] = False
156 if (split[0] == "address"):
157 ifaces[currif]["address"] = map(int, split[1].split('.'))
158 if (split[0] == "netmask"):
159 ifaces[currif]["netmask"] = map(int, split[1].split('.'))
160 if (split[0] == "gateway"):
161 ifaces[currif]["gateway"] = map(int, split[1].split('.'))
163 print "read interfaces:", ifaces
164 for ifacename, iface in ifaces.items():
165 if self.ifaces.has_key(ifacename):
166 self.ifaces[ifacename]["dhcp"] = iface["dhcp"]
168 print "self.ifaces after loading:", self.ifaces
170 def loadNameserverConfig(self):
171 ipRegexp = "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
172 nameserverPattern = re.compile("nameserver +" + ipRegexp)
173 ipPattern = re.compile(ipRegexp)
177 fp = file('/etc/resolv.conf', 'r')
178 resolv = fp.readlines()
180 self.nameservers = []
182 print "[Network.py] resolv.conf - opening failed"
185 if self.regExpMatch(nameserverPattern, line) is not None:
186 ip = self.regExpMatch(ipPattern, line)
188 self.nameservers.append(self.convertIP(ip))
190 print "nameservers:", self.nameservers
192 def deactivateNetworkConfig(self):
193 for iface in self.ifaces.keys():
194 os.system("ip addr flush " + iface)
195 os.system("/etc/init.d/networking stop")
196 os.system("killall -9 udhcpc")
197 os.system("rm /var/run/udhcpc*")
199 def activateNetworkConfig(self):
200 os.system("/etc/init.d/networking start")
203 def getNumberOfAdapters(self):
204 return len(self.ifaces)
206 def getFriendlyAdapterName(self, x):
207 # maybe this needs to be replaced by an external list.
209 "eth0": _("Integrated Ethernet"),
210 "wlan0": _("Wireless")
212 return friendlyNames.get(x, x) # when we have no friendly name, use adapter name
214 def getAdapterName(self, iface):
217 def getAdapterList(self):
218 return self.ifaces.keys()
220 def getAdapterAttribute(self, iface, attribute):
221 if self.ifaces.has_key(iface):
222 if self.ifaces[iface].has_key(attribute):
223 return self.ifaces[iface][attribute]
226 def setAdapterAttribute(self, iface, attribute, value):
227 print "setting for adapter", iface, "attribute", attribute, " to value", value
228 if self.ifaces.has_key(iface):
229 self.ifaces[iface][attribute] = value
231 def removeAdapterAttribute(self, iface, attribute):
232 if self.ifaces.has_key(iface):
233 if self.ifaces[iface].has_key(attribute):
234 del self.ifaces[iface][attribute]
236 def getNameserverList(self):
237 if len(self.nameservers) == 0:
238 return [[0, 0, 0, 0], [0, 0, 0, 0]]
240 return self.nameservers
242 def clearNameservers(self):
243 self.nameservers = []
245 def addNameserver(self, nameserver):
246 if nameserver not in self.nameservers:
247 self.nameservers.append(nameserver)
249 def removeNameserver(self, nameserver):
250 if nameserver in self.nameservers:
251 self.nameservers.remove(nameserver)
253 def changeNameserver(self, oldnameserver, newnameserver):
254 if oldnameserver in self.nameservers:
255 for i in range(len(self.nameservers)):
256 if self.nameservers[i] == oldnameserver:
257 self.nameservers[i] = newnameserver
259 def writeDefaultNetworkConfig(self,mode='lan'):
260 fp = file('/etc/network/interfaces', 'w')
261 fp.write("# automatically generated by enigma 2\n# do NOT change manually!\n\n")
262 fp.write("auto lo\n")
263 fp.write("iface lo inet loopback\n\n")
265 fp.write("auto wlan0\n")
266 fp.write("iface wlan0 inet dhcp\n")
268 fp.write("auto eth0\n")
269 fp.write("iface eth0 inet dhcp\n")
273 def resetNetworkConfig(self,mode='lan'):
274 self.deactivateNetworkConfig()
275 self.writeDefaultNetworkConfig(mode)
277 os.system("ifconfig eth0 down")
278 os.system("ifconfig wlan0 up")
280 os.system("ifconfig eth0 up")
281 os.system("ifconfig wlan0 down")
283 def checkNetworkState(self):
284 ret=os.system("ping -c 1 www.dream-multimedia-tv.de")
290 def restartNetwork(self):
291 iNetwork.deactivateNetworkConfig()
292 iNetwork.activateNetworkConfig()
294 def getLinkState(self,iface,callback):
295 self.dataAvail = callback
296 cmd = self.ethtool_bin + " " + iface
297 self.container.appClosed.get().append(self.cmdFinished)
298 self.container.dataAvail.get().append(callback)
299 self.container.execute(cmd)
301 def cmdFinished(self,retval):
302 self.container.appClosed.get().remove(self.cmdFinished)
303 self.container.dataAvail.get().remove(self.dataAvail)