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
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
typedef __vki_s32 vki_int32_t;
+typedef __vki_u8 vki_uint8_t;
+typedef __vki_u16 vki_uint16_t;
typedef __vki_u32 vki_uint32_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
/*--------------------------------------------------------------------*/