Skip to content

Commit 8ccd2c0

Browse files
Added remaining linux/wireless.h struct and constants
added remaining linux/wireless.h struct and constants added linux/wireless.h struct and constants fix fix fix2 fix fix fix fix fix fix fix fix fix
1 parent 3bd79c8 commit 8ccd2c0

File tree

3 files changed

+280
-3
lines changed

3 files changed

+280
-3
lines changed

libc-test/build.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4171,6 +4171,10 @@ fn test_linux(target: &str) {
41714171
(struct_ == "ifreq" && field == "ifr_ifru") ||
41724172
// the `ifc_ifcu` field is an anonymous union
41734173
(struct_ == "ifconf" && field == "ifc_ifcu") ||
4174+
// the `ifr_ifrn` field is an anonymous union
4175+
(struct_ == "iwreq" && field == "ifr_ifrn") ||
4176+
// the `key` field is a zero-sized array
4177+
(struct_ == "iw_encode_ext" && field == "key") ||
41744178
// glibc uses a single array `uregs` instead of individual fields.
41754179
(struct_ == "user_regs" && arm)
41764180
});

libc-test/semver/linux.txt

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2704,13 +2704,20 @@ IW_ENC_CAPA_WPA2
27042704
IW_ENC_CAPA_CIPHER_TKIP
27052705
IW_ENC_CAPA_CIPHER_CCMP
27062706
IW_ENC_CAPA_4WAY_HANDSHAKE
2707+
IW_EVENT_CAPA_K_0
2708+
IW_EVENT_CAPA_K_1
27072709
IW_PMKSA_ADD
27082710
IW_PMKSA_REMOVE
27092711
IW_PMKSA_FLUSH
27102712
IW_PMKID_LEN
27112713
IW_PMKID_CAND_PREAUTH
2712-
IW_EV_CHAR_PK_LEN
27132714
IW_EV_LCP_PK_LEN
2715+
IW_EV_CHAR_PK_LEN
2716+
IW_EV_UINT_PK_LEN
2717+
IW_EV_FREQ_PK_LEN
2718+
IW_EV_PARAM_PK_LEN
2719+
IW_EV_ADDR_PK_LEN
2720+
IW_EV_QUAL_PK_LEN
27142721
IW_EV_POINT_PK_LEN
27152722
SI_LOAD_SHIFT
27162723
SND_CNT
@@ -3540,6 +3547,25 @@ ip_mreqn
35403547
ip_mreq_source
35413548
ipc_perm
35423549
itimerspec
3550+
iw_discarded
3551+
iw_encode_ext
3552+
iw_event
3553+
iw_freq
3554+
iw_michaelmicfailure
3555+
iw_missed
3556+
iw_mlme
3557+
iw_param
3558+
iw_pmkid_cand
3559+
iw_pmksa
3560+
iw_point
3561+
iw_priv_args
3562+
iw_quality
3563+
iw_range
3564+
iwreq
3565+
iwreq_data
3566+
iw_scan_req
3567+
iw_statistics
3568+
iw_thrspy
35433569
j1939_filter
35443570
jrand48
35453571
key_t

src/unix/linux_like/linux/mod.rs

