From: NeilBrown Date: Mon, 31 Dec 2012 20:10:52 +0000 (+1100) Subject: gsmd/netman : various fixes to recent enhancements. X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=324be28ff5654f6cdc3c0ea1725a93a48bd03ce0;p=plato.git gsmd/netman : various fixes to recent enhancements. --- diff --git a/gsm/gsmd.py b/gsm/gsmd.py index 75f9122..b55b9f7 100644 --- a/gsm/gsmd.py +++ b/gsm/gsmd.py @@ -129,8 +129,7 @@ class AtAction(Task): channel.set_timeout(5000) return if self.not_ok.match(line): - channel.cancel_timeout() - return self.timeout(channel) + return channel.abort_timeout() if channel.state['stage'] == 'checking': m = self.okre.match(line) @@ -467,7 +466,7 @@ def data_call(channel, line, m): def data_hungup(channel, failed): if channel.data_IP: - os.system('/sbin/ifconfig hso0 down') + os.system('/sbin/ifconfig hso0 0.0.0.0 down') record('dns', '') record('data', '') channel.data_IP = None @@ -528,6 +527,8 @@ control['resume'] = [ AtAction(at='+CNMI=1,1,2,0,0', critical=False), AtAction(at='_OSQI=1', critical=False), AtAction(at='+CREG=2'), + # Make sure to use both 2G and 3G + AtAction(at='_OPSYS=3,2', critical=False), CheckSMS(), ChangeStateAction(None), ChangeStateAction('idle'), @@ -573,6 +574,9 @@ control['init'] = [ AtAction(check='_OSIMOP', ok='_OSIMOP: ".*",".*","(.*)"', record=('sid','\\1'), critical=False), + # Make sure to use both 2G and 3G + AtAction(at='_OPSYS=3,2', critical=False), + # Enable reporting of Caller number id. AtAction(check='+CLIP?', ok='\+CLIP: 1,[012]', at='+CLIP=1', timeout=10000, critical = False), @@ -591,8 +595,8 @@ def if_data(channel): # must be shutting down - poll quickly, it shouldn't take long return 2000 # we want a connection but don't have one, so we retry - if time.time() < self.next_data_call: - return int((self.next_data_call - time.time()) * 1000) + if time.time() < channel.next_data_call: + return int((channel.next_data_call - time.time()) * 1000) return 1000 control['idle'] = [ @@ -603,11 +607,9 @@ control['idle'] = [ record=('carrier', '\\1'), timeout=10000), #AtAction(check='+COPS?', ok='\+COPS: \d+,\d+,"([^"]*)"', at='+COPS=0', # record=('carrier', '\\1'), timeout=10000, repeat=37000), - # Make sure to use both 2G and 3G - AtAction(at='_OPSYS=3,2', critical=False), # get signal string AtAction(check='+CSQ', ok='\+CSQ: (\d+),(\d+)', - record=('signal_strength','\\1/32'), repeat=29000) + record=('signal_strength','\\1/32'), repeat=29000), AtAction(check='_OWANDATA?', ok='_OWANDATA: 1, ([0-9.]+), [0-9.]+, ([0-9.]+), ([0-9.]+), [0-9.]+, [0-9.]+,\d+$', handle=data_handle, repeat=if_data), @@ -875,6 +877,7 @@ class GsmD(AtChannel): self.nextstate = [] n = len(control[state]) self.lastrun = n * [0] + self.tasknum = None self.gstate = state def advance(self): diff --git a/netman/netman.py b/netman/netman.py index 185c195..5d9d384 100644 --- a/netman/netman.py +++ b/netman/netman.py @@ -154,6 +154,9 @@ class iface: Popen(['iptables','-t','nat','-D','POSTROUTING','-s', self.hotspot_net,'-j','MASQUERADE']).wait() self.hotspot_net = self.addr + # Delete then add to avoid creating multiple entries + Popen(['iptables','-t','nat','-D','POSTROUTING','-s', + self.hotspot_net,'-j','MASQUERADE']).wait() Popen(['iptables','-t','nat','-A','POSTROUTING','-s', self.hotspot_net,'-j','MASQUERADE']).wait() if not self.hotspot and self.hotspot_net != None: @@ -186,6 +189,8 @@ class iface: l = l.strip().split() if l[0] == 'default' and l[1] == 'via': route = l[2] + elif l[0] == 'default' and l[1] == 'dev' and l[2] == self.iface: + route = 'Provided' return route def rfkill(self, state): @@ -312,6 +317,8 @@ class WLAN_iface(iface): if self.checker: gobject.source_remove(self.checker) self.checker = None + if l == ['udhcp','script','bound']: + self.set_label() return True def request(self, msg): @@ -495,6 +502,7 @@ class WLAN_iface(iface): def config_hotspot(self): self.rfkill('unblock') + self.state = 'pending' self.supplicant_up() @@ -541,22 +549,25 @@ class WWAN_iface(iface): d = dnotify.dir('/run/gsm-state') self.data_watcher = d.watch('data', self.check_data) - def check_data(self, f): + def check_data(self, fl): l = recall('data') + print 'data got %s' % l if l: self.state = 'active' - d = recall('dns').split() - f = open("/etc/resolv.conf","w") - for s in d: - f.write('nameserver %s\n', s) - f.close() - - elif self.state = 'active': + elif self.state == 'active': self.state = 'pending' - goject.idle_add(self.recalc) + gobject.idle_add(self.recalc) def recalc(self): + print 'call recalc' self.parent.update_active() + if self.state == 'active': + d = recall('dns').split() + f = open("/etc/resolv.conf","w") + for s in d: + f.write('nameserver %s\n' % s) + f.close() + os.system('route add default dev hso0') self.set_label() def get_config(self): @@ -704,6 +715,7 @@ class Netman(gtk.Window): print 'enable %s, was %s' % (self.selected.name, self.selected.state) self.selected.state = 'pending' self.update_active() + self.selected.set_label() def disable(self): if self.selected.state == 'disabled': return @@ -715,6 +727,8 @@ class Netman(gtk.Window): def hotspot(self, ev): if not self.selected: return + if not self.selected.can_hotspot: + return if self.hotspot_btn.get_active(): # enable hotspot s = self.selected @@ -735,8 +749,8 @@ class Netman(gtk.Window): # disable hotspot self.selected.hotspot = False self.selected.shutdown() - self.selected.set_label() self.update_active() + self.selected.set_label() def config(self, ev): w = self.selected.config_widget() diff --git a/netman/wifi-udhcpc.script b/netman/wifi-udhcpc.script index 2c1a186..056350b 100755 --- a/netman/wifi-udhcpc.script +++ b/netman/wifi-udhcpc.script @@ -9,8 +9,6 @@ RESOLV_CONF="/etc/resolv.conf" -echo udhcp script $* - case $1 in bound|renew) [ -n "$broadcast" ] && BROADCAST="broadcast $broadcast" @@ -70,3 +68,5 @@ case $1 in exit 1; ;; esac + +echo udhcp script $*