code wiki / (root) / nx_nft_read_gate.nx

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}