Skip to content

Commit 7634492

Browse files
rafaelingtgross35
authored andcommitted
qnx: add missing BPF and ifreq structures
1 parent b4995f3 commit 7634492

5 files changed

Lines changed: 134 additions & 1 deletion

File tree

src/new/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,9 @@ cfg_if! {
203203
pub use utmpx_::*;
204204
} else if #[cfg(target_os = "openbsd")] {
205205
pub use sys::ipc::*;
206+
} else if #[cfg(target_os = "nto")] {
207+
pub use net::bpf::*;
208+
pub use net::if_::*;
206209
}
207210
}
208211

src/new/nto/mod.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,8 @@
22
// FIXME(nto): link to manpages needed.
33

44
pub(crate) mod unistd;
5+
6+
pub(crate) mod net {
7+
pub(crate) mod bpf;
8+
pub(crate) mod if_;
9+
}

src/new/nto/net/bpf.rs

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
use crate::bpf_insn;
2+
3+
pub const BPF_LD: u16 = 0x00;
4+
pub const BPF_LDX: u16 = 0x01;
5+
pub const BPF_ST: u16 = 0x02;
6+
pub const BPF_STX: u16 = 0x03;
7+
pub const BPF_ALU: u16 = 0x04;
8+
pub const BPF_JMP: u16 = 0x05;
9+
pub const BPF_RET: u16 = 0x06;
10+
pub const BPF_MISC: u16 = 0x07;
11+
pub const BPF_W: u16 = 0x00;
12+
pub const BPF_H: u16 = 0x08;
13+
pub const BPF_B: u16 = 0x10;
14+
pub const BPF_IMM: u16 = 0x00;
15+
pub const BPF_ABS: u16 = 0x20;
16+
pub const BPF_IND: u16 = 0x40;
17+
pub const BPF_MEM: u16 = 0x60;
18+
pub const BPF_LEN: u16 = 0x80;
19+
pub const BPF_MSH: u16 = 0xa0;
20+
pub const BPF_ADD: u16 = 0x00;
21+
pub const BPF_SUB: u16 = 0x10;
22+
pub const BPF_MUL: u16 = 0x20;
23+
pub const BPF_DIV: u16 = 0x30;
24+
pub const BPF_OR: u16 = 0x40;
25+
pub const BPF_AND: u16 = 0x50;
26+
pub const BPF_LSH: u16 = 0x60;
27+
pub const BPF_RSH: u16 = 0x70;
28+
pub const BPF_NEG: u16 = 0x80;
29+
pub const BPF_MOD: u16 = 0x90;
30+
pub const BPF_XOR: u16 = 0xa0;
31+
pub const BPF_JA: u16 = 0x00;
32+
pub const BPF_JEQ: u16 = 0x10;
33+
pub const BPF_JGT: u16 = 0x20;
34+
pub const BPF_JGE: u16 = 0x30;
35+
pub const BPF_JSET: u16 = 0x40;
36+
pub const BPF_K: u16 = 0x00;
37+
pub const BPF_X: u16 = 0x08;
38+
pub const BPF_A: u16 = 0x10;
39+
pub const BPF_TAX: u16 = 0x00;
40+
pub const BPF_TXA: u16 = 0x80;
41+
42+
f! {
43+
pub fn BPF_CLASS(code: u32) -> u32 {
44+
code & 0x07
45+
}
46+
47+
pub fn BPF_SIZE(code: u32) -> u32 {
48+
code & 0x18
49+
}
50+
51+
pub fn BPF_MODE(code: u32) -> u32 {
52+
code & 0xe0
53+
}
54+
55+
pub fn BPF_OP(code: u32) -> u32 {
56+
code & 0xf0
57+
}
58+
59+
pub fn BPF_SRC(code: u32) -> u32 {
60+
code & 0x08
61+
}
62+
63+
pub fn BPF_RVAL(code: u32) -> u32 {
64+
code & 0x18
65+
}
66+
67+
pub fn BPF_MISCOP(code: u32) -> u32 {
68+
code & 0xf8
69+
}
70+
71+
pub fn BPF_STMT(code: u16, k: u32) -> bpf_insn {
72+
bpf_insn {
73+
code,
74+
jt: 0,
75+
jf: 0,
76+
k,
77+
}
78+
}
79+
80+
pub fn BPF_JUMP(code: u16, k: u32, jt: u8, jf: u8) -> bpf_insn {
81+
bpf_insn { code, jt, jf, k }
82+
}
83+
}

src/new/nto/net/if_.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
use crate::prelude::*;
2+
3+
s_no_extra_traits! {
4+
pub union __c_anonymous_ifr_ifru {
5+
pub ifru_addr: crate::sockaddr,
6+
pub ifru_dstaddr: crate::sockaddr,
7+
pub ifru_broadaddr: crate::sockaddr,
8+
pub ifru_buffer: ifreq_buffer,
9+
pub ifru_flags: [c_short; 2],
10+
pub ifru_index: c_short,
11+
pub ifru_jid: c_int,
12+
pub ifru_metric: c_int,
13+
pub ifru_mtu: c_int,
14+
pub ifru_phys: c_int,
15+
pub ifru_media: c_int,
16+
pub ifru_data: *mut c_char,
17+
pub ifru_cap: [c_int; 2],
18+
pub ifru_fib: c_uint,
19+
pub ifru_vlan_pcp: c_uchar,
20+
}
21+
22+
pub struct ifreq {
23+
/// if name, e.g. "en0"
24+
pub ifr_name: [c_char; crate::IFNAMSIZ],
25+
pub ifr_ifru: __c_anonymous_ifr_ifru,
26+
}
27+
28+
pub struct ifreq_buffer {
29+
pub length: size_t,
30+
pub buffer: *mut c_void,
31+
}
32+
}

src/unix/nto/mod.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -876,8 +876,18 @@ pub const MS_SYNC: c_int = 2;
876876

877877
pub const SCM_RIGHTS: c_int = 0x01;
878878
pub const SCM_TIMESTAMP: c_int = 0x02;
879+
880+
// QNX Network Stack Versioning:
881+
//
882+
// The `if` block targets the legacy `io-pkt` stack.
883+
// - target_env = "nto70": QNX 7.0
884+
// - target_env = "nto71": Standard QNX 7.1 (default legacy stack)
885+
//
886+
// The `else` block targets the modern `io-sock` stack.
887+
// - target_env = "nto71_iosock": QNX 7.1 with the optional new stack
888+
// - target_env = "nto80": QNX 8.0
879889
cfg_if! {
880-
if #[cfg(not(target_env = "nto71_iosock"))] {
890+
if #[cfg(any(target_env = "nto70", target_env = "nto71"))] {
881891
pub const SCM_CREDS: c_int = 0x04;
882892
pub const IFF_NOTRAILERS: c_int = 0x00000020;
883893
pub const AF_INET6: c_int = 24;

0 commit comments

Comments
 (0)