Lines changed: 249 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,145 @@ s! {
718718
pub salt: [::c_uchar; TLS_CIPHER_CHACHA20_POLY1305_SALT_SIZE],
719719
pub rec_seq: [::c_uchar; TLS_CIPHER_CHACHA20_POLY1305_REC_SEQ_SIZE],
720720
}
721+
722+
// linux/wireless.h
723+
724+
pub struct iw_param {
725+
pub value: __s32,
726+
pub fixed: __u8,
727+
pub disabled: __u8,
728+
pub flags: __u16,
729+
}
730+
pub struct iw_point {
731+
pub pointer: *mut ::c_void,
732+
pub length: __u16,
733+
pub flags: __u16,
734+
}
735+
pub struct iw_freq {
736+
pub m: __s32,
737+
pub e: __s16,
738+
pub i: __u8,
739+
pub flags: __u8,
740+
}
741+
pub struct iw_quality {
742+
pub qual: __u8,
743+
pub level: __u8,
744+
pub noise: __u8,
745+
pub updated: __u8,
746+
}
747+
pub struct iw_discarded {
748+
pub nwid: __u32,
749+
pub code: __u32,
750+
pub fragment: __u32,
751+
pub retries: __u32,
752+
pubmisc: __u32,
753+
}
754+
pub struct iw_missed {
755+
pub beacon: __u32,
756+
}
757+
pub struct iw_thrspy {
758+
pub addr: ::sockaddr,
759+
pub qual: iw_quality,
760+
pub low: iw_quality,
761+
pub high: iw_quality,
762+
}
763+
pub struct iw_scan_req {
764+
pub scan_type: __u8,
765+
pub essid_len: __u8,
766+
pub num_channels: __u8,
767+
pub flags: __u8,
768+
pub bssid: ::sockaddr,
769+
pub essid: [__u8; IW_ESSID_MAX_SIZE],
770+
pub min_channel_time: __u32,
771+
pub max_channel_time: __u32,
772+
pub channel_list: [iw_freq; IW_MAX_FREQUENCIES],
773+
}
774+
pub struct iw_encode_ext {
775+
pub ext_flags: __u32,
776+
pub tx_seq: [__u8; IW_ENCODE_SEQ_MAX_SIZE],
777+
pub rx_seq: [__u8; IW_ENCODE_SEQ_MAX_SIZE],
778+
pub addr: ::sockaddr,
779+
pub alg: __u16,
780+
pub key_len: __u16,
781+
pub key: [__u8;0],
782+
}
783+
pub struct iw_mlme {
784+
pub cmd: __u16,
785+
pub reason_code: __u16,
786+
pub addr: ::sockaddr,
787+
}
788+
pub struct iw_pmksa {
789+
pub cmd: __u32,
790+
pub bssid: ::sockaddr,
791+
pub pmkid: [__u8; IW_PMKID_LEN],
792+
}
793+
pub struct iw_michaelmicfailure {
794+
pub flags: __u32,
795+
pub src_addr: ::sockaddr,
796+
pub tsc: [__u8; IW_ENCODE_SEQ_MAX_SIZE],
797+
}
798+
pub struct iw_pmkid_cand {
799+
pub flags: __u32,
800+
pub index: __u32,
801+
pub bssid: ::sockaddr,
802+
}
803+
pub struct iw_statistics {
804+
pub status: __u16,
805+
pub qual: iw_quality,
806+
pub discard: iw_discarded,
807+
pub miss: iw_missed,
808+
}
809+
pub struct iw_range {
810+
pub throughput: __u32,
811+
pub min_nwid: __u32,
812+
pub max_nwid: __u32,
813+
pub old_num_channels: __u16,
814+
pub old_num_frequency: __u8,
815+
pub scan_capa: __u8,
816+
pub event_capa: [__u32; 6],
817+
pub sensitivity: __s32,
818+
pub max_qual: iw_quality,
819+
pub avg_qual: iw_quality,
820+
pub num_bitrates: __u8,
821+
pub bitrate: [__s32; IW_MAX_BITRATES],
822+
pub min_rts: __s32,
823+
pub max_rts: __s32,
824+
pub min_frag: __s32,
825+
pub max_frag: __s32,
826+
pub min_pmp: __s32,
827+
pub max_pmp: __s32,
828+
pub min_pmt: __s32,
829+
pub max_pmt: __s32,
830+
pub pmp_flags: __u16,
831+
pub pmt_flags: __u16,
832+
pub pm_capa: __u16,
833+
pub encoding_size: [__u16; IW_MAX_ENCODING_SIZES],
834+
pub num_encoding_sizes: __u8,
835+
pub max_encoding_tokens: __u8,
836+
pub encoding_login_index: __u8,
837+
pub txpower_capa: __u16,
838+
pub num_txpower: __u8,
839+
pub txpower: [__s32;IW_MAX_TXPOWER],
840+
pub we_version_compiled: __u8,
841+
pub we_version_source: __u8,
842+
pub retry_capa: __u16,
843+
pub retry_flags: __u16,
844+
pub r_time_flags: __u16,
845+
pub min_retry: __s32,
846+
pub max_retry: __s32,
847+
pub min_r_time: __s32,
848+
pub max_r_time: __s32,
849+
pub num_channels: __u16,
850+
pub num_frequency: __u8,
851+
pub freq: [iw_freq; IW_MAX_FREQUENCIES],
852+
pub enc_capa: __u32,
853+
}
854+
pub struct iw_priv_args {
855+
pub cmd: __u32,
856+
pub set_args: __u16,
857+
pub get_args: __u16,
858+
pub name: [c_char; ::IFNAMSIZ],
859+
}
721860
}
722861

723862
s_no_extra_traits! {
@@ -856,6 +995,52 @@ s_no_extra_traits! {
856995
}
857996
}
858997

998+
s_no_extra_traits! {
999+
// linux/wireless.h
1000+
#[cfg(libc_union)]
1001+
pub union iwreq_data {
1002+
pub name: [c_char; ::IFNAMSIZ],
1003+
pub essid: iw_point,
1004+
pub nwid: iw_param,
1005+
pub freq: iw_freq,
1006+
pub sens: iw_param,
1007+
pub bitrate: iw_param,
1008+
pub txpower: iw_param,
1009+
pub rts: iw_param,
1010+
pub frag: iw_param,
1011+
pub mode: __u32,
1012+
pub retry: iw_param,
1013+
pub encoding: iw_point,
1014+
pub power: iw_param,
1015+
pub qual: iw_quality,
1016+
pub ap_addr: ::sockaddr,
1017+
pub addr: ::sockaddr,
1018+
pub param: iw_param,
1019+
pub data: iw_point,
1020+
}
1021+
1022+
pub struct iw_event {
1023+
pub len: __u16,
1024+
pub cmd: __u16,
1025+
#[cfg(libc_union)]
1026+
pub u: iwreq_data,
1027+
#[cfg(not(libc_union))]
1028+
pub u: [c_char; ::IFNAMSIZ],
1029+
}
1030+
1031+
#[cfg(libc_union)]
1032+
pub union __c_anonymous_iwreq {
1033+
pub ifrn_name: [c_char; ::IFNAMSIZ],
1034+
}
1035+
1036+
pub struct iwreq {
1037+
#[cfg(libc_union)]
1038+
pub ifr_ifrn: __c_anonymous_iwreq,
1039+
#[cfg(not(libc_union))]
1040+
pub ifr_ifrn: [c_char; ::IFNAMSIZ],
1041+
pub u: iwreq_data,
1042+
}
1043+
}
8591044
s_no_extra_traits! {
8601045
// linux/net_tstamp.h
8611046
#[allow(missing_debug_implementations)]
@@ -1319,6 +1504,59 @@ cfg_if! {
13191504
self.rx_filter.hash(state);
13201505
}
13211506
}
1507+
#[cfg(libc_union)]
1508+
impl ::fmt::Debug for iwreq_data {
1509+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1510+
f.debug_struct("iwreq_data")
1511+
.field("name", unsafe { &self.name })
1512+
.field("essid", unsafe { &self.essid })
1513+
.field("nwid", unsafe { &self.nwid })
1514+
.field("freq", unsafe { &self.freq })
1515+
.field("sens", unsafe { &self.sens })
1516+
.field("bitrate", unsafe { &self.bitrate })
1517+
.field("txpower", unsafe { &self.txpower })
1518+
.field("rts", unsafe { &self.rts })
1519+
.field("frag", unsafe { &self.frag })
1520+
.field("mode", unsafe { &self.mode })
1521+
.field("retry", unsafe { &self.retry })
1522+
.field("encoding", unsafe { &self.encoding })
1523+
.field("power", unsafe { &self.power })
1524+
.field("qual", unsafe { &self.qual })
1525+
.field("ap_addr", unsafe { &self.ap_addr })
1526+
.field("addr", unsafe { &self.addr })
1527+
.field("param", unsafe { &self.param })
1528+
.field("data", unsafe { &self.data })
1529+
.finish()
1530+
}
1531+
}
1532+
1533+
impl ::fmt::Debug for iw_event {
1534+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1535+
f.debug_struct("iw_event")
1536+
.field("len", &self.len )
1537+
.field("cmd", &self.cmd )
1538+
.field("u", &self.u )
1539+
.finish()
1540+
}
1541+
}
1542+
1543+
#[cfg(libc_union)]
1544+
impl ::fmt::Debug for __c_anonymous_iwreq {
1545+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1546+
f.debug_struct("__c_anonymous_iwreq")
1547+
.field("ifrn_name", unsafe { &self.ifrn_name })
1548+
.finish()
1549+
}
1550+
}
1551+
1552+
impl ::fmt::Debug for iwreq {
1553+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1554+
f.debug_struct("iwreq")
1555+
.field("ifr_ifrn", &self.ifr_ifrn )
1556+
.field("u", &self.u )
1557+
.finish()
1558+
}
1559+
}
13221560
}
13231561
}
13241562

