Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2016, 15:09   #1
Programmer0
Пользователь
 
Регистрация: 05.05.2015
Сообщений: 55
По умолчанию Получение информации о wifi-соединении роутера

Здравствуйте.

К роутеру с OpenWrt подключается комп с Windows. На компе запускается программа, которая должна отображать информацию о wifi-соединениях роутера (строить графики и отображать числовые значения). Пока думаю так: написать прогу под openwrt, которая будет считывать нужные параметры и отправлять их в udp-пакетах на комп с виндой каждые 10 секунд.
Отсюда два вопроса:
1. Как считывать программно параметры wifi?
2. Не лучше ли организовать получение информации как-то по-другому(если да, то как)?

По первому вопросу:
- в командной строке могу вывести значение параметра (например, bitrate) так: iwinfo wlan0 info | grep "Bit Rate" | awk '{print $3}', но не знаю, как это сделать в программе;
- ещё смотрел исходники luci и в https://dev.openwrt.org/browser/trun...xt.c?rev=29403 увидел:
Код:
int wext_get_bitrate(const char *ifname, int *buf)
{
      struct iwreq wrq;
 
      if(wext_ioctl(ifname, SIOCGIWRATE, &wrq) >= 0)
      {
           *buf = (wrq.u.bitrate.value / 1000);
            return 0;
       }
    
       return -1;
}
Далее
Код:
static inline int wext_ioctl(const char *ifname, int cmd, struct iwreq *wrq)
{
    if( !strncmp(ifname, "mon.", 4) )
           strncpy(wrq->ifr_name, &ifname[4], IFNAMSIZ);
    else
           strncpy(wrq->ifr_name, ifname, IFNAMSIZ);
    
    return iwinfo_ioctl(cmd, wrq);
}
Код:
int iwinfo_ioctl(int cmd, void *ifr)
{
    int s = iwinfo_ioctl_socket();
    return ioctl(s, cmd, ifr);
}
Код:
static int iwinfo_ioctl_socket(void)
{
        /* Prepare socket */
    if( ioctl_socket == -1 )
    {
           ioctl_socket = socket(AF_INET, SOCK_DGRAM, 0);
           fcntl(ioctl_socket, F_SETFD, fcntl(ioctl_socket, F_GETFD) | FD_CLOEXEC);
    }
    
    return ioctl_socket;
}
Объясните, пожалуйста, как ioctl считывает параметры. И можно/нужно ли использовать это для моей задачи?
Programmer0 вне форума Ответить с цитированием
Старый 06.05.2016, 10:56   #2
Programmer0
Пользователь
 
Регистрация: 05.05.2015
Сообщений: 55
По умолчанию

Может, тему перенести в http://www.programmersforum.ru/forumdisplay.php?f=40 ?
Programmer0 вне форума Ответить с цитированием
Старый 06.05.2016, 11:03   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Объясните, пожалуйста, как ioctl считывает параметры.
Отправляет "драйверу" устройства соответствующий запрос и буфер для ответа.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установка WiFi Роутера Su-34 Компьютерное железо 3 26.08.2014 10:29
Получение информации из памяти 9esa Помощь студентам 3 26.03.2012 02:12
Получение информации о железе FalseMaster Win Api 2 25.11.2009 06:05