]> git.neil.brown.name Git - plato.git/commitdiff
gsmd/netman : various fixes to recent enhancements.
authorNeilBrown <neilb@suse.de>
Mon, 31 Dec 2012 20:10:52 +0000 (07:10 +1100)
committerNeilBrown <neilb@suse.de>
Mon, 31 Dec 2012 20:10:52 +0000 (07:10 +1100)
gsm/gsmd.py
netman/netman.py
netman/wifi-udhcpc.script

index 75f9122b1df142421ee9cd72f948c5c20e5e3c46..b55b9f71a15cdf395ece1561614a8dade1df895a 100644 (file)
@@ -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):
index 185c195d38331fa5391cea1fc58df8439457afdb..5d9d3847b7584cdd354b4ef2af86719cd9142a9c 100644 (file)
@@ -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()
index 2c1a1867901af374349df46e806c8ba6b8b5cb83..056350b109429bc240bca0f72aa5ea0dc9823cca 100755 (executable)
@@ -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 $*