@@ -3165,6 +3403,9 @@ pub const IW_ENC_CAPA_CIPHER_TKIP: ::c_ulong = 0x00000004;
31653403
pub const IW_ENC_CAPA_CIPHER_CCMP: ::c_ulong = 0x00000008;
31663404
pub const IW_ENC_CAPA_4WAY_HANDSHAKE: ::c_ulong = 0x00000010;
31673405

3406+
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);
3407+
pub const IW_EVENT_CAPA_K_1: c_ulong = 0x400; // W_EVENT_CAPA_MASK(0x8B2A);
3408+
31683409
pub const IW_PMKSA_ADD: usize = 1;
31693410
pub const IW_PMKSA_REMOVE: usize = 2;
31703411
pub const IW_PMKSA_FLUSH: usize = 3;
@@ -3175,8 +3416,13 @@ pub const IW_PMKID_CAND_PREAUTH: ::c_ulong = 0x00000001;
31753416

31763417
pub const IW_EV_LCP_PK_LEN: usize = 4;
31773418

3178-
pub const IW_EV_CHAR_PK_LEN: usize = IW_EV_LCP_PK_LEN + ::IFNAMSIZ;
3179-
pub const IW_EV_POINT_PK_LEN: usize = IW_EV_LCP_PK_LEN + 4;
3419+
pub const IW_EV_CHAR_PK_LEN: usize = 20; // IW_EV_LCP_PK_LEN + ::IFNAMSIZ;
3420+
pub const IW_EV_UINT_PK_LEN: usize = 8; // IW_EV_LCP_PK_LEN + ::mem::size_of::<u32>();
3421+
pub const IW_EV_FREQ_PK_LEN: usize = 12; // IW_EV_LCP_PK_LEN + ::mem::size_of::<iw_freq>();
3422+
pub const IW_EV_PARAM_PK_LEN: usize = 12; // IW_EV_LCP_PK_LEN + ::mem::size_of::<iw_param>();
3423+
pub const IW_EV_ADDR_PK_LEN: usize = 20; // IW_EV_LCP_PK_LEN + ::mem::size_of::<::sockaddr>();
3424+
pub const IW_EV_QUAL_PK_LEN: usize = 8; // IW_EV_LCP_PK_LEN + ::mem::size_of::<iw_quality>();
3425+
pub const IW_EV_POINT_PK_LEN: usize = 8; // IW_EV_LCP_PK_LEN + 4;
31803426

31813427
pub const IPTOS_TOS_MASK: u8 = 0x1E;
31823428
pub const IPTOS_PREC_MASK: u8 = 0xE0;
@@ -5505,6 +5751,7 @@ cfg_if! {
55055751
}
55065752

55075753
mod arch;
5754+
55085755
pub use self::arch::*;
55095756

55105757
cfg_if! {

0 commit comments

Comments
 (0)