diff --git a/capabilities/edgecore_eap102.json b/capabilities/edgecore_eap102.json new file mode 100644 index 00000000..5d13d94c --- /dev/null +++ b/capabilities/edgecore_eap102.json @@ -0,0 +1 @@ +{"compatible":"edgecore_eap102","model":"Edgecore EAP102","network":{"lan":["eth1"],"wan":["eth0"]},"platform":"ap","switch":{"switch0":{"enable":false,"reset":false}},"wifi":{"platform/soc/c000000.wifi1":{"band":["5G"],"channels":[36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,144,149,153,157,161,165],"frequencies":[5180,5200,5220,5240,5260,5280,5300,5320,5500,5520,5540,5560,5580,5600,5620,5640,5660,5680,5700,5720,5745,5765,5785,5805,5825],"he_mac_capa":[13,-26088,4160],"he_phy_capa":[1024,19552,32648,-31781,412,12],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80","HE20","HE40","HE80"],"rx_ant":240,"tx_ant":240,"vht_capa":1939601842},"platform/soc/c000000.wifi1+1":{"band":["2G"],"channels":[1,2,3,4,5,6,7,8,9,10,11],"frequencies":[2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462],"he_mac_capa":[13,-26088,4160],"he_phy_capa":[512,19552,32648,-31807,412,12],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80","HE20","HE40"],"rx_ant":3,"tx_ant":3,"vht_capa":1939437970}}} \ No newline at end of file diff --git a/capabilities/edgecore_spw2ac1200-lan-poe.json b/capabilities/edgecore_spw2ac1200-lan-poe.json new file mode 100644 index 00000000..327a3259 --- /dev/null +++ b/capabilities/edgecore_spw2ac1200-lan-poe.json @@ -0,0 +1 @@ +{"compatible":"edgecore_spw2ac1200-lan-poe","model":"Edgecore SPW2AC1200","network":{"lan":["eth0"],"wan":["eth1"]},"platform":"ap","wifi":{"platform/soc/a000000.wifi":{"band":["2G"],"channels":[1,2,3,4,5,6,7,8,9,10,11,12,13,14],"frequencies":[2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462,2467,2472,2484],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80"],"rx_ant":3,"tx_ant":3,"vht_capa":865687986},"platform/soc/a800000.wifi":{"band":["5G"],"channels":[36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,144,149,153,157,161,165],"dfs_channels":[52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,144],"frequencies":[5180,5200,5220,5240,5260,5280,5300,5320,5500,5520,5540,5560,5580,5600,5620,5640,5660,5680,5700,5720,5745,5765,5785,5805,5825],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80"],"rx_ant":3,"tx_ant":3,"vht_capa":865687986}}} \ No newline at end of file diff --git a/capabilities/linksys_ea6350-v4.json b/capabilities/linksys_ea6350-v4.json new file mode 100644 index 00000000..cd92547c --- /dev/null +++ b/capabilities/linksys_ea6350-v4.json @@ -0,0 +1 @@ +{"compatible":"linksys_ea6350-v4","model":"Linksys EA6350 v4","network":{"lan":["lan1","lan2","lan3","lan4"],"wan":["wan"]},"platform":"ap","wifi":{"1e140000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0":{"band":["2G"],"channels":[1,2,3,4,5,6,7,8,9,10,11,12,13,14],"frequencies":[2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462,2467,2472,2484],"ht_capa":510,"htmode":["HT20","HT40"],"rx_ant":3,"tx_ant":3},"1e140000.pcie/pci0000:00/0000:00:01.0/0000:02:00.0":{"band":["5G"],"channels":[36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,144,149,153,157,161,165],"frequencies":[5180,5200,5220,5240,5260,5280,5300,5320,5500,5520,5540,5560,5580,5600,5620,5640,5660,5680,5700,5720,5745,5765,5785,5805,5825],"ht_capa":511,"htmode":["HT20","HT40","VHT20","VHT40","VHT80","VHT80+80","VHT160"],"rx_ant":3,"tx_ant":3,"vht_capa":864027128}}} \ No newline at end of file diff --git a/src/framework/MicroService.h b/src/framework/MicroService.h index c1dbdc8a..03e3e360 100644 --- a/src/framework/MicroService.h +++ b/src/framework/MicroService.h @@ -2888,8 +2888,17 @@ namespace OpenWifi { std::cout << log_msg << std::endl; */ - for(auto &[_,CallBack]:CallBacks_) - CallBack(m); + std::lock_guard G(Mutex_); + std::vector Remove; + for(const auto &[Id,CallBack]:CallBacks_) { + try { + CallBack(m); + } catch (...) { + Remove.push_back(Id); + } + } + for(const auto &i:Remove) + CallBacks_.erase(i); } } @@ -2904,10 +2913,12 @@ namespace OpenWifi { inline void Enable(bool enable) { Enabled_ = enable; } typedef std::function logmuxer_callback_func_t; inline void RegisterCallback(const logmuxer_callback_func_t & R, uint64_t &Id) { + std::lock_guard G(Mutex_); Id = CallBackId_++; CallBacks_[Id] = R; } private: + std::recursive_mutex Mutex_; std::map CallBacks_; inline static uint64_t CallBackId_=1; bool Enabled_ = false;