nx_nft_read_gate.nx source
↩ module page · 30 lines · 1806 B
1// Native contract regression for the Linux x86-64 legacy NAT table reader.
2// Fixture fields follow the kernel UAPI; this never opens a socket or mutates networking.
3import "nx_nft_read.nx"
4import "nx_gate_verdict.nx"
5func ng_u16(b:*u8,o:i64,v:i64)->i64 { b[o]=(v&255) as u8; b[o+1]=((v>>8)&255) as u8; return 0 }
6func ng_fixture()->*u8 {
7 let b:*u8=sys_mmap(192)
8 ng_u16(b,88,144); ng_u16(b,90,184)
9 ng_u16(b,112,32); ng_u16(b,144,40)
10 return b
11}
12func main()->i64 {
13 let ctr:*i64=gv_ctr()
14 let b:*u8=ng_fixture()
15 gv_check_eq("valid" as *u8,nr_validate(b,184,1),0,ctr)
16 gv_check_eq("short_header" as *u8,nr_validate(b,111,1),1,ctr)
17 ng_u16(b,90,0); gv_check_eq("zero_stride" as *u8,nr_validate(b,184,1),2,ctr); ng_u16(b,90,184)
18 gv_check_eq("truncated_entry" as *u8,nr_validate(b,183,1),3,ctr)
19 ng_u16(b,90,183); gv_check_eq("unaligned_entry" as *u8,nr_validate(b,184,1),4,ctr); ng_u16(b,90,184)
20 ng_u16(b,88,0); gv_check_eq("target_before_header" as *u8,nr_validate(b,184,1),5,ctr)
21 ng_u16(b,88,160); gv_check_eq("target_outside_entry" as *u8,nr_validate(b,184,1),6,ctr); ng_u16(b,88,144)
22 ng_u16(b,144,0); gv_check_eq("zero_target" as *u8,nr_validate(b,184,1),7,ctr)
23 ng_u16(b,144,32); gv_check_eq("target_size_mismatch" as *u8,nr_validate(b,184,1),8,ctr); ng_u16(b,144,40)
24 ng_u16(b,112,0); gv_check_eq("zero_match" as *u8,nr_validate(b,184,1),10,ctr)
25 ng_u16(b,112,40); gv_check_eq("match_overrun" as *u8,nr_validate(b,184,1),11,ctr); ng_u16(b,112,32)
26 gv_check_eq("count_mismatch" as *u8,nr_validate(b,184,2),13,ctr)
27 gv_check_eq("empty_table" as *u8,nr_validate(b,0,0),0,ctr)
28 let rc:i64=gv_verdict("NAT-READER" as *u8,ctr,"Linux x86-64 entry validation; live routing requires a separate inspection" as *u8)
29 sys_exit(rc); return rc
30}