Skip to content

Commit d4c8eee

Browse files
authored
Merge pull request #3441 from Brijeshkrishna/linux_wireless
Added remaining linux/wireless.h struct and constants
2 parents ad75ba1 + 1ee94df commit d4c8eee

File tree

3 files changed

+273
-3
lines changed

3 files changed

+273
-3
lines changed

libc-test/build.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -4369,7 +4369,11 @@ fn test_linux(target: &str) {
43694369
// the `ifc_ifcu` field is an anonymous union
43704370
(struct_ == "ifconf" && field == "ifc_ifcu") ||
43714371
// glibc uses a single array `uregs` instead of individual fields.
4372-
(struct_ == "user_regs" && arm)
4372+
(struct_ == "user_regs" && arm) ||
4373+
// the `ifr_ifrn` field is an anonymous union
4374+
(struct_ == "iwreq" && field == "ifr_ifrn") ||
4375+
// the `key` field is a zero-sized array
4376+
(struct_ == "iw_encode_ext" && field == "key")
43734377
});
43744378

43754379
cfg.skip_roundtrip(move |s| match s {

libc-test/semver/linux.txt

+23
Original file line numberDiff line numberDiff line change
@@ -2744,6 +2744,8 @@ IW_ENC_CAPA_WPA2
27442744
IW_ENC_CAPA_CIPHER_TKIP
27452745
IW_ENC_CAPA_CIPHER_CCMP
27462746
IW_ENC_CAPA_4WAY_HANDSHAKE
2747+
IW_EVENT_CAPA_K_0
2748+
IW_EVENT_CAPA_K_1
27472749
IW_PMKSA_ADD
27482750
IW_PMKSA_REMOVE
27492751
IW_PMKSA_FLUSH
@@ -2752,6 +2754,11 @@ IW_PMKID_CAND_PREAUTH
27522754
IW_EV_CHAR_PK_LEN
27532755
IW_EV_LCP_PK_LEN
27542756
IW_EV_POINT_PK_LEN
2757+
IW_EV_UINT_PK_LEN
2758+
IW_EV_FREQ_PK_LEN
2759+
IW_EV_PARAM_PK_LEN
2760+
IW_EV_ADDR_PK_LEN
2761+
IW_EV_QUAL_PK_LEN
27552762
SI_LOAD_SHIFT
27562763
SND_CNT
27572764
SND_MAX
@@ -3595,6 +3602,22 @@ ip_mreqn
35953602
ip_mreq_source
35963603
ipc_perm
35973604
itimerspec
3605+
iw_discarded
3606+
iw_encode_ext
3607+
iw_event
3608+
iw_freq
3609+
iw_missed
3610+
iw_param
3611+
iw_pmkid_cand
3612+
iw_pmksa
3613+
iw_point
3614+
iw_priv_args
3615+
iw_quality
3616+
iw_range
3617+
iwreq
3618+
iwreq_data
3619+
iw_scan_req
3620+
iw_statistics
35983621
j1939_filter
35993622
jrand48
36003623
key_t

src/unix/linux_like/linux/mod.rs

+245-2
Original file line numberDiff line numberDiff line change
@@ -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+
}
8751020
s_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+
10511235
cfg_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;
34573692
pub const IW_ENC_CAPA_CIPHER_CCMP: ::c_ulong = 0x00000008;
34583693
pub 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+
34603698
pub const IW_PMKSA_ADD: usize = 1;
34613699
pub const IW_PMKSA_REMOVE: usize = 2;
34623700
pub const IW_PMKSA_FLUSH: usize = 3;
@@ -3467,8 +3705,13 @@ pub const IW_PMKID_CAND_PREAUTH: ::c_ulong = 0x00000001;
34673705

34683706
pub 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

34733716
pub const IPTOS_TOS_MASK: u8 = 0x1E;
34743717
pub const IPTOS_PREC_MASK: u8 = 0xE0;

0 commit comments

Comments
 (0)