📄 os_wireless.h
字号:
#ifndef _WIRELESS_H
#define _WIRELESS_H
#define IW_CUSTOM_MAX 256 /* In bytes */
/* Maximum size of the ESSID and NICKN strings */
#define IW_ESSID_MAX_SIZE 32
#define IW_SCAN_MAX_DATA 4096 /* In bytes */
#define IW_ENCODING_TOKEN_MAX 32 /* 256 bits (for now) */
#define IW_MAX_BITRATES 8
typedef enum{
SIOCIWFIRSTPRIV =0x8BE0,
SIOCGIWAP =0x8B15,
SIOCIWLASTPRIV =0x8BFF
}PRIV_IOCTL;
typedef enum{
SIOCIWFIRST =0x8B00,
SIOCIWLAST =0x8BFF //SIOCIWLASTPRIV
}CMD_IOCTL;
/* ----------------------- WIRELESS EVENTS ----------------------- */
typedef enum{
IWEVTXDROP= 0x8C00, /* Packet dropped to excessive retry */
IWEVQUAL= 0x8C01, /* Quality part of statistics (scan) */
IWEVCUSTOM= 0x8C02, /* Driver specific ascii string */
IWEVREGISTERED= 0x8C03, /* Discovered a new node (AP mode) */
IWEVEXPIRED= 0x8C04, /* Expired a node (AP mode) */
IWEVFIRST= 0x8C00
}IW_EVENT;
typedef enum{
IW_DESCR_FLAG_NONE= 0x0000, /* Obvious */
/* Wrapper level flags */
IW_DESCR_FLAG_DUMP= 0x0001, /* Not part of the dump command */
IW_DESCR_FLAG_EVENT= 0x0002, /* Generate an event on SET */
IW_DESCR_FLAG_RESTRICT= 0x0004, /* GET : request is ROOT only */
/* Driver level flags */
IW_DESCR_FLAG_WAIT= 0x0100
}IW_FLAG;
/* Modes of operation */
typedef enum {
IW_MODE_AUTO = 0,
IW_MODE_ADHOC,
IW_MODE_INFRA,
IW_MODE_MASTER,
IW_MODE_REPEAT,
IW_MODE_SECOND,
IW_MODE_MONITOR
}MODE;
typedef enum {
IW_ENCODE_INDEX =0x00FF, /* Token index */
IW_ENCODE_FLAGS =0xFF00, /* Flags */
IW_ENCODE_MODE =0xF000, /* Modes */
IW_ENCODE_DISABLED =0x8000, /* Encoding disabled */
IW_ENCODE_ENABLED =0x0000, /* Encoding enabled */
IW_ENCODE_RESTRICTED =0x4000, /* Refuse non-encoded packets */
IW_ENCODE_OPEN =0x2000, /* Accept non-encoded packets */
IW_ENCODE_NOKEY =0x0800 /* Key is write only, so not present */
}ENCODE;
/* Power management flags available (along with the value, if any) */
/* Transmit Power flags available */
typedef enum{
IW_TXPOW_TYPE =0x00FF, /* Type of value */
IW_TXPOW_DBM =0x0000, /* Value is in dBm */
IW_TXPOW_MWATT =0x0001, /* Value is in mW */
IW_TXPOW_RANGE =0x1000 /* Range of value between min/max */
}POWER;
typedef enum{
IW_HEADER_TYPE_NULL =0, /* Not available */
IW_HEADER_TYPE_CHAR =2, /* char [IFNAMSIZ] */
IW_HEADER_TYPE_UINT =4, /* __u32 */
IW_HEADER_TYPE_FREQ =5, /* struct iw_freq */
IW_HEADER_TYPE_ADDR =6, /* struct sockaddr */
IW_HEADER_TYPE_POINT =8, /* struct iw_point */
IW_HEADER_TYPE_PARAM =9, /* struct iw_param */
IW_HEADER_TYPE_QUAL =10 /* struct iw_quality */
}HEADER_TYPE;
/****************************** TYPES ******************************/
struct iw_param
{
long int value; /* The value of the parameter itself */
u8 fixed; /* Hardware should not use auto select */
u8 disabled; /* Disable the feature */
u16 flags; /* Various specifc flags (if any) */
};
/*
* For all data larger than 16 octets, we need to use a
* pointer to memory allocated in user space.
*/
#if ALREADY_DEFND //defined in wlan_net_device.h
struct iw_point
{
void * pointer; /* Pointer to the data (in user space) */
u16 length; /* number of fields or size in bytes */
u16 flags; /* Optional params */
};
#endif
struct iw_freq
{
long int m; /* Mantissa */
short int e; /* Exponent */
u8 i; /* List index (when in range struct) */
u8 pad; /* Unused - just for alignement */
};
struct iw_quality
{
u8 qual; /* link quality (%retries, SNR,
%missed beacons or better...) */
u8 level; /* signal level (dBm) */
u8 noise; /* noise level (dBm) */
u8 updated; /* Flags to know if updated */
};
#define IFNAMSIZ 16
#define ARPHRD_ETHER 1
union iwreq_data
{
/* Config - generic */
char name[IFNAMSIZ];
struct iw_point essid; /* Extended network name */
struct iw_param nwid; /* network id (or domain - the cell) */
struct iw_freq freq; /* frequency or channel :
* 0-1000 = channel
* > 1000 = frequency in Hz */
struct iw_param sens; /* signal level threshold */
struct iw_param bitrate; /* default bit rate */
struct iw_param txpower; /* default transmit power */
struct iw_param rts; /* RTS threshold threshold */
struct iw_param frag; /* Fragmentation threshold */
u32 mode; /* Operation mode */
struct iw_param retry; /* Retry limits & lifetime */
struct iw_point encoding; /* Encoding stuff : tokens */
struct iw_param power; /* PM duration/timeout */
struct iw_quality qual; /* Quality part of statistics */
struct sockaddr ap_addr; /* Access point address */
struct sockaddr addr; /* Destination address (hw) */
struct iw_param param; /* Other small parameters */
struct iw_point data; /* Other large parameters */
};
struct iwreq
{
union
{
char ifrn_name[IFNAMSIZ]; /* if name, e.g. "eth0" */
} ifr_ifrn;
union iwreq_data u;
};
struct iw_event
{
//This structure may not be reqrd but is retained for linux compatability
u16 len; /* Real lenght of this stuff */
u16 cmd; /* Wireless IOCTL */
union iwreq_data u; /* IOCTL fixed payload */
};
struct iw_ioctl_description
{
u8 header_type; /* NULL, iw_point or other */
u8 token_type; /* Future */
u16 token_size; /* Granularity of payload */
u16 min_tokens; /* Min acceptable token number */
u16 max_tokens; /* Max acceptable token number */
u32 flags; /* Special handling of the request */
};
#define IW_EV_LCP_LEN (sizeof(struct iw_event) - sizeof(union iwreq_data))
#define IW_EV_CHAR_LEN (IW_EV_LCP_LEN + IFNAMSIZ)
#define IW_EV_UINT_LEN (IW_EV_LCP_LEN + sizeof(u32))
#define IW_EV_FREQ_LEN (IW_EV_LCP_LEN + sizeof(struct iw_freq))
#define IW_EV_POINT_LEN (IW_EV_LCP_LEN + sizeof(struct iw_point))
#define IW_EV_PARAM_LEN (IW_EV_LCP_LEN + sizeof(struct iw_param))
#define IW_EV_ADDR_LEN (IW_EV_LCP_LEN + sizeof(struct sockaddr))
#define IW_EV_QUAL_LEN (IW_EV_LCP_LEN + sizeof(struct iw_quality))
#endif /* _WIRELESS_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -