network setup rewrite... adds support for multiple devices and an extended setup...
authorStefan Pluecken <stefan.pluecken@multimedia-labs.de>
Mon, 19 Mar 2007 18:06:13 +0000 (18:06 +0000)
committerStefan Pluecken <stefan.pluecken@multimedia-labs.de>
Mon, 19 Mar 2007 18:06:13 +0000 (18:06 +0000)
.cvsignore
configure.ac
data/menu.xml
data/skin_default.xml
lib/python/Components/ConfigList.py
lib/python/Components/Network.py
lib/python/Plugins/Plugin.py
lib/python/Plugins/SystemPlugins/Makefile.am
lib/python/Screens/NetworkSetup.py

index 8de1bd004312ea813d25f4f012f9c485aaf16fee..c84b6b83ba729323345d8af837ba845ac41cbc34 100644 (file)
@@ -1,3 +1,5 @@
+.cvsignore
+configure.ac
 configure
 autom4te.cache
 Makefile.in
 configure
 autom4te.cache
 Makefile.in
index ef22a6b9ce997c87c71f7a468ca313432495ea07..b911b98006d2055e0867ccc15a7eaf43b56493ef 100644 (file)
@@ -76,6 +76,7 @@ lib/python/Plugins/SystemPlugins/ConfigurationBackup/Makefile
 lib/python/Plugins/SystemPlugins/Satfinder/Makefile
 lib/python/Plugins/SystemPlugins/SkinSelector/Makefile
 lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/Makefile
 lib/python/Plugins/SystemPlugins/Satfinder/Makefile
 lib/python/Plugins/SystemPlugins/SkinSelector/Makefile
 lib/python/Plugins/SystemPlugins/SatelliteEquipmentControl/Makefile
+lib/python/Plugins/SystemPlugins/WirelessLan/Makefile
 lib/python/Plugins/DemoPlugins/Makefile
 lib/python/Plugins/DemoPlugins/TestPlugin/Makefile
 lib/python/Plugins/Extensions/Makefile
 lib/python/Plugins/DemoPlugins/Makefile
 lib/python/Plugins/DemoPlugins/TestPlugin/Makefile
 lib/python/Plugins/Extensions/Makefile
index caa33abaa626933936ddc127315f61dc526e4639..d562ab3b434ef7d0834ddc004728181bc6014576 100644 (file)
                                <!--<item text="Keyboard"><setup id="keyboard" /></item>-->
                                <!--<item text="OSD"><setup id="osd" /></item>-->
                                <item><setup id="lcd" /></item>
                                <!--<item text="Keyboard"><setup id="keyboard" /></item>-->
                                <!--<item text="OSD"><setup id="osd" /></item>-->
                                <item><setup id="lcd" /></item>
-                               <item text="Network..."><screen module="NetworkSetup" screen="NetworkSetup" /></item>
+                               <menu text="Network...">
+                                       <id val="network" />
+                                       <item text="Device Setup..."><screen module="NetworkSetup" screen="NetworkAdapterSelection"/></item>
+                                       <item text="Nameserver Setup..."><screen module="NetworkSetup" screen="NameserverSetup"/></item>
+                               </menu>
                        </menu>
                        <item text="Common Interface"><screen module="Ci" screen="CiSelection" /></item>
                        <item text="Parental control"><screen module="ParentalControlSetup" screen="ParentalControlSetup" /></item>
                        </menu>
                        <item text="Common Interface"><screen module="Ci" screen="CiSelection" /></item>
                        <item text="Parental control"><screen module="ParentalControlSetup" screen="ParentalControlSetup" /></item>
index 0813609ee655c9eb9f1fd92222089b8cb6390e1d..4bdc5c160f055f7a9763b88e6e46b8c164692b50 100644 (file)
                <widget name="cancel" position="240,365" size="100,30" pixmap="cancel.png" />
                <widget name="canceltext" position="240,365" size="100,30" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" />
        </screen>
                <widget name="cancel" position="240,365" size="100,30" pixmap="cancel.png" />
                <widget name="canceltext" position="240,365" size="100,30" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" />
        </screen>
