From b59d75caebee92dfa3b79d98eebfe30914e9a8aa Mon Sep 17 00:00:00 2001 From: consti10 Date: Wed, 13 Sep 2023 12:15:12 +0200 Subject: [PATCH] refactor out wifibroadcast::WifiCard --- executables/example_hello.cpp | 4 ++-- executables/example_pollute.cpp | 4 ++-- executables/example_udp.cpp | 4 ++-- executables/injection_rate_test.cpp | 4 ++-- executables/test_txrx.cpp | 4 ++-- src/WBTxRx.cpp | 8 ++++---- src/WBTxRx.h | 24 ++++++++-------------- src/WiFiCard.h | 32 +++++++++++++++++++++++++++++ 8 files changed, 54 insertions(+), 30 deletions(-) create mode 100644 src/WiFiCard.h diff --git a/executables/example_hello.cpp b/executables/example_hello.cpp index feda65cb..4c05125c 100644 --- a/executables/example_hello.cpp +++ b/executables/example_hello.cpp @@ -52,8 +52,8 @@ int main(int argc, char *const *argv) { std::cout<<"Running as "<<(is_air ? "Air" : "Ground")<<" on card "< cards; - WBTxRx::WifiCard tmp_card{card,1}; + std::vector cards; + wifibroadcast::WifiCard tmp_card{card,1}; cards.push_back(tmp_card); WBTxRx::Options options_txrx{}; options_txrx.pcap_rx_set_direction = true; diff --git a/executables/example_pollute.cpp b/executables/example_pollute.cpp index e74c026d..ef10bc5e 100644 --- a/executables/example_pollute.cpp +++ b/executables/example_pollute.cpp @@ -34,8 +34,8 @@ int main(int argc, char *const *argv) { } // Create the Tx-RX - std::vector cards; - WBTxRx::WifiCard tmp_card{card,1}; + std::vector cards; + wifibroadcast::WifiCard tmp_card{card,1}; cards.push_back(tmp_card); WBTxRx::Options options_txrx{}; options_txrx.pcap_rx_set_direction = true; diff --git a/executables/example_udp.cpp b/executables/example_udp.cpp index b2cb167f..9e99ce45 100644 --- a/executables/example_udp.cpp +++ b/executables/example_udp.cpp @@ -70,8 +70,8 @@ int main(int argc, char *const *argv) { auto console=wifibroadcast::log::create_or_get("main"); console->info("Running as {} on card {}",(is_air ? "Air" : "Ground"),card); - std::vector cards; - WBTxRx::WifiCard tmp_card{card,1}; + std::vector cards; + wifibroadcast::WifiCard tmp_card{card,1}; cards.push_back(tmp_card); WBTxRx::Options options_txrx{}; //options_txrx.pcap_rx_set_direction= false; diff --git a/executables/injection_rate_test.cpp b/executables/injection_rate_test.cpp index 91b8b24c..5507b5f8 100644 --- a/executables/injection_rate_test.cpp +++ b/executables/injection_rate_test.cpp @@ -253,8 +253,8 @@ int main(int argc, char *const *argv) { std::cout<<"Running on card "< cards; - WBTxRx::WifiCard tmp_card{card,1}; + std::vector cards; + wifibroadcast::WifiCard tmp_card{card,1}; cards.push_back(tmp_card); WBTxRx::Options options_txrx{}; //options_txrx.pcap_rx_set_direction= false; diff --git a/executables/test_txrx.cpp b/executables/test_txrx.cpp index 47b1836f..71692655 100644 --- a/executables/test_txrx.cpp +++ b/executables/test_txrx.cpp @@ -29,8 +29,8 @@ int main(int argc, char *const *argv) { } } - std::vector cards; - WBTxRx::WifiCard tmp_card{card,1}; + std::vector cards; + wifibroadcast::WifiCard tmp_card{card,1}; cards.push_back(tmp_card); WBTxRx::Options options_txrx{}; //options_txrx.pcap_rx_set_direction= false; diff --git a/src/WBTxRx.cpp b/src/WBTxRx.cpp index bc2804eb..061ac4d3 100644 --- a/src/WBTxRx.cpp +++ b/src/WBTxRx.cpp @@ -10,14 +10,14 @@ #include "pcap_helper.hpp" #include "raw_socket_helper.hpp" -WBTxRx::WBTxRx(std::vector wifi_cards1,Options options1,std::shared_ptr session_key_radiotap_header) +WBTxRx::WBTxRx(std::vector wifi_cards1,Options options1,std::shared_ptr session_key_radiotap_header) : m_options(options1), m_wifi_cards(std::move(wifi_cards1)), m_session_key_radiotap_header(std::move(session_key_radiotap_header)) { assert(!m_wifi_cards.empty()); m_console=wifibroadcast::log::create_or_get("WBTxRx"); - m_console->debug("{}", options_to_string(get_wifi_card_names(),m_options)); + m_console->debug("[{}]", options_to_string(wifibroadcast::get_wifi_card_names(m_wifi_cards),m_options)); // Common error - not run as root if(!SchedulingHelper::check_root()){ std::cerr<<"wifibroadcast needs root"<=1){ @@ -530,7 +530,7 @@ void WBTxRx::on_new_packet(const uint8_t wlan_idx,const uint8_t *pkt,const int p } } } - if(m_wifi_cards[wlan_idx].type==WIFI_CARD_TYPE_RTL8812AU){ + if(m_wifi_cards[wlan_idx].type==wifibroadcast::WIFI_CARD_TYPE_RTL8812AU){ // RTL8812AU BUG - general value cannot be used, use max of antennas instead this_wifi_card_stats.card_dbm=std::max(this_wifi_card_stats.antenna1_dbm,this_wifi_card_stats.antenna2_dbm); } diff --git a/src/WBTxRx.h b/src/WBTxRx.h index de0cf07e..99405531 100644 --- a/src/WBTxRx.h +++ b/src/WBTxRx.h @@ -23,6 +23,7 @@ #include "SignalQualityAccumulator.hpp" #include "HelperSources/UINT16SeqNrHelper.hpp" #include "HelperSources/UINT64SeqNrHelper.hpp" +#include "WiFiCard.h" /** * This class exists to provide a clean, working interface to create a @@ -96,14 +97,12 @@ class WBTxRx { // a tx error hint is thrown if injecting the packet takes longer than max_sane_injection_time std::chrono::milliseconds max_sane_injection_time=std::chrono::milliseconds(5); }; - // RTL8812AU driver requires a quirk regarding rssi - static constexpr auto WIFI_CARD_TYPE_UNKNOWN=0; - static constexpr auto WIFI_CARD_TYPE_RTL8812AU=1; - struct WifiCard{ - std::string name; - int type; - }; - explicit WBTxRx(std::vector wifi_cards,Options options1,std::shared_ptr session_key_radiotap_header); + /** + * @param wifi_cards card(s) used for tx / rx + * @param options1 see documentation in options string + * @param session_key_radiotap_header radiotap header used when injecting session key packets + */ + explicit WBTxRx(std::vector wifi_cards,Options options1,std::shared_ptr session_key_radiotap_header); WBTxRx(const WBTxRx &) = delete; WBTxRx &operator=(const WBTxRx &) = delete; ~WBTxRx(); @@ -255,14 +254,7 @@ class WBTxRx { const Options m_options; std::shared_ptr m_console; std::shared_ptr m_session_key_radiotap_header; - const std::vector m_wifi_cards; - std::vector get_wifi_card_names(){ - std::vector ret; - for(const auto& card:m_wifi_cards){ - ret.push_back(card.name); - } - return ret; - } + const std::vector m_wifi_cards; std::chrono::steady_clock::time_point m_session_key_next_announce_ts{}; Ieee80211HeaderOpenHD m_tx_ieee80211_hdr_openhd{}; std::array m_tx_packet_buff{}; diff --git a/src/WiFiCard.h b/src/WiFiCard.h new file mode 100644 index 00000000..74bcd3a6 --- /dev/null +++ b/src/WiFiCard.h @@ -0,0 +1,32 @@ +// +// Created by consti10 on 13.09.23. +// + +#ifndef WIFIBROADCAST_WIFICARD_H +#define WIFIBROADCAST_WIFICARD_H + +#include +#include +#include + +namespace wifibroadcast{ +// In OpenHD, we have a quite extensive WiFiCard abstraction - +// in wifibroadcast, we are a bit simpler +// (But we require info for quirks) +// RTL8812AU driver requires a quirk regarding rssi +static constexpr auto WIFI_CARD_TYPE_UNKNOWN=0; +static constexpr auto WIFI_CARD_TYPE_RTL8812AU=1; +struct WifiCard{ + std::string name; + int type; +}; +static std::vector get_wifi_card_names(const std::vector& cards){ + std::vector ret; + for(const auto& card:cards){ + ret.push_back(card.name); + } + return ret; +} +} + +#endif // WIFIBROADCAST_WIFICARD_H