summaryrefslogtreecommitdiff
path: root/noncore/settings/networksettings2/network/networkrun.cpp
Side-by-side diff
Diffstat (limited to 'noncore/settings/networksettings2/network/networkrun.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/networksettings2/network/networkrun.cpp63
1 files changed, 63 insertions, 0 deletions
diff --git a/noncore/settings/networksettings2/network/networkrun.cpp b/noncore/settings/networksettings2/network/networkrun.cpp
new file mode 100644
index 0000000..e732bfa
--- a/dev/null
+++ b/noncore/settings/networksettings2/network/networkrun.cpp
@@ -0,0 +1,63 @@
+#include <system.h>
+#include <asdevice.h>
+#include "networkrun.h"
+
+void NetworkRun::detectState( NodeCollection * NC ) {
+ RuntimeInfo * RI = netNode()->nextNode()->runtime();
+ AsDevice * Next = RI->asDevice();
+ InterfaceInfo * II = Next->assignedInterface();
+
+ if( II ) {
+ // device has assigned interface
+ NC->setCurrentState( (( II->IsUp ) ? IsUp : Available) );
+ }
+
+ // has no interface -> delegate
+ RI->detectState( NC );
+}
+
+bool NetworkRun::setState( NodeCollection * NC, Action_t A ) {
+ // we handle UP and DOWN
+ RuntimeInfo * RI = netNode()->nextNode()->runtime();
+ AsDevice * Next = RI->asDevice();
+ InterfaceInfo * II = Next->assignedInterface();
+
+ if( A == Up ) {
+ // we can bring UP if lower level is available
+ if( NC->currentState() == Available ) {
+ QString S;
+ S.sprintf( "ifup %s=manual", II->Name.latin1() );
+ NSResources->system().execute( S );
+ NC->setCurrentState( IsUp );
+ }
+ return 1;
+ } else if( A == Down ) {
+ if( NC->currentState() == IsUp ) {
+ QString S;
+ S.sprintf( "ifdown %s", II->Name.latin1() );
+ NSResources->system().execute( S );
+ NC->setCurrentState( Available );
+ }
+ return 1;
+ }
+ // delegate
+ return RI->setState( NC, A );
+}
+
+bool NetworkRun::canSetState( State_t Curr, Action_t A ) {
+ // we handle UP and DOWN
+ RuntimeInfo * RI = netNode()->nextNode()->runtime();
+
+ if( A == Up ) {
+ return ( Curr == Available );
+ } else if( A == Down ) {
+ return ( Curr == IsUp );
+ }
+ // delegate
+ return RI->canSetState( Curr, A );
+}
+
+bool NetworkRun::handlesInterface( const QString & S ) {
+ // donno -> pass deeper
+ return netNode()->nextNode()->runtime()->handlesInterface(S);
+}