-       <screen name="NetworkSetup" position="130,148" size="460,280" title="Network Setup">
+       <screen name="NetworkSetup" position="100,150" size="540,100" title="Network Setup">
+               <widget name="menu" position="20,10" size="500,75" />
+       </screen>
+       <screen name="AdapterSetup" position="130,148" size="460,280" title="Network Setup">
+               <widget name="iface" position="10,10" size="380,30" zPosition="1" font="Regular;20" />
                <widget name="config" position="10,50" size="420,175" scrollbarMode="showOnDemand" />
                <widget name="introduction" position="10,230" size="400,30" font="Regular;23" />
        </screen>
                <widget name="config" position="10,50" size="420,175" scrollbarMode="showOnDemand" />
                <widget name="introduction" position="10,230" size="400,30" font="Regular;23" />
        </screen>
+       <screen name="NameserverSetup" position="130,148" size="460,280" title="Nameserver Setup">
+               <widget name="red" position="0,0" size="230,40" backgroundColor="red" halign="center" valign="center" font="Regular;21" />
+               <widget name="green" position="230,0" size="230,40" backgroundColor="green" halign="center" valign="center" font="Regular;21" />
+               <widget name="config" position="10,50" size="420,175" scrollbarMode="showOnDemand" />
+       </screen>
+       <screen name="NetworkAdapterSelection" position="100,150" size="540,100" title="Select Network Adapter">
+               <widget name="adapterlist" position="20,10" size="500,75" />
+       </screen>
        <screen name="About" position="180,163" size="360,250" title="About">
                <widget name="text" position="10,30" size="420,20" font="Regular;18"/>
                <widget name="fpVersion" position="10,50" size="420,20" font="Regular;18"/>
        <screen name="About" position="180,163" size="360,250" title="About">
                <widget name="text" position="10,30" size="420,20" font="Regular;18"/>
                <widget name="fpVersion" position="10,50" size="420,20" font="Regular;18"/>
index 8b880fba2728bcda81e89f7df2910f63f38c782d..534459e4e4b9fddcb10a9896d554848a8cf6e1ce 100644 (file)
@@ -45,6 +45,9 @@ class ConfigList(HTMLComponent, GUIComponent, object):
        def getCurrent(self):
                return self.l.getCurrentSelection()
        
        def getCurrent(self):
                return self.l.getCurrentSelection()
        
+       def getCurrentIndex(self):
+               return self.l.getCurrentSelectionIndex()
+       
        def invalidateCurrent(self):
                self.l.invalidateEntry(self.l.getCurrentSelectionIndex())
 
        def invalidateCurrent(self):
                self.l.invalidateEntry(self.l.getCurrentSelectionIndex())
 
index d3c9cc77a5160163de0b7ec58f377d7a9518e07e..884f97cd48540fc59c3dc6e1d21f64a998f606eb 100644 (file)
 from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigSubsection, ConfigMAC
 
 import os
 from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigSubsection, ConfigMAC
 
 import os
+import re
 from socket import *
 
 class Network:
 from socket import *
 
 class Network:
