summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2003-05-05 14:57:27 (UTC)
committer mickeyl <mickeyl>2003-05-05 14:57:27 (UTC)
commit29f5c6e6bcb8db0f0e26da25dbf34b2685c01526 (patch) (side-by-side diff)
treea05e296ff11d532fd3d5fd092aade07474d1ba95
parenta5818261bec2d0a6d903fef9baeed1a7abc85275 (diff)
downloadopie-29f5c6e6bcb8db0f0e26da25dbf34b2685c01526.zip
opie-29f5c6e6bcb8db0f0e26da25dbf34b2685c01526.tar.gz
opie-29f5c6e6bcb8db0f0e26da25dbf34b2685c01526.tar.bz2
- fix segfault on unknown linktype (thanks groucho)
- make capturing using PRISM headers optional
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--libopie2/opienet/onetwork.cpp31
-rw-r--r--libopie2/opienet/onetwork.h11
-rw-r--r--libopie2/opienet/opcap.cpp2
3 files changed, 25 insertions, 19 deletions
diff --git a/libopie2/opienet/onetwork.cpp b/libopie2/opienet/onetwork.cpp
index 2dfff1d..6cef5cf 100644
--- a/libopie2/opienet/onetwork.cpp
+++ b/libopie2/opienet/onetwork.cpp
@@ -806,14 +806,14 @@ bool OWirelessNetworkInterface::wioctl( int call ) const
/*======================================================================================
* OMonitoringInterface
*======================================================================================*/
-OMonitoringInterface::OMonitoringInterface( ONetworkInterface* iface )
- :_if( static_cast<OWirelessNetworkInterface*>( iface ) )
+OMonitoringInterface::OMonitoringInterface( ONetworkInterface* iface, bool prismHeader )
+ :_if( static_cast<OWirelessNetworkInterface*>( iface ) ), _prismHeader( prismHeader )
{
}
OMonitoringInterface::~OMonitoringInterface()
{
@@ -842,14 +842,14 @@ void OMonitoringInterface::setEnabled( bool b )
/*======================================================================================
* OCiscoMonitoringInterface
*======================================================================================*/
-OCiscoMonitoringInterface::OCiscoMonitoringInterface( ONetworkInterface* iface )
- :OMonitoringInterface( iface )
+OCiscoMonitoringInterface::OCiscoMonitoringInterface( ONetworkInterface* iface, bool prismHeader )
+ :OMonitoringInterface( iface, prismHeader )
{
iface->setMonitoring( this );
}
OCiscoMonitoringInterface::~OCiscoMonitoringInterface()
@@ -890,14 +890,14 @@ void OCiscoMonitoringInterface::setChannel( int )
/*======================================================================================
* OWlanNGMonitoringInterface
*======================================================================================*/
-OWlanNGMonitoringInterface::OWlanNGMonitoringInterface( ONetworkInterface* iface )
- :OMonitoringInterface( iface )
+OWlanNGMonitoringInterface::OWlanNGMonitoringInterface( ONetworkInterface* iface, bool prismHeader )
+ :OMonitoringInterface( iface, prismHeader )
{
iface->setMonitoring( this );
}
OWlanNGMonitoringInterface::~OWlanNGMonitoringInterface()
@@ -907,14 +907,16 @@ OWlanNGMonitoringInterface::~OWlanNGMonitoringInterface()
void OWlanNGMonitoringInterface::setEnabled( bool b )
{
//FIXME: do nothing if its already in the same mode
QString enable = b ? "true" : "false";
+ QString prism = _prismHeader ? "true" : "false";
QString cmd;
- cmd.sprintf( "$(which wlanctl-ng) %s lnxreq_wlansniff channel=%d enable=%s", (const char*) _if->name(), 1, (const char*) enable );
+ cmd.sprintf( "$(which wlanctl-ng) %s lnxreq_wlansniff channel=%d enable=%s prismheader=%s",
+ (const char*) _if->name(), 1, (const char*) enable, (const char*) prism );
system( cmd );
}
QString OWlanNGMonitoringInterface::name() const
{
@@ -929,14 +931,14 @@ void OWlanNGMonitoringInterface::setChannel( int )
/*======================================================================================
* OHostAPMonitoringInterface
*======================================================================================*/
-OHostAPMonitoringInterface::OHostAPMonitoringInterface( ONetworkInterface* iface )
- :OMonitoringInterface( iface )
+OHostAPMonitoringInterface::OHostAPMonitoringInterface( ONetworkInterface* iface, bool prismHeader )
+ :OMonitoringInterface( iface, prismHeader )
{
iface->setMonitoring( this );
}
OHostAPMonitoringInterface::~OHostAPMonitoringInterface()
{
@@ -947,15 +949,17 @@ void OHostAPMonitoringInterface::setEnabled( bool b )
// IW_MODE_MONITOR was introduced in Wireless Extensions Version 15
// Wireless Extensions < Version 15 need iwpriv commandos for monitoring
//TODO: check wireless extensions version on runtime and use
//TODO: SIOCSIWMODE( IW_MODE_MONITOR ) if running on WE >= 15
+ int monitorCode = _prismHeader ? 1 : 2;
+
if ( b )
{
- _if->setPrivate( "monitor", 1, 2 );
+ _if->setPrivate( "monitor", 1, monitorCode );
}
else
{
_if->setPrivate( "monitor", 1, 0 );
}
}
@@ -968,27 +972,28 @@ QString OHostAPMonitoringInterface::name() const
/*======================================================================================
* OOrinocoNetworkInterface
*======================================================================================*/
-OOrinocoMonitoringInterface::OOrinocoMonitoringInterface( ONetworkInterface* iface )
- :OMonitoringInterface( iface )
+OOrinocoMonitoringInterface::OOrinocoMonitoringInterface( ONetworkInterface* iface, bool prismHeader )
+ :OMonitoringInterface( iface, prismHeader )
{
iface->setMonitoring( this );
}
OOrinocoMonitoringInterface::~OOrinocoMonitoringInterface()
{
}
void OOrinocoMonitoringInterface::setChannel( int c )
{
- _if->setPrivate( "monitor", 2, 1, c );
+ int monitorCode = _prismHeader ? 1 : 2;
+ _if->setPrivate( "monitor", 2, monitorCode, c );
}
void OOrinocoMonitoringInterface::setEnabled( bool b )
{
if ( b )
diff --git a/libopie2/opienet/onetwork.h b/libopie2/opienet/onetwork.h
index 1b38d02..eb9d506 100644
--- a/libopie2/opienet/onetwork.h
+++ b/libopie2/opienet/onetwork.h
@@ -449,37 +449,38 @@ class OWirelessNetworkInterface : public ONetworkInterface
class OMonitoringInterface
{
public:
OMonitoringInterface();
- OMonitoringInterface( ONetworkInterface* );
+ OMonitoringInterface( ONetworkInterface*, bool _prismHeader );
virtual ~OMonitoringInterface();
public:
virtual void setEnabled( bool );
virtual bool enabled() const;
virtual void setChannel( int );
virtual QString name() const = 0;
protected:
OWirelessNetworkInterface* _if;
+ bool _prismHeader;
};
/*======================================================================================
* OCiscoMonitoring
*======================================================================================*/
class OCiscoMonitoringInterface : public OMonitoringInterface
{
public:
- OCiscoMonitoringInterface( ONetworkInterface* );
+ OCiscoMonitoringInterface( ONetworkInterface*, bool _prismHeader );
virtual ~OCiscoMonitoringInterface();
virtual void setEnabled( bool );
virtual QString name() const;
virtual void setChannel( int );
@@ -489,13 +490,13 @@ class OCiscoMonitoringInterface : public OMonitoringInterface
* OWlanNGMonitoringInterface
*======================================================================================*/
class OWlanNGMonitoringInterface : public OMonitoringInterface
{
public:
- OWlanNGMonitoringInterface( ONetworkInterface* );
+ OWlanNGMonitoringInterface( ONetworkInterface*, bool _prismHeader );
virtual ~OWlanNGMonitoringInterface();
public:
virtual void setEnabled( bool );
virtual QString name() const;
virtual void setChannel( int );
@@ -506,13 +507,13 @@ class OWlanNGMonitoringInterface : public OMonitoringInterface
* OHostAPMonitoringInterface
*======================================================================================*/
class OHostAPMonitoringInterface : public OMonitoringInterface
{
public:
- OHostAPMonitoringInterface( ONetworkInterface* );
+ OHostAPMonitoringInterface( ONetworkInterface*, bool _prismHeader );
virtual ~OHostAPMonitoringInterface();
public:
virtual void setEnabled( bool );
virtual QString name() const;
};
@@ -521,13 +522,13 @@ class OHostAPMonitoringInterface : public OMonitoringInterface
* OOrinocoMonitoringInterface
*======================================================================================*/
class OOrinocoMonitoringInterface : public OMonitoringInterface
{
public:
- OOrinocoMonitoringInterface( ONetworkInterface* );
+ OOrinocoMonitoringInterface( ONetworkInterface*, bool _prismHeader );
virtual ~OOrinocoMonitoringInterface();
public:
virtual void setChannel( int );
virtual void setEnabled( bool );
virtual QString name() const;
diff --git a/libopie2/opienet/opcap.cpp b/libopie2/opienet/opcap.cpp
index e2ab6d7..f6d05ea 100644
--- a/libopie2/opienet/opcap.cpp
+++ b/libopie2/opienet/opcap.cpp
@@ -68,13 +68,13 @@ OPacket::OPacket( int datalink, packetheaderstruct header, const unsigned char*
case DLT_PRISM_HEADER:
qDebug( "OPacket::OPacket(): Received Packet. Datalink = PRISM_HEADER" );
new OPrismHeaderPacket( _end, (const struct prism_hdr*) (unsigned char*) data, this );
break;
default:
- qWarning( "OPacket::OPacket(): Received Packet over unsupported datalink '%s'!", datalink );
+ qWarning( "OPacket::OPacket(): Received Packet over unsupported datalink (type %d)!", datalink );
}
}
OPacket::~OPacket()
{