Skip to content

Commit f1b2a57

Browse files
committed
qnx: add missing BPF and ifreq structures
1 parent ed6645d commit f1b2a57

File tree

1 file changed

+114
-2
lines changed

1 file changed

+114
-2
lines changed

src/unix/nto/mod.rs

Lines changed: 114 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ pub type sem_t = sync_t;
7373
pub type nl_item = c_int;
7474

7575
extern_ty! {
76-
pub enum timezone {}
76+
pub enum timezone {}
7777
}
7878

7979
s! {
@@ -668,6 +668,10 @@ s! {
668668
pub uc_stack: stack_t,
669669
pub uc_mcontext: mcontext_t,
670670
}
671+
pub struct ifreq_buffer {
672+
pub length: size_t,
673+
pub buffer: *mut c_void,
674+
}
671675
}
672676

673677
s_no_extra_traits! {
@@ -794,6 +798,35 @@ s_no_extra_traits! {
794798
pub __owner: c_uint,
795799
pub __spare: c_uint,
796800
}
801+
802+
pub union __c_anonymous_ifr_ifru {
803+
pub ifru_addr: crate::sockaddr,
804+
pub ifru_dstaddr: crate::sockaddr,
805+
pub ifru_broadaddr: crate::sockaddr,
806+
pub ifru_buffer: ifreq_buffer,
807+
pub ifru_flags: [c_short; 2],
808+
pub ifru_index: c_short,
809+
pub ifru_jid: c_int,
810+
pub ifru_metric: c_int,
811+
pub ifru_mtu: c_int,
812+
pub ifru_phys: c_int,
813+
pub ifru_media: c_int,
814+
pub ifru_data: *mut c_char,
815+
pub ifru_cap: [c_int; 2],
816+
pub ifru_fib: c_uint,
817+
pub ifru_vlan_pcp: c_uchar,
818+
}
819+
820+
pub struct ifreq {
821+
/// if name, e.g. "en0"
822+
pub ifr_name: [c_char; crate::IFNAMSIZ],
823+
pub ifr_ifru: __c_anonymous_ifr_ifru,
824+
}
825+
826+
pub union __c_anonymous_ifc_ifcu {
827+
pub ifcu_buf: *mut c_char,
828+
pub ifcu_req: *mut ifreq,
829+
}
797830
}
798831

799832
cfg_if! {
@@ -1089,7 +1122,7 @@ pub const MS_SYNC: c_int = 2;
10891122
pub const SCM_RIGHTS: c_int = 0x01;
10901123
pub const SCM_TIMESTAMP: c_int = 0x02;
10911124
cfg_if! {
1092-
if #[cfg(not(target_env = "nto71_iosock"))] {
1125+
if #[cfg(not(any(target_env = "nto71_iosock", target_env = "nto80")))] {
10931126
pub const SCM_CREDS: c_int = 0x04;
10941127
pub const IFF_NOTRAILERS: c_int = 0x00000020;
10951128
pub const AF_INET6: c_int = 24;
@@ -2305,6 +2338,44 @@ pub const BIOCSRTIMEOUT: c_int = -2146418067;
23052338
pub const BIOCVERSION: c_int = 1074020977;
23062339

23072340
pub const BPF_ALIGNMENT: usize = size_of::<c_long>();
2341+
pub const BPF_LD: u16 = 0x00;
2342+
pub const BPF_LDX: u16 = 0x01;
2343+
pub const BPF_ST: u16 = 0x02;
2344+
pub const BPF_STX: u16 = 0x03;
2345+
pub const BPF_ALU: u16 = 0x04;
2346+
pub const BPF_JMP: u16 = 0x05;
2347+
pub const BPF_RET: u16 = 0x06;
2348+
pub const BPF_MISC: u16 = 0x07;
2349+
pub const BPF_W: u16 = 0x00;
2350+
pub const BPF_H: u16 = 0x08;
2351+
pub const BPF_B: u16 = 0x10;
2352+
pub const BPF_IMM: u16 = 0x00;
2353+
pub const BPF_ABS: u16 = 0x20;
2354+
pub const BPF_IND: u16 = 0x40;
2355+
pub const BPF_MEM: u16 = 0x60;
2356+
pub const BPF_LEN: u16 = 0x80;
2357+
pub const BPF_MSH: u16 = 0xa0;
2358+
pub const BPF_ADD: u16 = 0x00;
2359+
pub const BPF_SUB: u16 = 0x10;
2360+
pub const BPF_MUL: u16 = 0x20;
2361+
pub const BPF_DIV: u16 = 0x30;
2362+
pub const BPF_OR: u16 = 0x40;
2363+
pub const BPF_AND: u16 = 0x50;
2364+
pub const BPF_LSH: u16 = 0x60;
2365+
pub const BPF_RSH: u16 = 0x70;
2366+
pub const BPF_NEG: u16 = 0x80;
2367+
pub const BPF_MOD: u16 = 0x90;
2368+
pub const BPF_XOR: u16 = 0xa0;
2369+
pub const BPF_JA: u16 = 0x00;
2370+
pub const BPF_JEQ: u16 = 0x10;
2371+
pub const BPF_JGT: u16 = 0x20;
2372+
pub const BPF_JGE: u16 = 0x30;
2373+
pub const BPF_JSET: u16 = 0x40;
2374+
pub const BPF_K: u16 = 0x00;
2375+
pub const BPF_X: u16 = 0x08;
2376+
pub const BPF_A: u16 = 0x10;
2377+
pub const BPF_TAX: u16 = 0x00;
2378+
pub const BPF_TXA: u16 = 0x80;
23082379
pub const CHAR_BIT: usize = 8;
23092380
pub const CODESET: crate::nl_item = 1;
23102381
pub const CRNCYSTR: crate::nl_item = 55;
@@ -2695,6 +2766,47 @@ f! {
26952766
let ngrps = if ngrps > 0 { ngrps - 1 } else { 0 };
26962767
size_of::<sockcred>() + size_of::<crate::gid_t>() * ngrps
26972768
}
2769+
2770+
pub fn BPF_CLASS(code: u32) -> u32 {
2771+
code & 0x07
2772+
}
2773+
2774+
pub fn BPF_SIZE(code: u32) -> u32 {
2775+
code & 0x18
2776+
}
2777+
2778+
pub fn BPF_MODE(code: u32) -> u32 {
2779+
code & 0xe0
2780+
}
2781+
2782+
pub fn BPF_OP(code: u32) -> u32 {
2783+
code & 0xf0
2784+
}
2785+
2786+
pub fn BPF_SRC(code: u32) -> u32 {
2787+
code & 0x08
2788+
}
2789+
2790+
pub fn BPF_RVAL(code: u32) -> u32 {
2791+
code & 0x18
2792+
}
2793+
2794+
pub fn BPF_MISCOP(code: u32) -> u32 {
2795+
code & 0xf8
2796+
}
2797+
2798+
pub fn BPF_STMT(code: u16, k: u32) -> bpf_insn {
2799+
bpf_insn {
2800+
code,
2801+
jt: 0,
2802+
jf: 0,
2803+
k,
2804+
}
2805+
}
2806+
2807+
pub fn BPF_JUMP(code: u16, k: u32, jt: u8, jf: u8) -> bpf_insn {
2808+
bpf_insn { code, jt, jf, k }
2809+
}
26982810
}
26992811

27002812
safe_f! {

0 commit comments

Comments
 (0)