This extends sc_deactivate() method with a new output parameter to
enable modem plugins to pass the name of the network interface used
for PDP.

This is needed in case the interface is still visible even after the
modem has actually removed all the connectivity from it (and so the
system will have a route over it unless it is brought down).

Signed-off-by: Paul Fertser <fercer...@gmail.com>
---
 fsogsmd/src/lib/at/atpdp.vala                        |    2 +-
 fsogsmd/src/lib/pdp.vala                             |   18 +++++++++++++++---
 .../src/plugins/modem_option_gtm601/pdphandler.vala  |    3 ++-
 fsogsmd/src/plugins/modem_samsung/pdphandler.vala    |    3 ++-
 fsogsmd/src/plugins/pdp_nokia_isi/plugin.vala        |    2 +-
 fsogsmd/src/plugins/pdp_ppp_internal/plugin.vala     |    2 +-
 fsogsmd/src/plugins/pdp_qmi/plugin.vala              |    3 ++-
 7 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/fsogsmd/src/lib/at/atpdp.vala b/fsogsmd/src/lib/at/atpdp.vala
index 4af3b1d..d92817d 100644
--- a/fsogsmd/src/lib/at/atpdp.vala
+++ b/fsogsmd/src/lib/at/atpdp.vala
@@ -153,7 +153,7 @@ public class FsoGsm.AtPdpHandler : FsoGsm.PdpHandler
         yield setupTransport();
     }
 
-    public async override void sc_deactivate()
+    public async override void sc_deactivate(out string iface)
     {
         yield leaveDataState();
         /*
diff --git a/fsogsmd/src/lib/pdp.vala b/fsogsmd/src/lib/pdp.vala
index 3d57f56..fff2af0 100644
--- a/fsogsmd/src/lib/pdp.vala
+++ b/fsogsmd/src/lib/pdp.vala
@@ -131,7 +131,7 @@ public abstract class FsoGsm.PdpHandler : IPdpHandler, 
FsoFramework.AbstractObje
     {
     }
 
-    protected async virtual void sc_deactivate() throws 
FreeSmartphone.GSM.Error, FreeSmartphone.Error
+    protected async virtual void sc_deactivate(out string iface) throws 
FreeSmartphone.GSM.Error, FreeSmartphone.Error
     {
     }
 
@@ -193,8 +193,20 @@ public abstract class FsoGsm.PdpHandler : IPdpHandler, 
FsoFramework.AbstractObje
             throw new FreeSmartphone.Error.UNAVAILABLE( @"Can't deactivate 
context while in status $status" );
         }
 
-        yield sc_deactivate();
-
+        string iface;
+        yield sc_deactivate(out iface);
+        if (iface != null)
+        {
+            try
+            {
+                new FsoFramework.Network.Interface( iface ).down();
+            }
+            catch ( FsoFramework.Network.Error err )
+            {
+                logger.error( @"Could not put network interface $(iface) down; 
" +
+                               "still setting context status to RELEASED" );
+            }
+        }
         var status = new GLib.HashTable<string,Variant>( GLib.str_hash, 
GLib.str_equal );
         updateStatus( FreeSmartphone.GSM.ContextStatus.RELEASED, status );
     }
diff --git a/fsogsmd/src/plugins/modem_option_gtm601/pdphandler.vala 
b/fsogsmd/src/plugins/modem_option_gtm601/pdphandler.vala
index 428ba21..2665cfc 100644
--- a/fsogsmd/src/plugins/modem_option_gtm601/pdphandler.vala
+++ b/fsogsmd/src/plugins/modem_option_gtm601/pdphandler.vala
@@ -93,13 +93,14 @@ class Pdp.OptionGtm601 : FsoGsm.PdpHandler
         }
     }
 
-    public async override void sc_deactivate()
+    public async override void sc_deactivate(out string iface)
     {
         try
         {
             var cmd = modem.createAtCommand<Gtm601.UnderscoreOWANCALL>( 
"_OWANCALL" );
             var response = yield modem.processAtCommandAsync( cmd, cmd.issue( 
false ) );
             checkResponseOk( cmd, response );
+            iface = HSO_IFACE;
         }
         catch ( GLib.Error e )
         {
diff --git a/fsogsmd/src/plugins/modem_samsung/pdphandler.vala 
b/fsogsmd/src/plugins/modem_samsung/pdphandler.vala
index 5427166..00249bb 100644
--- a/fsogsmd/src/plugins/modem_samsung/pdphandler.vala
+++ b/fsogsmd/src/plugins/modem_samsung/pdphandler.vala
@@ -137,9 +137,10 @@ class Samsung.PdpHandler : FsoGsm.PdpHandler
         yield activatePdpContext( modem.data().contextParams );
     }
 
-    protected override async void sc_deactivate() throws 
FreeSmartphone.GSM.Error, FreeSmartphone.Error
+    protected override async void sc_deactivate(out string iface) throws 
FreeSmartphone.GSM.Error, FreeSmartphone.Error
     {
         yield deactivatePdpContext();
+        iface = RMNET_IFACE;
     }
 
     //
diff --git a/fsogsmd/src/plugins/pdp_nokia_isi/plugin.vala 
b/fsogsmd/src/plugins/pdp_nokia_isi/plugin.vala
index f79c75f..ac1a449 100644
--- a/fsogsmd/src/plugins/pdp_nokia_isi/plugin.vala
+++ b/fsogsmd/src/plugins/pdp_nokia_isi/plugin.vala
@@ -64,7 +64,7 @@ class Pdp.NokiaIsi : FsoGsm.PdpHandler
         } );
     }
 
-    public async override void sc_deactivate()
+    public async override void sc_deactivate(out string iface)
     {
         GIsiComm.ModemAccess isimodem = FsoFramework.DataSharing.valueForKey( 
"NokiaIsi.isimodem") as GIsiComm.ModemAccess;
         isimodem.gpds.deactivate();
diff --git a/fsogsmd/src/plugins/pdp_ppp_internal/plugin.vala 
b/fsogsmd/src/plugins/pdp_ppp_internal/plugin.vala
index 8176a57..2e8b615 100644
--- a/fsogsmd/src/plugins/pdp_ppp_internal/plugin.vala
+++ b/fsogsmd/src/plugins/pdp_ppp_internal/plugin.vala
@@ -165,7 +165,7 @@ class Pdp.PppInternal : FsoGsm.PdpHandler
         ppp.open();
     }
 
-    public async override void sc_deactivate()
+    public async override void sc_deactivate(out string iface)
     {
         ppp = null;
         iochannel = null;
diff --git a/fsogsmd/src/plugins/pdp_qmi/plugin.vala 
b/fsogsmd/src/plugins/pdp_qmi/plugin.vala
index 6502d61..368ef56 100644
--- a/fsogsmd/src/plugins/pdp_qmi/plugin.vala
+++ b/fsogsmd/src/plugins/pdp_qmi/plugin.vala
@@ -124,9 +124,10 @@ class Pdp.Qmi : FsoGsm.PdpHandler
         Posix.write( fd, cmdline, cmdline.length );
     }
 
-    public async override void sc_deactivate()
+    public async override void sc_deactivate(out string iface)
     {
         Posix.write( fd, "down", 5 );
+        iface = RMNET_IFACE;
     }
 
     public async override void statusUpdate( string status, 
GLib.HashTable<string,Variant> properties )
-- 
1.7.10.4


_______________________________________________
Smartphones-userland mailing list
Smartphones-userland@linuxtogo.org
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/smartphones-userland

Reply via email to