-       def __init__(self, iface = "eth0"):
-               self.iface = iface
+       def __init__(self):
+               self.ifaces = {}
+               self.nameservers = []
+               self.getInterfaces()
                
                
+       def getInterfaces(self):
+               devicesPattern = re.compile('[a-z]+[0-9]+')
+               
+               fp = file('/proc/net/dev', 'r')
+               result = fp.readlines()
+               fp.close()
+               for line in result:
+                       try:
+                               device = devicesPattern.search(line).group()
+                               self.ifaces[device] = self.getDataForInterface(device)
+                       except AttributeError:
+                               pass
+               
+               print "self.ifaces:", self.ifaces
+               self.loadNetworkConfig()
+               #self.writeNetworkConfig()
+               #print ord(' ')
+               #for line in result:
+#                      print ord(line[0])
+
+       # helper function
+       def regExpMatch(self, pattern, string):
+               if string is None:
+                       return None
+               try:
+                       return pattern.search(string).group()
+               except AttributeError:
+                       None
+       
+       # helper function to convert ips from a sring to a list of ints
+       def convertIP(self, ip):
+               strIP = ip.split('.')
+               ip = []
+               for x in strIP:
+                       ip.append(int(x))
+               return ip
+
+       def getDataForInterface(self, iface):
+               #ipRegexp = '[0-9]{1,2,3}\.[0-9]{1,2,3}\.[0-9]{1,2,3}\.[0-9]{1,2,3}'
+               ipRegexp = '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
+               ipLinePattern = re.compile('inet addr:' + ipRegexp)
+               netmaskLinePattern = re.compile('Mask:' + ipRegexp)
+               bcastLinePattern = re.compile('Bcast:' + ipRegexp)
+               ipPattern = re.compile(ipRegexp)
+               upPattern = re.compile('UP ')
+               macPattern = re.compile('[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{2}')
+               
+               fp = os.popen("ifconfig " + iface)
+               result = fp.readlines()
+               fp.close()
+               data = { 'up': False, 'dhcp': False }
+               for line in result:
+                       ip = self.regExpMatch(ipPattern, self.regExpMatch(ipLinePattern, line))
+                       netmask = self.regExpMatch(ipPattern, self.regExpMatch(netmaskLinePattern, line))
+                       bcast = self.regExpMatch(ipPattern, self.regExpMatch(bcastLinePattern, line))
+                       up = self.regExpMatch(upPattern, line)
+                       mac = self.regExpMatch(macPattern, line)
+                       if ip is not None:
+                               data['ip'] = self.convertIP(ip)
+                       if netmask is not None:
+                               data['netmask'] = self.convertIP(netmask)
+                       if bcast is not None:
+                               data['bcast'] = self.convertIP(bcast)
+                       if up is not None:
+                               data['up'] = True
+                       if mac is not None:
+                               data['mac'] = mac
+               if not data.has_key('ip'):
+                       data['dhcp'] = True
+                       data['ip'] = [192, 168, 1, 2]
+                       data['netmask'] = [255, 255, 255, 0]
+                       data['gateway'] = [192, 168, 1, 1]
+               
+               fp = os.popen("route -n | grep  " + iface)
+               result = fp.readlines()
+               fp.close()                              
+               for line in result:
+                       print line[0:7]
+                       if line[0:7] == "0.0.0.0":
+                               gateway = self.regExpMatch(ipPattern, line[16:31])
+                               if gateway is not None:
+                                       data['gateway'] = self.convertIP(gateway)
+               return data
+
        def writeNetworkConfig(self):
        def writeNetworkConfig(self):
-               # fixme restarting and updating the network too often. possible fix: check current config and execute only if changed :/
-               # fixme using interfaces.tmp instead of interfaces for now
-               fp = file('/etc/network/interfaces', 'w')
+               fp = file('/etc/network/interfaces.tmp', '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")
                fp.write("auto lo\n")
                fp.write("iface lo inet loopback\n\n")
-               fp.write("auto "+self.iface+"\n")
-               if config.network.dhcp.value:
-                       fp.write("iface "+self.iface+" inet dhcp\n")
-               else:
-                       fp.write("iface "+self.iface+" inet static\n")
-                       fp.write("      address %d.%d.%d.%d\n" % tuple(config.network.ip.value))
-                       fp.write("      netmask %d.%d.%d.%d\n" % tuple(config.network.netmask.value))
-                       fp.write("      gateway %d.%d.%d.%d\n" % tuple(config.network.gateway.value))
-                       fp2 = file('/etc/resolv.conf', 'w')
-                       fp2.write("nameserver %d.%d.%d.%d\n" % tuple(config.network.dns.value))
-                       fp2.close()
+               
+               for ifacename, iface in self.ifaces.items():
+                       if iface['up'] == True:
+                               fp.write("auto " + ifacename + "\n")
+                       if iface['dhcp'] == True:
+                               fp.write("iface "+ ifacename +" inet dhcp\n")
+                       else:
+                               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']))
+                       fp.write("\n")
                fp.close()
                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):
 
        def loadNetworkConfig(self):
+               self.loadNameserverConfig()
+               
+               interfaces = []
+               # parse the interfaces-file
                try:
                try:
-                       # parse the interfaces-file
-                       fp = file('/etc/network/interfaces', 'r')
+                       fp = file('/etc/network/interfaces.tmp', 'r')
                        interfaces = fp.readlines()
                        fp.close()
                        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"] = "yes"
