⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iwlist.c

📁 uclinux下802.11网卡的配置工具源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	      /* Let's check if nothing (simply on) */	      if((flags & IW_POWER_MODE) == IW_POWER_ON)		printf(" mode:on");	      printf("\n                 ");	      /* Let's check the value and its type */	      if(wrq.u.power.flags & IW_POWER_TYPE)		print_pm_value(stdout, wrq.u.power.value, wrq.u.power.flags);	      /* If we have been returned a MIN value, ask for the MAX */	      if(flags & IW_POWER_MIN)		pm_mask = IW_POWER_MAX;	      /* If we have been returned a MAX value, ask for the MIN */	      if(flags & IW_POWER_MAX)		pm_mask = IW_POWER_MIN;	      /* If we have something to ask for... */	      if(pm_mask)		get_pm_value(skfd, ifname, &wrq, pm_mask);#if WIRELESS_EXT > 9	      /* And if we have both a period and a timeout, ask the other */	      pm_mask = (range.pm_capa & (~(wrq.u.power.flags) &					  IW_POWER_TYPE));	      if(pm_mask)		{		  int	base_mask = pm_mask;		  flags = get_pm_value(skfd, ifname, &wrq, pm_mask);		  pm_mask = 0;		  /* If we have been returned a MIN value, ask for the MAX */		  if(flags & IW_POWER_MIN)		    pm_mask = IW_POWER_MAX | base_mask;		  /* If we have been returned a MAX value, ask for the MIN */		  if(flags & IW_POWER_MAX)		    pm_mask = IW_POWER_MIN | base_mask;		  /* If we have something to ask for... */		  if(pm_mask)		    get_pm_value(skfd, ifname, &wrq, pm_mask);		}#endif /* WIRELESS_EXT > 9 */	    }	}      printf("\n");    }}/*------------------------------------------------------------------*//* * Get Power Management info on all devices and print it on the screen */static voidprint_pm_devices(int		skfd){  char		buff[1024];  struct ifconf ifc;  struct ifreq *ifr;  int i;  /* Get list of active devices */  ifc.ifc_len = sizeof(buff);  ifc.ifc_buf = buff;  if(ioctl(skfd, SIOCGIFCONF, &ifc) < 0)    {      fprintf(stderr, "SIOCGIFCONF: %s\n", strerror(errno));      return;    }  ifr = ifc.ifc_req;  /* Print them */  for(i = ifc.ifc_len / sizeof(struct ifreq); --i >= 0; ifr++)    print_pm_info(skfd, ifr->ifr_name);}/************************** TRANSMIT POWER **************************//*------------------------------------------------------------------*//* * Print the number of available transmit powers for the device */static voidprint_txpower_info(int		skfd,		   char *	ifname){  struct iw_range	range;  int			dbm;  int			mwatt;  int			k;#if WIRELESS_EXT > 9  /* Extract range info */  if(get_range_info(skfd, ifname, &range) < 0)      fprintf(stderr, "%-8.8s  no transmit-power information.\n\n",		      ifname);  else    {      if((range.num_txpower > 0) && (range.num_txpower < IW_MAX_TXPOWER))	{	  printf("%-8.8s  %d available transmit-powers :\n",		 ifname, range.num_txpower);	  /* Print them all */	  for(k = 0; k < range.num_txpower; k++)	    {	      if(range.txpower_capa & IW_TXPOW_MWATT)		{		  dbm = mwatt2dbm(range.txpower[k]);		  mwatt = range.txpower[k];		}	      else		{		  dbm = range.txpower[k];		  mwatt = dbm2mwatt(range.txpower[k]);		}	      printf("\t  %d dBm  \t(%d mW)\n", dbm, mwatt);	    }	  printf("\n\n");	}      else	printf("%-8.8s  No transmit-powers ? Please update driver...\n\n", ifname);    }#endif /* WIRELESS_EXT > 9 */}/*------------------------------------------------------------------*//* * Get tx-power info on all devices and print it on the screen */static voidprint_txpower_devices(int		skfd){  char		buff[1024];  struct ifconf ifc;  struct ifreq *ifr;  int i;  /* Get list of active devices */  ifc.ifc_len = sizeof(buff);  ifc.ifc_buf = buff;  if(ioctl(skfd, SIOCGIFCONF, &ifc) < 0)    {      fprintf(stderr, "SIOCGIFCONF: %s\n", strerror(errno));      return;    }  ifr = ifc.ifc_req;  /* Print them */  for(i = ifc.ifc_len / sizeof(struct ifreq); --i >= 0; ifr++)    print_txpower_info(skfd, ifr->ifr_name);}/*********************** RETRY LIMIT/LIFETIME ***********************/#if WIRELESS_EXT > 10/*------------------------------------------------------------------*//* * Print one retry value */static inline intget_retry_value(int		skfd,		char *		ifname,		struct iwreq *	pwrq,		int		flags){  /* Get Another retry value */  strcpy(pwrq->ifr_name, ifname);  pwrq->u.retry.flags = flags;  if(ioctl(skfd, SIOCGIWRETRY, pwrq) >= 0)    {      /* Let's check the value and its type */      if(pwrq->u.retry.flags & IW_RETRY_TYPE)	{	  printf("\n                 ");	  print_retry_value(stdout, pwrq->u.retry.value, pwrq->u.retry.flags);	}    }  return(pwrq->u.retry.flags);}/*------------------------------------------------------------------*//* * Print Retry info for each device */static voidprint_retry_info(int		skfd,	      char *		ifname){  struct iwreq		wrq;  struct iw_range	range;  /* Extract range info */  if(get_range_info(skfd, ifname, &range) < 0)      fprintf(stderr, "%-8.8s  no retry limit/lifetime information.\n\n",	      ifname);  else    {      printf("%-8.8s  ", ifname);      /* Display min/max limit availables */      if(range.retry_flags & IW_RETRY_LIMIT)	{	  int	flags = (range.retry_flags & ~(IW_RETRY_MIN | IW_RETRY_MAX));	  /* Display if auto or fixed */	  if(range.retry_flags & IW_RETRY_MIN)	    printf("Auto  limit    ; ");	  else	    printf("Fixed limit    ; ");	  /* Print the range */	  print_retry_value(stdout, range.min_retry, flags | IW_RETRY_MIN);	  printf("\n                           ");	  print_retry_value(stdout, range.max_retry, flags | IW_RETRY_MAX);	  printf("\n          ");	  	}      /* Display min/max lifetime availables */      if(range.r_time_flags & IW_RETRY_LIFETIME)	{	  int	flags = (range.r_time_flags & ~(IW_RETRY_MIN | IW_RETRY_MAX));	  /* Display if auto or fixed */	  if(range.r_time_flags & IW_RETRY_MIN)	    printf("Auto  lifetime ; ");	  else	    printf("Fixed lifetime ; ");	  /* Print the range */	  print_retry_value(stdout, range.min_r_time, flags | IW_RETRY_MIN);	  printf("\n                           ");	  print_retry_value(stdout, range.max_r_time, flags | IW_RETRY_MAX);	  printf("\n          ");	  	}      /* Get current retry settings */      strcpy(wrq.ifr_name, ifname);      wrq.u.retry.flags = 0;      if(ioctl(skfd, SIOCGIWRETRY, &wrq) >= 0)	{	  int	flags = wrq.u.retry.flags;	  /* Is it disabled ? */	  if(wrq.u.retry.disabled)	    printf("Current mode:off\n          ");	  else	    {	      int	retry_mask = 0;	      /* Let's check the mode */	      printf("Current mode:on\n                 ");	      /* Let's check the value and its type */	      if(wrq.u.retry.flags & IW_RETRY_TYPE)		print_retry_value(stdout, wrq.u.retry.value, wrq.u.retry.flags);	      /* If we have been returned a MIN value, ask for the MAX */	      if(flags & IW_RETRY_MIN)		retry_mask = IW_RETRY_MAX;	      /* If we have been returned a MAX value, ask for the MIN */	      if(flags & IW_RETRY_MAX)		retry_mask = IW_RETRY_MIN;	      /* If we have something to ask for... */	      if(retry_mask)		get_retry_value(skfd, ifname, &wrq, retry_mask);	      /* And if we have both a period and a timeout, ask the other */	      retry_mask = (range.retry_capa & (~(wrq.u.retry.flags) &					  IW_RETRY_TYPE));	      if(retry_mask)		{		  int	base_mask = retry_mask;		  flags = get_retry_value(skfd, ifname, &wrq, retry_mask);		  retry_mask = 0;		  /* If we have been returned a MIN value, ask for the MAX */		  if(flags & IW_RETRY_MIN)		    retry_mask = IW_RETRY_MAX | base_mask;		  /* If we have been returned a MAX value, ask for the MIN */		  if(flags & IW_RETRY_MAX)		    retry_mask = IW_RETRY_MIN | base_mask;		  /* If we have something to ask for... */		  if(retry_mask)		    get_retry_value(skfd, ifname, &wrq, retry_mask);		}	    }	}      printf("\n");    }}/*------------------------------------------------------------------*//* * Get retry info on all devices and print it on the screen */static voidprint_retry_devices(int		skfd){  char		buff[1024];  struct ifconf ifc;  struct ifreq *ifr;  int i;  /* Get list of active devices */  ifc.ifc_len = sizeof(buff);  ifc.ifc_buf = buff;  if(ioctl(skfd, SIOCGIFCONF, &ifc) < 0)    {      fprintf(stderr, "SIOCGIFCONF: %s\n", strerror(errno));      return;    }  ifr = ifc.ifc_req;  /* Print them */  for(i = ifc.ifc_len / sizeof(struct ifreq); --i >= 0; ifr++)    print_retry_info(skfd, ifr->ifr_name);}#endif	/* WIRELESS_EXT > 10 *//******************************* MAIN ********************************//*------------------------------------------------------------------*//* * The main ! */intmain(int	argc,     char **	argv){  int skfd = -1;		/* generic raw socket desc.	*/  /* Create a channel to the NET kernel. */  if((skfd = sockets_open()) < 0)    {      perror("socket");      exit(-1);    }  /* Help */  if((argc == 1) || (argc > 3) ||     (!strncmp(argv[1], "-h", 9)) || (!strcmp(argv[1], "--help")))    {      fprintf(stderr, "Usage: iwlist [interface] freq\n");      fprintf(stderr, "              [interface] ap\n");      fprintf(stderr, "              [interface] bitrate\n");      fprintf(stderr, "              [interface] keys\n");      fprintf(stderr, "              [interface] power\n");      fprintf(stderr, "              [interface] txpower\n");      fprintf(stderr, "              [interface] retries\n");      close(skfd);      exit(0);    }  /* Frequency list */  if((!strncmp(argv[1], "freq", 4)) ||     (!strncmp(argv[1], "channel", 7)))    {      print_freq_devices(skfd);      close(skfd);      exit(0);    }  /* Access Point list */  if(!strcasecmp(argv[1], "ap"))    {      print_ap_devices(skfd);      close(skfd);      exit(0);    }  /* Bit-rate list */  if((!strncmp(argv[1], "bit", 3)) ||     (!strcmp(argv[1], "rate")))    {      print_bitrate_devices(skfd);      close(skfd);      exit(0);    }  /* Encryption key list */  if((!strncmp(argv[1], "enc", 3)) ||     (!strncmp(argv[1], "key", 3)))    {      print_keys_devices(skfd);      close(skfd);      exit(0);    }  /* Power Management list */  if(!strncmp(argv[1], "power", 3))    {      print_pm_devices(skfd);      close(skfd);      exit(0);    }  /* Transmit Power list */  if(!strncmp(argv[1], "txpower", 3))    {      print_txpower_devices(skfd);      close(skfd);      exit(0);    }#if WIRELESS_EXT > 10  /* Retry limit/lifetime */  if(!strncmp(argv[1], "retry", 4))    {      print_retry_devices(skfd);      close(skfd);      exit(0);    }#endif  /* Special cases take two... */  /* Frequency list */  if((!strncmp(argv[2], "freq", 4)) ||     (!strncmp(argv[2], "channel", 7)))    {      print_freq_info(skfd, argv[1]);      close(skfd);      exit(0);    }  /* Access Point  list */  if(!strcasecmp(argv[2], "ap"))    {      print_ap_info(skfd, argv[1]);      close(skfd);      exit(0);    }  /* Bit-rate list */  if((!strncmp(argv[2], "bit", 3)) ||     (!strcmp(argv[2], "rate")))    {      print_bitrate_info(skfd, argv[1]);      close(skfd);      exit(0);    }  /* Encryption key list */  if((!strncmp(argv[2], "enc", 3)) ||     (!strncmp(argv[2], "key", 3)))    {      print_keys_info(skfd, argv[1]);      close(skfd);      exit(0);    }  /* Power Management list */  if(!strncmp(argv[2], "power", 3))    {      print_pm_info(skfd, argv[1]);      close(skfd);      exit(0);    }  /* Transmit Power list */  if(!strncmp(argv[2], "txpower", 3))    {      print_txpower_info(skfd, argv[1]);      close(skfd);      exit(0);    }#if WIRELESS_EXT > 10  /* Retry limit/lifetime */  if(!strncmp(argv[2], "retry", 4))    {      print_retry_info(skfd, argv[1]);      close(skfd);      exit(0);    }#endif  /* Close the socket. */  close(skfd);  return(1);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -