-rw-r--r-- | libopie2/opienet/onetwork.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
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 | |||
@@ -606,97 +606,98 @@ double OWirelessNetworkInterface::frequency() const | |||
606 | return -1.0; | 606 | return -1.0; |
607 | } | 607 | } |
608 | else | 608 | else |
609 | { | 609 | { |
610 | return double( _iwr.u.freq.m ) * pow( 10.0, _iwr.u.freq.e ) / 1000000000.0; | 610 | return double( _iwr.u.freq.m ) * pow( 10.0, _iwr.u.freq.e ) / 1000000000.0; |
611 | } | 611 | } |
612 | } | 612 | } |
613 | 613 | ||
614 | 614 | ||
615 | int OWirelessNetworkInterface::channels() const | 615 | int OWirelessNetworkInterface::channels() const |
616 | { | 616 | { |
617 | return _channels.count(); | 617 | return _channels.count(); |
618 | } | 618 | } |
619 | 619 | ||
620 | 620 | ||
621 | void OWirelessNetworkInterface::setChannelHopping( int interval ) | 621 | void OWirelessNetworkInterface::setChannelHopping( int interval ) |
622 | { | 622 | { |
623 | if ( !_hopper ) _hopper = new OChannelHopper( this ); | 623 | if ( !_hopper ) _hopper = new OChannelHopper( this ); |
624 | _hopper->setInterval( interval ); | 624 | _hopper->setInterval( interval ); |
625 | //FIXME: When and by whom will the channel hopper be deleted? | 625 | //FIXME: When and by whom will the channel hopper be deleted? |
626 | //TODO: rely on QObject hierarchy | 626 | //TODO: rely on QObject hierarchy |
627 | } | 627 | } |
628 | 628 | ||
629 | 629 | ||
630 | int OWirelessNetworkInterface::channelHopping() const | 630 | int OWirelessNetworkInterface::channelHopping() const |
631 | { | 631 | { |
632 | return _hopper->interval(); | 632 | return _hopper->interval(); |
633 | } | 633 | } |
634 | 634 | ||
635 | 635 | ||
636 | OChannelHopper* OWirelessNetworkInterface::channelHopper() const | 636 | OChannelHopper* OWirelessNetworkInterface::channelHopper() const |
637 | { | 637 | { |
638 | return _hopper; | 638 | return _hopper; |
639 | } | 639 | } |
640 | 640 | ||
641 | 641 | ||
642 | void OWirelessNetworkInterface::setMonitorMode( bool b ) | 642 | void OWirelessNetworkInterface::setMonitorMode( bool b ) |
643 | { | 643 | { |
644 | if ( _mon ) | 644 | if ( _mon ) |
645 | _mon->setEnabled( b ); | 645 | _mon->setEnabled( b ); |
646 | else | 646 | else |
647 | qDebug( "ONetwork(): can't switch monitor mode without installed monitoring interface" ); | 647 | qDebug( "ONetwork(): can't switch monitor mode without installed monitoring interface" ); |
648 | } | 648 | } |
649 | 649 | ||
650 | 650 | ||
651 | bool OWirelessNetworkInterface::monitorMode() const | 651 | bool OWirelessNetworkInterface::monitorMode() const |
652 | { | 652 | { |
653 | qDebug( "dataLinkType = %d", dataLinkType() ); | 653 | qDebug( "dataLinkType = %d", dataLinkType() ); |
654 | return dataLinkType() == ARPHRD_IEEE80211; | 654 | return ( dataLinkType() == ARPHRD_IEEE80211 || dataLinkType() == 802 ); |
655 | // 802 is the header type for PRISM - Linux support for this is pending... | ||
655 | } | 656 | } |
656 | 657 | ||
657 | 658 | ||
658 | QString OWirelessNetworkInterface::nickName() const | 659 | QString OWirelessNetworkInterface::nickName() const |
659 | { | 660 | { |
660 | char str[IW_ESSID_MAX_SIZE]; | 661 | char str[IW_ESSID_MAX_SIZE]; |
661 | _iwr.u.data.pointer = &str[0]; | 662 | _iwr.u.data.pointer = &str[0]; |
662 | _iwr.u.data.length = IW_ESSID_MAX_SIZE; | 663 | _iwr.u.data.length = IW_ESSID_MAX_SIZE; |
663 | if ( !wioctl( SIOCGIWNICKN ) ) | 664 | if ( !wioctl( SIOCGIWNICKN ) ) |
664 | { | 665 | { |
665 | return "<unknown>"; | 666 | return "<unknown>"; |
666 | } | 667 | } |
667 | else | 668 | else |
668 | { | 669 | { |
669 | str[_iwr.u.data.length] = 0x0; // some drivers (e.g. wlan-ng) don't zero-terminate the string | 670 | str[_iwr.u.data.length] = 0x0; // some drivers (e.g. wlan-ng) don't zero-terminate the string |
670 | return str; | 671 | return str; |
671 | } | 672 | } |
672 | } | 673 | } |
673 | 674 | ||
674 | 675 | ||
675 | void OWirelessNetworkInterface::setPrivate( const QString& call, int numargs, ... ) | 676 | void OWirelessNetworkInterface::setPrivate( const QString& call, int numargs, ... ) |
676 | { | 677 | { |
677 | OPrivateIOCTL* priv = static_cast<OPrivateIOCTL*>( child( (const char*) call ) ); | 678 | OPrivateIOCTL* priv = static_cast<OPrivateIOCTL*>( child( (const char*) call ) ); |
678 | if ( !priv ) | 679 | if ( !priv ) |
679 | { | 680 | { |
680 | qDebug( "OWirelessNetworkInterface::setPrivate(): interface '%s' does not support private ioctl '%s'", name(), (const char*) call ); | 681 | qDebug( "OWirelessNetworkInterface::setPrivate(): interface '%s' does not support private ioctl '%s'", name(), (const char*) call ); |
681 | return; | 682 | return; |
682 | } | 683 | } |
683 | if ( priv->numberSetArgs() != numargs ) | 684 | if ( priv->numberSetArgs() != numargs ) |
684 | { | 685 | { |
685 | qDebug( "OWirelessNetworkInterface::setPrivate(): parameter count not matching. '%s' expects %d arguments, but got %d", (const char*) call, priv->numberSetArgs(), numargs ); | 686 | qDebug( "OWirelessNetworkInterface::setPrivate(): parameter count not matching. '%s' expects %d arguments, but got %d", (const char*) call, priv->numberSetArgs(), numargs ); |
686 | return; | 687 | return; |
687 | } | 688 | } |
688 | 689 | ||
689 | qDebug( "OWirelessNetworkInterface::setPrivate(): about to call '%s' on interface '%s'", (const char*) call, name() ); | 690 | qDebug( "OWirelessNetworkInterface::setPrivate(): about to call '%s' on interface '%s'", (const char*) call, name() ); |
690 | memset( &_iwr, 0, sizeof _iwr ); | 691 | memset( &_iwr, 0, sizeof _iwr ); |
691 | va_list argp; | 692 | va_list argp; |
692 | va_start( argp, numargs ); | 693 | va_start( argp, numargs ); |
693 | for ( int i = 0; i < numargs; ++i ) | 694 | for ( int i = 0; i < numargs; ++i ) |
694 | { | 695 | { |
695 | priv->setParameter( i, va_arg( argp, int ) ); | 696 | priv->setParameter( i, va_arg( argp, int ) ); |
696 | } | 697 | } |
697 | va_end( argp ); | 698 | va_end( argp ); |
698 | priv->invoke(); | 699 | priv->invoke(); |
699 | } | 700 | } |
700 | 701 | ||
701 | 702 | ||
702 | void OWirelessNetworkInterface::getPrivate( const QString& call ) | 703 | void OWirelessNetworkInterface::getPrivate( const QString& call ) |
@@ -888,69 +889,69 @@ OHostAPMonitoringInterface::OHostAPMonitoringInterface( ONetworkInterface* iface | |||
888 | 889 | ||
889 | OHostAPMonitoringInterface::~OHostAPMonitoringInterface() | 890 | OHostAPMonitoringInterface::~OHostAPMonitoringInterface() |
890 | { | 891 | { |
891 | } | 892 | } |
892 | 893 | ||
893 | void OHostAPMonitoringInterface::setEnabled( bool b ) | 894 | void OHostAPMonitoringInterface::setEnabled( bool b ) |
894 | { | 895 | { |
895 | // IW_MODE_MONITOR was introduced in Wireless Extensions Version 15 | 896 | // IW_MODE_MONITOR was introduced in Wireless Extensions Version 15 |
896 | // Wireless Extensions < Version 15 need iwpriv commandos for monitoring | 897 | // Wireless Extensions < Version 15 need iwpriv commandos for monitoring |
897 | 898 | ||
898 | //TODO: check wireless extensions version on runtime and use | 899 | //TODO: check wireless extensions version on runtime and use |
899 | //TODO: SIOCSIWMODE( IW_MODE_MONITOR ) if running on WE >= 15 | 900 | //TODO: SIOCSIWMODE( IW_MODE_MONITOR ) if running on WE >= 15 |
900 | 901 | ||
901 | if ( b ) | 902 | if ( b ) |
902 | { | 903 | { |
903 | _if->setPrivate( "monitor", 1, 2 ); | 904 | _if->setPrivate( "monitor", 1, 2 ); |
904 | } | 905 | } |
905 | else | 906 | else |
906 | { | 907 | { |
907 | _if->setPrivate( "monitor", 1, 0 ); | 908 | _if->setPrivate( "monitor", 1, 0 ); |
908 | } | 909 | } |
909 | } | 910 | } |
910 | 911 | ||
911 | 912 | ||
912 | QString OHostAPMonitoringInterface::name() const | 913 | QString OHostAPMonitoringInterface::name() const |
913 | { | 914 | { |
914 | return "hostap"; | 915 | return "hostap"; |
915 | } | 916 | } |
916 | 917 | ||
917 | 918 | ||
918 | /*====================================================================================== | 919 | /*====================================================================================== |
919 | * OOrinocoNetworkInterface | 920 | * OOrinocoNetworkInterface |
920 | *======================================================================================*/ | 921 | *======================================================================================*/ |
921 | 922 | ||
922 | OOrinocoMonitoringInterface::OOrinocoMonitoringInterface( ONetworkInterface* iface ) | 923 | OOrinocoMonitoringInterface::OOrinocoMonitoringInterface( ONetworkInterface* iface ) |
923 | :OMonitoringInterface( iface ) | 924 | :OMonitoringInterface( iface ) |
924 | { | 925 | { |
925 | iface->setMonitoring( this ); | 926 | iface->setMonitoring( this ); |
926 | } | 927 | } |
927 | 928 | ||
928 | 929 | ||
929 | OOrinocoMonitoringInterface::~OOrinocoMonitoringInterface() | 930 | OOrinocoMonitoringInterface::~OOrinocoMonitoringInterface() |
930 | { | 931 | { |
931 | } | 932 | } |
932 | 933 | ||
933 | 934 | ||
934 | void OOrinocoMonitoringInterface::setChannel( int c ) | 935 | void OOrinocoMonitoringInterface::setChannel( int c ) |
935 | { | 936 | { |
936 | _if->setPrivate( "monitor", 2, 2, c ); | 937 | _if->setPrivate( "monitor", 2, 1, c ); |
937 | } | 938 | } |
938 | 939 | ||
939 | 940 | ||
940 | void OOrinocoMonitoringInterface::setEnabled( bool b ) | 941 | void OOrinocoMonitoringInterface::setEnabled( bool b ) |
941 | { | 942 | { |
942 | if ( b ) | 943 | if ( b ) |
943 | { | 944 | { |
944 | setChannel( 1 ); | 945 | setChannel( 1 ); |
945 | } | 946 | } |
946 | else | 947 | else |
947 | { | 948 | { |
948 | _if->setPrivate( "monitor", 2, 0, 0 ); | 949 | _if->setPrivate( "monitor", 2, 0, 0 ); |
949 | } | 950 | } |
950 | } | 951 | } |
951 | 952 | ||
952 | 953 | ||
953 | QString OOrinocoMonitoringInterface::name() const | 954 | QString OOrinocoMonitoringInterface::name() const |
954 | { | 955 | { |
955 | return "orinoco"; | 956 | return "orinoco"; |
956 | } | 957 | } |