Skip to content

Commit 65c9072

Browse files
Brijeshkrishnatgross35
authored andcommitted
added wireless struct and constants to Linux.
(backport <#3441>) (cherry picked from commit 1ee94df)
1 parent 69ce895 commit 65c9072

File tree

3 files changed

+274
-7
lines changed

3 files changed

+274
-7
lines changed

libc-test/Cargo.toml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,3 @@ harness = true
8787
name = "semver"
8888
path = "test/semver.rs"
8989
harness = false
90-
91-
[[test]]
92-
name = "primitive_types"
93-
path = "test/primitive_types.rs"
94-
harness = true

libc-test/semver/linux.txt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1353,9 +1353,16 @@ IW_ENC_CAPA_CIPHER_TKIP
13531353
IW_ENC_CAPA_WPA
13541354
IW_ENC_CAPA_WPA2
13551355
IW_ESSID_MAX_SIZE
1356+
IW_EVENT_CAPA_K_0
1357+
IW_EVENT_CAPA_K_1
1358+
IW_EV_ADDR_PK_LEN
13561359
IW_EV_CHAR_PK_LEN
1360+
IW_EV_FREQ_PK_LEN
13571361
IW_EV_LCP_PK_LEN
1362+
IW_EV_PARAM_PK_LEN
13581363
IW_EV_POINT_PK_LEN
1364+
IW_EV_QUAL_PK_LEN
1365+
IW_EV_UINT_PK_LEN
13591366
IW_FREQ_AUTO
13601367
IW_FREQ_FIXED
13611368
IW_GENERIC_IE_MAX
@@ -3728,6 +3735,22 @@ ip_mreq_source
37283735
ip_mreqn
37293736
ipc_perm
37303737
itimerspec
3738+
iw_discarded
3739+
iw_encode_ext
3740+
iw_event
3741+
iw_freq
3742+
iw_missed
3743+
iw_param
3744+
iw_pmkid_cand
3745+
iw_pmksa
3746+
iw_point
3747+
iw_priv_args
3748+
iw_quality
3749+
iw_range
3750+
iw_scan_req
3751+
iw_statistics
3752+
iwreq
3753+
iwreq_data
37313754
j1939_filter
37323755
jrand48
37333756
key_t

src/unix/linux_like/linux/mod.rs

Lines changed: 251 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -993,6 +993,141 @@ s! {
993993
pub ts_first_pkt: ::tpacket_bd_ts,
994994
pub ts_last_pkt: ::tpacket_bd_ts,
995995
}
996+
997+
// linux/wireless.h
998+
999+
pub struct iw_param {
1000+
pub value: __s32,
1001+
pub fixed: __u8,
1002+
pub disabled: __u8,
1003+
pub flags: __u16,
1004+
}
1005+
1006+
pub struct iw_point {
1007+
pub pointer: *mut ::c_void,
1008+
pub length: __u16,
1009+
pub flags: __u16,
1010+
}
1011+
1012+
pub struct iw_freq {
1013+
pub m: __s32,
1014+
pub e: __s16,
1015+
pub i: __u8,
1016+
pub flags: __u8,
1017+
}
1018+
1019+
pub struct iw_quality {
1020+
pub qual: __u8,
1021+
pub level: __u8,
1022+
pub noise: __u8,
1023+
pub updated: __u8,
1024+
}
1025+
1026+
pub struct iw_discarded {
1027+
pub nwid: __u32,
1028+
pub code: __u32,
1029+
pub fragment: __u32,
1030+
pub retries: __u32,
1031+
pubmisc: __u32,
1032+
}
1033+
1034+
pub struct iw_missed {
1035+
pub beacon: __u32,
1036+
}
1037+
1038+
pub struct iw_scan_req {
1039+
pub scan_type: __u8,
1040+
pub essid_len: __u8,
1041+
pub num_channels: __u8,
1042+
pub flags: __u8,
1043+
pub bssid: ::sockaddr,
1044+
pub essid: [__u8; IW_ESSID_MAX_SIZE],
1045+
pub min_channel_time: __u32,
1046+
pub max_channel_time: __u32,
1047+
pub channel_list: [iw_freq; IW_MAX_FREQUENCIES],
1048+
}
1049+
1050+
pub struct iw_encode_ext {
1051+
pub ext_flags: __u32,
1052+
pub tx_seq: [__u8; IW_ENCODE_SEQ_MAX_SIZE],
1053+
pub rx_seq: [__u8; IW_ENCODE_SEQ_MAX_SIZE],
1054+
pub addr: ::sockaddr,
1055+
pub alg: __u16,
1056+
pub key_len: __u16,
1057+
pub key: [__u8;0],
1058+
}
1059+
1060+
pub struct iw_pmksa {
1061+
pub cmd: __u32,
1062+
pub bssid: ::sockaddr,
1063+
pub pmkid: [__u8; IW_PMKID_LEN],
1064+
}
1065+
1066+
pub struct iw_pmkid_cand {
1067+
pub flags: __u32,
1068+
pub index: __u32,
1069+
pub bssid: ::sockaddr,
1070+
}
1071+
1072+
pub struct iw_statistics {
1073+
pub status: __u16,
1074+
pub qual: iw_quality,
1075+
pub discard: iw_discarded,
1076+
pub miss: iw_missed,
1077+
}
1078+
1079+
pub struct iw_range {
1080+
pub throughput: __u32,
1081+
pub min_nwid: __u32,
1082+
pub max_nwid: __u32,
1083+
pub old_num_channels: __u16,
1084+
pub old_num_frequency: __u8,
1085+
pub scan_capa: __u8,
1086+
pub event_capa: [__u32; 6],
1087+
pub sensitivity: __s32,
1088+
pub max_qual: iw_quality,
1089+
pub avg_qual: iw_quality,
1090+
pub num_bitrates: __u8,
1091+
pub bitrate: [__s32; IW_MAX_BITRATES],
1092+
pub min_rts: __s32,
1093+
pub max_rts: __s32,
1094+
pub min_frag: __s32,
1095+
pub max_frag: __s32,
1096+
pub min_pmp: __s32,
1097+
pub max_pmp: __s32,
1098+
pub min_pmt: __s32,
1099+
pub max_pmt: __s32,
1100+
pub pmp_flags: __u16,
1101+
pub pmt_flags: __u16,
1102+
pub pm_capa: __u16,
1103+
pub encoding_size: [__u16; IW_MAX_ENCODING_SIZES],
1104+
pub num_encoding_sizes: __u8,
1105+
pub max_encoding_tokens: __u8,
1106+
pub encoding_login_index: __u8,
1107+
pub txpower_capa: __u16,
1108+
pub num_txpower: __u8,
1109+
pub txpower: [__s32;IW_MAX_TXPOWER],
1110+
pub we_version_compiled: __u8,
1111+
pub we_version_source: __u8,
1112+
pub retry_capa: __u16,
1113+
pub retry_flags: __u16,
1114+
pub r_time_flags: __u16,
1115+
pub min_retry: __s32,
1116+
pub max_retry: __s32,
1117+
pub min_r_time: __s32,
1118+
pub max_r_time: __s32,
1119+
pub num_channels: __u16,
1120+
pub num_frequency: __u8,
1121+
pub freq: [iw_freq; IW_MAX_FREQUENCIES],
1122+
pub enc_capa: __u32,
1123+
}
1124+
1125+
pub struct iw_priv_args {
1126+
pub cmd: __u32,
1127+
pub set_args: __u16,
1128+
pub get_args: __u16,
1129+
pub name: [c_char; ::IFNAMSIZ],
1130+
}
9961131
}
9971132

