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