亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? iw-info.c.svn-base

?? 嵌入式無線路由系統openwrt的web配置工具
?? SVN-BASE
字號:
/*
 * iw-info. Outputs wireless interface info in JSON format.
 *
 * Based on Wireless Tools, see 
 * <http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html/>
 *
 * Copyright (c) 1997-2007 Jean Tourrilhes <jt@hpl.hp.com>
 * Copyright (C) 2008 OpenRB.com
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 1 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef __user
#define __user
#endif

#define KILO 1e3
#define MEGA 1e6
#define GIGA 1e9
#define LOG10_MAGIC 1.25892541179

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <linux/types.h>
#include <wireless.h>

typedef struct iw_range iwrange;
typedef struct iw_freq iwfreq;

inline int iw_get_ext(int skfd, const char * ifname, int request, struct iwreq * pwrq) {
  strncpy(pwrq->ifr_name, ifname, IFNAMSIZ);
  return(ioctl(skfd, request, pwrq));
}

int iw_get_range_info(int skfd, const char * ifname, iwrange * range) {
  struct iwreq wrq;
  char buffer[sizeof(iwrange) * 2];

  bzero(buffer, sizeof(buffer));

  wrq.u.data.pointer = (caddr_t) buffer;
  wrq.u.data.length = sizeof(buffer);
  wrq.u.data.flags = 0;
  if (iw_get_ext(skfd, ifname, SIOCGIWRANGE, &wrq) < 0) {
    return -1;
  }

  memcpy((char *) range, buffer, sizeof(iwrange));
  return 0;
}

double iw_freq2float(const iwfreq * in) {
  int i;
  double res = (double) in->m;
  for(i = 0; i < in->e; i++) {
    res *= 10;
  }
  return res;
}

double iw_format_bitrate(int bitrate) {
  double rate = (double) bitrate;
  int divisor;

  if (rate >= GIGA) {
    divisor = GIGA;
  }
  else if(rate >= MEGA) {
    divisor = MEGA;
  }
  else {
    divisor = KILO;
  }

  return (double) (rate / divisor);

}

int iw_mwatt2dbm(int in) {
  double fin = (double) in;
  int res = 0;

  while (fin > 10.0) {
    res += 10;
    fin /= 10.0;
  }

  while (fin > 1.000001) {
    res += 1;
    fin /= LOG10_MAGIC;
  }

  return res;
}

int iw_dbm2mwatt(int in) {
  int ip = in / 10;
  int fp = in % 10;
  int k;
  double res = 1.0;

  for (k = 0; k < ip; k++) {
    res *= 10;
  }

  for(k = 0; k < fp; k++) {
    res *= LOG10_MAGIC;
  }

  return (int) res;
}

void print_freq_info(int skfd, char * ifname) {
  struct iwreq wrq;
  struct iw_range range;
  double freq, curfreq = 0;
  int k, curchan = -1;

  if (iw_get_range_info(skfd, ifname, &range) < 0) {
    printf("\"channels\": null, \"chan\": null, \"freq\": null, ");
  }
  else {
    if (iw_get_ext(skfd, ifname, SIOCGIWFREQ, &wrq) >= 0) {
  	  curfreq = iw_freq2float(&(wrq.u.freq));
  	  printf("\"freq\": %g, ", wrq.u.freq.i, (curfreq < KILO ? curfreq : curfreq / MEGA));
    }
    else {
      printf("\"freq\": null, ");
    }
    
    printf("\"channels\": ");
    
    if (range.num_frequency > 0) {
      printf("{");
      for (k = 0; k < range.num_frequency; k++) {
        freq = iw_freq2float(&(range.freq[k]));
        printf("%s\"%d\": %g", (k > 0 ? ", " : ""), range.freq[k].i, (freq < KILO ? freq : freq / MEGA));
        
        if (curfreq == freq) {
          curchan = range.freq[k].i;
        }
      }
      printf("}, ");
    }

    if (curchan < 0) {
      printf("\"chan\": null, ");
    }
    else {
      printf("\"chan\": %d, ", curchan);
    }
	}
}

void print_bitrate_info(int skfd, char * ifname) {
  struct iwreq wrq;
  struct iw_range range;
  int k;

  printf("\"bitrates\": ");

  if (iw_get_range_info(skfd, ifname, &range) < 0) {
    printf("null, \"bitrate\": null, ");
  }
  else {
    if ((range.num_bitrates > 0) && (range.num_bitrates <= IW_MAX_BITRATES)) {
      printf("[");
      for (k = 0; k < range.num_bitrates; k++) {
        printf("%s%g", (k > 0 ? ", " : ""), iw_format_bitrate(range.bitrate[k]));
      }
      printf("], ");
    }
    else {
      printf("null, ");
    }

    printf("\"bitrate\": ");

    if (iw_get_ext(skfd, ifname, SIOCGIWRATE, &wrq) >= 0) {
      printf("%g, ", iw_format_bitrate(wrq.u.bitrate.value));
    }
    else {
      printf("null, ");
    }
  }
}

void print_txpower_info(int skfd, char * ifname) {
  struct iwreq wrq;
  struct iw_range range;
  int dbm, k;

  printf("\"txpowers\": ");

  if (iw_get_range_info(skfd, ifname, &range) < 0) {
    printf("null, \"txpower\": null");
  }
  else {
    if ((range.num_txpower <= 0) || (range.num_txpower > IW_MAX_TXPOWER)) {
      printf("null, ");
    }
    else {
      printf("[");
      for (k = 0; k < range.num_txpower; k++) {
        if (range.txpower_capa & IW_TXPOW_MWATT) {
          dbm = iw_mwatt2dbm(range.txpower[k]);
        }
        else {
          dbm = range.txpower[k];
        }

        printf("%s%d", (k > 0 ? ", " : ""), dbm);
      }
      printf("], ");
    }

    printf("\"txpower\": ");

    if (iw_get_ext(skfd, ifname, SIOCGIWTXPOW, &wrq) >= 0) {
      if (wrq.u.txpower.disabled) {
        printf("null");
      }
      else {
        if (wrq.u.txpower.flags & IW_TXPOW_MWATT) {
          dbm = iw_mwatt2dbm(wrq.u.txpower.value);
        }
        else {
          dbm = wrq.u.txpower.value;
        }

        printf("%d", dbm);
      }
    }
  }
}


int main(int argc, char ** argv) {
  int skfd;

  printf("{");

  if (argc > 1) {
    if ((skfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {

    }
    else {
      print_freq_info(skfd, argv[1]);
      print_bitrate_info(skfd, argv[1]);
      print_txpower_info(skfd, argv[1]);

      close(skfd);
    }
  }

  printf("}");

  return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青青草一区二区三区| 91网站在线观看视频| 精品无人区卡一卡二卡三乱码免费卡 | 欧美日韩国产高清一区| 精品国产乱子伦一区| 自拍视频在线观看一区二区| 蜜臀av性久久久久蜜臀aⅴ| 色综合久久中文字幕综合网| 日韩欧美aaaaaa| 亚洲高清视频中文字幕| 不卡一区在线观看| 久久久午夜精品| 日本视频免费一区| 欧美日韩在线免费视频| 成人午夜av在线| 日韩欧美国产综合一区| 亚洲与欧洲av电影| 一本色道a无线码一区v| 国产亚洲综合在线| 韩国av一区二区三区| 91精品国产免费久久综合| 午夜视频一区二区三区| 欧美性猛交xxxx黑人交| 亚洲乱码国产乱码精品精可以看| 国产超碰在线一区| 久久精品欧美一区二区三区麻豆| 青青草原综合久久大伊人精品优势| 欧洲色大大久久| 一区二区三区在线视频播放| 99热在这里有精品免费| 国产精品入口麻豆原神| 国产成人鲁色资源国产91色综| 亚洲国产成人午夜在线一区| 麻豆精品新av中文字幕| 99久久婷婷国产| 2023国产精品自拍| 麻豆91在线看| 精品久久久久一区二区国产| 丝袜亚洲精品中文字幕一区| 欧美日韩精品一区二区三区| 亚洲综合免费观看高清完整版| 色综合一区二区三区| 亚洲日本乱码在线观看| 欧美亚洲免费在线一区| 亚洲一区视频在线观看视频| 欧美系列在线观看| 婷婷成人综合网| 日韩免费一区二区三区在线播放| 久久成人久久鬼色| 中文字幕精品一区二区精品绿巨人| 国产成人在线色| 国产精品传媒入口麻豆| 色综合亚洲欧洲| 香蕉久久夜色精品国产使用方法| 在线不卡一区二区| 国产精品影音先锋| 亚洲人成影院在线观看| 欧美少妇xxx| 日韩不卡免费视频| 国产欧美一区二区三区沐欲| 成人h动漫精品一区二区| 亚洲免费观看高清完整版在线| 欧美日韩综合不卡| 激情综合色播五月| 国产精品第13页| 欧美精品在线视频| 激情欧美一区二区| 国产精品视频你懂的| 色综合久久综合中文综合网| 日韩精品视频网站| 国产目拍亚洲精品99久久精品| 91丨九色丨蝌蚪富婆spa| 午夜精品久久久久久久99樱桃| 2017欧美狠狠色| 欧洲av一区二区嗯嗯嗯啊| 久久99热这里只有精品| 午夜久久久久久久久| 日韩一级片在线播放| 暴力调教一区二区三区| 三级欧美韩日大片在线看| 中文在线一区二区| 91精品国产91久久久久久一区二区 | 国产精品18久久久| 91精品国产综合久久小美女| 欧美aⅴ一区二区三区视频| 日本一区二区视频在线观看| 在线免费视频一区二区| 精品一区二区在线观看| 一区二区三区四区在线免费观看 | 国产精品家庭影院| 日韩欧美国产成人一区二区| 色婷婷国产精品久久包臀 | 日韩午夜激情电影| 色婷婷久久久综合中文字幕| 国产精品白丝jk白祙喷水网站| 亚洲图片有声小说| 亚洲你懂的在线视频| 久久精品一区二区| 日韩欧美精品在线| 666欧美在线视频| 欧美性videosxxxxx| 91在线高清观看| 丰满放荡岳乱妇91ww| 国产麻豆91精品| 国产日韩欧美激情| 色丁香久综合在线久综合在线观看| 麻豆成人综合网| 日韩电影在线免费观看| 一二三区精品福利视频| 亚洲欧美另类综合偷拍| 中文字幕中文字幕中文字幕亚洲无线| 欧美va亚洲va香蕉在线| 91精品国产入口在线| 欧美又粗又大又爽| 欧美综合天天夜夜久久| 91视频一区二区| 色综合中文字幕国产 | 欧美激情一区二区三区不卡| 7777精品伊人久久久大香线蕉的 | 精品一区二区三区免费| 日本成人中文字幕在线视频| 婷婷综合久久一区二区三区| 亚洲午夜精品在线| 亚洲国产欧美一区二区三区丁香婷| 亚洲视频一区二区在线| 亚洲色图视频网| 亚洲精品国产一区二区精华液| ...xxx性欧美| 亚洲国产一区视频| 偷拍日韩校园综合在线| 蜜桃一区二区三区在线| 精品一区二区免费视频| 国产福利精品导航| 99精品欧美一区二区蜜桃免费| 91视频在线观看| 欧美日韩高清一区二区| 欧美一级国产精品| 久久九九国产精品| 国产精品国产三级国产有无不卡| 国产精品久久久久影院老司| 亚洲日本在线a| 五月婷婷综合在线| 国内精品免费**视频| 成人av在线电影| 欧美日韩在线免费视频| 日韩精品综合一本久道在线视频| 久久久综合视频| 亚洲精品日日夜夜| 久久国产生活片100| 成人免费视频一区二区| 欧洲精品在线观看| 欧美精品一区二区三区在线播放| 国产精品视频在线看| 亚洲一二三四在线| 国产自产2019最新不卡| 欧美综合色免费| 久久久精品免费免费| 亚洲福利一区二区三区| 国产精品正在播放| 欧美日韩国产电影| 国产精品久久久久一区二区三区| 午夜成人免费视频| www..com久久爱| 精品国产1区2区3区| 亚洲黄色免费网站| 国产91高潮流白浆在线麻豆 | 日韩一区二区三区在线视频| 国产精品视频麻豆| 久久精品国内一区二区三区| 91美女福利视频| 久久久亚洲欧洲日产国码αv| 国产69精品久久久久毛片| 狠狠色丁香婷婷综合| 成人性生交大合| 日韩欧美国产小视频| 欧美www视频| 亚洲国产成人自拍| 亚洲图片一区二区| 国产真实精品久久二三区| 成人免费观看视频| 欧美日韩三级视频| ww亚洲ww在线观看国产| 亚洲欧美自拍偷拍| 老司机精品视频线观看86| 成人一区在线看| 狠狠色丁香久久婷婷综| 91视频免费看| 自拍偷拍亚洲欧美日韩| 成人性生交大片免费看在线播放| 精品国产3级a| 精品亚洲免费视频| 精品国产凹凸成av人网站| 偷窥少妇高潮呻吟av久久免费| 色综合亚洲欧洲| 亚洲黄网站在线观看| 日本高清无吗v一区| **网站欧美大片在线观看| 不卡视频一二三| 亚洲视频在线一区观看| av一区二区三区四区|