9981133
cfg_if! {
@@ -1009,6 +1144,23 @@ cfg_if! {
10091144
pub r_info: Elf64_Xword,
10101145
pub r_addend: Elf64_Sxword,
10111146
}
1147+
1148+
pub struct iw_thrspy {
1149+
pub addr: ::sockaddr,
1150+
pub qual: iw_quality,
1151+
pub low: iw_quality,
1152+
pub high: iw_quality,
1153+
}
1154+
pub struct iw_mlme {
1155+
pub cmd: __u16,
1156+
pub reason_code: __u16,
1157+
pub addr: ::sockaddr,
1158+
}
1159+
pub struct iw_michaelmicfailure {
1160+
pub flags: __u32,
1161+
pub src_addr: ::sockaddr,
1162+
pub tsc: [__u8; IW_ENCODE_SEQ_MAX_SIZE],
1163+
}
10121164
}
10131165
}
10141166
}
@@ -1323,6 +1475,43 @@ s_no_extra_traits! {
13231475
pub can_ifindex: ::c_int,
13241476
pub can_addr: __c_anonymous_sockaddr_can_can_addr,
13251477
}
1478+
1479+
// linux/wireless.h
1480+
pub union iwreq_data {
1481+
pub name: [c_char; ::IFNAMSIZ],
1482+
pub essid: iw_point,
1483+
pub nwid: iw_param,
1484+
pub freq: iw_freq,
1485+
pub sens: iw_param,
1486+
pub bitrate: iw_param,
1487+
pub txpower: iw_param,
1488+
pub rts: iw_param,
1489+
pub frag: iw_param,
1490+
pub mode: __u32,
1491+
pub retry: iw_param,
1492+
pub encoding: iw_point,
1493+
pub power: iw_param,
1494+
pub qual: iw_quality,
1495+
pub ap_addr: ::sockaddr,
1496+
pub addr: ::sockaddr,
1497+
pub param: iw_param,
1498+
pub data: iw_point,
1499+
}
1500+
1501+
pub struct iw_event {
1502+
pub len: __u16,
1503+
pub cmd: __u16,
1504+
pub u: iwreq_data,
1505+
}
1506+
1507+
pub union __c_anonymous_iwreq {
1508+
pub ifrn_name: [c_char; ::IFNAMSIZ],
1509+
}
1510+
1511+
pub struct iwreq {
1512+
pub ifr_ifrn: __c_anonymous_iwreq,
1513+
pub u: iwreq_data,
1514+
}
13261515
}
13271516

