code wiki / _hdl_build / _pe_dchan_route.nx
_pe_dchan_route.nx source
↩ module page · 57 lines · 3439 B
1// _pe_dchan_route.nx -- X-ROOM-DC-002 rung-2 INTEGRATION: client-side private routing + ordering
2// over the nx_signaling_v2 DUMB BROADCAST relay (the relay forwards to everyone; PRIVACY is achieved
3// CLIENT-SIDE by the recipient filter). Two ACTIONS:
4// dr_route(to_id, my_id) -> 1 accept iff the frame is addressed to me, else 0 ignore.
5// dr_seq_ok(prev, new) -> 1 iff per-from seq is strictly monotonic (ordered; rejects replay/regress).
6// Self-validating E2E gate (3 peers A=1,B=2,C=3; A sends a D frame to B): B ACCEPTS, C IGNORES
7// (private achieved on a broadcast relay) + a monotonic per-from seq stream is accepted while a
8// regression is rejected (neg-control = the ordering check actually discriminates, no false-green).
9// FOUNDED on _pe_dchan (frame layer, DONE) + the DC-003 reliability data plane (_pe_dchan_reorder).
10import "nx_syscalls.nx"
11
12func rt_w(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 }
13func rt_n(fd: i64, v: i64) -> i64 {
14 let bb: *u8 = sys_mmap(28); var m: i64 = v; if m < 0 { sys_write(fd, "-" as *u8, 1); m = 0 - m }
15 let t: *u8 = sys_mmap(28); var k: i64 = 0; if m == 0 { t[0] = 48 as u8; k = 1 }
16 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
17 var i: i64 = 0; while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } sys_write(fd, bb, k); return 0
18}
19// accept iff addressed to me (the client-side privacy filter on a broadcast relay).
20func dr_route(to_id: i64, my_id: i64) -> i64 { if to_id == my_id { return 1 } return 0 }
21// per-from ordering: strictly monotonic seq (rejects replay/regression/reorder at the routing layer).
22func dr_seq_ok(prev: i64, new: i64) -> i64 { if new > prev { return 1 } return 0 }
23func main(argc: i64, argv: *i64) -> i64 {
24 let A: i64 = 1
25 let B: i64 = 2
26 let C: i64 = 3
27 // A sends a D frame addressed to B (to_id = B). On the broadcast relay every peer sees it.
28 let to_id: i64 = B
29 var route_ok: i64 = 1
30 if dr_route(to_id, B) != 1 { route_ok = 0 } // B: accept (to == my-id)
31 if dr_route(to_id, C) != 0 { route_ok = 0 } // C: ignore (private achieved)
32 if dr_route(to_id, A) != 0 { route_ok = 0 } // A: not its own delivery target
33
34 // per-from seq ordering: an increasing stream is accepted; a regression/replay is rejected.
35 var ord_ok: i64 = 1
36 if dr_seq_ok(0, 1) != 1 { ord_ok = 0 }
37 if dr_seq_ok(1, 2) != 1 { ord_ok = 0 }
38 if dr_seq_ok(2, 3) != 1 { ord_ok = 0 }
39 // neg-control: a backward seq (replay/regress) MUST be rejected.
40 var neg_ok: i64 = 0
41 if dr_seq_ok(3, 2) == 0 { neg_ok = 1 }
42 if dr_seq_ok(3, 3) == 0 { if neg_ok == 1 { neg_ok = 1 } else { neg_ok = 0 } } // equal = not strictly monotonic
43
44 let ok: i64 = route_ok * ord_ok * neg_ok
45 rt_w(1, "DCHAN-ROUTE route_ok=" as *u8); rt_n(1, route_ok)
46 rt_w(1, " ord_ok=" as *u8); rt_n(1, ord_ok); rt_w(1, " neg_ok=" as *u8); rt_n(1, neg_ok); rt_w(1, "\n" as *u8)
47 let lf: i64 = sys_openat_append("knowledge/status/dchan_route.log" as *u8, 420)
48 if lf >= 0 {
49 rt_w(lf, "DCHAN-ROUTE X-ROOM-DC-002 route_ok=" as *u8); rt_n(lf, route_ok)
50 rt_w(lf, " ord_ok=" as *u8); rt_n(lf, ord_ok); rt_w(lf, " neg_ok=" as *u8); rt_n(lf, neg_ok)
51 if ok == 1 { rt_w(lf, " verdict=GREEN\n" as *u8) } else { rt_w(lf, " verdict=RED\n" as *u8) }
52 sys_close(lf)
53 }
54 if ok == 1 { sys_exit(0) }
55 sys_exit(1)
56 return 1
57}