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

📄 iwlib.h

📁 iwconfig iwlist iwpriv
💻 H
字号:
/* *	Wireless Tools * *		Jean II - HPLB 97->99 - HPL 99->02 * * Common header for the Wireless Extension library... * * This file is released under the GPL license. *     Copyright (c) 1997-2002 Jean Tourrilhes <jt@hpl.hp.com> */#ifndef IWLIB_H#define IWLIB_H/*#include "CHANGELOG.h"*//***************************** INCLUDES *****************************//* Standard headers */#include <sys/types.h>#include <sys/ioctl.h>#include <stdio.h>#include <math.h>#include <errno.h>#include <fcntl.h>#include <ctype.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <netdb.h>		/* gethostbyname, getnetbyname */#include <net/ethernet.h>	/* struct ether_addr */#include <sys/time.h>		/* struct timeval */#include <unistd.h>/* This is our header selection. Try to hide the mess and the misery :-( * Don't look, you would go blind ;-) */#ifndef LINUX_VERSION_CODE#include <linux/version.h>#endif/* Kernel headers 2.4.X + Glibc 2.2 - Mandrake 8.0, Debian 2.3, RH 7.1 * Kernel headers 2.2.X + Glibc 2.2 - Slackware 8.0 */#if defined(__GLIBC__) \    && __GLIBC__ == 2 \    && __GLIBC_MINOR__ >= 2 \    && LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0)//#define GLIBC22_HEADERS#define GENERIC_HEADERS/* Kernel headers 2.4.X + Glibc 2.1 - Debian 2.2 upgraded, RH 7.0 * Kernel headers 2.2.X + Glibc 2.1 - Debian 2.2, RH 6.1 */#elif defined(__GLIBC__) \      && __GLIBC__ == 2 \      && __GLIBC_MINOR__ == 1 \      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0)//#define GLIBC_HEADERS#define GENERIC_HEADERS/* Kernel headers 2.2.X + Glibc 2.0 - Debian 2.1 */#elif defined(__GLIBC__) \      && __GLIBC__ == 2 \      && __GLIBC_MINOR__ == 0 \      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0) \      && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)#define GLIBC_HEADERS#define KLUDGE_HEADERS/* Note : is it really worth supporting kernel 2.0.X, knowing that * we require WE v9, which is only available in 2.2.X and higher ? * I guess one could use 2.0.x with an upgraded wireless.h... *//* Kernel headers 2.0.X + Glibc 2.0 - Debian 2.0, RH 5 */#elif defined(__GLIBC__) \      && __GLIBC__ == 2 \      && __GLIBC_MINOR__ == 0 \      && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0) \      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0)#define GLIBC_HEADERS/* Kernel headers 2.0.X + libc5 - old systems */#elif defined(_LINUX_C_LIB_VERSION_MAJOR) \      && _LINUX_C_LIB_VERSION_MAJOR == 5 \      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0) \      && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)#define LIBC5_HEADERS/* Unsupported combination */#else#error "Your kernel/libc combination is not supported"#endif#ifdef GENERIC_HEADERS /* Proposed by Dr. Michael Rietz <rietz@mail.amps.de>, 27.3.2 *//* If this works for all, it might be more stable on the long term - Jean II */#include <net/if_arp.h>		/* For ARPHRD_ETHER */#include <sys/socket.h>		/* For AF_INET & struct sockaddr */#include <netinet/in.h>         /* For struct sockaddr_in */#include <netinet/if_ether.h>#endif /* GENERIC_HEADERS */    #ifdef GLIBC22_HEADERS /* Added by Ross G. Miller <Ross_Miller@baylor.edu>, 3/28/01 */#include <linux/if_arp.h> 	/* For ARPHRD_ETHER */#include <linux/socket.h>	/* For AF_INET & struct sockaddr */#include <sys/socket.h>#endif /* GLIBC22_HEADERS */    #ifdef KLUDGE_HEADERS#include <socketbits.h>#endif	/* KLUDGE_HEADERS */#ifdef GLIBC_HEADERS#include <linux/if_arp.h>	/* For ARPHRD_ETHER */#include <linux/socket.h>	/* For AF_INET & struct sockaddr */#include <linux/in.h>		/* For struct sockaddr_in */#endif	/* KLUDGE_HEADERS || GLIBC_HEADERS */#ifdef LIBC5_HEADERS#include <sys/socket.h>		/* For AF_INET & struct sockaddr & socket() */#include <linux/if_arp.h>	/* For ARPHRD_ETHER */#include <linux/in.h>		/* For struct sockaddr_in */#endif	/* LIBC5_HEADERS *//* Those 3 headers were previously included in wireless.h */#include <linux/types.h>		/* for "caddr_t" et al		*/#include <linux/socket.h>		/* for "struct sockaddr" et al	*/#include <linux/if.h>			/* for IFNAMSIZ and co... */#ifdef WEXT_HEADER/* Private copy of Wireless extensions */#include WEXT_HEADER#else	/* !WEXT_HEADER *//* System wide Wireless extensions */#include <linux/wireless.h>#endif	/* !WEXT_HEADER */#ifdef __cplusplusextern "C" {#endif/****************************** DEBUG ******************************//************************ CONSTANTS & MACROS ************************//* Paths */#define PROC_NET_WIRELESS	"/proc/net/wireless"#define PROC_NET_DEV		"/proc/net/dev"/* Some usefull constants */#define KILO	1e3#define MEGA	1e6#define GIGA	1e9/* For doing log10/exp10 without libm */#define LOG10_MAGIC	1.25892541179/* Backward compatibility for Wireless Extension 9 */#ifndef IW_POWER_MODIFIER#define IW_POWER_MODIFIER	0x000F	/* Modify a parameter */#define IW_POWER_MIN		0x0001	/* Value is a minimum  */#define IW_POWER_MAX		0x0002	/* Value is a maximum */#define IW_POWER_RELATIVE	0x0004	/* Value is not in seconds/ms/us */#endif /* IW_POWER_MODIFIER */#ifndef IW_ENCODE_NOKEY#define IW_ENCODE_NOKEY         0x0800  /* Key is write only, so not here */#define IW_ENCODE_MODE		0xF000	/* Modes defined below */#endif /* IW_ENCODE_NOKEY */#ifndef IW_ENCODE_TEMP#define IW_ENCODE_TEMP		0x0400  /* Temporary key */#endif /* IW_ENCODE_TEMP *//* More backward compatibility */#ifndef SIOCSIWCOMMIT#define SIOCSIWCOMMIT	SIOCSIWNAME#endif /* SIOCSIWCOMMIT *//****************************** TYPES ******************************//* Shortcuts */typedef struct iw_statistics	iwstats;typedef struct iw_range		iwrange;typedef struct iw_param		iwparam;typedef struct iw_freq		iwfreq;typedef struct iw_quality	iwqual;typedef struct iw_priv_args	iwprivargs;typedef struct sockaddr		sockaddr;/* Structure for storing all wireless information for each device * This is pretty exhaustive... */typedef struct wireless_info{  char		name[IFNAMSIZ + 1];	/* Wireless/protocol name */  int		has_nwid;  iwparam	nwid;			/* Network ID */  int		has_freq;  double	freq;			/* Frequency/channel */  int		has_sens;  iwparam	sens;			/* sensitivity */  int		has_key;  unsigned char	key[IW_ENCODING_TOKEN_MAX];	/* Encoding key used */  int		key_size;		/* Number of bytes */  int		key_flags;		/* Various flags */  int		has_essid;  int		essid_on;  char		essid[IW_ESSID_MAX_SIZE + 1];	/* ESSID (extended network) */  int		has_nickname;  char		nickname[IW_ESSID_MAX_SIZE + 1]; /* NickName */  int		has_ap_addr;  sockaddr	ap_addr;		/* Access point address */  int		has_bitrate;  iwparam	bitrate;		/* Bit rate in bps */  int		has_rts;  iwparam	rts;			/* RTS threshold in bytes */  int		has_frag;  iwparam	frag;			/* Fragmentation threshold in bytes */  int		has_mode;  int		mode;			/* Operation mode */  int		has_power;  iwparam	power;			/* Power management parameters */  int		has_txpower;  iwparam	txpower;		/* Transmit Power in dBm */  int		has_retry;  iwparam	retry;			/* Retry limit or lifetime */  /* Stats */  iwstats	stats;  int		has_stats;  iwrange	range;  int		has_range;} wireless_info;/* Structure for storing all wireless information for each device * This is a cut down version of the one above, containing only * the things *truly* needed to configure a card. * Don't add other junk, I'll remove it... */typedef struct wireless_config{  char		name[IFNAMSIZ + 1];	/* Wireless/protocol name */  int		has_nwid;  iwparam	nwid;			/* Network ID */  int		has_freq;  double	freq;			/* Frequency/channel */  int		has_key;  unsigned char	key[IW_ENCODING_TOKEN_MAX];	/* Encoding key used */  int		key_size;		/* Number of bytes */  int		key_flags;		/* Various flags */  int		has_essid;  int		essid_on;  char		essid[IW_ESSID_MAX_SIZE + 1];	/* ESSID (extended network) */  int		has_mode;  int		mode;			/* Operation mode */} wireless_config;typedef struct stream_descr{  char *	end;		/* End of the stream */  char *	current;	/* Current event in stream of events */  char *	value;		/* Current value in event */} stream_descr;/* Prototype for handling display of each single interface on the * system - see iw_enum_devices() */typedef int (*iw_enum_handler)(int	skfd,			       char *	ifname,			       char *	args[],			       int	count);/**************************** PROTOTYPES ****************************//* * All the functions in iwcommon.c *//* ---------------------- SOCKET SUBROUTINES -----------------------*/int	iw_sockets_open(void);void	iw_enum_devices(int		skfd,			iw_enum_handler fn,			char *		args[],			int		count);/* --------------------- WIRELESS SUBROUTINES ----------------------*/int	iw_get_range_info(int		skfd,			  char *	ifname,			  iwrange *	range);int	iw_print_version_info(char *	toolname);int	iw_get_priv_info(int		skfd,			 char *		ifname,			 iwprivargs *	priv,			 int		maxpriv);int	iw_get_basic_config(int			skfd,			    char *		ifname,			    wireless_config *	info);int	iw_set_basic_config(int			skfd,			    char *		ifname,			    wireless_config *	info);/* --------------------- PROTOCOL SUBROUTINES --------------------- */int	iw_protocol_compare(char *	protocol1,			    char *	protocol2);/* -------------------- FREQUENCY SUBROUTINES --------------------- */void	iw_float2freq(double	in,		   iwfreq *	out);double	iw_freq2float(iwfreq *	in);void	iw_print_freq(char *	buffer,		      double	freq);int	iw_freq_to_channel(double		freq,			   struct iw_range *	range);void	iw_print_bitrate(char *	buffer,			 int	bitrate);/* ---------------------- POWER SUBROUTINES ----------------------- */int	iw_dbm2mwatt(int	in);int	iw_mwatt2dbm(int	in);/* -------------------- STATISTICS SUBROUTINES -------------------- */int	iw_get_stats(int	skfd,		     char *	ifname,		     iwstats *	stats);void	iw_print_stats(char *		buffer,		       iwqual *		qual,		       iwrange *	range,		       int		has_range);/* --------------------- ENCODING SUBROUTINES --------------------- */void	iw_print_key(char *		buffer,		     unsigned char *	key,		     int		key_size,		     int		key_flags);int	iw_in_key(char *		input,		  unsigned char *	key);int	iw_in_key_full(int		skfd,		       char *		ifname,		       char *		input,		       unsigned char *	key,		       __u16 *		flags);/* ----------------- POWER MANAGEMENT SUBROUTINES ----------------- */void	iw_print_pm_value(char *	buffer,			  int		value,			  int		flags);void	iw_print_pm_mode(char *		buffer,			 int		flags);/* --------------- RETRY LIMIT/LIFETIME SUBROUTINES --------------- */#if WIRELESS_EXT > 10void	iw_print_retry_value(char *	buffer,			     int	value,			     int	flags);#endif/* ----------------------- TIME SUBROUTINES ----------------------- */void	iw_print_timeval(char *			buffer,			 const struct timeval *	time);/* --------------------- ADDRESS SUBROUTINES ---------------------- */int	iw_check_mac_addr_type(int	skfd,			       char *	ifname);int	iw_check_if_addr_type(int	skfd,			      char *	ifname);#if 0int	iw_check_addr_type(int		skfd,			   char *	ifname);#endifvoid	iw_ether_ntop(const struct ether_addr* eth, char* buf);char*	iw_ether_ntoa(const struct ether_addr* eth);int	iw_ether_aton(const char* bufp, struct ether_addr* eth);int	iw_in_inet(char *bufp, struct sockaddr *sap);int	iw_in_addr(int			skfd,		   char *		ifname,		   char *		bufp,		   struct sockaddr *	sap);/* ----------------------- MISC SUBROUTINES ------------------------ */int	iw_get_priv_size(int		args);#if WIRELESS_EXT > 13/* ---------------------- EVENT SUBROUTINES ---------------------- */void	iw_init_event_stream(struct stream_descr *	stream,			     char *			data,			     int			len);int	iw_extract_event_stream(struct stream_descr *	stream,				struct iw_event *	iwe);#endif /* WIRELESS_EXT > 13 *//**************************** VARIABLES ****************************/extern const char * const	iw_operation_mode[];#define IW_NUM_OPER_MODE	7/************************* INLINE FUNTIONS *************************//* * Functions that are so simple that it's more efficient inlining them *//* * Note : I've defined wrapper for the ioctl request so that * it will be easier to migrate to other kernel API if needed *//*------------------------------------------------------------------*//* * Wrapper to push some Wireless Parameter in the driver */static inline intiw_set_ext(int			skfd,		/* Socket to the kernel */	   char *		ifname,		/* Device name */	   int			request,	/* WE ID */	   struct iwreq *	pwrq)		/* Fixed part of the request */{  /* Set device name */  strncpy(pwrq->ifr_name, ifname, IFNAMSIZ);  /* Do the request */  return(ioctl(skfd, request, pwrq));}/*------------------------------------------------------------------*//* * Wrapper to extract some Wireless Parameter out of the driver */static inline intiw_get_ext(int			skfd,		/* Socket to the kernel */	   char *		ifname,		/* Device name */	   int			request,	/* WE ID */	   struct iwreq *	pwrq)		/* Fixed part of the request */{  /* Set device name */  strncpy(pwrq->ifr_name, ifname, IFNAMSIZ);  /* Do the request */  return(ioctl(skfd, request, pwrq));}/*------------------------------------------------------------------*//* Backwards compatability * Actually, those form are much easier to use when dealing with * struct sockaddr... */static inline char*iw_pr_ether(char* bufp, const unsigned char* addr){  iw_ether_ntop((const struct ether_addr *) addr, bufp);  return bufp;}/* Backwards compatability */static inline intiw_in_ether(const char *bufp, struct sockaddr *sap){  sap->sa_family = ARPHRD_ETHER;  return iw_ether_aton(bufp, (struct ether_addr *) sap->sa_data) ? 0 : -1;}/*------------------------------------------------------------------*//* * Create an Ethernet broadcast address */static inline voidiw_broad_ether(struct sockaddr *sap){  sap->sa_family = ARPHRD_ETHER;  memset((char *) sap->sa_data, 0xFF, ETH_ALEN);}/*------------------------------------------------------------------*//* * Create an Ethernet NULL address */static inline voidiw_null_ether(struct sockaddr *sap){  sap->sa_family = ARPHRD_ETHER;  memset((char *) sap->sa_data, 0x00, ETH_ALEN);}#ifdef __cplusplus}#endif#endif	/* IWLIB_H */

⌨️ 快捷键说明

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