1 from Screens.Screen import Screen
2 from Components.ConfigList import ConfigListScreen, ConfigList
3 from Components.config import config, ConfigSubsection, getConfigListEntry, ConfigSelection, ConfigIP, ConfigInteger
4 from Components.config import ConfigText, ConfigYesNo, NoSave, ConfigPassword, ConfigNothing, ConfigSequence
5 from Components.ActionMap import ActionMap
6 from Screens.MessageBox import MessageBox
7 from Components.Sources.StaticText import StaticText
8 from Plugins.Plugin import PluginDescriptor
9 from Tools.Directories import fileExists
10 from math import pow as math_pow
11 from Components.Network import iNetwork
12 from Components.PluginComponent import plugins
13 from Components.Console import Console
14 from os import path as os_path, system as os_system, listdir
15 from Tools.Directories import resolveFilename, SCOPE_PLUGINS
16 from enigma import eTimer
20 def printDebugMsg(msg):
23 print "[Wireless Access Point] ", msg
26 def __init__(self, value = ""):
29 apModeConfig = ConfigSubsection()
30 apModeConfig.useap = ConfigYesNo(default = False)
31 apModeConfig.setupmode = ConfigSelection(default = "simple", choices = [ ("simple", "Simple"), ("advanced", "Advanced") ] )
32 #apModeConfig.wirelessdevice = fixedValue(value = "")
33 apModeConfig.branch = fixedValue(value = "br0")
34 apModeConfig.driver = fixedValue(value = "nl80211")
35 apModeConfig.wirelessmode = ConfigSelection(default = "g", choices = [ ("b", "802.11b"), ("a", "802.11a"), ("g", "802.11g") ] )
36 apModeConfig.channel = ConfigInteger(default = 1, limits = (1,13) )
37 apModeConfig.ssid = ConfigText(default = "Input SSID", visible_width = 50, fixed_size = False)
38 apModeConfig.beacon = ConfigInteger(default = 100, limits = (15,65535))
39 apModeConfig.rts_threshold = ConfigInteger(default = 2347, limits = (0,2347) )
40 apModeConfig.fragm_threshold = ConfigInteger(default = 2346, limits = (256,2346) )
41 apModeConfig.preamble = ConfigSelection(default = "0", choices = [ ("0", "Long"), ("1", "Short") ] )
42 apModeConfig.ignore_broadcast_ssid = ConfigSelection(default = "0", choices = [ ("0", _("disabled")), ("1", _("enabled")) ])
44 apModeConfig.encrypt = ConfigYesNo(default = False)
45 apModeConfig.method = ConfigSelection(default = "0", choices = [
46 ("0", _("WEP")), ("1", _("WPA")), ("2", _("WPA2")),("3", _("WPA/WPA2"))])
47 apModeConfig.wep = ConfigYesNo(default = False)
48 #apModeConfig.wep_default_key = ConfigSelection(default = "0", choices = [ ("0", "0"), ("1", "1"), ("2", "2"), ("3", "3") ] )
49 apModeConfig.wep_default_key = fixedValue(value = "0")
50 apModeConfig.wepType = ConfigSelection(default = "64", choices = [
51 ("64", _("Enable 64 bit (Input 10 hex keys)")), ("128", _("Enable 128 bit (Input 26 hex keys)"))])
52 apModeConfig.wep_key0 = ConfigPassword(default = "", visible_width = 50, fixed_size = False)
53 apModeConfig.wpa = ConfigSelection(default = "0", choices = [
54 ("0", _("not set")), ("1", _("WPA")), ("2", _("WPA2")),("3", _("WPA/WPA2"))])
55 apModeConfig.wpa_passphrase = ConfigPassword(default = "", visible_width = 50, fixed_size = False)
56 apModeConfig.wpagrouprekey = ConfigInteger(default = 600, limits = (0,3600))
57 apModeConfig.wpa_key_mgmt = fixedValue(value = "WPA-PSK")
58 apModeConfig.wpa_pairwise = fixedValue(value = "TKIP CCMP")
59 apModeConfig.rsn_pairwise = fixedValue(value = "CCMP")
61 apModeConfig.usedhcp = ConfigYesNo(default=True)
62 apModeConfig.address = ConfigIP(default = [0,0,0,0])
63 apModeConfig.netmask = ConfigIP(default = [255,0,0,0])
64 apModeConfig.gateway = ConfigIP(default = [0,0,0,0])
66 class WirelessAccessPoint(Screen,ConfigListScreen):
68 <screen position="center,center" size="590,450" title="Wireless Access Point" >
69 <ePixmap pixmap="skin_default/buttons/red.png" position="20,0" size="140,40" alphatest="on" />
70 <ePixmap pixmap="skin_default/buttons/green.png" position="160,0" size="140,40" alphatest="on" />
71 <ePixmap pixmap="skin_default/buttons/yellow.png" position="300,0" size="140,40" alphatest="on" />
72 <ePixmap pixmap="skin_default/buttons/blue.png" position="440,0" size="140,40" alphatest="on" />
74 <widget source="key_red" render="Label" position="20,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ffffff" backgroundColor="#9f1313" transparent="1" />
75 <widget source="key_green" render="Label" position="160,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ffffff" backgroundColor="#1f771f" transparent="1" />
76 <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ffffff" backgroundColor="#a08500" transparent="1" />
77 <widget source="key_blue" render="Label" position="440,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ffffff" backgroundColor="#18188b" transparent="1" />
79 <widget name="config" zPosition="2" position="10,70" size="580,270" scrollbarMode="showOnDemand" transparent="1" />
80 <widget source="current_settings" render="Label" position="10,340" size="570,20" font="Regular;19" halign="center" valign="center" transparent="1" />
81 <widget source="IPAddress_text" render="Label" position="130,370" size="190,21" font="Regular;19" transparent="1" />
82 <widget source="Netmask_text" render="Label" position="130,395" size="190,21" font="Regular;19" transparent="1" />
83 <widget source="Gateway_text" render="Label" position="130,420" size="190,21" font="Regular;19" transparent="1" />
84 <widget source="IPAddress" render="Label" position="340,370" size="240,21" font="Regular;19" transparent="1" />
85 <widget source="Netmask" render="Label" position="340,395" size="240,21" font="Regular;19" transparent="1" />
86 <widget source="Gateway" render="Label" position="340,420" size="240,21" font="Regular;19" transparent="1" />
89 def __init__(self,session):
90 Screen.__init__(self,session)
91 self.session = session
92 self["shortcuts"] = ActionMap(["ShortcutActions", "SetupActions" ],
94 "ok": self.doConfigMsg,
95 "cancel": self.keyCancel,
96 "red": self.keyCancel,
97 "green": self.doConfigMsg,
100 ConfigListScreen.__init__(self, self.list,session = self.session)
101 self["key_red"] = StaticText(_("Cancel"))
102 self["key_green"] = StaticText(_("Ok"))
103 self["key_yellow"] = StaticText(_(" "))
104 self["key_blue"] = StaticText(_(" "))
105 self["current_settings"] = StaticText(_("Current settings (interface : br0)"))
106 self["IPAddress_text"] = StaticText(_("IP Address"))
107 self["Netmask_text"] = StaticText(_("Netmask"))
108 self["Gateway_text"] = StaticText(_("Gateway"))
109 self["IPAddress"] = StaticText(_("N/A"))
110 self["Netmask"] = StaticText(_("N/A"))
111 self["Gateway"] = StaticText(_("N/A"))
112 self.wirelessAP = wirelessap.wirelessAP()
113 self.checkRunHostapd()
114 self.checkWirelessDevices()
115 self.makeConfigList()
116 self.loadInterfacesConfig()
117 self.loadHostapConfig()
118 self.setupCurrentEncryption()
119 self.createConfigEntry()
121 self.onClose.append(self.__onClose)
122 self.onLayoutFinish.append(self.checkwlanDeviceList)
123 self.onLayoutFinish.append(self.currentNetworkSettings)
124 self.checkwlanDeviceListTimer = eTimer()
125 self.checkwlanDeviceListTimer.callback.append(self.WirelessDeviceNotDetectedMsg)
127 def checkwlanDeviceList(self):
128 if len(self.wlanDeviceList) == 0:
129 self.checkwlanDeviceListTimer.start(100,True)
131 def WirelessDeviceNotDetectedMsg(self):
132 self.session.openWithCallback(self.close ,MessageBox, _("Wireless Lan Device is not detected."), MessageBox.TYPE_ERROR)
134 def currentNetworkSettings(self):
135 self["IPAddress"].setText(self.formatAddr(iNetwork.getAdapterAttribute("br0", "ip")))
136 self["Netmask"].setText(self.formatAddr(iNetwork.getAdapterAttribute("br0", "netmask")))
137 self["Gateway"].setText(self.formatAddr(iNetwork.getAdapterAttribute("br0", "gateway")))
139 def formatAddr(self, address = [0,0,0,0]):
142 return "%d:%d:%d:%d"%(address[0],address[1],address[2],address[3])
144 def checkRunHostapd(self):
146 if fileExists("/var/run/hostapd", 0):
147 apModeConfig.useap.value = True
149 def makeConfigList(self):
151 self.hostapdConfigList = {}
152 self.hostapdConfigList["interface"] = apModeConfig.wirelessdevice
153 self.hostapdConfigList["bridge"] = apModeConfig.branch # "br0"
154 self.hostapdConfigList["driver"] = apModeConfig.driver # "nl80211"
155 self.hostapdConfigList["hw_mode"] = apModeConfig.wirelessmode
156 self.hostapdConfigList["channel"] = apModeConfig.channel
157 self.hostapdConfigList["ssid"] = apModeConfig.ssid
158 self.hostapdConfigList["beacon_int"] = apModeConfig.beacon
159 self.hostapdConfigList["rts_threshold"] = apModeConfig.rts_threshold
160 self.hostapdConfigList["fragm_threshold"] = apModeConfig.fragm_threshold
161 self.hostapdConfigList["preamble"] = apModeConfig.preamble
162 # self.hostapdConfigList["macaddr_acl"] = "" # fix to add Access Control List Editer
163 # self.hostapdConfigList["accept_mac_file"] = "" # fix to add Access Control List Editer
164 # self.hostapdConfigList["deny_mac_file"] = "" # fix to add Access Control List Editer
165 self.hostapdConfigList["ignore_broadcast_ssid"] = apModeConfig.ignore_broadcast_ssid
166 # self.hostapdConfigList["wmm_enabled"] = ""
167 # self.hostapdConfigList["ieee80211n"] = ""
168 # self.hostapdConfigList["ht_capab"] = ""
169 self.hostapdConfigList["wep_default_key"] = apModeConfig.wep_default_key
170 self.hostapdConfigList["wep_key0"] = apModeConfig.wep_key0
171 self.hostapdConfigList["wpa"] = apModeConfig.wpa
172 self.hostapdConfigList["wpa_passphrase"] = apModeConfig.wpa_passphrase
173 self.hostapdConfigList["wpa_key_mgmt"] = apModeConfig.wpa_key_mgmt # "WPA-PSK"
174 self.hostapdConfigList["wpa_pairwise"] = apModeConfig.wpa_pairwise # "TKIP CCMP"
175 self.hostapdConfigList["rsn_pairwise"] = apModeConfig.rsn_pairwise # "CCMP"
176 self.hostapdConfigList["wpa_group_rekey"] = apModeConfig.wpagrouprekey
178 def loadInterfacesConfig(self):
181 fp = file('/etc/network/interfaces', 'r')
182 datas = fp.readlines()
185 printDebugMsg("interfaces - file open failed")
186 # check br0 configuration
191 split = line.strip().split(' ')
192 if (split[0] == "iface"):
193 current_iface = split[1]
194 if (current_iface == "br0") and (len(split) == 4 and split[3] == "dhcp"):
195 apModeConfig.usedhcp.value = True
197 apModeConfig.usedhcp.value = False
198 if (current_iface == "br0" or current_iface == "eth0"):
199 if (split[0] == "address"):
200 apModeConfig.address.value = map(int, split[1].split('.'))
201 if (split[0] == "netmask"):
202 apModeConfig.netmask.value = map(int, split[1].split('.'))
203 if (split[0] == "gateway"):
204 apModeConfig.gateway.value = map(int, split[1].split('.'))
206 printDebugMsg("configuration parsing error! - /etc/network/interfaces")
208 def loadHostapConfig(self):
210 ret = self.wirelessAP.loadHostapConfig(hostapdConf)
212 printDebugMsg("configuration opening failed!!")
214 for (key,value) in hostapdConf.items():
215 if key == "config.wep":
216 apModeConfig.wep.value = int(value)
217 elif key in ["channel", "beacon_int", "rts_threshold", "fragm_threshold", "wpa_group_rekey"]:
218 self.hostapdConfigList[key].value = int(value)
219 elif key in self.hostapdConfigList.keys():
220 self.hostapdConfigList[key].value = value
221 if key == "channel" and int(value) not in range(14):
222 self.hostapdConfigList[key].value = 1
224 # for key in self.hostapdConfigList.keys():
225 # printDebugMsg("[cofigList] key : %s, value : %s"%(key, str(self.hostapdConfigList[key].value)) )
227 def setupCurrentEncryption(self):
228 if apModeConfig.wpa.value is not "0" and apModeConfig.wpa_passphrase.value: # (1,WPA), (2,WPA2), (3,WPA/WPA2)
229 apModeConfig.encrypt.value = True
230 apModeConfig.method.value = apModeConfig.wpa.value
231 elif apModeConfig.wep.value and apModeConfig.wep_key0.value:
232 apModeConfig.encrypt.value = True
233 apModeConfig.method.value = "0"
234 if len(apModeConfig.wep_key0.value) > 10:
235 apModeConfig.wepType.value = "128"
237 apModeConfig.encrypt.value = False
239 def createConfigEntry(self):
242 self.useApEntry = getConfigListEntry(_("Use AP Mode"), apModeConfig.useap)
243 self.setupModeEntry = getConfigListEntry(_("Setup Mode"), apModeConfig.setupmode)
244 self.wirelessDeviceEntry = getConfigListEntry(_("AP Device"), apModeConfig.wirelessdevice)
245 self.wirelessModeEntry = getConfigListEntry(_("AP Mode"), apModeConfig.wirelessmode)
246 self.channelEntry = getConfigListEntry(_("Channel (1~13)"), apModeConfig.channel)
247 self.ssidEntry = getConfigListEntry(_("SSID (1~32 Characters)"), apModeConfig.ssid)
248 self.beaconEntry = getConfigListEntry(_("Beacon (15~65535)"), apModeConfig.beacon)
249 self.rtsThresholdEntry = getConfigListEntry(_("RTS Threshold (0~2347)"), apModeConfig.rts_threshold)
250 self.fragmThresholdEntry = getConfigListEntry(_("FRAGM Threshold (256~2346)"), apModeConfig.fragm_threshold)
251 self.prambleEntry = getConfigListEntry(_("Preamble"), apModeConfig.preamble)
252 self.ignoreBroadcastSsid = getConfigListEntry(_("Ignore Broadcast SSID"), apModeConfig.ignore_broadcast_ssid)
254 self.encryptEntry = getConfigListEntry(_("Encrypt"), apModeConfig.encrypt)
255 self.methodEntry = getConfigListEntry(_("Method"), apModeConfig.method)
256 self.wepKeyTypeEntry = getConfigListEntry(_("KeyType"), apModeConfig.wepType)
257 self.wepKey0Entry = getConfigListEntry(_("WEP Key (HEX)"), apModeConfig.wep_key0)
258 self.wpaKeyEntry = getConfigListEntry(_("KEY (8~63 Characters)"), apModeConfig.wpa_passphrase)
259 self.groupRekeyEntry = getConfigListEntry(_("Group Rekey Interval"), apModeConfig.wpagrouprekey)
261 self.usedhcpEntry = getConfigListEntry(_("Use DHCP"), apModeConfig.usedhcp)
262 self.ipEntry = getConfigListEntry(_("IP Address"), apModeConfig.address)
263 self.netmaskEntry = getConfigListEntry(_("NetMask"), apModeConfig.netmask)
264 self.gatewayEntry = getConfigListEntry(_("Gateway"), apModeConfig.gateway)
266 def createConfig(self):
269 self.configList.append( self.useApEntry )
270 if apModeConfig.useap.value is True:
271 self.configList.append( self.setupModeEntry )
272 self.configList.append( self.wirelessDeviceEntry )
273 self.configList.append( self.wirelessModeEntry )
274 self.configList.append( self.channelEntry )
275 self.configList.append( self.ssidEntry )
276 if apModeConfig.setupmode.value is "advanced":
277 self.configList.append( self.beaconEntry )
278 self.configList.append( self.rtsThresholdEntry )
279 self.configList.append( self.fragmThresholdEntry )
280 self.configList.append( self.prambleEntry )
281 self.configList.append( self.ignoreBroadcastSsid )
282 self.configList.append( self.encryptEntry )
283 if apModeConfig.encrypt.value is True:
284 self.configList.append( self.methodEntry )
285 if apModeConfig.method.value is "0": # wep
286 self.configList.append( self.wepKeyTypeEntry )
287 self.configList.append( self.wepKey0Entry )
289 self.configList.append( self.wpaKeyEntry )
290 if apModeConfig.setupmode.value is "advanced":
291 self.configList.append( self.groupRekeyEntry )
292 ## set network interfaces
293 self.configList.append( self.usedhcpEntry )
294 if apModeConfig.usedhcp.value is False:
295 self.configList.append( self.ipEntry )
296 self.configList.append( self.netmaskEntry )
297 self.configList.append( self.gatewayEntry )
298 self["config"].list = self.configList
299 self["config"].l.setList(self.configList)
302 ConfigListScreen.keyLeft(self)
306 ConfigListScreen.keyRight(self)
310 if self["config"].getCurrent() in [ self.encryptEntry, self.methodEntry, self.useApEntry, self.usedhcpEntry, self.setupModeEntry]:
313 def doConfigMsg(self):
315 self.session.openWithCallback(self.doConfig, MessageBox, (_("Are you sure you want to setup your AP?\n\n") ) )
317 printDebugMsg("doConfig failed")
319 def doConfig(self, ret = False):
323 if apModeConfig.useap.value is True and apModeConfig.encrypt.value is True:
324 if not self.checkEncrypKey():
326 if not self.checkConfig():
328 self.configStartMsg = self.session.openWithCallback(self.ConfigFinishedMsg, MessageBox, _("Please wait for AP Configuration....\n") , type = MessageBox.TYPE_INFO, enable_input = False)
329 if apModeConfig.useap.value is True:
330 self.networkRestart( nextFunc = self.makeConf )
332 self.networkRestart( nextFunc = self.removeConf )
334 def checkEncrypKey(self):
335 if apModeConfig.method.value == "0":
336 if self.checkWep(apModeConfig.wep_key0.value) is False:
337 self.session.open(MessageBox, _("Invalid WEP key\n\n"), type = MessageBox.TYPE_ERROR, timeout = 10 )
341 if not len(apModeConfig.wpa_passphrase.value) in range(8,65):
342 self.session.open(MessageBox, _("Invalid WPA key\n\n"), type = MessageBox.TYPE_ERROR, timeout = 10)
347 def checkWep(self, key):
351 elif apModeConfig.wepType.value == "64" and length == 10:
353 elif apModeConfig.wepType.value == "128" and length == 26:
358 def checkConfig(self):
360 if len(apModeConfig.ssid.value) == 0 or len(apModeConfig.ssid.value) > 32:
361 self.session.open(MessageBox, _("Invalid SSID\n"), type = MessageBox.TYPE_ERROR, timeout = 10)
363 elif apModeConfig.channel.value not in range(1,14):
364 self.session.open(MessageBox, _("Invalid channel\n"), type = MessageBox.TYPE_ERROR, timeout = 10)
366 elif apModeConfig.beacon.value < 15 or apModeConfig.beacon.value > 65535:
367 self.session.open(MessageBox, _("Invalid beacon\n"), type = MessageBox.TYPE_ERROR, timeout = 10)
369 elif apModeConfig.rts_threshold.value < 0 or apModeConfig.rts_threshold.value > 2347:
370 self.session.open(MessageBox, _("Invalid RTS Threshold\n"), type = MessageBox.TYPE_ERROR, timeout = 10)
372 elif apModeConfig.fragm_threshold.value < 256 or apModeConfig.fragm_threshold.value > 2346:
373 self.session.open(MessageBox, _("Invalid Fragm Threshold\n"), type = MessageBox.TYPE_ERROR, timeout = 10)
375 elif apModeConfig.wpagrouprekey.value < 0 or apModeConfig.wpagrouprekey.value > 3600:
376 self.session.open(MessageBox, _("Invalid wpagrouprekey\n"), type = MessageBox.TYPE_ERROR, timeout = 10)
380 def networkRestart(self, nextFunc = None ):
381 self.networkRestart_stop( nextFunc = nextFunc )
383 def networkRestart_stop(self, nextFunc = None ):
384 printDebugMsg("networkRestart_stop")
385 self.msgPlugins(False)
386 self.commands = [] # stop current network
387 self.networkRestartConsole = Console()
388 self.commands.append("/etc/init.d/avahi-daemon stop")
389 for iface in iNetwork.getAdapterList():
390 if iface != 'eth0' or not iNetwork.onRemoteRootFS():
391 self.commands.append("ifdown " + iface)
392 self.commands.append("ip addr flush dev " + iface)
393 self.commands.append("/etc/init.d/hostapd stop")
394 self.commands.append("/etc/init.d/networking stop")
395 self.commands.append("killall -9 udhcpc")
396 self.commands.append("rm /var/run/udhcpc*")
397 self.networkRestartConsole.eBatch(self.commands, nextFunc, debug = True)
399 def makeConf(self,extra_args):
400 printDebugMsg("makeConf")
401 self.writeNetworkInterfaces()
402 result = self.writeHostapdConfig()
404 self.configStartMsg.close(False)
407 self.networkRestart_start()
409 def removeConf(self,extra_args):
410 printDebugMsg("removeConf")
411 if fileExists("/etc/hostapd.conf", 0):
412 os_system("mv /etc/hostapd.conf /etc/hostapd.conf.linuxap.back")
413 fp = file("/etc/network/interfaces", 'w')
414 fp.write("# automatically generated by AP Setup Plugin\n# do NOT change manually!\n\n")
415 fp.write("auto lo\n")
416 fp.write("iface lo inet loopback\n\n")
418 fp.write("auto eth0\n")
419 if apModeConfig.usedhcp.value is True:
420 fp.write("iface eth0 inet dhcp\n")
422 fp.write("iface eth0 inet static\n")
423 fp.write(" address %d.%d.%d.%d\n" % tuple(apModeConfig.address.value) )
424 fp.write(" netmask %d.%d.%d.%d\n" % tuple(apModeConfig.netmask.value) )
425 fp.write(" gateway %d.%d.%d.%d\n" % tuple(apModeConfig.gateway.value) )
428 self.networkRestart_start()
430 def networkRestart_start(self):
431 printDebugMsg("networkRestart_start")
432 self.restartConsole = Console()
434 self.commands.append("/etc/init.d/networking start")
435 self.commands.append("/etc/init.d/avahi-daemon start")
436 self.commands.append("/etc/init.d/hostapd start")
437 self.restartConsole.eBatch(self.commands, self.networkRestartFinished, debug=True)
439 def networkRestartFinished(self, data):
440 printDebugMsg("networkRestartFinished")
441 iNetwork.removeAdapterAttribute('br0',"ip")
442 iNetwork.removeAdapterAttribute('br0',"netmask")
443 iNetwork.removeAdapterAttribute('br0',"gateway")
444 iNetwork.getInterfaces(self.getInterfacesDataAvail)
446 def getInterfacesDataAvail(self, data):
447 if data is True and self.configStartMsg is not None:
448 self.configStartMsg.close(True)
450 def ConfigFinishedMsg(self, ret):
452 self.session.openWithCallback(self.ConfigFinishedMsgCallback ,MessageBox, _("Configuration your AP is finished"), type = MessageBox.TYPE_INFO, timeout = 5, default = False)
454 self.session.openWithCallback(self.close ,MessageBox, _("Invalid model or Image."), MessageBox.TYPE_ERROR)
456 def ConfigFinishedMsgCallback(self,data):
459 def msgPlugins(self,reason = False):
460 for p in plugins.getPlugins(PluginDescriptor.WHERE_NETWORKCONFIG_READ):
463 def writeNetworkInterfaces(self):
465 fp = file("/etc/network/interfaces", 'w')
466 fp.write("# automatically generated by AP Setup Plugin\n# do NOT change manually!\n\n")
467 fp.write("auto lo\n")
468 fp.write("iface lo inet loopback\n\n")
470 fp.write("auto eth0\n")
471 fp.write("iface eth0 inet manual\n")
472 fp.write(" up ip link set $IFACE up\n")
473 fp.write(" down ip link set $IFACE down\n\n")
474 # Wireless device setup
475 fp.write("auto %s\n" % apModeConfig.wirelessdevice.value)
476 fp.write("iface %s inet manual\n" % apModeConfig.wirelessdevice.value)
477 fp.write(" up ip link set $IFACE up\n")
478 fp.write(" down ip link set $IFACE down\n")
480 fp.write("auto br0\n")
481 if apModeConfig.usedhcp.value is True:
482 fp.write("iface br0 inet dhcp\n")
484 fp.write("iface br0 inet static\n")
485 fp.write(" address %d.%d.%d.%d\n" % tuple(apModeConfig.address.value) )
486 fp.write(" netmask %d.%d.%d.%d\n" % tuple(apModeConfig.netmask.value) )
487 fp.write(" gateway %d.%d.%d.%d\n" % tuple(apModeConfig.gateway.value) )
488 fp.write(" pre-up brctl addbr br0\n")
489 fp.write(" pre-up brctl addif br0 eth0\n")
490 # fp.write(" pre-up brctl addif br0 wlan0\n") // runned by hostpad
491 fp.write(" post-down brctl delif br0 eth0\n")
492 # fp.write(" post-down brctl delif br0 wlan0\n") // runned by hostpad
493 fp.write(" post-down brctl delbr br0\n\n")
497 def writeHostapdConfig(self): #c++
500 for key in self.hostapdConfigList.keys():
501 configDict[key] = str(self.hostapdConfigList[key].value)
502 configDict["config.encrypt"] = str(int(apModeConfig.encrypt.value))
503 configDict["config.method"] = apModeConfig.method.value
504 ret = self.wirelessAP.writeHostapdConfig(configDict)
509 def setIpForward(self, setValue = 0):
510 ipForwardFilePath = "/proc/sys/net/ipv4/ip_forward"
511 if not fileExists(ipForwardFilePath):
513 printDebugMsg("set %s to %d" % (ipForwardFilePath, setValue))
514 f = open(ipForwardFilePath, "w")
515 f.write("%d" % setValue)
517 sysctlPath = "/etc/sysctl.conf"
519 if fileExists(sysctlPath):
520 fp = file(sysctlPath, "r")
521 sysctlLines = fp.readlines()
524 for line in sysctlLines:
526 (key,value) = line.split("=")
529 sysctlList[key] = value
530 sysctlList["net.ipv4.ip_forward"] = str(setValue)
531 fp = file(sysctlPath, "w")
532 for (key,value) in sysctlList.items():
533 fp.write("%s=%s\n"%(key,value))
537 def checkWirelessDevices(self):
539 self.wlanDeviceList = []
541 for x in iNetwork.getInstalledAdapters():
542 if x.startswith('eth') or x.startswith('br') or x.startswith('mon'):
545 description=self.getAdapterDescription(x)
546 if description == "Unknown network adapter":
547 self.wlanDeviceList.append((x, x))
549 self.wlanDeviceList.append(( x, description + " (%s)"%x ))
550 apModeConfig.wirelessdevice = ConfigSelection( choices = self.wlanDeviceList )
552 def getAdapterDescription(self, iface):
553 classdir = "/sys/class/net/" + iface + "/device/"
554 driverdir = "/sys/class/net/" + iface + "/device/driver/"
555 if os_path.exists(classdir):
556 files = listdir(classdir)
557 if 'driver' in files:
558 if os_path.realpath(driverdir).endswith('rtw_usb_drv'):
559 return _("Realtek")+ " " + _("WLAN adapter.")
560 elif os_path.realpath(driverdir).endswith('ath_pci'):
561 return _("Atheros")+ " " + _("WLAN adapter.")
562 elif os_path.realpath(driverdir).endswith('zd1211b'):
563 return _("Zydas")+ " " + _("WLAN adapter.")
564 elif os_path.realpath(driverdir).endswith('rt73'):
565 return _("Ralink")+ " " + _("WLAN adapter.")
566 elif os_path.realpath(driverdir).endswith('rt73usb'):
567 return _("Ralink")+ " " + _("WLAN adapter.")
569 return str(os_path.basename(os_path.realpath(driverdir))) + " " + _("WLAN adapter")
571 return _("Unknown network adapter")
573 return _("Unknown network adapter")
576 for x in self["config"].list:
578 apModeConfig.wpa.value = "0"
579 apModeConfig.wep.value = False
584 def main(session, **kwargs):
585 session.open(WirelessAccessPoint)
587 def Plugins(**kwargs):
588 return [PluginDescriptor(name=_("Wireless Access Point"), description="Using a Wireless module as access point.", where = PluginDescriptor.WHERE_PLUGINMENU, needsRestart = True, fnc=main)]