-                                       else:
-                                               ifaces[currif]["dhcp"] = "no"
-                               if (currif != ""):
-                                       if (split[0] == "address"):
-                                               ifaces[currif]["address"] = map(int, split[1].split('.'))
-                                       if (split[0] == "netmask"):
-                                               ifaces[currif]["netmask"] = map(int, split[1].split('.'))
-                                       if (split[0] == "gateway"):
-                                               ifaces[currif]["gateway"] = map(int, split[1].split('.'))                                                                       
-                       
-                       # parse the resolv.conf-file
+               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 != ""):
+                               if (split[0] == "address"):
+                                       ifaces[currif]["address"] = map(int, split[1].split('.'))
+                               if (split[0] == "netmask"):
+                                       ifaces[currif]["netmask"] = map(int, split[1].split('.'))
+                               if (split[0] == "gateway"):
+                                       ifaces[currif]["gateway"] = map(int, split[1].split('.'))                                                                       
+               
+               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()
                        fp = file('/etc/resolv.conf', 'r')
                        resolv = fp.readlines()
                        fp.close()
+                       self.nameservers = []
                except:
                except:
-                       print "[Network.py] loading network files failed"
-                       
-               try:
-                       for i in resolv:
-                               split = i.strip().split(' ')
-                               if (split[0] == "nameserver"):
-                                       config.network.dns.value = map(int, split[1].split('.'))
-               except:
-                       print "[Network.py] resolv.conf parsing failed"
+                       print "[Network.py] resolv.conf - opening failed"
                
                
-               try:
-                       # set this config
-                       if (ifaces.has_key(self.iface)):
-                               if (ifaces[self.iface]["dhcp"] == "yes"):
-                                       config.network.dhcp.value = 1
-                               else:
-                                       config.network.dhcp.value = 0
-                               if (ifaces[self.iface].has_key("address")): config.network.ip.value = ifaces[self.iface]["address"]
-                               if (ifaces[self.iface].has_key("netmask")): config.network.netmask.value = ifaces[self.iface]["netmask"]
-                               if (ifaces[self.iface].has_key("gateway")): config.network.gateway.value = ifaces[self.iface]["gateway"]
-               except:
-                       print "[Network.py] parsing network 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):
 
        def deactivateNetworkConfig(self):
-               import os
-               os.system("ip addr flush"+self.iface)
+               for iface in self.ifaces.keys():
+                       os.system("ip addr flush" + iface)
                os.system("/etc/init.d/networking stop")
                os.system("killall -9 udhcpc")
                os.system("rm /var/run/udhcpc*")
 
        def activateNetworkConfig(self):
                os.system("/etc/init.d/networking stop")
                os.system("killall -9 udhcpc")
                os.system("rm /var/run/udhcpc*")
 
        def activateNetworkConfig(self):
-               import os
                os.system("/etc/init.d/networking start")
                os.system("/etc/init.d/networking start")
