@@ -870,8 +870,153 @@ s! {
870870 pub salt: [ :: c_uchar; TLS_CIPHER_CHACHA20_POLY1305_SALT_SIZE ] ,
871871 pub rec_seq: [ :: c_uchar; TLS_CIPHER_CHACHA20_POLY1305_REC_SEQ_SIZE ] ,
872872 }
873+
874+ // linux/wireless.h
875+
876+ pub struct iw_param {
877+ pub value: __s32,
878+ pub fixed: __u8,
879+ pub disabled: __u8,
880+ pub flags: __u16,
881+ }
882+ pub struct iw_point {
883+ pub pointer: * mut :: c_void,
884+ pub length: __u16,
885+ pub flags: __u16,
886+ }
887+ pub struct iw_freq {
888+ pub m: __s32,
889+ pub e: __s16,
890+ pub i: __u8,
891+ pub flags: __u8,
892+ }
893+ pub struct iw_quality {
894+ pub qual: __u8,
895+ pub level: __u8,
896+ pub noise: __u8,
897+ pub updated: __u8,
898+ }
899+ pub struct iw_discarded {
900+ pub nwid: __u32,
901+ pub code: __u32,
902+ pub fragment: __u32,
903+ pub retries: __u32,
904+ pubmisc: __u32,
905+ }
906+ pub struct iw_missed {
907+ pub beacon: __u32,
908+ }
909+ pub struct iw_scan_req {
910+ pub scan_type: __u8,
911+ pub essid_len: __u8,
912+ pub num_channels: __u8,
913+ pub flags: __u8,
914+ pub bssid: :: sockaddr,
915+ pub essid: [ __u8; IW_ESSID_MAX_SIZE ] ,
916+ pub min_channel_time: __u32,
917+ pub max_channel_time: __u32,
918+ pub channel_list: [ iw_freq; IW_MAX_FREQUENCIES ] ,
919+ }
920+ pub struct iw_encode_ext {
921+ pub ext_flags: __u32,
922+ pub tx_seq: [ __u8; IW_ENCODE_SEQ_MAX_SIZE ] ,
923+ pub rx_seq: [ __u8; IW_ENCODE_SEQ_MAX_SIZE ] ,
924+ pub addr: :: sockaddr,
925+ pub alg: __u16,
926+ pub key_len: __u16,
927+ pub key: [ __u8; 0 ] ,
928+ }
929+ pub struct iw_pmksa {
930+ pub cmd: __u32,
931+ pub bssid: :: sockaddr,
932+ pub pmkid: [ __u8; IW_PMKID_LEN ] ,
933+ }
934+ pub struct iw_pmkid_cand {
935+ pub flags: __u32,
936+ pub index: __u32,
937+ pub bssid: :: sockaddr,
938+ }
939+ pub struct iw_statistics {
940+ pub status: __u16,
941+ pub qual: iw_quality,
942+ pub discard: iw_discarded,
943+ pub miss: iw_missed,
944+ }
945+ pub struct iw_range {
946+ pub throughput: __u32,
947+ pub min_nwid: __u32,
948+ pub max_nwid: __u32,
949+ pub old_num_channels: __u16,
950+ pub old_num_frequency: __u8,
951+ pub scan_capa: __u8,
952+ pub event_capa: [ __u32; 6 ] ,
953+ pub sensitivity: __s32,
954+ pub max_qual: iw_quality,
955+ pub avg_qual: iw_quality,
956+ pub num_bitrates: __u8,
957+ pub bitrate: [ __s32; IW_MAX_BITRATES ] ,
958+ pub min_rts: __s32,
959+ pub max_rts: __s32,
960+ pub min_frag: __s32,
961+ pub max_frag: __s32,
962+ pub min_pmp: __s32,
963+ pub max_pmp: __s32,
964+ pub min_pmt: __s32,
965+ pub max_pmt: __s32,
966+ pub pmp_flags: __u16,
967+ pub pmt_flags: __u16,
968+ pub pm_capa: __u16,
969+ pub encoding_size: [ __u16; IW_MAX_ENCODING_SIZES ] ,
970+ pub num_encoding_sizes: __u8,
971+ pub max_encoding_tokens: __u8,
972+ pub encoding_login_index: __u8,
973+ pub txpower_capa: __u16,
974+ pub num_txpower: __u8,
975+ pub txpower: [ __s32; IW_MAX_TXPOWER ] ,
976+ pub we_version_compiled: __u8,
977+ pub we_version_source: __u8,
978+ pub retry_capa: __u16,
979+ pub retry_flags: __u16,
980+ pub r_time_flags: __u16,
981+ pub min_retry: __s32,
982+ pub max_retry: __s32,
983+ pub min_r_time: __s32,
984+ pub max_r_time: __s32,
985+ pub num_channels: __u16,
986+ pub num_frequency: __u8,
987+ pub freq: [ iw_freq; IW_MAX_FREQUENCIES ] ,
988+ pub enc_capa: __u32,
989+ }
990+ pub struct iw_priv_args {
991+ pub cmd: __u32,
992+ pub set_args: __u16,
993+ pub get_args: __u16,
994+ pub name: [ c_char; :: IFNAMSIZ ] ,
995+ }
873996}
874997
998+ cfg_if ! {
999+ if #[ cfg( not( target_arch = "sparc64" ) ) ] {
1000+ s!{
1001+ pub struct iw_thrspy {
1002+ pub addr: :: sockaddr,
1003+ pub qual: iw_quality,
1004+ pub low: iw_quality,
1005+ pub high: iw_quality,
1006+ }
1007+ pub struct iw_mlme {
1008+ pub cmd: __u16,
1009+ pub reason_code: __u16,
1010+ pub addr: :: sockaddr,
1011+ }
1012+ pub struct iw_michaelmicfailure {
1013+ pub flags: __u32,
1014+ pub src_addr: :: sockaddr,
1015+ pub tsc: [ __u8; IW_ENCODE_SEQ_MAX_SIZE ] ,
1016+ }
1017+ }
1018+ }
1019+ }
8751020s_no_extra_traits ! {
8761021 pub struct sockaddr_nl {
8771022 pub nl_family: :: sa_family_t,
@@ -1048,6 +1193,45 @@ s_no_extra_traits! {
10481193 }
10491194}
10501195
1196+ s_no_extra_traits ! {
1197+ // linux/wireless.h
1198+ pub union iwreq_data {
1199+ pub name: [ c_char; :: IFNAMSIZ ] ,
1200+ pub essid: iw_point,
1201+ pub nwid: iw_param,
1202+ pub freq: iw_freq,
1203+ pub sens: iw_param,
1204+ pub bitrate: iw_param,
1205+ pub txpower: iw_param,
1206+ pub rts: iw_param,
1207+ pub frag: iw_param,
1208+ pub mode: __u32,
1209+ pub retry: iw_param,
1210+ pub encoding: iw_point,
1211+ pub power: iw_param,
1212+ pub qual: iw_quality,
1213+ pub ap_addr: :: sockaddr,
1214+ pub addr: :: sockaddr,
1215+ pub param: iw_param,
1216+ pub data: iw_point,
1217+ }
1218+
1219+ pub struct iw_event {
1220+ pub len: __u16,
1221+ pub cmd: __u16,
1222+ pub u: iwreq_data,
1223+ }
1224+
1225+ pub union __c_anonymous_iwreq {
1226+ pub ifrn_name: [ c_char; :: IFNAMSIZ ] ,
1227+ }
1228+
1229+ pub struct iwreq {
1230+ pub ifr_ifrn: __c_anonymous_iwreq,
1231+ pub u: iwreq_data,
1232+ }
1233+ }
1234+
10511235cfg_if ! {
10521236 if #[ cfg( feature = "extra_traits" ) ] {
10531237 impl PartialEq for sockaddr_nl {
@@ -1546,6 +1730,57 @@ cfg_if! {
15461730 self . sched_period. hash( state) ;
15471731 }
15481732 }
1733+ impl :: fmt:: Debug for iwreq_data {
1734+ fn fmt( & self , f: & mut :: fmt:: Formatter ) -> :: fmt:: Result {
1735+ f. debug_struct( "iwreq_data" )
1736+ . field( "name" , unsafe { & self . name } )
1737+ . field( "essid" , unsafe { & self . essid } )
1738+ . field( "nwid" , unsafe { & self . nwid } )
1739+ . field( "freq" , unsafe { & self . freq } )
1740+ . field( "sens" , unsafe { & self . sens } )
1741+ . field( "bitrate" , unsafe { & self . bitrate } )
1742+ . field( "txpower" , unsafe { & self . txpower } )
1743+ . field( "rts" , unsafe { & self . rts } )
1744+ . field( "frag" , unsafe { & self . frag } )
1745+ . field( "mode" , unsafe { & self . mode } )
1746+ . field( "retry" , unsafe { & self . retry } )
1747+ . field( "encoding" , unsafe { & self . encoding } )
1748+ . field( "power" , unsafe { & self . power } )
1749+ . field( "qual" , unsafe { & self . qual } )
1750+ . field( "ap_addr" , unsafe { & self . ap_addr } )
1751+ . field( "addr" , unsafe { & self . addr } )
1752+ . field( "param" , unsafe { & self . param } )
1753+ . field( "data" , unsafe { & self . data } )
1754+ . finish( )
1755+ }
1756+ }
1757+
1758+ impl :: fmt:: Debug for iw_event {
1759+ fn fmt( & self , f: & mut :: fmt:: Formatter ) -> :: fmt:: Result {
1760+ f. debug_struct( "iw_event" )
1761+ . field( "len" , & self . len )
1762+ . field( "cmd" , & self . cmd )
1763+ . field( "u" , & self . u )
1764+ . finish( )
1765+ }
1766+ }
1767+
1768+ impl :: fmt:: Debug for __c_anonymous_iwreq {
1769+ fn fmt( & self , f: & mut :: fmt:: Formatter ) -> :: fmt:: Result {
1770+ f. debug_struct( "__c_anonymous_iwreq" )
1771+ . field( "ifrn_name" , unsafe { & self . ifrn_name } )
1772+ . finish( )
1773+ }
1774+ }
1775+
1776+ impl :: fmt:: Debug for iwreq {
1777+ fn fmt( & self , f: & mut :: fmt:: Formatter ) -> :: fmt:: Result {
1778+ f. debug_struct( "iwreq" )
1779+ . field( "ifr_ifrn" , & self . ifr_ifrn )
1780+ . field( "u" , & self . u )
1781+ . finish( )
1782+ }
1783+ }
15491784 }
15501785}
15511786
@@ -3457,6 +3692,9 @@ pub const IW_ENC_CAPA_CIPHER_TKIP: ::c_ulong = 0x00000004;
34573692pub const IW_ENC_CAPA_CIPHER_CCMP : :: c_ulong = 0x00000008 ;
34583693pub const IW_ENC_CAPA_4WAY_HANDSHAKE : :: c_ulong = 0x00000010 ;
34593694
3695+ pub const IW_EVENT_CAPA_K_0 : c_ulong = 0x4000050 ; // IW_EVENT_CAPA_MASK(0x8B04) | IW_EVENT_CAPA_MASK(0x8B06) | IW_EVENT_CAPA_MASK(0x8B1A);
3696+ pub const IW_EVENT_CAPA_K_1 : c_ulong = 0x400 ; // W_EVENT_CAPA_MASK(0x8B2A);
3697+
34603698pub const IW_PMKSA_ADD : usize = 1 ;
34613699pub const IW_PMKSA_REMOVE : usize = 2 ;
34623700pub const IW_PMKSA_FLUSH : usize = 3 ;
@@ -3467,8 +3705,13 @@ pub const IW_PMKID_CAND_PREAUTH: ::c_ulong = 0x00000001;
34673705
34683706pub const IW_EV_LCP_PK_LEN : usize = 4 ;
34693707
3470- pub const IW_EV_CHAR_PK_LEN : usize = IW_EV_LCP_PK_LEN + :: IFNAMSIZ ;
3471- pub const IW_EV_POINT_PK_LEN : usize = IW_EV_LCP_PK_LEN + 4 ;
3708+ pub const IW_EV_CHAR_PK_LEN : usize = 20 ; // IW_EV_LCP_PK_LEN + ::IFNAMSIZ;
3709+ pub const IW_EV_UINT_PK_LEN : usize = 8 ; // IW_EV_LCP_PK_LEN + ::mem::size_of::<u32>();
3710+ pub const IW_EV_FREQ_PK_LEN : usize = 12 ; // IW_EV_LCP_PK_LEN + ::mem::size_of::<iw_freq>();
3711+ pub const IW_EV_PARAM_PK_LEN : usize = 12 ; // IW_EV_LCP_PK_LEN + ::mem::size_of::<iw_param>();
3712+ pub const IW_EV_ADDR_PK_LEN : usize = 20 ; // IW_EV_LCP_PK_LEN + ::mem::size_of::<::sockaddr>();
3713+ pub const IW_EV_QUAL_PK_LEN : usize = 8 ; // IW_EV_LCP_PK_LEN + ::mem::size_of::<iw_quality>();
3714+ pub const IW_EV_POINT_PK_LEN : usize = 8 ; // IW_EV_LCP_PK_LEN + 4;
34723715
34733716pub const IPTOS_TOS_MASK : u8 = 0x1E ;
34743717pub const IPTOS_PREC_MASK : u8 = 0xE0 ;
0 commit comments