13281517
cfg_if! {
@@ -1797,6 +1986,58 @@ cfg_if! {
17971986
self.sched_period.hash(state);
17981987
}
17991988
}
1989+
1990+
impl ::fmt::Debug for iwreq_data {
1991+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1992+
f.debug_struct("iwreq_data")
1993+
.field("name", unsafe { &self.name })
1994+
.field("essid", unsafe { &self.essid })
1995+
.field("nwid", unsafe { &self.nwid })
1996+
.field("freq", unsafe { &self.freq })
1997+
.field("sens", unsafe { &self.sens })
1998+
.field("bitrate", unsafe { &self.bitrate })
1999+
.field("txpower", unsafe { &self.txpower })
2000+
.field("rts", unsafe { &self.rts })
2001+
.field("frag", unsafe { &self.frag })
2002+
.field("mode", unsafe { &self.mode })
2003+
.field("retry", unsafe { &self.retry })
2004+
.field("encoding", unsafe { &self.encoding })
2005+
.field("power", unsafe { &self.power })
2006+
.field("qual", unsafe { &self.qual })
2007+
.field("ap_addr", unsafe { &self.ap_addr })
2008+
.field("addr", unsafe { &self.addr })
2009+
.field("param", unsafe { &self.param })
2010+
.field("data", unsafe { &self.data })
2011+
.finish()
2012+
}
2013+
}
2014+
2015+
impl ::fmt::Debug for iw_event {
2016+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
2017+
f.debug_struct("iw_event")
2018+
.field("len", &self.len )
2019+
.field("cmd", &self.cmd )
2020+
.field("u", &self.u )
2021+
.finish()
2022+
}
2023+
}
2024+
2025+
impl ::fmt::Debug for __c_anonymous_iwreq {
2026+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
2027+
f.debug_struct("__c_anonymous_iwreq")
2028+
.field("ifrn_name", unsafe { &self.ifrn_name })
2029+
.finish()
2030+
}
2031+
}
2032+
2033+
impl ::fmt::Debug for iwreq {
2034+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
2035+
f.debug_struct("iwreq")
2036+
.field("ifr_ifrn", &self.ifr_ifrn )
2037+
.field("u", &self.u )
2038+
.finish()
2039+
}
2040+
}
18002041
}
18012042
}
18022043

@@ -3794,6 +4035,9 @@ pub const IW_ENC_CAPA_CIPHER_TKIP: ::c_ulong = 0x00000004;
37944035
pub const IW_ENC_CAPA_CIPHER_CCMP: ::c_ulong = 0x00000008;
37954036
pub const IW_ENC_CAPA_4WAY_HANDSHAKE: ::c_ulong = 0x00000010;
37964037

4038+
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);
4039+
pub const IW_EVENT_CAPA_K_1: c_ulong = 0x400; // W_EVENT_CAPA_MASK(0x8B2A);
4040+
37974041
pub const IW_PMKSA_ADD: usize = 1;
37984042
pub const IW_PMKSA_REMOVE: usize = 2;
37994043
pub const IW_PMKSA_FLUSH: usize = 3;
@@ -3804,8 +4048,13 @@ pub const IW_PMKID_CAND_PREAUTH: ::c_ulong = 0x00000001;
38044048

38054049
pub const IW_EV_LCP_PK_LEN: usize = 4;
38064050

3807-
pub const IW_EV_CHAR_PK_LEN: usize = IW_EV_LCP_PK_LEN + ::IFNAMSIZ;
3808-
pub const IW_EV_POINT_PK_LEN: usize = IW_EV_LCP_PK_LEN + 4;
4051+
pub const IW_EV_CHAR_PK_LEN: usize = 20; // IW_EV_LCP_PK_LEN + ::IFNAMSIZ;
4052+
pub const IW_EV_UINT_PK_LEN: usize = 8; // IW_EV_LCP_PK_LEN + ::mem::size_of::<u32>();
4053+
pub const IW_EV_FREQ_PK_LEN: usize = 12; // IW_EV_LCP_PK_LEN + ::mem::size_of::<iw_freq>();
4054+
pub const IW_EV_PARAM_PK_LEN: usize = 12; // IW_EV_LCP_PK_LEN + ::mem::size_of::<iw_param>();
4055+
pub const IW_EV_ADDR_PK_LEN: usize = 20; // IW_EV_LCP_PK_LEN + ::mem::size_of::<::sockaddr>();
4056+
pub const IW_EV_QUAL_PK_LEN: usize = 8; // IW_EV_LCP_PK_LEN + ::mem::size_of::<iw_quality>();
4057+
pub const IW_EV_POINT_PK_LEN: usize = 8; // IW_EV_LCP_PK_LEN + 4;
38094058

38104059
pub const IPTOS_TOS_MASK: u8 = 0x1E;
38114060
pub const IPTOS_PREC_MASK: u8 = 0xE0;

0 commit comments

Comments
 (0)