-               config.network.ip.value = self.getCurrentIP()
-               config.network.ip.save()
                
                
-       def setDHCP(self, useDHCP):
-               if (useDHCP):
-                       print "Using DHCP"
-                       config.network.ip.enabled = False
-                       config.network.netmask.enabled = False
-                       config.network.gateway.enabled = False
-                       config.network.dns.enabled = False
-               else:
-                       print "NOT using DHCP"
-                       config.network.ip.enabled = True
-                       config.network.netmask.enabled = True
-                       config.network.gateway.enabled = True
-                       config.network.dns.enabled = True
-                                       
-       def setIPNameserver(self, ip):
-               return
-               resolvconf = file('/etc/resolv.conf', 'w')
-               resolvconf.write("nameserver %d.%d.%d.%d" % tuple(ip))
-               resolvconf.close()
-               
-       def setMACAddress(self, mac):
-               #os.system("echo ifconfig eth0 ether %02x:%02x:%02x:%02x:%02x:%02x" % tuple(mac))
-               pass
-               
-       def setIPAddress(self, ip):
-               pass
-               #os.system("echo ifconfig eth0 %d.%d.%d.%d" % tuple(ip))
-               #self.writeNetworkConfig()
-
-       def setGateway(self, ip):
-               pass
-               #os.system("echo route add default gw %d.%d.%d.%d" % tuple(ip))
-               #self.writeNetworkConfig()
+       def getNumberOfAdapters(self):
+               return len(self.ifaces)
+       
+       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):
+               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):
+               return self.nameservers
+       
+       def clearNameservers(self):
+               self.nameservers = []
+       
+       def addNameserver(self, nameserver):
+               if nameserver not in self.nameservers:
+                       self.nameservers.append(nameserver)
                
                
-       def setNetmask(self, ip):
-               pass
-               #os.system("echo ifconfig eth0 netmask %d.%d.%d.%d" % tuple(ip))                
-               #self.writeNetworkConfig()              
-
-       def getCurrentIP(self):
-               ipstr = [0,0,0,0]
-               for x in os.popen("ifconfig "+self.iface+" | grep 'inet addr:'", "r").readline().split(' '):
-                       if x.split(':')[0] == "addr":
-                               ipstr = x.split(':')[1].split('.')
-               ip = []
-               for x in ipstr:
-                       ip.append(int(x))
-               print "[Network.py] got ip " + str(ip)
-               return ip
+       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
 
 iNetwork = Network()
 
 def InitNetwork():
 
 iNetwork = Network()
 
 def InitNetwork():
-       config.network = ConfigSubsection()
-       config.network.dhcp = NoSave(ConfigYesNo(default=True))
-       config.network.ip = NoSave(ConfigIP(default=iNetwork.getCurrentIP()))
-       config.network.netmask = NoSave(ConfigIP(default=[255,255,255,0]))
-       config.network.gateway = NoSave(ConfigIP(default=[192,168,1,3]))
-       config.network.dns = NoSave(ConfigIP(default=[192,168,1,3]))
-       config.network.mac = NoSave(ConfigMAC(default=[00,11,22,33,44,55]))
-
-       iNetwork.loadNetworkConfig()
-       
-       def writeNetworkConfig(configElement):
-               iNetwork.writeNetworkConfig()
-               
-       def setIPAddress(configElement):
-               iNetwork.setIPAddress(configElement.value)
-
-       def setGateway(configElement):
-               iNetwork.setGateway(configElement.value)
-
-       def setNetmask(configElement):
-               iNetwork.setNetmask(configElement.value)                
-
-       def setDHCP(configElement):
-               iNetwork.setDHCP(configElement.value)
-
-       def setIPNameserver(configElement):
-               iNetwork.setIPNameserver(configElement.value)
-
-       def setMACAddress(configElement):
-               iNetwork.setMACAddress(configElement.value)
-
-
-       # this will call the "setup-val" initial
-       config.network.dhcp.addNotifier(setDHCP)
-       config.network.ip.addNotifier(setIPAddress)
-       config.network.netmask.addNotifier(setNetmask)  
-       config.network.gateway.addNotifier(setGateway)
-       config.network.dns.addNotifier(setIPNameserver)
-       config.network.mac.addNotifier(setMACAddress)
+       pass
index c792446a032606aad038c7c287b71ca0a9dc94d9..b80dcadcf12189cd655aa12dac78191bd283e5ba 100644 (file)
@@ -41,6 +41,10 @@ class PluginDescriptor:
        # file-scanner, fnc must return a list of Scanners
        WHERE_FILESCAN = 9
        
        # file-scanner, fnc must return a list of Scanners
        WHERE_FILESCAN = 9
        
+       # fnc must take an interface name as parameter and return None if the plugin supports an extended setup
+       # or return a function which is called with session and the interface name for extended setup of this interface
+       WHERE_NETWORKSETUP = 10
+       
        def __init__(self, name = "Plugin", where = [ ], description = "", icon = None, fnc = None):
                self.name = name
                if type(where) is list:
        def __init__(self, name = "Plugin", where = [ ], description = "", icon = None, fnc = None):
                self.name = name
                if type(where) is list:
