From a0ffe9079338a8b870de5267a22ddbb01cb1cc27 Mon Sep 17 00:00:00 2001 From: mickeyl Date: Tue, 22 Apr 2003 22:11:28 +0000 Subject: add prism header parsing capability! --- diff --git a/libopie2/opienet/802_11_user.h b/libopie2/opienet/802_11_user.h index f596bd8..cd98503 100644 --- a/libopie2/opienet/802_11_user.h +++ b/libopie2/opienet/802_11_user.h @@ -369,6 +369,20 @@ struct ieee_802_11_mgmt_body { // struct tim_t tim; }; +/* a 802.11 value */ +struct val_80211 { + unsigned int did; + unsigned short status, len; + unsigned int data; +}; + +/* header attached during prism monitor mode */ +struct prism_hdr { + unsigned int msgcode, msglen; + char devname[16]; + struct val_80211 hosttime, mactime, channel, rssi, sq, signal, + noise, rate, istx, frmlen; +}; struct ieee_802_11_data_body { //FIXME diff --git a/libopie2/opienet/onetwork.cpp b/libopie2/opienet/onetwork.cpp index be2736a..95e7043 100644 --- a/libopie2/opienet/onetwork.cpp +++ b/libopie2/opienet/onetwork.cpp @@ -651,7 +651,8 @@ void OWirelessNetworkInterface::setMonitorMode( bool b ) bool OWirelessNetworkInterface::monitorMode() const { qDebug( "dataLinkType = %d", dataLinkType() ); - return dataLinkType() == ARPHRD_IEEE80211; + return ( dataLinkType() == ARPHRD_IEEE80211 || dataLinkType() == 802 ); + // 802 is the header type for PRISM - Linux support for this is pending... } @@ -933,7 +934,7 @@ OOrinocoMonitoringInterface::~OOrinocoMonitoringInterface() void OOrinocoMonitoringInterface::setChannel( int c ) { - _if->setPrivate( "monitor", 2, 2, c ); + _if->setPrivate( "monitor", 2, 1, c ); } diff --git a/libopie2/opienet/opcap.cpp b/libopie2/opienet/opcap.cpp index e362883..675818e 100644 --- a/libopie2/opienet/opcap.cpp +++ b/libopie2/opienet/opcap.cpp @@ -65,6 +65,11 @@ OPacket::OPacket( int datalink, packetheaderstruct header, const unsigned char* new OWaveLanPacket( _end, (const struct ieee_802_11_header*) data, this ); break; + 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 ); } @@ -316,6 +321,32 @@ OTCPPacket::~OTCPPacket() /*====================================================================================== + * OPrismHeaderPacket + *======================================================================================*/ + + +OPrismHeaderPacket::OPrismHeaderPacket( const unsigned char* end, const struct prism_hdr* data, QObject* parent ) + :QObject( parent, "Prism" ), _header( data ) + +{ + qDebug( "OPrismHeaderPacket::OPrismHeaderPacket(): decoding PRISM header..." ); + + qDebug( "Signal Strength = %d", data->signal.data ); + + new OWaveLanPacket( end, (const struct ieee_802_11_header*) (data+1), this ); +} + +OPrismHeaderPacket::~OPrismHeaderPacket() +{ +} + + +unsigned int OPrismHeaderPacket::signalStrength() const +{ + return _header->signal.data; +} + +/*====================================================================================== * OWaveLanPacket *======================================================================================*/ diff --git a/libopie2/opienet/opcap.h b/libopie2/opienet/opcap.h index fe88e68..83f7115 100644 --- a/libopie2/opienet/opcap.h +++ b/libopie2/opienet/opcap.h @@ -155,6 +155,25 @@ class OEthernetPacket : public QObject /*====================================================================================== + * OPrismHeaderPacket - DLT_PRISM_HEADER frame + *======================================================================================*/ + +class OPrismHeaderPacket : public QObject +{ + Q_OBJECT + + public: + OPrismHeaderPacket( const unsigned char*, const struct prism_hdr*, QObject* parent = 0 ); + virtual ~OPrismHeaderPacket(); + + unsigned int signalStrength() const; + + private: + const struct prism_hdr* _header; +}; + + +/*====================================================================================== * OWaveLanPacket - DLT_IEEE802_11 frame *======================================================================================*/ -- cgit v0.9.0.2