Diffstat (limited to 'noncore/settings/networksettings2/lancard') (more/less context) (ignore whitespace changes)
6 files changed, 44 insertions, 7 deletions
diff --git a/noncore/settings/networksettings2/lancard/lancard_NN.cpp b/noncore/settings/networksettings2/lancard/lancard_NN.cpp index a45496d..7d36918 100644 --- a/noncore/settings/networksettings2/lancard/lancard_NN.cpp +++ b/noncore/settings/networksettings2/lancard/lancard_NN.cpp @@ -33,28 +33,35 @@ const char ** LanCardNetNode::needs( void ) { return LanCardNeeds; } const char * LanCardNetNode::provides( void ) { return "device"; } bool LanCardNetNode::generateProperFilesFor( ANetNodeInstance * ) { return 1; } -bool LanCardNetNode::hasDataFor( const QString & ) { - return 0; +bool LanCardNetNode::hasDataFor( const QString & S, bool DS ) { + return DS && S == "interfaces"; } bool LanCardNetNode::generateDataForCommonFile( SystemFile & , long , ANetNodeInstance * ) { return 1; } +bool LanCardNetNode::generateDeviceDataForCommonFile( + SystemFile & S , + long DevNr , + ANetNodeInstance * NNI ) { + return ((ALanCard *)NNI)->generateDeviceDataForCommonFile(S, DevNr); +} + extern "C" { void create_plugin( QList<ANetNode> & PNN ) { PNN.append( new LanCardNetNode() ); } } diff --git a/noncore/settings/networksettings2/lancard/lancard_NN.h b/noncore/settings/networksettings2/lancard/lancard_NN.h index 71b49d0..9690c76 100644 --- a/noncore/settings/networksettings2/lancard/lancard_NN.h +++ b/noncore/settings/networksettings2/lancard/lancard_NN.h @@ -19,26 +19,28 @@ public: virtual const QString nodeName() { return tr("LAN card"); } virtual const QString nodeDescription() ; virtual ANetNodeInstance * createInstance( void ); virtual const char ** needs( void ); virtual const char * provides( void ); virtual bool generateProperFilesFor( ANetNodeInstance * NNI ); - virtual bool hasDataFor( const QString & S ); + virtual bool hasDataFor( const QString & S, bool DS ); virtual bool generateDataForCommonFile( SystemFile & SF, long DevNr, ANetNodeInstance * NNI ); + virtual bool generateDeviceDataForCommonFile( + SystemFile & SF, long DevNr, ANetNodeInstance * NNI ); private: }; extern "C" { void create_plugin( QList<ANetNode> & PNN ); }; #endif diff --git a/noncore/settings/networksettings2/lancard/lancard_NNI.cpp b/noncore/settings/networksettings2/lancard/lancard_NNI.cpp index 9595e2e..a6401db 100644 --- a/noncore/settings/networksettings2/lancard/lancard_NNI.cpp +++ b/noncore/settings/networksettings2/lancard/lancard_NNI.cpp @@ -33,12 +33,26 @@ QWidget * ALanCard::edit( QWidget * parent ) { GUI->showData( Data ); return GUI; } QString ALanCard::acceptable( void ) { return ( GUI ) ? GUI->acceptable( ) : QString(); } void ALanCard::commit( void ) { if( GUI && GUI->commit( Data ) ) setModified( 1 ); } + +bool ALanCard::generateDeviceDataForCommonFile( SystemFile & S, long DevNr ) { + AsDevice * Dev = runtime()->device(); + QString NIC = Dev->genNic( DevNr ); + + if( S.name() == "interfaces" ) { + // generate mapping stanza for this interface + S << "# check if " << NIC << " can be brought UP" << endl; + S << "mapping " << NIC << endl; + S << " script networksettings2-request" << endl << endl; + } + return 0; +} + diff --git a/noncore/settings/networksettings2/lancard/lancard_NNI.h b/noncore/settings/networksettings2/lancard/lancard_NNI.h index 8fc8868..16f5f56 100644 --- a/noncore/settings/networksettings2/lancard/lancard_NNI.h +++ b/noncore/settings/networksettings2/lancard/lancard_NNI.h @@ -18,24 +18,26 @@ public : QString acceptable( void ); void commit( void ); RuntimeInfo * runtime( void ) { if( RT == 0 ) RT = new LanCardRun( this, Data ); return RT; } virtual void * data( void ) { return (void *)&Data; } + bool generateDeviceDataForCommonFile( SystemFile & S, long DevNr ); + protected : virtual void setSpecificAttribute( QString & Attr, QString & Value ); virtual void saveSpecificAttribute( QTextStream & TS ); private : LanCardEdit * GUI; LanCardData Data; LanCardRun * RT; }; diff --git a/noncore/settings/networksettings2/lancard/lancardrun.cpp b/noncore/settings/networksettings2/lancard/lancardrun.cpp index b3b592b..951756d 100644 --- a/noncore/settings/networksettings2/lancard/lancardrun.cpp +++ b/noncore/settings/networksettings2/lancard/lancardrun.cpp @@ -27,25 +27,34 @@ void LanCardRun::detectState( NodeCollection * NC ) { ++It ) { Run = It.current(); if( X == Run->Name ) { Run->assignNode( netNode() ); assignInterface( Run ); NC->setCurrentState( IsUp ); return; } } } } - // we are certainly not UP + if( ( Run = assignedInterface() ) ) { + // we already have an interface assigned -> still present ? + if( ! Run->IsUp ) { + // usb is still free -> keep assignment + NC->setCurrentState( Available ); + return; + } // else interface is up but NOT us -> some other profile + } + + // nothing (valid) assigned to us assignInterface( 0 ); // find possible interface for( QDictIterator<InterfaceInfo> It(Sys.interfaces()); It.current(); ++It ) { Run = It.current(); if( handlesInterface( Run->Name ) && Run->CardType == ARPHRD_ETHER && ! Run->IsUp ) { // proper type, and Not UP -> free @@ -78,26 +87,25 @@ bool LanCardRun::setState( NodeCollection * NC, Action_t A ) { // we get back is NOT assigned N->assignNode( netNode() ); assignInterface( N ); NC->setCurrentState( Available ); return 1; } case Deactivate : if( NC->currentState() == IsUp ) { // bring down first if( ! connection()->setState( Down ) ) // could not ... return 0; - } - if( NC->currentState() != Available ) { + } else if( NC->currentState() != Available ) { return 1; } assignedInterface()->assignNode( 0 ); // release assignInterface( 0 ); NC->setCurrentState( Off ); return 1; default : // FT break; } return 0; } diff --git a/noncore/settings/networksettings2/lancard/lancardrun.h b/noncore/settings/networksettings2/lancard/lancardrun.h index 5f004e0..8dbd1b1 100644 --- a/noncore/settings/networksettings2/lancard/lancardrun.h +++ b/noncore/settings/networksettings2/lancard/lancardrun.h @@ -9,26 +9,30 @@ class LanCardRun : public AsDevice { public : LanCardRun( ANetNodeInstance * NNI, LanCardData & Data ) : AsDevice( NNI ), Pat( "eth[0-9]" ) { } virtual long count( void ) { return 2; } virtual QString genNic( long nr ) { QString S; return S.sprintf( "eth%ld", nr ); } + virtual AsDevice * device( void ) - { return asDevice(); } + { return (AsDevice *)this; } + + virtual AsDevice * asDevice( void ) + { return (AsDevice *)this; } protected : void detectState( NodeCollection * NC ); bool setState( NodeCollection * NC, Action_t A ); bool canSetState( State_t Curr, Action_t A ); bool handlesInterface( const QString & I ); private : InterfaceInfo * getInterface( void ); |