index 80d8101a91ddb1c04e38214f508778bc33ab0cbf..c9e2782719b6afab150d09d47c2fde7a79b6fe67 100644 (file)
@@ -1 +1 @@
-SUBDIRS = SoftwareUpdate FrontprocessorUpgrade PositionerSetup ConfigurationBackup Satfinder SkinSelector SatelliteEquipmentControl
+SUBDIRS = SoftwareUpdate FrontprocessorUpgrade PositionerSetup ConfigurationBackup Satfinder SkinSelector SatelliteEquipmentControl WirelessLan
index 278c66063055d3334ab3849c3d1b50c1c935af92..640da615764d19861ad7620ace1812f3ce79dcb6 100644 (file)
@@ -4,11 +4,114 @@ from Components.ConfigList import ConfigList, ConfigListScreen
 from Components.config import config, getConfigListEntry
 from Components.Network import iNetwork
 from Components.Label import Label
 from Components.config import config, getConfigListEntry
 from Components.Network import iNetwork
 from Components.Label import Label
+from Components.MenuList import MenuList
+from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigSubsection, ConfigNothing
+from Components.PluginComponent import plugins
+from Plugins.Plugin import PluginDescriptor
 
 
-class NetworkSetup(Screen, ConfigListScreen):
+
+class NetworkAdapterSelection(Screen):
        def __init__(self, session):
                Screen.__init__(self, session)
        def __init__(self, session):
                Screen.__init__(self, session)
