mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 10:05:29 +00:00
Add ioctl wrappers for Linux wireless extensions version 22.
Patch from Gwenael Lambrouin. Fixes #159452. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8734
This commit is contained in:
parent
650da4509d
commit
3a2fbbfafd
@ -4227,6 +4227,99 @@ PRE(sys_ioctl)
|
||||
PRE_MEM_WRITE( "ioctl(I2C_FUNCS)", ARG3, sizeof(unsigned long) );
|
||||
break;
|
||||
|
||||
/* Wireless extensions ioctls */
|
||||
case VKI_SIOCSIWCOMMIT:
|
||||
case VKI_SIOCSIWNWID:
|
||||
case VKI_SIOCSIWFREQ:
|
||||
case VKI_SIOCSIWMODE:
|
||||
case VKI_SIOCSIWSENS:
|
||||
case VKI_SIOCSIWRANGE:
|
||||
case VKI_SIOCSIWPRIV:
|
||||
case VKI_SIOCSIWSTATS:
|
||||
case VKI_SIOCSIWSPY:
|
||||
case VKI_SIOCSIWTHRSPY:
|
||||
case VKI_SIOCSIWAP:
|
||||
case VKI_SIOCSIWSCAN:
|
||||
case VKI_SIOCSIWESSID:
|
||||
case VKI_SIOCSIWRATE:
|
||||
case VKI_SIOCSIWNICKN:
|
||||
case VKI_SIOCSIWRTS:
|
||||
case VKI_SIOCSIWFRAG:
|
||||
case VKI_SIOCSIWTXPOW:
|
||||
case VKI_SIOCSIWRETRY:
|
||||
case VKI_SIOCSIWENCODE:
|
||||
case VKI_SIOCSIWPOWER:
|
||||
case VKI_SIOCSIWGENIE:
|
||||
case VKI_SIOCSIWMLME:
|
||||
case VKI_SIOCSIWAUTH:
|
||||
case VKI_SIOCSIWENCODEEXT:
|
||||
case VKI_SIOCSIWPMKSA:
|
||||
break;
|
||||
case VKI_SIOCGIWNAME:
|
||||
if (ARG3) {
|
||||
PRE_MEM_WRITE("ioctl(SIOCGIWNAME)",
|
||||
(Addr)((struct vki_iwreq *)ARG3)->u.name,
|
||||
sizeof(((struct vki_iwreq *)ARG3)->u.name));
|
||||
}
|
||||
break;
|
||||
case VKI_SIOCGIWNWID:
|
||||
case VKI_SIOCGIWSENS:
|
||||
case VKI_SIOCGIWRATE:
|
||||
case VKI_SIOCGIWRTS:
|
||||
case VKI_SIOCGIWFRAG:
|
||||
case VKI_SIOCGIWTXPOW:
|
||||
case VKI_SIOCGIWRETRY:
|
||||
case VKI_SIOCGIWPOWER:
|
||||
case VKI_SIOCGIWAUTH:
|
||||
if (ARG3) {
|
||||
PRE_MEM_WRITE("ioctl(SIOCGIW[NWID|SENS|RATE|RTS|FRAG|TXPOW|"
|
||||
"RETRY|PARAM|AUTH])",
|
||||
(Addr)&((struct vki_iwreq *)ARG3)->u.nwid,
|
||||
sizeof(struct vki_iw_param));
|
||||
}
|
||||
break;
|
||||
case VKI_SIOCGIWFREQ:
|
||||
if (ARG3) {
|
||||
PRE_MEM_WRITE("ioctl(SIOCGIWFREQ",
|
||||
(Addr)&((struct vki_iwreq *)ARG3)->u.freq,
|
||||
sizeof(struct vki_iw_freq));
|
||||
}
|
||||
break;
|
||||
case VKI_SIOCGIWMODE:
|
||||
if (ARG3) {
|
||||
PRE_MEM_WRITE("ioctl(SIOCGIWMODE",
|
||||
(Addr)&((struct vki_iwreq *)ARG3)->u.mode,
|
||||
sizeof(__vki_u32));
|
||||
}
|
||||
break;
|
||||
case VKI_SIOCGIWRANGE:
|
||||
case VKI_SIOCGIWPRIV:
|
||||
case VKI_SIOCGIWSTATS:
|
||||
case VKI_SIOCGIWSPY:
|
||||
case VKI_SIOCGIWTHRSPY:
|
||||
case VKI_SIOCGIWAPLIST:
|
||||
case VKI_SIOCGIWSCAN:
|
||||
case VKI_SIOCGIWESSID:
|
||||
case VKI_SIOCGIWNICKN:
|
||||
case VKI_SIOCGIWENCODE:
|
||||
case VKI_SIOCGIWGENIE:
|
||||
case VKI_SIOCGIWENCODEEXT:
|
||||
if (ARG3) {
|
||||
struct vki_iw_point* point;
|
||||
point = &((struct vki_iwreq *)ARG3)->u.data;
|
||||
PRE_MEM_WRITE("ioctl(SIOCGIW[RANGE|PRIV|STATS|SPY|THRSPY|"
|
||||
"APLIST|SCAN|ESSID|NICKN|ENCODE|GENIE|ENCODEEXT])",
|
||||
(Addr)point->pointer, point->length);
|
||||
}
|
||||
break;
|
||||
case VKI_SIOCGIWAP:
|
||||
if (ARG3) {
|
||||
PRE_MEM_WRITE("ioctl(SIOCGIWAP)",
|
||||
(Addr)&((struct vki_iwreq *)ARG3)->u.ap_addr,
|
||||
sizeof(struct vki_sockaddr));
|
||||
}
|
||||
break;
|
||||
|
||||
/* We don't have any specific information on it, so
|
||||
try to do something reasonable based on direction and
|
||||
size bits. The encoding scheme is described in
|
||||
@ -4945,6 +5038,91 @@ POST(sys_ioctl)
|
||||
POST_MEM_WRITE( ARG3, sizeof(unsigned long) );
|
||||
break;
|
||||
|
||||
/* Wireless extensions ioctls */
|
||||
case VKI_SIOCSIWCOMMIT:
|
||||
case VKI_SIOCSIWNWID:
|
||||
case VKI_SIOCSIWFREQ:
|
||||
case VKI_SIOCSIWMODE:
|
||||
case VKI_SIOCSIWSENS:
|
||||
case VKI_SIOCSIWRANGE:
|
||||
case VKI_SIOCSIWPRIV:
|
||||
case VKI_SIOCSIWSTATS:
|
||||
case VKI_SIOCSIWSPY:
|
||||
case VKI_SIOCSIWTHRSPY:
|
||||
case VKI_SIOCSIWAP:
|
||||
case VKI_SIOCSIWSCAN:
|
||||
case VKI_SIOCSIWESSID:
|
||||
case VKI_SIOCSIWRATE:
|
||||
case VKI_SIOCSIWNICKN:
|
||||
case VKI_SIOCSIWRTS:
|
||||
case VKI_SIOCSIWFRAG:
|
||||
case VKI_SIOCSIWTXPOW:
|
||||
case VKI_SIOCSIWRETRY:
|
||||
case VKI_SIOCSIWENCODE:
|
||||
case VKI_SIOCSIWPOWER:
|
||||
case VKI_SIOCSIWGENIE:
|
||||
case VKI_SIOCSIWMLME:
|
||||
case VKI_SIOCSIWAUTH:
|
||||
case VKI_SIOCSIWENCODEEXT:
|
||||
case VKI_SIOCSIWPMKSA:
|
||||
break;
|
||||
case VKI_SIOCGIWNAME:
|
||||
if (ARG3) {
|
||||
POST_MEM_WRITE((Addr)((struct vki_iwreq *)ARG3)->u.name,
|
||||
sizeof(((struct vki_iwreq *)ARG3)->u.name));
|
||||
}
|
||||
break;
|
||||
case VKI_SIOCGIWNWID:
|
||||
case VKI_SIOCGIWSENS:
|
||||
case VKI_SIOCGIWRATE:
|
||||
case VKI_SIOCGIWRTS:
|
||||
case VKI_SIOCGIWFRAG:
|
||||
case VKI_SIOCGIWTXPOW:
|
||||
case VKI_SIOCGIWRETRY:
|
||||
case VKI_SIOCGIWPOWER:
|
||||
case VKI_SIOCGIWAUTH:
|
||||
if (ARG3) {
|
||||
POST_MEM_WRITE((Addr)&((struct vki_iwreq *)ARG3)->u.param,
|
||||
sizeof(struct vki_iw_param));
|
||||
}
|
||||
break;
|
||||
case VKI_SIOCGIWFREQ:
|
||||
if (ARG3) {
|
||||
POST_MEM_WRITE((Addr)&((struct vki_iwreq *)ARG3)->u.freq,
|
||||
sizeof(struct vki_iw_freq));
|
||||
}
|
||||
break;
|
||||
case VKI_SIOCGIWMODE:
|
||||
if (ARG3) {
|
||||
POST_MEM_WRITE((Addr)&((struct vki_iwreq *)ARG3)->u.mode,
|
||||
sizeof(__vki_u32));
|
||||
}
|
||||
break;
|
||||
case VKI_SIOCGIWRANGE:
|
||||
case VKI_SIOCGIWPRIV:
|
||||
case VKI_SIOCGIWSTATS:
|
||||
case VKI_SIOCGIWSPY:
|
||||
case VKI_SIOCGIWTHRSPY:
|
||||
case VKI_SIOCGIWAPLIST:
|
||||
case VKI_SIOCGIWSCAN:
|
||||
case VKI_SIOCGIWESSID:
|
||||
case VKI_SIOCGIWNICKN:
|
||||
case VKI_SIOCGIWENCODE:
|
||||
case VKI_SIOCGIWGENIE:
|
||||
case VKI_SIOCGIWENCODEEXT:
|
||||
if (ARG3) {
|
||||
struct vki_iw_point* point;
|
||||
point = &((struct vki_iwreq *)ARG3)->u.data;
|
||||
POST_MEM_WRITE((Addr)point->pointer, point->length);
|
||||
}
|
||||
break;
|
||||
case VKI_SIOCGIWAP:
|
||||
if (ARG3) {
|
||||
POST_MEM_WRITE((Addr)&((struct vki_iwreq *)ARG3)->u.ap_addr,
|
||||
sizeof(struct vki_sockaddr));
|
||||
}
|
||||
break;
|
||||
|
||||
/* We don't have any specific information on it, so
|
||||
try to do something reasonable based on direction and
|
||||
size bits. The encoding scheme is described in
|
||||
|
||||
@ -179,6 +179,8 @@ typedef unsigned int vki_uint;
|
||||
|
||||
typedef __vki_s32 vki_int32_t;
|
||||
|
||||
typedef __vki_u8 vki_uint8_t;
|
||||
typedef __vki_u16 vki_uint16_t;
|
||||
typedef __vki_u32 vki_uint32_t;
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
@ -2375,6 +2377,174 @@ typedef vki_int32_t vki_key_serial_t;
|
||||
/* key handle permissions mask */
|
||||
typedef vki_uint32_t vki_key_perm_t;
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// From linux-2.6.24.7/include/linux/wireless.h
|
||||
// (wireless extensions version 22, 2007-03-16)
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
* [[Wireless extensions ioctls.]]
|
||||
*/
|
||||
|
||||
/* Wireless Identification */
|
||||
#define VKI_SIOCSIWCOMMIT 0x8B00 /* Commit pending changes to driver */
|
||||
#define VKI_SIOCGIWNAME 0x8B01 /* get name == wireless protocol */
|
||||
|
||||
/* Basic operations */
|
||||
#define VKI_SIOCSIWNWID 0x8B02 /* set network id (pre-802.11) */
|
||||
#define VKI_SIOCGIWNWID 0x8B03 /* get network id (the cell) */
|
||||
#define VKI_SIOCSIWFREQ 0x8B04 /* set channel/frequency (Hz) */
|
||||
#define VKI_SIOCGIWFREQ 0x8B05 /* get channel/frequency (Hz) */
|
||||
#define VKI_SIOCSIWMODE 0x8B06 /* set operation mode */
|
||||
#define VKI_SIOCGIWMODE 0x8B07 /* get operation mode */
|
||||
#define VKI_SIOCSIWSENS 0x8B08 /* set sensitivity (dBm) */
|
||||
#define VKI_SIOCGIWSENS 0x8B09 /* get sensitivity (dBm) */
|
||||
|
||||
/* Informative stuff */
|
||||
#define VKI_SIOCSIWRANGE 0x8B0A /* Unused */
|
||||
#define VKI_SIOCGIWRANGE 0x8B0B /* Get range of parameters */
|
||||
#define VKI_SIOCSIWPRIV 0x8B0C /* Unused */
|
||||
#define VKI_SIOCGIWPRIV 0x8B0D /* get private ioctl interface info */
|
||||
#define VKI_SIOCSIWSTATS 0x8B0E /* Unused */
|
||||
#define VKI_SIOCGIWSTATS 0x8B0F /* Get /proc/net/wireless stats */
|
||||
|
||||
/* Spy support (statistics per MAC address - used for Mobile IP support) */
|
||||
#define VKI_SIOCSIWSPY 0x8B10 /* set spy addresses */
|
||||
#define VKI_SIOCGIWSPY 0x8B11 /* get spy info (quality of link) */
|
||||
#define VKI_SIOCSIWTHRSPY 0x8B12 /* set spy threshold (spy event) */
|
||||
#define VKI_SIOCGIWTHRSPY 0x8B13 /* get spy threshold */
|
||||
|
||||
/* Access Point manipulation */
|
||||
#define VKI_SIOCSIWAP 0x8B14 /* set access point MAC addresses */
|
||||
#define VKI_SIOCGIWAP 0x8B15 /* get access point MAC addresses */
|
||||
#define VKI_SIOCGIWAPLIST 0x8B17 /* Deprecated in favor of scanning */
|
||||
#define VKI_SIOCSIWSCAN 0x8B18 /* trigger scanning (list cells) */
|
||||
#define VKI_SIOCGIWSCAN 0x8B19 /* get scanning results */
|
||||
|
||||
/* 802.11 specific support */
|
||||
#define VKI_SIOCSIWESSID 0x8B1A /* set ESSID (network name) */
|
||||
#define VKI_SIOCGIWESSID 0x8B1B /* get ESSID */
|
||||
#define VKI_SIOCSIWNICKN 0x8B1C /* set node name/nickname */
|
||||
#define VKI_SIOCGIWNICKN 0x8B1D /* get node name/nickname */
|
||||
|
||||
/* Other parameters useful in 802.11 and some other devices */
|
||||
#define VKI_SIOCSIWRATE 0x8B20 /* set default bit rate (bps) */
|
||||
#define VKI_SIOCGIWRATE 0x8B21 /* get default bit rate (bps) */
|
||||
#define VKI_SIOCSIWRTS 0x8B22 /* set RTS/CTS threshold (bytes) */
|
||||
#define VKI_SIOCGIWRTS 0x8B23 /* get RTS/CTS threshold (bytes) */
|
||||
#define VKI_SIOCSIWFRAG 0x8B24 /* set fragmentation thr (bytes) */
|
||||
#define VKI_SIOCGIWFRAG 0x8B25 /* get fragmentation thr (bytes) */
|
||||
#define VKI_SIOCSIWTXPOW 0x8B26 /* set transmit power (dBm) */
|
||||
#define VKI_SIOCGIWTXPOW 0x8B27 /* get transmit power (dBm) */
|
||||
#define VKI_SIOCSIWRETRY 0x8B28 /* set retry limits and lifetime */
|
||||
#define VKI_SIOCGIWRETRY 0x8B29 /* get retry limits and lifetime */
|
||||
|
||||
/* Encoding stuff (scrambling, hardware security, WEP...) */
|
||||
#define VKI_SIOCSIWENCODE 0x8B2A /* set encoding token & mode */
|
||||
#define VKI_SIOCGIWENCODE 0x8B2B /* get encoding token & mode */
|
||||
|
||||
/* Power saving stuff (power management, unicast and multicast) */
|
||||
#define VKI_SIOCSIWPOWER 0x8B2C /* set Power Management settings */
|
||||
#define VKI_SIOCGIWPOWER 0x8B2D /* get Power Management settings */
|
||||
|
||||
/* WPA : Generic IEEE 802.11 informatiom element (e.g., for WPA/RSN/WMM). */
|
||||
#define VKI_SIOCSIWGENIE 0x8B30 /* set generic IE */
|
||||
#define VKI_SIOCGIWGENIE 0x8B31 /* get generic IE */
|
||||
|
||||
/* WPA : IEEE 802.11 MLME requests */
|
||||
#define VKI_SIOCSIWMLME 0x8B16 /* request MLME operation; uses
|
||||
* struct iw_mlme */
|
||||
/* WPA : Authentication mode parameters */
|
||||
#define VKI_SIOCSIWAUTH 0x8B32 /* set authentication mode params */
|
||||
#define VKI_SIOCGIWAUTH 0x8B33 /* get authentication mode params */
|
||||
|
||||
/* WPA : Extended version of encoding configuration */
|
||||
#define VKI_SIOCSIWENCODEEXT 0x8B34 /* set encoding token & mode */
|
||||
#define VKI_SIOCGIWENCODEEXT 0x8B35 /* get encoding token & mode */
|
||||
|
||||
/* WPA2 : PMKSA cache management */
|
||||
#define VKI_SIOCSIWPMKSA 0x8B36 /* PMKSA cache operation */
|
||||
|
||||
/*
|
||||
* [[Payload for the wireless extensions ioctls.]]
|
||||
*/
|
||||
|
||||
struct vki_iw_param
|
||||
{
|
||||
__vki_s32 value; /* The value of the parameter itself */
|
||||
__vki_u8 fixed; /* Hardware should not use auto select */
|
||||
__vki_u8 disabled; /* Disable the feature */
|
||||
__vki_u16 flags; /* Various specifc flags (if any) */
|
||||
};
|
||||
|
||||
struct vki_iw_point
|
||||
{
|
||||
void __user *pointer; /* Pointer to the data (in user space) */
|
||||
__vki_u16 length; /* number of fields or size in bytes */
|
||||
__vki_u16 flags; /* Optional params */
|
||||
};
|
||||
|
||||
struct vki_iw_freq
|
||||
{
|
||||
__vki_s32 m; /* Mantissa */
|
||||
__vki_s16 e; /* Exponent */
|
||||
__vki_u8 i; /* List index (when in range struct) */
|
||||
__vki_u8 flags; /* Flags (fixed/auto) */
|
||||
};
|
||||
|
||||
struct vki_iw_quality
|
||||
{
|
||||
__vki_u8 qual; /* link quality (%retries, SNR,
|
||||
%missed beacons or better...) */
|
||||
__vki_u8 level; /* signal level (dBm) */
|
||||
__vki_u8 noise; /* noise level (dBm) */
|
||||
__vki_u8 updated; /* Flags to know if updated */
|
||||
};
|
||||
|
||||
union vki_iwreq_data
|
||||
{
|
||||
/* Config - generic */
|
||||
char name[VKI_IFNAMSIZ];
|
||||
/* Name : used to verify the presence of wireless extensions.
|
||||
* Name of the protocol/provider... */
|
||||
|
||||
struct vki_iw_point essid; /* Extended network name */
|
||||
struct vki_iw_param nwid; /* network id (or domain - the cell) */
|
||||
struct vki_iw_freq freq; /* frequency or channel :
|
||||
* 0-1000 = channel
|
||||
* > 1000 = frequency in Hz */
|
||||
|
||||
struct vki_iw_param sens; /* signal level threshold */
|
||||
struct vki_iw_param bitrate;/* default bit rate */
|
||||
struct vki_iw_param txpower;/* default transmit power */
|
||||
struct vki_iw_param rts; /* RTS threshold threshold */
|
||||
struct vki_iw_param frag; /* Fragmentation threshold */
|
||||
__vki_u32 mode; /* Operation mode */
|
||||
struct vki_iw_param retry; /* Retry limits & lifetime */
|
||||
|
||||
struct vki_iw_point encoding; /* Encoding stuff : tokens */
|
||||
struct vki_iw_param power; /* PM duration/timeout */
|
||||
struct vki_iw_quality qual; /* Quality part of statistics */
|
||||
|
||||
struct vki_sockaddr ap_addr; /* Access point address */
|
||||
struct vki_sockaddr addr; /* Destination address (hw/mac) */
|
||||
|
||||
struct vki_iw_param param; /* Other small parameters */
|
||||
struct vki_iw_point data; /* Other large parameters */
|
||||
};
|
||||
|
||||
struct vki_iwreq
|
||||
{
|
||||
union
|
||||
{
|
||||
char ifrn_name[VKI_IFNAMSIZ]; /* if name, e.g. "eth0" */
|
||||
} ifr_ifrn;
|
||||
|
||||
/* Data part (defined just above) */
|
||||
union vki_iwreq_data u;
|
||||
};
|
||||
|
||||
|
||||
#endif // __VKI_LINUX_H
|
||||
|
||||
/*--------------------------------------------------------------------*/
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user