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

📄 iwconfig.c

📁 uclinux下802.11网卡的配置工具源码
💻 C
📖 第 1 页 / 共 3 页
字号:
	{	  if(++i >= count)	    iw_usage();	  if(!strcasecmp(args[i], "auto"))	    {	      wrq.u.bitrate.value = -1;	      wrq.u.bitrate.fixed = 0;	    }	  else	    {	      if(!strcasecmp(args[i], "fixed"))		{		  /* Get old bitrate */		  if(ioctl(skfd, SIOCGIWRATE, &wrq) < 0)		    {		      fprintf(stderr, "SIOCGIWRATE: %s\n", strerror(errno));		      return(-1);		    }		  strcpy(wrq.ifr_name, ifname);		  wrq.u.bitrate.fixed = 1;		}	      else			/* Should be a numeric value */		{		  double		brate;		  if(sscanf(args[i], "%lg", &(brate)) != 1)		    iw_usage();		  if(index(args[i], 'G')) brate *= GIGA;		  if(index(args[i], 'M')) brate *= MEGA;		  if(index(args[i], 'k')) brate *= KILO;		  wrq.u.bitrate.value = (long) brate;		  wrq.u.bitrate.fixed = 1;		  /* Check for an additional argument */		  if(((i+1) < count) &&		     (!strcasecmp(args[i+1], "auto")))		    {		      wrq.u.bitrate.fixed = 0;		      ++i;		    }		  if(((i+1) < count) &&		     (!strcasecmp(args[i+1], "fixed")))		    {		      wrq.u.bitrate.fixed = 1;		      ++i;		    }		}	    }	  if(ioctl(skfd, SIOCSIWRATE, &wrq) < 0)	    {	      fprintf(stderr, "SIOCSIWRATE: %s\n", strerror(errno));	      return(-1);	    }	  continue;	}      /* ---------- Set RTS threshold ---------- */      if(!strncasecmp(args[i], "rts", 3))	{	  i++;	  if(i >= count)	    iw_usage();	  wrq.u.rts.value = -1;	  wrq.u.rts.fixed = 1;	  wrq.u.rts.disabled = 0;	  if(!strcasecmp(args[i], "off"))	    wrq.u.rts.disabled = 1;	/* i.e. max size */	  else	    if(!strcasecmp(args[i], "auto"))	      wrq.u.rts.fixed = 0;	    else	      {		if(!strcasecmp(args[i], "fixed"))		  {		    /* Get old RTS threshold */		    if(ioctl(skfd, SIOCGIWRTS, &wrq) < 0)		      {			fprintf(stderr, "SIOCGIWRTS: %s\n", strerror(errno));			return(-1);		      }		    strcpy(wrq.ifr_name, ifname);		    wrq.u.rts.fixed = 1;		  }		else			/* Should be a numeric value */		  if(sscanf(args[i], "%ld", (unsigned long *) &(wrq.u.rts.value))		     != 1)		    iw_usage();	    }	  if(ioctl(skfd, SIOCSIWRTS, &wrq) < 0)	    {	      fprintf(stderr, "SIOCSIWRTS: %s\n", strerror(errno));	      return(-1);	    }	  continue;	}      /* ---------- Set fragmentation threshold ---------- */      if(!strncmp(args[i], "frag", 4))	{	  i++;	  if(i >= count)	    iw_usage();	  wrq.u.frag.value = -1;	  wrq.u.frag.fixed = 1;	  wrq.u.frag.disabled = 0;	  if(!strcasecmp(args[i], "off"))	    wrq.u.frag.disabled = 1;	/* i.e. max size */	  else	    if(!strcasecmp(args[i], "auto"))	      wrq.u.frag.fixed = 0;	    else	      {		if(!strcasecmp(args[i], "fixed"))		  {		    /* Get old fragmentation threshold */		    if(ioctl(skfd, SIOCGIWFRAG, &wrq) < 0)		      {			fprintf(stderr, "SIOCGIWFRAG: %s\n", strerror(errno));			return(-1);		      }		    strcpy(wrq.ifr_name, ifname);		    wrq.u.frag.fixed = 1;		  }		else			/* Should be a numeric value */		  if(sscanf(args[i], "%ld", (unsigned long *) &(wrq.u.frag.value))		     != 1)		    iw_usage();	    }	  if(ioctl(skfd, SIOCSIWFRAG, &wrq) < 0)	    {	      fprintf(stderr, "SIOCSIWFRAG: %s\n", strerror(errno));	      return(-1);	    }	  continue;	}      /* ---------- Set operation mode ---------- */      if(!strcmp(args[i], "mode"))	{	  int	k;	  i++;	  if(i >= count)	    iw_usage();	  if(sscanf(args[i], "%d", &k) != 1)	    {	      k = 0;	      while(k < 6 && strncasecmp(args[i], operation_mode[k], 3))		k++;	    }	  if((k > 5) || (k < 0))	    iw_usage();	  wrq.u.mode = k;	  if(ioctl(skfd, SIOCSIWMODE, &wrq) < 0)	    {	      fprintf(stderr, "SIOCSIWMODE: %s\n", strerror(errno));	      return(-1);	    }	  continue;	}      /* ---------- Set Power Management ---------- */      if(!strncmp(args[i], "power", 3))	{	  if(++i >= count)	    iw_usage();	  if(!strcasecmp(args[i], "off"))	    wrq.u.power.disabled = 1;	/* i.e. max size */	  else	    if(!strcasecmp(args[i], "on"))	      {		/* Get old Power info */		if(ioctl(skfd, SIOCGIWPOWER, &wrq) < 0)		  {		    fprintf(stderr, "SIOCGIWPOWER: %s\n", strerror(errno));		    return(-1);		  }		strcpy(wrq.ifr_name, ifname);		wrq.u.power.disabled = 0;	      }	    else	      {		double		temp;		int		gotone = 0;		/* Default - nope */		wrq.u.power.flags = IW_POWER_ON;		wrq.u.power.disabled = 0;		/* Check value modifier */		if(!strcasecmp(args[i], "min"))		  {		    wrq.u.power.flags |= IW_POWER_MIN;		    if(++i >= count)		      iw_usage();		  }		else		  if(!strcasecmp(args[i], "max"))		    {		      wrq.u.power.flags |= IW_POWER_MAX;		      if(++i >= count)			iw_usage();		    }		/* Check value type */		if(!strcasecmp(args[i], "period"))		  {		    wrq.u.power.flags |= IW_POWER_PERIOD;		    if(++i >= count)		      iw_usage();		  }		else		  if(!strcasecmp(args[i], "timeout"))		    {		      wrq.u.power.flags |= IW_POWER_TIMEOUT;		      if(++i >= count)			iw_usage();		    }		/* Is there any value to grab ? */		if(sscanf(args[i], "%lg", &(temp)) == 1)		  {		    temp *= MEGA;	/* default = s */		    if(index(args[i], 'u')) temp /= MEGA;		    if(index(args[i], 'm')) temp /= KILO;		    wrq.u.power.value = (long) temp;		    if((wrq.u.power.flags & IW_POWER_TYPE) == 0)		      wrq.u.power.flags |= IW_POWER_PERIOD;		    ++i;		    gotone = 1;		  }		/* Now, check the mode */		if(i < count)		  {		    if(!strcasecmp(args[i], "all"))		      wrq.u.power.flags |= IW_POWER_ALL_R;		    if(!strncasecmp(args[i], "unicast", 4))		      wrq.u.power.flags |= IW_POWER_UNICAST_R;		    if(!strncasecmp(args[i], "multicast", 5))		      wrq.u.power.flags |= IW_POWER_MULTICAST_R;		    if(!strncasecmp(args[i], "force", 5))		      wrq.u.power.flags |= IW_POWER_FORCE_S;		    if(!strcasecmp(args[i], "repeat"))		      wrq.u.power.flags |= IW_POWER_REPEATER;		    if(wrq.u.power.flags & IW_POWER_MODE)		      {			++i;			gotone = 1;		      }		  }		if(!gotone)		  iw_usage();		--i;	      }	  if(ioctl(skfd, SIOCSIWPOWER, &wrq) < 0)	    {	      fprintf(stderr, "SIOCSIWPOWER(%d): %s\n",		      errno, strerror(errno));	      return(-1);	    }	  continue;  	}#if WIRELESS_EXT > 9      /* ---------- Set Transmit-Power ---------- */      if(!strncmp(args[i], "txpower", 3))	{	  struct iw_range	range;	  if(++i >= count)	    iw_usage();	  /* Extract range info */	  if(get_range_info(skfd, ifname, &range) < 0)	    memset(&range, 0, sizeof(range));	  /* Prepare the request */	  strncpy(wrq.ifr_name, ifname, IFNAMSIZ);	  wrq.u.txpower.value = -1;	  wrq.u.txpower.fixed = 1;	  wrq.u.txpower.disabled = 0;	  wrq.u.data.flags = IW_TXPOW_DBM;	  if(!strcasecmp(args[i], "off"))	    wrq.u.txpower.disabled = 1;	/* i.e. turn radio off */	  else	    if(!strcasecmp(args[i], "auto"))	      wrq.u.txpower.fixed = 0;	/* i.e. use power control */	    else	      {		if(!strcasecmp(args[i], "fixed"))		  {		    /* Get old tx-power */		    if(ioctl(skfd, SIOCGIWTXPOW, &wrq) < 0)		      {			fprintf(stderr, "SIOCGIWTXPOW: %s\n", strerror(errno));			return(-1);		      }		    strcpy(wrq.ifr_name, ifname);		    wrq.u.txpower.fixed = 1;		  }		else			/* Should be a numeric value */		  {		    int		power;		    int		ismwatt = 0;		    /* Get the value */		    if(sscanf(args[i], "%ld",			      (unsigned long *) &(power)) != 1)		      iw_usage();		    /* Check if milliwatt */		    ismwatt = (index(args[i], 'm') != NULL);		    /* Convert */		    if(!ismwatt && (range.txpower_capa & IW_TXPOW_MWATT))		      {			power = dbm2mwatt(power);			wrq.u.data.flags = IW_TXPOW_MWATT;		      }		    if(ismwatt && !(range.txpower_capa & IW_TXPOW_MWATT))		      power = mwatt2dbm(power);		    wrq.u.bitrate.value = power;		    /* Check for an additional argument */		    if(((i+1) < count) &&		       (!strcasecmp(args[i+1], "auto")))		      {			wrq.u.txpower.fixed = 0;			++i;		      }		    if(((i+1) < count) &&		       (!strcasecmp(args[i+1], "fixed")))		      {			wrq.u.txpower.fixed = 1;			++i;		      }		  }	      }	  if(ioctl(skfd, SIOCSIWTXPOW, &wrq) < 0)	    {	      fprintf(stderr, "SIOCSIWTXPOW: %s\n", strerror(errno));	      return(-1);	    }	  continue;	}#endif#if WIRELESS_EXT > 10      /* ---------- Set Power Management ---------- */      if(!strncmp(args[i], "retry", 3))	{	  double		temp;	  int		gotone = 0;	  if(++i >= count)	    iw_usage();	  /* Default - nope */	  wrq.u.retry.flags = IW_RETRY_LIMIT;	  wrq.u.retry.disabled = 0;	  /* Check value modifier */	  if(!strcasecmp(args[i], "min"))	    {	      wrq.u.retry.flags |= IW_RETRY_MIN;	      if(++i >= count)		iw_usage();	    }	  else	    if(!strcasecmp(args[i], "max"))	      {		wrq.u.retry.flags |= IW_RETRY_MAX;		if(++i >= count)		  iw_usage();	      }	  /* Check value type */	  if(!strcasecmp(args[i], "limit"))	    {	      wrq.u.retry.flags |= IW_RETRY_LIMIT;	      if(++i >= count)		iw_usage();	    }	  else	    if(!strncasecmp(args[i], "lifetime", 4))	      {		wrq.u.retry.flags |= IW_RETRY_LIFETIME;		if(++i >= count)		  iw_usage();	      }	  /* Is there any value to grab ? */	  if(sscanf(args[i], "%lg", &(temp)) == 1)	    {	      /* Limit is absolute, on the other hand lifetime is seconds */	      if(!(wrq.u.retry.flags & IW_RETRY_LIMIT))		{		  /* Normalise lifetime */		  temp *= MEGA;	/* default = s */		  if(index(args[i], 'u')) temp /= MEGA;		  if(index(args[i], 'm')) temp /= KILO;		}	      wrq.u.retry.value = (long) temp;	      ++i;	      gotone = 1;	    }	  if(!gotone)	    iw_usage();	  --i;	  if(ioctl(skfd, SIOCSIWRETRY, &wrq) < 0)	    {	      fprintf(stderr, "SIOCSIWRETRY(%d): %s\n",		      errno, strerror(errno));	      return(-1);	    }	  continue;	}#endif	/* WIRELESS_EXT > 10 */      /* ---------- Other ---------- */      /* Here we have an unrecognised arg... */      fprintf(stderr, "Invalid argument : %s\n", args[i]);      iw_usage();      return(-1);    }		/* for(index ... */  return(0);}/******************************* MAIN ********************************//*------------------------------------------------------------------*//* * The main ! */intmain(int	argc,     char **	argv){  int skfd = -1;		/* generic raw socket desc.	*/  int goterr = 0;  /* Create a channel to the NET kernel. */  if((skfd = sockets_open()) < 0)    {      perror("socket");      exit(-1);    }  /* No argument : show the list of all device + info */  if(argc == 1)    {      print_devices(skfd);      close(skfd);      exit(0);    }  /* Special case for help... */  if((!strncmp(argv[1], "-h", 9)) ||     (!strcmp(argv[1], "--help")))    {      iw_usage();      close(skfd);      exit(0);    }  /* The device name must be the first argument */  if(argc == 2)    {      print_info(skfd, argv[1]);      close(skfd);      exit(0);    }  /* The other args on the line specify options to be set... */  goterr = set_info(skfd, argv + 2, argc - 2, argv[1]);  /* Close the socket. */  close(skfd);  return(goterr);}

⌨️ 快捷键说明

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