+               
+               self["adapterlist"] = MenuList(iNetwork.getAdapterList())
+               
+               self["actions"] = ActionMap(["OkCancelActions"],
+               {
+                       "ok": self.okbuttonClick ,
+                       "cancel": self.close
+               })
+
+       def okbuttonClick(self):
+               selection = self["adapterlist"].getCurrent()
+               print "selection:", selection
+               if selection is not None:
+                       self.session.open(AdapterSetup, selection)
+                       
+class NameserverSetup(Screen, ConfigListScreen):
+       def __init__(self, session):
+               Screen.__init__(self, session)
+               self.backupNameserverList = iNetwork.getNameserverList()[:]
+               print "backup-list:", self.backupNameserverList
+               
+               self["red"] = Label(_("Delete"))
+               self["green"] = Label(_("Add"))
+               
+               self.createConfig()
+               
+               self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
+               {
+                       "ok": self.ok,
+                       "cancel": self.cancel,
+                       "green": self.add,
+                       "red": self.remove
+               }, -2)
+
+               self.list = []
+               ConfigListScreen.__init__(self, self.list)
+               self.createSetup()
+               
+       def createConfig(self):
+               self.nameservers = iNetwork.getNameserverList()
+               self.nameserverEntries = []
+               
+               for nameserver in self.nameservers:
+                       self.nameserverEntries.append(NoSave(ConfigIP(default=nameserver)))
+                       
+       def createSetup(self):
+               self.list = []
+
+               #self.nameserverConfigEntries = []
+               for i in range(len(self.nameserverEntries)):
+                       self.list.append(getConfigListEntry(_("Nameserver %d") % (i + 1), self.nameserverEntries[i]))
+               
+               self["config"].list = self.list
+               self["config"].l.setList(self.list)
+
+       def ok(self):
+               iNetwork.clearNameservers()
+               for nameserver in self.nameserverEntries:
+                       iNetwork.addNameserver(nameserver.value)
+               iNetwork.writeNameserverConfig()
+               self.close()
+       
+       def cancel(self):
+               iNetwork.clearNameservers()
+               print "backup-list:", self.backupNameserverList
+               for nameserver in self.backupNameserverList:
+                       iNetwork.addNameserver(nameserver)
+               self.close()
+       
+       def add(self):
+               iNetwork.addNameserver([0,0,0,0])
+               self.createConfig()
+               self.createSetup()
+       
+       def remove(self):
+               print "currentIndex:", self["config"].getCurrentIndex()
+               
+               index = self["config"].getCurrentIndex()
+               if index < len(self.nameservers):
+                       iNetwork.removeNameserver(self.nameservers[index])
+                       self.createConfig()
+                       self.createSetup()
+
+               
+class AdapterSetup(Screen, ConfigListScreen):
+       def __init__(self, session, iface):
+               Screen.__init__(self, session)
+               
+               self.iface = iface
+
+               print iNetwork.getAdapterAttribute(self.iface, "dhcp")
+               self.dhcpConfigEntry = NoSave(ConfigYesNo(default=iNetwork.getAdapterAttribute(self.iface, "dhcp")))
+               self.hasGatewayConfigEntry = NoSave(ConfigYesNo(default=True))
+               self.ipConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "ip")))
+               self.netmaskConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "netmask")))
+               self.gatewayConfigEntry = NoSave(ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "gateway")))
         
         
+               self["iface"] = Label(iNetwork.getAdapterName(self.iface))
+                       
                self["actions"] = ActionMap(["SetupActions"],
                {
                        "ok": self.ok,
                self["actions"] = ActionMap(["SetupActions"],
                {
                        "ok": self.ok,
@@ -24,13 +127,22 @@ class NetworkSetup(Screen, ConfigListScreen):
        def createSetup(self):
                self.list = []
 
        def createSetup(self):
                self.list = []
 
-               self.dhcpEntry = getConfigListEntry(_("Use DHCP"), config.network.dhcp)
+               self.dhcpEntry = getConfigListEntry(_("Use DHCP"), self.dhcpConfigEntry)
                self.list.append(self.dhcpEntry)
                self.list.append(self.dhcpEntry)
-               self.list.append(getConfigListEntry(_('IP Address'), config.network.ip))
-               if not config.network.dhcp.value:
-                       self.list.append(getConfigListEntry(_('Netmask'), config.network.netmask))
-                       self.list.append(getConfigListEntry(_('Gateway'), config.network.gateway))
-                       self.list.append(getConfigListEntry(_('Nameserver'), config.network.dns))
+               if not self.dhcpConfigEntry.value:
+                       self.list.append(getConfigListEntry(_('IP Address'), self.ipConfigEntry))
+                       self.list.append(getConfigListEntry(_('Netmask'), self.netmaskConfigEntry))
+                       self.list.append(getConfigListEntry(_('Use a gateway'), self.hasGatewayConfigEntry))
+                       if self.hasGatewayConfigEntry.value:
+                               self.list.append(getConfigListEntry(_('Gateway'), self.gatewayConfigEntry))
+               
+               self.extended = None
+               for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKSETUP):
+                       callFnc = p.__call__(self.iface)
+                       if callFnc is not None:
+                               self.extended = callFnc
+                               self.extendedSetup = getConfigListEntry(_('Extended Setup...'), NoSave(ConfigNothing()))
+                               self.list.append(self.extendedSetup)
 
                self["config"].list = self.list
                self["config"].l.setList(self.list)
 
                self["config"].list = self.list
                self["config"].l.setList(self.list)
@@ -49,16 +161,24 @@ class NetworkSetup(Screen, ConfigListScreen):
                self.createSetup()
 
        def ok(self):
                self.createSetup()
 
        def ok(self):
-               #for x in self["config"].list:
-                       #x[1].save()
-               
-               iNetwork.deactivateNetworkConfig()
-               iNetwork.writeNetworkConfig()    
-               iNetwork.activateNetworkConfig()
-               self.close()
+               selection = self["config"].getCurrent()
+               if selection == self.extendedSetup:
+                       self.extended(self.session, self.iface)
+               else:
+                       iNetwork.setAdapterAttribute(self.iface, "dhcp", self.dhcpConfigEntry.value)
+                       iNetwork.setAdapterAttribute(self.iface, "ip", self.ipConfigEntry.value)
+                       iNetwork.setAdapterAttribute(self.iface, "netmask", self.netmaskConfigEntry.value)
+                       if self.hasGatewayConfigEntry.value:
+                               iNetwork.setAdapterAttribute(self.iface, "gateway", self.gatewayConfigEntry.value)
+                       else:
+                               iNetwork.removeAdapterAttribute(self.iface, "gateway")
+                                       
+                                       
+                       iNetwork.deactivateNetworkConfig()
+                       iNetwork.writeNetworkConfig()    
+                       iNetwork.activateNetworkConfig()
+                       self.close()
 
        def cancel(self):
 
        def cancel(self):
-               for x in self["config"].list:
-                       x[1].cancel()
-               iNetwork.loadNetworkConfig()
+               iNetwork.getInterfaces()
                self.close()
                self.close()