Skip to content

Commit 1c67e33

Browse files
committed
Auto merge of #2598 - devnexen:linux_bpf_upd, r=Amanieu
linux BPF filters operands
2 parents e81e068 + 75b6904 commit 1c67e33

File tree

4 files changed

+189
-0
lines changed

4 files changed

+189
-0
lines changed

libc-test/build.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1563,6 +1563,7 @@ fn test_android(target: &str) {
15631563
"linux/elf.h",
15641564
"linux/errqueue.h",
15651565
"linux/falloc.h",
1566+
"linux/filter.h",
15661567
"linux/futex.h",
15671568
"linux/fs.h",
15681569
"linux/genetlink.h",
@@ -2815,6 +2816,7 @@ fn test_linux(target: &str) {
28152816
"linux/dccp.h",
28162817
"linux/errqueue.h",
28172818
"linux/falloc.h",
2819+
"linux/filter.h",
28182820
"linux/fs.h",
28192821
"linux/futex.h",
28202822
"linux/genetlink.h",

libc-test/semver/linux-aarch64.txt

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,65 @@ B2500000
22
B3000000
33
B3500000
44
B4000000
5+
BPF_ABS
6+
BPF_ADD
7+
BPF_ALU
8+
BPF_B
9+
BPF_DIV
10+
BPF_H
11+
BPF_IMM
12+
BPF_IND
13+
BPF_JA
14+
BPF_JEQ
15+
BPF_JGE
16+
BPF_JGT
17+
BPF_JMP
18+
BPF_JUMP
19+
BPF_K
20+
BPF_LD
21+
BPF_LDX
22+
BPF_LEN
23+
BPF_LL_OFF
24+
BPF_MEM
25+
BPF_MISC
26+
BPF_MISCOP
27+
BPF_MOD
28+
BPF_MSH
29+
BPF_NEG
30+
BPF_NET_OFF
31+
BPF_RET
32+
BPF_RVAL
33+
BPF_ST
34+
BPF_STMT
35+
BPF_STX
36+
BPF_SUB
37+
BPF_W
38+
BPF_X
39+
BPF_XOR
540
CIBAUD
641
MADV_SOFT_OFFLINE
742
MAP_SYNC
843
SIGSTKFLT
944
SIGUNUSED
45+
SKF_AD_ALU_XOR_X
46+
SKF_AD_CPU
47+
SKF_AD_HATYPE
48+
SKF_AD_MARK
49+
SKF_AD_MAX
50+
SKF_AD_NLATTR
51+
SKF_AD_NLATTR_NEST
52+
SKF_AD_OFF
53+
SKF_AD_PAY_OFFSET
54+
SKF_AD_PKTTYPE
55+
SKF_AD_PROTOCOL
56+
SKF_AD_QUEUE
57+
SKF_AD_RANDOM
58+
SKF_AD_RXHASH
59+
SKF_AD_VLAN_TAG
60+
SKF_AD_VLAN_TAG_PRESENT
61+
SKF_AD_VLAN_TPID
62+
SKF_LL_OFF
63+
SKF_NET_OFF
1064
SO_PRIORITY
1165
SO_PROTOCOL
1266
SYS_accept

libc-test/semver/linux-x86_64.txt

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,41 @@ B2500000
22
B3000000
33
B3500000
44
B4000000
5+
BPF_ABS
6+
BPF_ADD
7+
BPF_ALU
8+
BPF_B
9+
BPF_DIV
10+
BPF_H
11+
BPF_IMM
12+
BPF_IND
13+
BPF_JA
14+
BPF_JEQ
15+
BPF_JGE
16+
BPF_JGT
17+
BPF_JMP
18+
BPF_JUMP
19+
BPF_K
20+
BPF_LD
21+
BPF_LDX
22+
BPF_LEN
23+
BPF_LL_OFF
24+
BPF_MEM
25+
BPF_MISC
26+
BPF_MISCOP
27+
BPF_MOD
28+
BPF_MSH
29+
BPF_NEG
30+
BPF_NET_OFF
31+
BPF_RET
32+
BPF_RVAL
33+
BPF_ST
34+
BPF_STMT
35+
BPF_STX
36+
BPF_SUB
37+
BPF_W
38+
BPF_X
39+
BPF_XOR
540
CIBAUD
641
CS
742
DS
@@ -22,6 +57,25 @@ REG_ERR
2257
REG_TRAPNO
2358
SIGSTKFLT
2459
SIGUNUSED
60+
SKF_AD_ALU_XOR_X
61+
SKF_AD_CPU
62+
SKF_AD_HATYPE
63+
SKF_AD_MARK
64+
SKF_AD_MAX
65+
SKF_AD_NLATTR
66+
SKF_AD_NLATTR_NEST
67+
SKF_AD_OFF
68+
SKF_AD_PAY_OFFSET
69+
SKF_AD_PKTTYPE
70+
SKF_AD_PROTOCOL
71+
SKF_AD_QUEUE
72+
SKF_AD_RANDOM
73+
SKF_AD_RXHASH
74+
SKF_AD_VLAN_TAG
75+
SKF_AD_VLAN_TAG_PRESENT
76+
SKF_AD_VLAN_TPID
77+
SKF_LL_OFF
78+
SKF_NET_OFF
2579
SO_BSDCOMPAT
2680
SO_NO_CHECK
2781
SO_PRIORITY

src/unix/linux_like/linux/mod.rs

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1825,6 +1825,69 @@ pub const MFD_HUGETLB: ::c_uint = 0x0004;
18251825
pub const CLOSE_RANGE_UNSHARE: ::c_uint = 1 << 1;
18261826
pub const CLOSE_RANGE_CLOEXEC: ::c_uint = 1 << 2;
18271827

1828+
// linux/filter.h
1829+
pub const SKF_AD_OFF: ::c_int = -0x1000;
1830+
pub const SKF_AD_PROTOCOL: ::c_int = 0;
1831+
pub const SKF_AD_PKTTYPE: ::c_int = 4;
1832+
pub const SKF_AD_IFINDEX: ::c_int = 8;
1833+
pub const SKF_AD_NLATTR: ::c_int = 12;
1834+
pub const SKF_AD_NLATTR_NEST: ::c_int = 16;
1835+
pub const SKF_AD_MARK: ::c_int = 20;
1836+
pub const SKF_AD_QUEUE: ::c_int = 24;
1837+
pub const SKF_AD_HATYPE: ::c_int = 28;
1838+
pub const SKF_AD_RXHASH: ::c_int = 32;
1839+
pub const SKF_AD_CPU: ::c_int = 36;
1840+
pub const SKF_AD_ALU_XOR_X: ::c_int = 40;
1841+
pub const SKF_AD_VLAN_TAG: ::c_int = 44;
1842+
pub const SKF_AD_VLAN_TAG_PRESENT: ::c_int = 48;
1843+
pub const SKF_AD_PAY_OFFSET: ::c_int = 52;
1844+
pub const SKF_AD_RANDOM: ::c_int = 56;
1845+
pub const SKF_AD_VLAN_TPID: ::c_int = 60;
1846+
pub const SKF_AD_MAX: ::c_int = 64;
1847+
pub const SKF_NET_OFF: ::c_int = -0x100000;
1848+
pub const SKF_LL_OFF: ::c_int = -0x200000;
1849+
pub const BPF_NET_OFF: ::c_int = SKF_NET_OFF;
1850+
pub const BPF_LL_OFF: ::c_int = SKF_LL_OFF;
1851+
pub const BPF_MEMWORDS: ::c_int = 16;
1852+
pub const BPF_MAXINSNS: ::c_int = 4096;
1853+
1854+
// linux/bpf_common.h
1855+
pub const BPF_LD: ::__u32 = 0x00;
1856+
pub const BPF_LDX: ::__u32 = 0x01;
1857+
pub const BPF_ST: ::__u32 = 0x02;
1858+
pub const BPF_STX: ::__u32 = 0x03;
1859+
pub const BPF_ALU: ::__u32 = 0x04;
1860+
pub const BPF_JMP: ::__u32 = 0x05;
1861+
pub const BPF_RET: ::__u32 = 0x06;
1862+
pub const BPF_MISC: ::__u32 = 0x07;
1863+
pub const BPF_W: ::__u32 = 0x00;
1864+
pub const BPF_H: ::__u32 = 0x08;
1865+
pub const BPF_B: ::__u32 = 0x10;
1866+
pub const BPF_IMM: ::__u32 = 0x00;
1867+
pub const BPF_ABS: ::__u32 = 0x20;
1868+
pub const BPF_IND: ::__u32 = 0x40;
1869+
pub const BPF_MEM: ::__u32 = 0x60;
1870+
pub const BPF_LEN: ::__u32 = 0x80;
1871+
pub const BPF_MSH: ::__u32 = 0xa0;
1872+
pub const BPF_ADD: ::__u32 = 0x00;
1873+
pub const BPF_SUB: ::__u32 = 0x10;
1874+
pub const BPF_MUL: ::__u32 = 0x20;
1875+
pub const BPF_DIV: ::__u32 = 0x30;
1876+
pub const BPF_OR: ::__u32 = 0x40;
1877+
pub const BPF_AND: ::__u32 = 0x50;
1878+
pub const BPF_LSH: ::__u32 = 0x60;
1879+
pub const BPF_RSH: ::__u32 = 0x70;
1880+
pub const BPF_NEG: ::__u32 = 0x80;
1881+
pub const BPF_MOD: ::__u32 = 0x90;
1882+
pub const BPF_XOR: ::__u32 = 0xa0;
1883+
pub const BPF_JA: ::__u32 = 0x00;
1884+
pub const BPF_JEQ: ::__u32 = 0x10;
1885+
pub const BPF_JGT: ::__u32 = 0x20;
1886+
pub const BPF_JGE: ::__u32 = 0x30;
1887+
pub const BPF_JSET: ::__u32 = 0x40;
1888+
pub const BPF_K: ::__u32 = 0x00;
1889+
pub const BPF_X: ::__u32 = 0x08;
1890+
18281891
// linux/openat2.h
18291892
pub const RESOLVE_NO_XDEV: ::__u64 = 0x01;
18301893
pub const RESOLVE_NO_MAGICLINKS: ::__u64 = 0x02;
@@ -3221,6 +3284,22 @@ f! {
32213284
pub fn SO_EE_OFFENDER(ee: *const ::sock_extended_err) -> *mut ::sockaddr {
32223285
ee.offset(1) as *mut ::sockaddr
32233286
}
3287+
3288+
pub fn BPF_RVAL(code: ::__u32) -> ::__u32 {
3289+
code & 0x18
3290+
}
3291+
3292+
pub fn BPF_MISCOP(code: ::__u32) -> ::__u32 {
3293+
code & 0xf8
3294+
}
3295+
3296+
pub fn BPF_STMT(code: ::__u16, k: ::__u32) -> sock_filter {
3297+
sock_filter{code: code, jt: 0, jf: 0, k: k}
3298+
}
3299+
3300+
pub fn BPF_JUMP(code: ::__u16, k: ::__u32, jt: ::__u8, jf: ::__u8) -> sock_filter {
3301+
sock_filter{code: code, jt: jt, jf: jf, k: k}
3302+
}
32243303
}
32253304

32263305
cfg_if! {

0 commit comments

Comments
 (0)