Я начал писать код для работы с картой Wi-Fi с помощью iwconfig/ioctl, когда понял, что он устарел и большинство приложений используют nl80211. Я начал читать его исходный код, но там нет документов, а код немного сложен. Как я могу делать простые вещи, такие как сканирование, включение/выключение, установка режима карты с помощью nl80211 или libnl? Вот что я начал с iw:
void set_card_mode(MODE mode, std::string ifname)
{
int skfd = iw_sockets_open();
struct iwreq wrq;
wrq.u.mode = static_cast<unsigned int>(mode);
power_interface(ifname, false);
if(iw_set_ext(skfd, ifname.c_str(), SIOCSIWMODE, &wrq) < 0)
throw std::runtime_error("Can set card mode");
}
MODE get_card_mode(std::string ifname)
{
int skfd = iw_sockets_open();
struct iwreq wrq;
if (iw_get_ext (skfd, ifname.c_str(), SIOCGIWMODE, &wrq) >= 0)
{
return static_cast<MODE>(wrq.u.mode);
}
}
Есть ли эквивалент iw_get_ext для установки/получения интерфейса Wi-Fi или любого API с простыми функциями, такими как «set_mode» или «power_off»?