Diffstat (limited to 'noncore/settings/networksettings2/lancard') (more/less context) (ignore whitespace changes)
8 files changed, 290 insertions, 70 deletions
diff --git a/noncore/settings/networksettings2/lancard/lancardGUI.ui b/noncore/settings/networksettings2/lancard/lancardGUI.ui index 8d94816..c407175 100644 --- a/noncore/settings/networksettings2/lancard/lancardGUI.ui +++ b/noncore/settings/networksettings2/lancard/lancardGUI.ui @@ -13,3 +13,3 @@ <y>0</y> - <width>362</width> + <width>354</width> <height>359</height> @@ -71,3 +71,3 @@ <name>margin</name> - <number>11</number> + <number>5</number> </property> @@ -82,16 +82,2 @@ <name>text</name> - <string>Name</string> - </property> - <property> - <name>clickable</name> - <bool>true</bool> - </property> - <property> - <name>resizeable</name> - <bool>true</bool> - </property> - </column> - <column> - <property> - <name>text</name> <string>MACAddress</string> @@ -116,2 +102,62 @@ </widget> + <widget> + <class>QLayoutWidget</class> + <property stdset="1"> + <name>name</name> + <cstring>Layout2</cstring> + </property> + <hbox> + <property stdset="1"> + <name>margin</name> + <number>0</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>6</number> + </property> + <widget> + <class>QPushButton</class> + <property stdset="1"> + <name>name</name> + <cstring>RemoveUnknown_BUT</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>Remove Unknown</string> + </property> + </widget> + <spacer> + <property> + <name>name</name> + <cstring>Spacer1</cstring> + </property> + <property stdset="1"> + <name>orientation</name> + <enum>Horizontal</enum> + </property> + <property stdset="1"> + <name>sizeType</name> + <enum>Expanding</enum> + </property> + <property> + <name>sizeHint</name> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + <widget> + <class>QPushButton</class> + <property stdset="1"> + <name>name</name> + <cstring>RescanCards_BUT</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>Rescan</string> + </property> + </widget> + </hbox> + </widget> </vbox> @@ -127,2 +173,16 @@ </connection> + <connection> + <sender>RescanCards_BUT</sender> + <signal>clicked()</signal> + <receiver>Lancard_FRM</receiver> + <slot>SLOT_ScanCards()</slot> + </connection> + <connection> + <sender>RemoveUnknown_BUT</sender> + <signal>clicked()</signal> + <receiver>Lancard_FRM</receiver> + <slot>SLOT_RemoveUnknown()</slot> + </connection> + <slot access="public">SLOT_ScanCards()</slot> + <slot access="public">SLOT_RemoveUnknown()</slot> </connections> diff --git a/noncore/settings/networksettings2/lancard/lancard_NN.cpp b/noncore/settings/networksettings2/lancard/lancard_NN.cpp index ba1c1f8..a4afab1 100644 --- a/noncore/settings/networksettings2/lancard/lancard_NN.cpp +++ b/noncore/settings/networksettings2/lancard/lancard_NN.cpp @@ -9,3 +9,3 @@ static const char * LanCardNeeds[] = */ -LanCardNetNode::LanCardNetNode() : ANetNode() { +LanCardNetNode::LanCardNetNode() : ANetNode(tr("LAN card")), NICMACAddresses() { InstanceCount = 2; @@ -71,2 +71,4 @@ void LanCardNetNode::setSpecificAttribute( QString & A, QString & V ) { InstanceCount = V.toLong(); + } else if ( A == "macaddress" ) { + NICMACAddresses.append( V ); } @@ -78,2 +80,9 @@ void LanCardNetNode::saveSpecificAttribute( QTextStream & TS) { << endl; + for( QStringList::Iterator it = NICMACAddresses.begin(); + it != NICMACAddresses.end(); + ++it ) { + TS << "macaddress=" + << (*it) + << endl; + } } diff --git a/noncore/settings/networksettings2/lancard/lancard_NN.h b/noncore/settings/networksettings2/lancard/lancard_NN.h index 5f2b25d..d58823c 100644 --- a/noncore/settings/networksettings2/lancard/lancard_NN.h +++ b/noncore/settings/networksettings2/lancard/lancard_NN.h @@ -3,2 +3,3 @@ +#include <qstringlist.h> #include "netnode.h" @@ -19,5 +20,2 @@ public: - virtual const QString nodeName() - { return tr("LAN card"); } - virtual const QString nodeDescription() ; @@ -38,2 +36,4 @@ public: virtual QString genNic( long ); + virtual QStringList & addressesOfNIC( void ) + { return NICMACAddresses; } @@ -47,2 +47,4 @@ private: + QStringList NICMACAddresses; + }; diff --git a/noncore/settings/networksettings2/lancard/lancard_NNI.cpp b/noncore/settings/networksettings2/lancard/lancard_NNI.cpp index 5962d52..99c033e 100644 --- a/noncore/settings/networksettings2/lancard/lancard_NNI.cpp +++ b/noncore/settings/networksettings2/lancard/lancard_NNI.cpp @@ -32,3 +32,3 @@ QWidget * ALanCard::edit( QWidget * parent ) { GUI = new LanCardEdit( parent ); - GUI->showData( Data ); + GUI->showData( this ); return GUI; diff --git a/noncore/settings/networksettings2/lancard/lancardedit.cpp b/noncore/settings/networksettings2/lancard/lancardedit.cpp index fa7f6dc..ffe9bf6 100644 --- a/noncore/settings/networksettings2/lancard/lancardedit.cpp +++ b/noncore/settings/networksettings2/lancard/lancardedit.cpp @@ -2,2 +2,3 @@ #include <resources.h> +#include <qarray.h> #include <qlistview.h> @@ -6,23 +7,10 @@ #include <qregexp.h> + #include "lancardedit.h" +#include "lancard_NN.h" +#include "lancard_NNI.h" LanCardEdit::LanCardEdit( QWidget * Parent ) : LanCardGUI( Parent ){ - System & S = NSResources->system(); - QRegExp R( "eth[0-9]" ); - QCheckListItem * CLI; - LanCards_LV->header()->hide(); - // populate with all lancards in system - for( QDictIterator<InterfaceInfo> It(S.interfaces()); - It.current(); - ++It ) { - if( R.match( It.current()->Name ) >= 0 && - It.current()->CardType == ARPHRD_ETHER - ) { - CLI = new QCheckListItem( LanCards_LV, It.current()->Name, - QCheckListItem::CheckBox ); - CLI->setText( 1, It.current()->MACAddress ); - } - } } @@ -33,3 +21,2 @@ QString LanCardEdit::acceptable( void ) { - bool LanCardEdit::commit( LanCardData & Data ) { @@ -39,3 +26,7 @@ bool LanCardEdit::commit( LanCardData & Data ) { if( ! Data.AnyLanCard ) { - // collect set of lancards that match + // take copy for orig list + QStringList NewList( Data.HWAddresses ); + + // update HWAddresses to new state + // remove item also from NewList int idx; @@ -43,3 +34,3 @@ bool LanCardEdit::commit( LanCardData & Data ) { while( CLI ) { - idx = Data.HWAddresses.findIndex(CLI->text(1)); + idx = Data.HWAddresses.findIndex(CLI->text(0)); if( CLI->isOn() ) { @@ -47,3 +38,3 @@ bool LanCardEdit::commit( LanCardData & Data ) { // should be in list - Data.HWAddresses.append( CLI->text(1) ); + Data.HWAddresses.append( CLI->text(0) ); SM = 1; @@ -53,3 +44,4 @@ bool LanCardEdit::commit( LanCardData & Data ) { if( idx >= 0 ) { - Data.HWAddresses.remove( Data.HWAddresses.at(idx) ); + NewList.remove( CLI->text(0) ); + Data.HWAddresses.remove( CLI->text(0) ); SM = 1; @@ -59,29 +51,102 @@ bool LanCardEdit::commit( LanCardData & Data ) { } + + // if newlist still contains items. it were items + // that were checked but no longer are present in the system + SM |= ( NewList.count() > 0 ) ; } - return SM || ContainedObsoleteMAC ; + return SM; } -void LanCardEdit::showData( LanCardData & Data ) { +void LanCardEdit::showData( ALanCard * LC ) { + NNI = LC; + LanCardData & Data = *((LanCardData *)LC->data()); + AnyCard_CB->setChecked( Data.AnyLanCard ); + // load all cards + populateList(); + + // set checks QCheckListItem * CLI = (QCheckListItem *)LanCards_LV->firstChild(); + while( CLI ) { + CLI->setOn( Data.HWAddresses.findIndex(CLI->text(0)) >= 0 ); + CLI = (QCheckListItem *)CLI->nextSibling(); + } +} - ContainedObsoleteMAC = 0; - // remove obsolete address - for( QStringList::Iterator it=Data.HWAddresses.begin(); - it != Data.HWAddresses.end(); - ) { - CLI = (QCheckListItem *)LanCards_LV->firstChild(); - while( CLI ) { - if( CLI->text(1) == (*it) ) - // still valid +// load all known cards in list +void LanCardEdit::populateList( void ) { + LanCardNetNode *NN = (LanCardNetNode *)NNI->nodeClass(); + QCheckListItem * CLI; + bool Found; + + LanCards_LV->clear(); + + for( QStringList::Iterator it = NN->addressesOfNIC().begin(); + it != NN->addressesOfNIC().end(); + ++it ) { + CLI = new QCheckListItem( LanCards_LV, (*it), QCheckListItem::CheckBox ); + + // check interfaces and see if this card is present + Found = 0; + for( QDictIterator<InterfaceInfo> NIt(NSResources->system().interfaces()); + NIt.current(); + ++NIt ) { + if( NIt.current()->MACAddress == (*it) ) { + Found = 1; break; - CLI = (QCheckListItem *)CLI->nextSibling(); + } } - if( CLI == 0 ) { - // address not found -> remove - ContainedObsoleteMAC = 1; - Data.HWAddresses.remove( it ); - } else { - ++ it; + + CLI->setPixmap( 0, NSResources->getPixmap( + (Found) ? "add" : "remove" ) ); + } +} + +// rescan system for new cards +void LanCardEdit::SLOT_ScanCards( void ) { + LanCardNetNode *NN = (LanCardNetNode *)NNI->nodeClass(); + + // add any NIC that is new and matches our interfacename + System & S = NSResources->system(); + QRegExp R( "eth[0-9]" ); + // populate with all lancards in system + for( QDictIterator<InterfaceInfo> It(S.interfaces()); + It.current(); + ++It ) { + fprintf( stderr, "TEST %s %s\n", + It.current()->Name.latin1(), + It.current()->MACAddress.latin1() ); + if( R.match( It.current()->Name ) >= 0 && + ( It.current()->CardType == ARPHRD_ETHER +#ifdef ARPHRD_IEEE1394 + || It.current()->CardType == ARPHRD_IEEE1394 +#endif + ) + ) { + // old item ? + QCheckListItem * CLI = + (QCheckListItem *)LanCards_LV->firstChild(); + while( CLI ) { + if( CLI->text(0) == It.current()->MACAddress ) { + break; + } + CLI = (QCheckListItem *)CLI->nextSibling(); + } + + if( ! CLI ) { + // new item + CLI = new QCheckListItem( LanCards_LV, + It.current()->MACAddress, + QCheckListItem::CheckBox ); + } + + // mark present + CLI->setPixmap( 0, NSResources->getPixmap( + "add" ) ); + + if( NN->addressesOfNIC().findIndex( It.current()->MACAddress) < 0 ) { + // new + NN->addressesOfNIC().append( It.current()->MACAddress ); + } } @@ -89,7 +154,55 @@ void LanCardEdit::showData( LanCardData & Data ) { - // set checks +} + +// remove all cards that are not present -> flagged with 'remove' +// and unchecked +void LanCardEdit::SLOT_RemoveUnknown( void ) { + QArray<QCheckListItem *> AllItems; + + LanCardNetNode *NN = (LanCardNetNode *)NNI->nodeClass(); + + QCheckListItem * CLI = (QCheckListItem *)LanCards_LV->firstChild(); while( CLI ) { - CLI->setOn( Data.HWAddresses.findIndex(CLI->text(1)) >= 0 ); + AllItems.resize( AllItems.size()+1 ); + AllItems[ AllItems.size()-1 ] = CLI; CLI = (QCheckListItem *)CLI->nextSibling(); } + + // force update of system + System & S = NSResources->system(); + S.probeInterfaces(); + + // add any NIC that is new and matches our interfacename + QRegExp R( "eth[0-9]" ); + + + for( QDictIterator<InterfaceInfo> It(S.interfaces()); + It.current(); + ++It ) { + if( R.match( It.current()->Name ) >= 0 && + ( It.current()->CardType == ARPHRD_ETHER +#ifdef ARPHRD_IEEE1394 + || It.current()->CardType == ARPHRD_IEEE1394 +#endif + ) + ) { + + for ( unsigned i = 0; i< AllItems.size(); i++ ) { + if( AllItems[i] && + AllItems[i]->text(0) == It.current()->MACAddress ) { + AllItems[i] = 0; + break; + } + } + } + } + + // AllItems now contains all cards NOT present + // remove all items non null and not ON + for ( unsigned i = 0; i< AllItems.size(); i++ ) { + if( AllItems[i] && ! AllItems[i]->isOn() ) { + NN->addressesOfNIC().remove( AllItems[i]->text(0) ); + delete AllItems[i]; + } + } } diff --git a/noncore/settings/networksettings2/lancard/lancardedit.h b/noncore/settings/networksettings2/lancard/lancardedit.h index 8def789..282db1f 100644 --- a/noncore/settings/networksettings2/lancard/lancardedit.h +++ b/noncore/settings/networksettings2/lancard/lancardedit.h @@ -3,2 +3,4 @@ +class ALanCard; + class LanCardEdit : public LanCardGUI { @@ -10,3 +12,8 @@ public : bool commit( LanCardData & Data ); - void showData( LanCardData & Data ); + void showData( ALanCard * NNI ); + +public slots : + + void SLOT_ScanCards( void ); + void SLOT_RemoveUnknown( void ); @@ -14,3 +21,4 @@ private : - bool ContainedObsoleteMAC; + void populateList( void ); + ALanCard * NNI; }; diff --git a/noncore/settings/networksettings2/lancard/lancardrun.cpp b/noncore/settings/networksettings2/lancard/lancardrun.cpp index 951756d..2e4fc43 100644 --- a/noncore/settings/networksettings2/lancard/lancardrun.cpp +++ b/noncore/settings/networksettings2/lancard/lancardrun.cpp @@ -2,2 +2,3 @@ #include <qtextstream.h> +#include <qstringlist.h> #include <resources.h> @@ -55,4 +56,8 @@ void LanCardRun::detectState( NodeCollection * NC ) { Run = It.current(); - if( handlesInterface( Run->Name ) && - Run->CardType == ARPHRD_ETHER && + if( handlesInterface( *Run ) && + ( Run->CardType == ARPHRD_ETHER +#ifdef ARPHRD_IEEE1394 + || Run->CardType == ARPHRD_IEEE1394 +#endif + ) && ! Run->IsUp @@ -147,4 +152,8 @@ InterfaceInfo * LanCardRun::getInterface( void ) { Run = It.current(); - if( handlesInterface( Run->Name ) && - Run->CardType == ARPHRD_ETHER + if( handlesInterface( *Run ) && + ( Run->CardType == ARPHRD_ETHER +#ifdef ARPHRD_IEEE1394 + || Run->CardType == ARPHRD_IEEE1394 +#endif + ) ) { @@ -164,3 +173,20 @@ InterfaceInfo * LanCardRun::getInterface( void ) { bool LanCardRun::handlesInterface( const QString & S ) { + InterfaceInfo * II; + II = NSResources->system().interface( S ); + if( ( II = NSResources->system().interface( S ) ) ) { + return handlesInterface( *II ); + } return Pat.match( S ) >= 0; } + +bool LanCardRun::handlesInterface( const InterfaceInfo & II ) { + if( Pat.match( II.Name ) < 0 ) + return 0; + + if( Data->AnyLanCard ) { + return 1; + } + + // must also match hardware address + return ( Data->HWAddresses.findIndex( II.MACAddress ) >= 0 ); +} diff --git a/noncore/settings/networksettings2/lancard/lancardrun.h b/noncore/settings/networksettings2/lancard/lancardrun.h index 499b417..e8a535a 100644 --- a/noncore/settings/networksettings2/lancard/lancardrun.h +++ b/noncore/settings/networksettings2/lancard/lancardrun.h @@ -12,5 +12,5 @@ public : LanCardRun( ANetNodeInstance * NNI, - LanCardData & Data ) : AsDevice( NNI ), + LanCardData & D ) : AsDevice( NNI ), Pat( "eth[0-9]" ) - { } + { Data = &D; } @@ -29,2 +29,3 @@ protected : bool handlesInterface( const QString & I ); + bool handlesInterface( const InterfaceInfo & II ); @@ -34,2 +35,3 @@ private : QRegExp Pat; + LanCardData * Data; |