author | mickeyl <mickeyl> | 2003-04-03 23:46:04 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2003-04-03 23:46:04 (UTC) |
commit | 487971af0c1b70babcc39fd549dc0d8142cd4865 (patch) (side-by-side diff) | |
tree | e317df1359a20686ba35b17309a8b82386108fb3 | |
parent | 934e4d81bc078c704a39f02663607a6c16a5b29f (diff) | |
download | opie-487971af0c1b70babcc39fd549dc0d8142cd4865.zip opie-487971af0c1b70babcc39fd549dc0d8142cd4865.tar.gz opie-487971af0c1b70babcc39fd549dc0d8142cd4865.tar.bz2 |
first part of private IOCTL API for OWirelessNetworkInterface implemented
-rw-r--r-- | libopie2/examples/opienet/onetworkdemo/onetworkdemo.cpp | 8 | ||||
-rw-r--r-- | libopie2/opienet/onetutils.cpp | 33 | ||||
-rw-r--r-- | libopie2/opienet/onetutils.h | 4 | ||||
-rw-r--r-- | libopie2/opienet/onetwork.cpp | 33 | ||||
-rw-r--r-- | libopie2/opienet/onetwork.h | 5 |
5 files changed, 79 insertions, 4 deletions
diff --git a/libopie2/examples/opienet/onetworkdemo/onetworkdemo.cpp b/libopie2/examples/opienet/onetworkdemo/onetworkdemo.cpp index 7703b4c..b010ac5 100644 --- a/libopie2/examples/opienet/onetworkdemo/onetworkdemo.cpp +++ b/libopie2/examples/opienet/onetworkdemo/onetworkdemo.cpp @@ -27,4 +27,12 @@ int main( int argc, char** argv ) //} + // try to set monitor mode + + // first some wrong calls to check if this is working + iface->setPrivate( "seppel", 10 ); + iface->setPrivate( "monitor", 0 ); + + // now the real deal + iface->setPrivate( "monitor", 2, 2, 3 ); } ++it; diff --git a/libopie2/opienet/onetutils.cpp b/libopie2/opienet/onetutils.cpp index 3e11b53..fd8f9e9 100644 --- a/libopie2/opienet/onetutils.cpp +++ b/libopie2/opienet/onetutils.cpp @@ -31,4 +31,5 @@ #include <opie2/onetutils.h> +#include <opie2/onetwork.h> #include <net/if.h> @@ -119,5 +120,8 @@ OPrivateIOCTL::~OPrivateIOCTL() -inline int OPrivateIOCTL::numberGetArgs() const +#ifdef QT_NO_DEBUG +inline +#endif +int OPrivateIOCTL::numberGetArgs() const { return _getargs & IW_PRIV_SIZE_MASK; @@ -125,5 +129,8 @@ inline int OPrivateIOCTL::numberGetArgs() const -inline int OPrivateIOCTL::typeGetArgs() const +#ifdef QT_NO_DEBUG +inline +#endif +int OPrivateIOCTL::typeGetArgs() const { return _getargs & IW_PRIV_TYPE_MASK >> 12; @@ -131,5 +138,8 @@ inline int OPrivateIOCTL::typeGetArgs() const -inline int OPrivateIOCTL::numberSetArgs() const +#ifdef QT_NO_DEBUG +inline +#endif +int OPrivateIOCTL::numberSetArgs() const { return _setargs & IW_PRIV_SIZE_MASK; @@ -137,5 +147,8 @@ inline int OPrivateIOCTL::numberSetArgs() const -inline int OPrivateIOCTL::typeSetArgs() const +#ifdef QT_NO_DEBUG +inline +#endif +int OPrivateIOCTL::typeSetArgs() const { return _setargs & IW_PRIV_TYPE_MASK >> 12; @@ -143,4 +156,16 @@ inline int OPrivateIOCTL::typeSetArgs() const +void OPrivateIOCTL::invoke() const +{ + ( (OWirelessNetworkInterface*) parent() )->wioctl( _ioctl ); +} + + +void OPrivateIOCTL::setParameter( int num, u_int32_t value ) +{ + u_int32_t* arglist = (u_int32_t*) &( (OWirelessNetworkInterface*) parent() )->_iwr.u.name; + arglist[num] = value; +} + /*====================================================================================== * assorted functions diff --git a/libopie2/opienet/onetutils.h b/libopie2/opienet/onetutils.h index 6640515..8be042b 100644 --- a/libopie2/opienet/onetutils.h +++ b/libopie2/opienet/onetutils.h @@ -99,8 +99,12 @@ class OPrivateIOCTL : public QObject int typeSetArgs() const; + void invoke() const; + void setParameter( int, u_int32_t ); + private: u_int32_t _ioctl; u_int16_t _getargs; u_int16_t _setargs; + }; diff --git a/libopie2/opienet/onetwork.cpp b/libopie2/opienet/onetwork.cpp index 2548a04..66fa215 100644 --- a/libopie2/opienet/onetwork.cpp +++ b/libopie2/opienet/onetwork.cpp @@ -53,4 +53,5 @@ #include <unistd.h> #include <linux/sockios.h> +#include <stdarg.h> using namespace std; @@ -583,4 +584,36 @@ QString OWirelessNetworkInterface::nickName() const +void OWirelessNetworkInterface::setPrivate( const QString& call, int numargs, ... ) +{ + OPrivateIOCTL* priv = static_cast<OPrivateIOCTL*>( child( (const char*) call ) ); + if ( !priv ) + { + qDebug( "OWirelessNetworkInterface::setPrivate(): interface '%s' does not support private ioctl '%s'", name(), (const char*) call ); + return; + } + if ( priv->numberSetArgs() != numargs ) + { + qDebug( "OWirelessNetworkInterface::setPrivate(): parameter count not matching. '%s' expects %d arguments, but got %d", (const char*) call, priv->numberSetArgs(), numargs ); + return; + } + + qDebug( "OWirelessNetworkInterface::setPrivate(): about to call '%s' on interface '%s'", (const char*) call, name() ); + memset( &_iwr, 0, sizeof _iwr ); + va_list argp; + va_start( argp, numargs ); + for ( int i = 0; i < numargs; ++i ) + { + priv->setParameter( i, va_arg( argp, int ) ); + } + va_end( argp ); + priv->invoke(); +} + + +void OWirelessNetworkInterface::getPrivate( const QString& call ) +{ +} + + QString OWirelessNetworkInterface::SSID() const { diff --git a/libopie2/opienet/onetwork.h b/libopie2/opienet/onetwork.h index acf2f69..7c70873 100644 --- a/libopie2/opienet/onetwork.h +++ b/libopie2/opienet/onetwork.h @@ -184,4 +184,6 @@ class OWirelessNetworkInterface : public ONetworkInterface friend class OOrinocoMonitoringInterface; + friend class OPrivateIOCTL; + public: enum Mode { AdHoc, Managed, Monitor }; @@ -208,4 +210,7 @@ class OWirelessNetworkInterface : public ONetworkInterface virtual QString nickName() const; + virtual void setPrivate( const QString&, int, ... ); + virtual void getPrivate( const QString& ); + virtual bool isAssociated() const {}; virtual QString associatedAP() const; |