@salang/sa 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/bin/sa.js +19 -1
  2. package/package.json +8 -7
  3. package/sa_std/alloc/layout.sal +12 -0
  4. package/sa_std/alloc/prelude.sa +1 -0
  5. package/sa_std/alloc/prelude.sal +1 -0
  6. package/sa_std/alloc/string.sa +3 -0
  7. package/sa_std/alloc/vec.sa +684 -0
  8. package/sa_std/alloc/vec.sal +4 -0
  9. package/sa_std/any.sa +130 -0
  10. package/sa_std/any.sal +23 -0
  11. package/sa_std/array.sa +1876 -0
  12. package/sa_std/ascii.sa +2 -0
  13. package/sa_std/ascii.sal +1 -0
  14. package/sa_std/async.sla +116 -0
  15. package/sa_std/binary_heap.sa +3003 -0
  16. package/sa_std/binary_heap.sal +7 -0
  17. package/sa_std/borrow.sa +171 -0
  18. package/sa_std/borrow.sal +13 -0
  19. package/sa_std/btree_map.sa +2210 -0
  20. package/sa_std/btree_map.sal +11 -0
  21. package/sa_std/btree_set.sa +1072 -0
  22. package/sa_std/btree_set.sal +6 -0
  23. package/sa_std/char.sa +1309 -0
  24. package/sa_std/char.sal +50 -0
  25. package/sa_std/cmp.sa +554 -0
  26. package/sa_std/cmp.sal +14 -0
  27. package/sa_std/collections/binary_heap.sa +1 -0
  28. package/sa_std/collections/btree_map.sa +1 -0
  29. package/sa_std/collections/btree_set.sa +1 -0
  30. package/sa_std/collections/hashmap.sa +1 -0
  31. package/sa_std/collections/hashset.sa +1 -0
  32. package/sa_std/collections/linked_list.sa +1120 -0
  33. package/sa_std/collections/linked_list.sal +10 -0
  34. package/sa_std/collections/prelude.sa +7 -0
  35. package/sa_std/collections/prelude.sal +1 -0
  36. package/sa_std/collections/vec_deque.sa +1 -0
  37. package/sa_std/collections.sal +13 -0
  38. package/sa_std/convert.sa +1115 -0
  39. package/sa_std/convert.sal +24 -0
  40. package/sa_std/core/arc.sa +233 -0
  41. package/sa_std/core/arc.sal +4 -0
  42. package/sa_std/core/ascii.sa +784 -0
  43. package/sa_std/core/ascii.sal +34 -0
  44. package/sa_std/core/bit.sa +41 -0
  45. package/sa_std/core/box.sa +1 -0
  46. package/sa_std/core/box.sal +2 -0
  47. package/sa_std/core/cell.sa +108 -0
  48. package/sa_std/core/cell.sal +5 -0
  49. package/sa_std/core/cleanup.sa +26 -0
  50. package/sa_std/core/control.sa +20 -0
  51. package/sa_std/core/derive.sa +60 -0
  52. package/sa_std/core/derive.sal +1 -0
  53. package/sa_std/core/dispatch.sa +7 -0
  54. package/sa_std/core/dispatch.sal +5 -0
  55. package/sa_std/core/future.sa +777 -0
  56. package/sa_std/core/future.sal +73 -0
  57. package/sa_std/core/hash.sa +48 -0
  58. package/sa_std/core/iter.sa +2805 -0
  59. package/sa_std/core/iter.sal +4 -0
  60. package/sa_std/core/loop.sa +60 -0
  61. package/sa_std/core/mem.sa +220 -0
  62. package/sa_std/core/option.sa +825 -0
  63. package/sa_std/core/option.sal +11 -0
  64. package/sa_std/core/panic.sa +23 -0
  65. package/sa_std/core/panic.sal +12 -0
  66. package/sa_std/core/prelude.sa +18 -0
  67. package/sa_std/core/prelude.sal +18 -0
  68. package/sa_std/core/rc.sa +225 -0
  69. package/sa_std/core/rc.sal +4 -0
  70. package/sa_std/core/refcell.sa +283 -0
  71. package/sa_std/core/refcell.sal +13 -0
  72. package/sa_std/core/result.sa +708 -0
  73. package/sa_std/core/result.sal +6 -0
  74. package/sa_std/core/rust_patterns.sal +295 -0
  75. package/sa_std/core/sa_core.sa +84 -0
  76. package/sa_std/core/slice.sa +4021 -0
  77. package/sa_std/core/slice.sal +7 -0
  78. package/sa_std/core/task.sa +112 -0
  79. package/sa_std/core/task.sal +15 -0
  80. package/sa_std/core/trait_object.sa +26 -0
  81. package/sa_std/core/trait_object.sal +4 -0
  82. package/sa_std/core/waker.sa +289 -0
  83. package/sa_std/core/waker.sal +31 -0
  84. package/sa_std/core/weak.sa +2 -0
  85. package/sa_std/core/weak.sal +4 -0
  86. package/sa_std/cow.sa +3 -0
  87. package/sa_std/cow.sal +2 -0
  88. package/sa_std/cstring.sa +3 -0
  89. package/sa_std/cstring.sal +2 -0
  90. package/sa_std/default.sa +99 -0
  91. package/sa_std/duration.sa +3 -0
  92. package/sa_std/duration.sal +2 -0
  93. package/sa_std/encoding/json.sa +259 -0
  94. package/sa_std/encoding/json.sai +54 -0
  95. package/sa_std/encoding/json.sal +35 -0
  96. package/sa_std/encoding/prelude.sa +1 -0
  97. package/sa_std/encoding/prelude.sal +0 -0
  98. package/sa_std/env.sa +390 -0
  99. package/sa_std/env.sai +25 -0
  100. package/sa_std/error.sa +253 -0
  101. package/sa_std/error.sal +44 -0
  102. package/sa_std/ffi/cstring.sa +3 -0
  103. package/sa_std/ffi/cstring.sal +1 -0
  104. package/sa_std/ffi/prelude.sa +2 -0
  105. package/sa_std/ffi/prelude.sal +2 -0
  106. package/sa_std/ffi.sa +635 -0
  107. package/sa_std/ffi.sal +51 -0
  108. package/sa_std/fmt.sa +2 -0
  109. package/sa_std/fmt.sai +18 -0
  110. package/sa_std/fmt.sal +35 -0
  111. package/sa_std/fs.sa +1023 -0
  112. package/sa_std/fs.sai +127 -0
  113. package/sa_std/fs.sal +51 -0
  114. package/sa_std/future.sa +2 -0
  115. package/sa_std/future.sal +1 -0
  116. package/sa_std/hash.sa +1486 -0
  117. package/sa_std/hash.sal +13 -0
  118. package/sa_std/hashmap.sa +1962 -0
  119. package/sa_std/hashmap.sal +20 -0
  120. package/sa_std/hashset.sa +1004 -0
  121. package/sa_std/hashset.sal +18 -0
  122. package/sa_std/http2.sa +78 -0
  123. package/sa_std/http2.sai +26 -0
  124. package/sa_std/http2.sal +36 -0
  125. package/sa_std/instant.sa +3 -0
  126. package/sa_std/instant.sal +2 -0
  127. package/sa_std/io/buf_reader.sa +43 -0
  128. package/sa_std/io/buf_writer.sa +35 -0
  129. package/sa_std/io/bufio.sa +4 -0
  130. package/sa_std/io/bufio.sal +4 -0
  131. package/sa_std/io/prelude.sa +1 -0
  132. package/sa_std/io/prelude.sal +1 -0
  133. package/sa_std/io/print.sa +2 -0
  134. package/sa_std/io/print.sai +3 -0
  135. package/sa_std/io.sa +925 -0
  136. package/sa_std/io.sai +25 -0
  137. package/sa_std/io.sal +84 -0
  138. package/sa_std/iter.sa +2 -0
  139. package/sa_std/iter.sal +1 -0
  140. package/sa_std/join_handle.sa +3 -0
  141. package/sa_std/join_handle.sal +2 -0
  142. package/sa_std/libsa_async.sa +80 -0
  143. package/sa_std/m_async.sa +137 -0
  144. package/sa_std/m_async.sal +30 -0
  145. package/sa_std/m_async.sla +2 -0
  146. package/sa_std/manually_drop.sa +3 -0
  147. package/sa_std/manually_drop.sal +2 -0
  148. package/sa_std/marker/phantom_data.sa +3 -0
  149. package/sa_std/marker/phantom_data.sal +1 -0
  150. package/sa_std/marker/prelude.sa +4 -0
  151. package/sa_std/marker/prelude.sal +4 -0
  152. package/sa_std/marker.sa +220 -0
  153. package/sa_std/marker.sal +15 -0
  154. package/sa_std/math.sa +84 -0
  155. package/sa_std/math.sai +10 -0
  156. package/sa_std/mem/manually_drop.sa +3 -0
  157. package/sa_std/mem/manually_drop.sal +1 -0
  158. package/sa_std/mem/prelude.sa +2 -0
  159. package/sa_std/mem/prelude.sal +2 -0
  160. package/sa_std/mem.sa +564 -0
  161. package/sa_std/mem.sal +40 -0
  162. package/sa_std/modstate.sai +19 -0
  163. package/sa_std/net.sa +4227 -0
  164. package/sa_std/net.sai +239 -0
  165. package/sa_std/net.sal +159 -0
  166. package/sa_std/netx.sa +85 -0
  167. package/sa_std/netx.sai +11 -0
  168. package/sa_std/netx.sal +39 -0
  169. package/sa_std/nonzero.sa +3 -0
  170. package/sa_std/nonzero.sal +2 -0
  171. package/sa_std/num/nonzero.sa +3 -0
  172. package/sa_std/num/nonzero.sal +1 -0
  173. package/sa_std/num/prelude.sa +3 -0
  174. package/sa_std/num/prelude.sal +3 -0
  175. package/sa_std/num.sa +17302 -0
  176. package/sa_std/num.sai +11 -0
  177. package/sa_std/num.sal +341 -0
  178. package/sa_std/ops.sa +1884 -0
  179. package/sa_std/ops.sal +68 -0
  180. package/sa_std/option.sa +2 -0
  181. package/sa_std/option.sal +1 -0
  182. package/sa_std/os/fd.sa +96 -0
  183. package/sa_std/os/fd.sai +7 -0
  184. package/sa_std/os/fd.sal +11 -0
  185. package/sa_std/os/prelude.sa +2 -0
  186. package/sa_std/os/prelude.sal +1 -0
  187. package/sa_std/os/unix_ffi.sa +271 -0
  188. package/sa_std/panic.sa +1 -0
  189. package/sa_std/panic.sal +1 -0
  190. package/sa_std/path.sa +3170 -0
  191. package/sa_std/path.sal +12 -0
  192. package/sa_std/phantom_data.sa +3 -0
  193. package/sa_std/phantom_data.sal +2 -0
  194. package/sa_std/pin.sa +79 -0
  195. package/sa_std/pin.sal +5 -0
  196. package/sa_std/plugin_async.sa +90 -0
  197. package/sa_std/plugin_async.sal +29 -0
  198. package/sa_std/plugin_async.sla +4 -0
  199. package/sa_std/plugin_http_async.sa +46 -0
  200. package/sa_std/plugin_http_server.sa +61 -0
  201. package/sa_std/plugin_http_server.sla +2 -0
  202. package/sa_std/plugin_sqlite.sa +106 -0
  203. package/sa_std/plugin_sqlite.sla +2 -0
  204. package/sa_std/prelude.sa +60 -0
  205. package/sa_std/prelude.sal +55 -0
  206. package/sa_std/process.sa +916 -0
  207. package/sa_std/process.sai +57 -0
  208. package/sa_std/process.sal +27 -0
  209. package/sa_std/ptr.sa +503 -0
  210. package/sa_std/ptr.sal +2 -0
  211. package/sa_std/result.sa +2 -0
  212. package/sa_std/result.sal +1 -0
  213. package/sa_std/rust_core.sa +51 -0
  214. package/sa_std/rust_core.sal +26 -0
  215. package/sa_std/sa.mod +7 -0
  216. package/sa_std/sort.sa +156 -0
  217. package/sa_std/str.sla +13 -0
  218. package/sa_std/string.sa +12240 -0
  219. package/sa_std/string.sai +25 -0
  220. package/sa_std/string.sal +17 -0
  221. package/sa_std/string_format.sa +269 -0
  222. package/sa_std/sync/atomic.sa +1500 -0
  223. package/sa_std/sync/atomic.sal +45 -0
  224. package/sa_std/sync/barrier.sa +105 -0
  225. package/sa_std/sync/barrier.sal +7 -0
  226. package/sa_std/sync/condvar.sa +240 -0
  227. package/sa_std/sync/condvar.sal +4 -0
  228. package/sa_std/sync/mpsc.sa +758 -0
  229. package/sa_std/sync/mpsc.sal +42 -0
  230. package/sa_std/sync/mpsc_list.sa +255 -0
  231. package/sa_std/sync/mpsc_list.sal +3 -0
  232. package/sa_std/sync/mutex.sa +182 -0
  233. package/sa_std/sync/mutex.sal +7 -0
  234. package/sa_std/sync/once.sa +371 -0
  235. package/sa_std/sync/once.sal +31 -0
  236. package/sa_std/sync/poison.sa +36 -0
  237. package/sa_std/sync/poison.sal +11 -0
  238. package/sa_std/sync/prelude.sa +8 -0
  239. package/sa_std/sync/prelude.sal +7 -0
  240. package/sa_std/sync/rwlock.sa +369 -0
  241. package/sa_std/sync/rwlock.sal +13 -0
  242. package/sa_std/task.sa +2 -0
  243. package/sa_std/task.sal +1 -0
  244. package/sa_std/term.sa +2 -0
  245. package/sa_std/term.sai +10 -0
  246. package/sa_std/term.sal +33 -0
  247. package/sa_std/testing/assert.sai +4 -0
  248. package/sa_std/testing/mock_io.sa +174 -0
  249. package/sa_std/testing/mock_io.sal +5 -0
  250. package/sa_std/testing/prelude.sa +2 -0
  251. package/sa_std/testing/prelude.sal +1 -0
  252. package/sa_std/text/prelude.sa +1 -0
  253. package/sa_std/text/prelude.sal +1 -0
  254. package/sa_std/text/regex.sa +2 -0
  255. package/sa_std/text/regex.sai +9 -0
  256. package/sa_std/text/regex.sal +33 -0
  257. package/sa_std/thread/join_handle.sa +3 -0
  258. package/sa_std/thread/join_handle.sal +1 -0
  259. package/sa_std/thread/prelude.sa +4 -0
  260. package/sa_std/thread/prelude.sal +3 -0
  261. package/sa_std/thread.sa +160 -0
  262. package/sa_std/thread.sai +11 -0
  263. package/sa_std/thread.sal +4 -0
  264. package/sa_std/thread_local.sa +45 -0
  265. package/sa_std/thread_local.sai +9 -0
  266. package/sa_std/time/duration.sa +3 -0
  267. package/sa_std/time/duration.sal +1 -0
  268. package/sa_std/time/instant.sa +3 -0
  269. package/sa_std/time/instant.sal +1 -0
  270. package/sa_std/time/prelude.sa +4 -0
  271. package/sa_std/time/prelude.sal +4 -0
  272. package/sa_std/time.sa +850 -0
  273. package/sa_std/time.sai +37 -0
  274. package/sa_std/time.sal +35 -0
  275. package/sa_std/time.sla +67 -0
  276. package/sa_std/tls_client.sai +39 -0
  277. package/sa_std/vec.sa +5754 -0
  278. package/sa_std/vec.sal +1 -0
  279. package/sa_std/vec_deque.sa +4925 -0
  280. package/sa_std/vec_deque.sal +8 -0
  281. package/sa_std/vec_runtime_macros.sa +11 -0
  282. package/sa_std/ws_client.sai +57 -0
package/sa_std/net.sa ADDED
@@ -0,0 +1,4227 @@
1
+ @import "net.sal"
2
+ @import "net.sai"
3
+ @import "hash.sa"
4
+ @import "io.sal"
5
+ @import "os/fd.sa"
6
+
7
+ [MACRO] NET_LAST_ERROR %out_error
8
+ %out_error = call @sa_std_last_error()
9
+ [END_MACRO]
10
+
11
+ [MACRO] NET_HOSTNAME %out_status, %out_ptr, %out_cap, %out_len
12
+ %out_status = call @sa_std_net_hostname(%out_ptr, %out_cap, %out_len)
13
+ [END_MACRO]
14
+
15
+ [MACRO] NET_TCP_CONNECT %out_status, %out_stream, %host, %host_len, %port
16
+ __net_tcp_connect_handle_%out_status = stack_alloc 8
17
+ %out_status = call @sa_std_net_tcp_connect(&%host, %host_len, %port, &__net_tcp_connect_handle_%out_status)
18
+ %out_stream = load __net_tcp_connect_handle_%out_status+0 as u64
19
+ [END_MACRO]
20
+
21
+ [MACRO] NET_TCP_LISTENER_BIND %out_status, %out_listener, %host, %host_len, %port
22
+ __net_tcp_bind_handle_%out_status = stack_alloc 8
23
+ __net_tcp_bind_port_%out_status = stack_alloc 4
24
+ %out_status = call @sa_std_net_tcp_listen(&%host, %host_len, %port, &__net_tcp_bind_handle_%out_status, &__net_tcp_bind_port_%out_status)
25
+ %out_listener = load __net_tcp_bind_handle_%out_status+0 as u64
26
+ [END_MACRO]
27
+
28
+ [MACRO] NET_TCP_LISTENER_BIND_PORT %out_status, %out_listener, %out_port, %host, %host_len, %port
29
+ __net_tcp_bind_handle_%out_status = stack_alloc 8
30
+ __net_tcp_bind_port_%out_status = stack_alloc 4
31
+ %out_status = call @sa_std_net_tcp_listen(&%host, %host_len, %port, &__net_tcp_bind_handle_%out_status, &__net_tcp_bind_port_%out_status)
32
+ %out_listener = load __net_tcp_bind_handle_%out_status+0 as u64
33
+ %out_port = load __net_tcp_bind_port_%out_status+0 as u32
34
+ [END_MACRO]
35
+
36
+ [MACRO] NET_TCP_LISTENER_ACCEPT %out_status, %out_stream, %listener
37
+ __net_tcp_accept_handle_%out_status = stack_alloc 8
38
+ %out_status = call @sa_std_net_tcp_accept(%listener, &__net_tcp_accept_handle_%out_status)
39
+ %out_stream = load __net_tcp_accept_handle_%out_status+0 as u64
40
+ [END_MACRO]
41
+
42
+ [MACRO] NET_TCP_LISTENER_LOCAL_ADDR %out_status, %out_addr, %listener
43
+ __net_tcp_listener_addr_%out_status = stack_alloc 8
44
+ %out_status = call @sa_std_net_tcp_listener_local_addr(%listener, &__net_tcp_listener_addr_%out_status)
45
+ %out_addr = load __net_tcp_listener_addr_%out_status+0 as u64
46
+ [END_MACRO]
47
+
48
+ [MACRO] NET_TCP_LISTENER_SET_NONBLOCKING %out_status, %listener, %enabled
49
+ %out_status = call @sa_std_net_tcp_listener_set_nonblocking(%listener, %enabled)
50
+ [END_MACRO]
51
+
52
+ [MACRO] NET_TCP_LISTENER_SET_ONLY_V6 %out_status, %listener, %enabled
53
+ %out_status = call @sa_std_net_tcp_listener_set_only_v6(%listener, %enabled)
54
+ [END_MACRO]
55
+
56
+ [MACRO] NET_TCP_LISTENER_ONLY_V6 %out_status, %out_enabled, %listener
57
+ __net_tcp_listener_only_v6_%out_status = stack_alloc 4
58
+ %out_status = call @sa_std_net_tcp_listener_only_v6(%listener, &__net_tcp_listener_only_v6_%out_status)
59
+ %out_enabled = load __net_tcp_listener_only_v6_%out_status+0 as i32
60
+ [END_MACRO]
61
+ [MACRO] NET_TCP_LISTENER_SET_TTL %out_status, %listener, %ttl
62
+ %out_status = call @sa_std_net_tcp_listener_set_ttl(%listener, %ttl)
63
+ [END_MACRO]
64
+
65
+ [MACRO] NET_TCP_LISTENER_TTL %out_status, %out_ttl, %listener
66
+ __net_tcp_listener_ttl_%out_status = stack_alloc 4
67
+ %out_status = call @sa_std_net_tcp_listener_ttl(%listener, &__net_tcp_listener_ttl_%out_status)
68
+ %out_ttl = load __net_tcp_listener_ttl_%out_status+0 as u32
69
+ [END_MACRO]
70
+
71
+ [MACRO] NET_TCP_LISTENER_TAKE_ERROR %out_status, %out_error, %listener
72
+ __net_tcp_listener_error_%out_status = stack_alloc 4
73
+ %out_status = call @sa_std_net_tcp_listener_take_error(%listener, &__net_tcp_listener_error_%out_status)
74
+ %out_error = load __net_tcp_listener_error_%out_status+0 as i32
75
+ [END_MACRO]
76
+
77
+ [MACRO] NET_TCP_LISTENER_AS_RAW_FD %out_status, %out_fd, %listener
78
+ EXPAND FD_AS_RAW %out_status, %out_fd, %listener
79
+ [END_MACRO]
80
+
81
+ [MACRO] NET_TCP_LISTENER_AS_FD %out_status, %out_fd, %listener
82
+ EXPAND NET_TCP_LISTENER_AS_RAW_FD %out_status, %out_fd, %listener
83
+ [END_MACRO]
84
+
85
+ [MACRO] NET_TCP_LISTENER_INTO_RAW_FD %out_status, %out_fd, %listener
86
+ EXPAND FD_INTO_RAW %out_status, %out_fd, %listener
87
+ [END_MACRO]
88
+
89
+ [MACRO] NET_TCP_LISTENER_FROM_RAW_FD %out_status, %out_listener, %fd
90
+ __net_tcp_listener_from_raw_%out_status = stack_alloc 8
91
+ %out_status = call @sa_std_net_tcp_listener_from_raw_fd(%fd, &__net_tcp_listener_from_raw_%out_status)
92
+ %out_listener = load __net_tcp_listener_from_raw_%out_status+0 as u64
93
+ [END_MACRO]
94
+
95
+ [MACRO] NET_TCP_LISTENER_INTO_OWNED_FD %out_status, %out_fd_handle, %listener
96
+ EXPAND NET_TCP_LISTENER_INTO_RAW_FD %out_status, __net_tcp_listener_owned_raw_%out_status, %listener
97
+ !%out_status
98
+ EXPAND FD_FROM_RAW %out_status, %out_fd_handle, __net_tcp_listener_owned_raw_%out_status
99
+ !__net_tcp_listener_owned_raw_%out_status
100
+ [END_MACRO]
101
+
102
+ [MACRO] NET_TCP_LISTENER_FROM_OWNED_FD %out_status, %out_listener, %fd_handle
103
+ EXPAND FD_INTO_RAW %out_status, __net_tcp_listener_from_owned_raw_%out_status, %fd_handle
104
+ !%out_status
105
+ EXPAND NET_TCP_LISTENER_FROM_RAW_FD %out_status, %out_listener, __net_tcp_listener_from_owned_raw_%out_status
106
+ !__net_tcp_listener_from_owned_raw_%out_status
107
+ [END_MACRO]
108
+
109
+ [MACRO] NET_TCP_LISTENER_CLOSE %out_status, %listener
110
+ __net_tcp_listener_close_%out_status = call @sa_net_tcp_listener_close(%listener)
111
+ %out_status = load __net_tcp_listener_close_%out_status+0 as i32
112
+ !__net_tcp_listener_close_%out_status
113
+ [END_MACRO]
114
+
115
+ [MACRO] NET_TCP_INCOMING_NEW %incoming_ptr, %listener
116
+ store %incoming_ptr+NetTcpIncoming_listener, %listener as u64
117
+ [END_MACRO]
118
+
119
+ [MACRO] NET_TCP_INCOMING_LISTENER %out_listener, %incoming_ptr
120
+ %out_listener = load %incoming_ptr+NetTcpIncoming_listener as u64
121
+ [END_MACRO]
122
+
123
+ [MACRO] NET_TCP_INCOMING_NEXT %out_status, %out_ok, %out_stream, %incoming_ptr
124
+ __net_tcp_incoming_listener_%out_status = load %incoming_ptr+NetTcpIncoming_listener as u64
125
+ EXPAND NET_TCP_LISTENER_ACCEPT %out_status, %out_stream, __net_tcp_incoming_listener_%out_status
126
+ %out_ok = eq %out_status, SA_NET_OK
127
+ !__net_tcp_incoming_listener_%out_status
128
+ [END_MACRO]
129
+
130
+ [MACRO] NET_TCP_LISTENER_INCOMING %incoming_ptr, %listener
131
+ EXPAND NET_TCP_INCOMING_NEW %incoming_ptr, %listener
132
+ [END_MACRO]
133
+
134
+ [MACRO] NET_TCP_STREAM_READ %out_status, %out_len, %stream, %buf, %cap
135
+ __net_tcp_read_len_%out_status = stack_alloc 8
136
+ %out_status = call @sa_std_net_tcp_stream_read(%stream, &%buf, %cap, &__net_tcp_read_len_%out_status)
137
+ %out_len = load __net_tcp_read_len_%out_status+0 as u64
138
+ [END_MACRO]
139
+
140
+ [MACRO] NET_TCP_STREAM_PEEK %out_status, %out_len, %stream, %buf, %cap
141
+ __net_tcp_peek_len_%out_status = stack_alloc 8
142
+ %out_status = call @sa_std_net_tcp_stream_peek(%stream, &%buf, %cap, &__net_tcp_peek_len_%out_status)
143
+ %out_len = load __net_tcp_peek_len_%out_status+0 as u64
144
+ [END_MACRO]
145
+
146
+ [MACRO] NET_TCP_STREAM_WRITE %out_status, %out_len, %stream, %buf, %len
147
+ __net_tcp_write_len_%out_status = stack_alloc 8
148
+ %out_status = call @sa_std_net_tcp_stream_write(%stream, &%buf, %len, &__net_tcp_write_len_%out_status)
149
+ %out_len = load __net_tcp_write_len_%out_status+0 as u64
150
+ [END_MACRO]
151
+
152
+ [MACRO] NET_TCP_STREAM_READ_VECTORED %out_status, %out_len, %stream, %iovs, %iov_count
153
+ __net_tcp_read_vec_len_%out_status = stack_alloc 8
154
+ %out_status = call @sa_std_net_tcp_stream_read_vectored(%stream, &%iovs, %iov_count, &__net_tcp_read_vec_len_%out_status)
155
+ %out_len = load __net_tcp_read_vec_len_%out_status+0 as u64
156
+ [END_MACRO]
157
+
158
+ [MACRO] NET_TCP_STREAM_WRITE_VECTORED %out_status, %out_len, %stream, %iovs, %iov_count
159
+ __net_tcp_write_vec_len_%out_status = stack_alloc 8
160
+ %out_status = call @sa_std_net_tcp_stream_write_vectored(%stream, &%iovs, %iov_count, &__net_tcp_write_vec_len_%out_status)
161
+ %out_len = load __net_tcp_write_vec_len_%out_status+0 as u64
162
+ [END_MACRO]
163
+
164
+ [MACRO] NET_TCP_STREAM_WRITE_ALL %out_status, %stream, %buf, %len
165
+ __net_tcp_write_all_%out_status = call @sa_net_tcp_stream_write_all(%stream, &%buf, %len)
166
+ %out_status = load __net_tcp_write_all_%out_status+0 as i32
167
+ !__net_tcp_write_all_%out_status
168
+ [END_MACRO]
169
+
170
+ [MACRO] NET_TCP_STREAM_READ_EXACT %out_status, %stream, %buf, %len
171
+ __net_tcp_read_exact_%out_status = call @sa_net_tcp_stream_read_exact(%stream, &%buf, %len)
172
+ %out_status = load __net_tcp_read_exact_%out_status+0 as i32
173
+ !__net_tcp_read_exact_%out_status
174
+ [END_MACRO]
175
+
176
+ [MACRO] NET_TCP_STREAM_FLUSH %out_status, %stream
177
+ %out_status = call @sa_net_tcp_stream_flush(%stream)
178
+ [END_MACRO]
179
+
180
+ [MACRO] NET_TCP_STREAM_PEER_ADDR %out_status, %out_addr, %stream
181
+ __net_tcp_peer_addr_%out_status = stack_alloc 8
182
+ %out_status = call @sa_std_net_tcp_stream_peer_addr(%stream, &__net_tcp_peer_addr_%out_status)
183
+ %out_addr = load __net_tcp_peer_addr_%out_status+0 as u64
184
+ [END_MACRO]
185
+
186
+ [MACRO] NET_TCP_STREAM_LOCAL_ADDR %out_status, %out_addr, %stream
187
+ __net_tcp_local_addr_%out_status = stack_alloc 8
188
+ %out_status = call @sa_std_net_tcp_stream_local_addr(%stream, &__net_tcp_local_addr_%out_status)
189
+ %out_addr = load __net_tcp_local_addr_%out_status+0 as u64
190
+ [END_MACRO]
191
+
192
+ [MACRO] NET_TCP_STREAM_SHUTDOWN %out_status, %stream, %how
193
+ %out_status = call @sa_net_tcp_stream_shutdown(%stream, %how)
194
+ [END_MACRO]
195
+
196
+ [MACRO] NET_TCP_STREAM_CLOSE %out_status, %stream
197
+ __net_tcp_stream_close_%out_status = call @sa_net_tcp_stream_close(%stream)
198
+ %out_status = load __net_tcp_stream_close_%out_status+0 as i32
199
+ !__net_tcp_stream_close_%out_status
200
+ [END_MACRO]
201
+
202
+ [MACRO] NET_TCP_STREAM_SET_READ_TIMEOUT %out_status, %stream, %timeout_ns
203
+ %out_status = call @sa_std_net_tcp_stream_set_read_timeout(%stream, %timeout_ns)
204
+ [END_MACRO]
205
+
206
+ [MACRO] NET_TCP_STREAM_SET_WRITE_TIMEOUT %out_status, %stream, %timeout_ns
207
+ %out_status = call @sa_std_net_tcp_stream_set_write_timeout(%stream, %timeout_ns)
208
+ [END_MACRO]
209
+
210
+ [MACRO] NET_TCP_STREAM_TRY_CLONE %out_status, %out_stream, %stream
211
+ __net_tcp_stream_clone_%out_status = stack_alloc 8
212
+ %out_status = call @sa_std_net_tcp_stream_try_clone(%stream, &__net_tcp_stream_clone_%out_status)
213
+ %out_stream = load __net_tcp_stream_clone_%out_status+0 as u64
214
+ [END_MACRO]
215
+
216
+ [MACRO] NET_TCP_LISTENER_TRY_CLONE %out_status, %out_listener, %listener
217
+ __net_tcp_listener_clone_%out_status = stack_alloc 8
218
+ %out_status = call @sa_std_net_tcp_listener_try_clone(%listener, &__net_tcp_listener_clone_%out_status)
219
+ %out_listener = load __net_tcp_listener_clone_%out_status+0 as u64
220
+ [END_MACRO]
221
+ [MACRO] NET_TCP_STREAM_SET_NONBLOCKING %out_status, %stream, %enabled
222
+ %out_status = call @sa_std_net_tcp_stream_set_nonblocking(%stream, %enabled)
223
+ [END_MACRO]
224
+
225
+ [MACRO] NET_TCP_STREAM_SET_LINGER %out_status, %stream, %enabled, %timeout_ns
226
+ %out_status = call @sa_std_net_tcp_stream_set_linger(%stream, %enabled, %timeout_ns)
227
+ [END_MACRO]
228
+
229
+ [MACRO] NET_TCP_STREAM_LINGER %out_status, %out_enabled, %out_timeout_ns, %stream
230
+ __net_tcp_linger_enabled_%out_status = stack_alloc 4
231
+ __net_tcp_linger_timeout_%out_status = stack_alloc 8
232
+ %out_status = call @sa_std_net_tcp_stream_linger(%stream, &__net_tcp_linger_enabled_%out_status, &__net_tcp_linger_timeout_%out_status)
233
+ %out_enabled = load __net_tcp_linger_enabled_%out_status+0 as i32
234
+ %out_timeout_ns = load __net_tcp_linger_timeout_%out_status+0 as u64
235
+ [END_MACRO]
236
+ [MACRO] NET_TCP_STREAM_SET_NODELAY %out_status, %stream, %enabled
237
+ %out_status = call @sa_std_net_tcp_stream_set_nodelay(%stream, %enabled)
238
+ [END_MACRO]
239
+
240
+ [MACRO] NET_TCP_STREAM_SET_QUICKACK %out_status, %stream, %enabled
241
+ %out_status = call @sa_std_net_tcp_stream_set_quickack(%stream, %enabled)
242
+ [END_MACRO]
243
+
244
+ [MACRO] NET_TCP_STREAM_QUICKACK %out_status, %out_enabled, %stream
245
+ __net_tcp_quickack_%out_status = stack_alloc 4
246
+ %out_status = call @sa_std_net_tcp_stream_quickack(%stream, &__net_tcp_quickack_%out_status)
247
+ %out_enabled = load __net_tcp_quickack_%out_status+0 as i32
248
+ [END_MACRO]
249
+
250
+ [MACRO] NET_TCP_STREAM_SET_DEFERACCEPT %out_status, %stream, %seconds
251
+ %out_status = call @sa_std_net_tcp_stream_set_deferaccept(%stream, %seconds)
252
+ [END_MACRO]
253
+
254
+ [MACRO] NET_TCP_STREAM_DEFERACCEPT %out_status, %out_seconds, %stream
255
+ __net_tcp_deferaccept_%out_status = stack_alloc 4
256
+ %out_status = call @sa_std_net_tcp_stream_deferaccept(%stream, &__net_tcp_deferaccept_%out_status)
257
+ %out_seconds = load __net_tcp_deferaccept_%out_status+0 as u32
258
+ [END_MACRO]
259
+
260
+ [MACRO] NET_TCP_STREAM_SET_TTL %out_status, %stream, %ttl
261
+ %out_status = call @sa_std_net_tcp_stream_set_ttl(%stream, %ttl)
262
+ [END_MACRO]
263
+
264
+ [MACRO] NET_TCP_STREAM_READ_TIMEOUT %out_status, %out_timeout_ns, %stream
265
+ __net_tcp_read_timeout_%out_status = stack_alloc 8
266
+ %out_status = call @sa_std_net_tcp_stream_read_timeout(%stream, &__net_tcp_read_timeout_%out_status)
267
+ %out_timeout_ns = load __net_tcp_read_timeout_%out_status+0 as u64
268
+ [END_MACRO]
269
+
270
+ [MACRO] NET_TCP_STREAM_WRITE_TIMEOUT %out_status, %out_timeout_ns, %stream
271
+ __net_tcp_write_timeout_%out_status = stack_alloc 8
272
+ %out_status = call @sa_std_net_tcp_stream_write_timeout(%stream, &__net_tcp_write_timeout_%out_status)
273
+ %out_timeout_ns = load __net_tcp_write_timeout_%out_status+0 as u64
274
+ [END_MACRO]
275
+
276
+ [MACRO] NET_TCP_STREAM_NODELAY %out_status, %out_enabled, %stream
277
+ __net_tcp_nodelay_%out_status = stack_alloc 4
278
+ %out_status = call @sa_std_net_tcp_stream_nodelay(%stream, &__net_tcp_nodelay_%out_status)
279
+ %out_enabled = load __net_tcp_nodelay_%out_status+0 as i32
280
+ [END_MACRO]
281
+
282
+ [MACRO] NET_TCP_STREAM_TTL %out_status, %out_ttl, %stream
283
+ __net_tcp_ttl_%out_status = stack_alloc 4
284
+ %out_status = call @sa_std_net_tcp_stream_ttl(%stream, &__net_tcp_ttl_%out_status)
285
+ %out_ttl = load __net_tcp_ttl_%out_status+0 as u32
286
+ [END_MACRO]
287
+
288
+ [MACRO] NET_TCP_STREAM_TAKE_ERROR %out_status, %out_error, %stream
289
+ __net_tcp_error_%out_status = stack_alloc 4
290
+ %out_status = call @sa_std_net_tcp_stream_take_error(%stream, &__net_tcp_error_%out_status)
291
+ %out_error = load __net_tcp_error_%out_status+0 as i32
292
+ [END_MACRO]
293
+
294
+ [MACRO] NET_TCP_STREAM_AS_RAW_FD %out_status, %out_fd, %stream
295
+ EXPAND FD_AS_RAW %out_status, %out_fd, %stream
296
+ [END_MACRO]
297
+
298
+ [MACRO] NET_TCP_STREAM_AS_FD %out_status, %out_fd, %stream
299
+ EXPAND NET_TCP_STREAM_AS_RAW_FD %out_status, %out_fd, %stream
300
+ [END_MACRO]
301
+
302
+ [MACRO] NET_TCP_STREAM_INTO_RAW_FD %out_status, %out_fd, %stream
303
+ EXPAND FD_INTO_RAW %out_status, %out_fd, %stream
304
+ [END_MACRO]
305
+
306
+ [MACRO] NET_TCP_STREAM_FROM_RAW_FD %out_status, %out_stream, %fd
307
+ __net_tcp_stream_from_raw_%out_status = stack_alloc 8
308
+ %out_status = call @sa_std_net_tcp_stream_from_raw_fd(%fd, &__net_tcp_stream_from_raw_%out_status)
309
+ %out_stream = load __net_tcp_stream_from_raw_%out_status+0 as u64
310
+ [END_MACRO]
311
+
312
+ [MACRO] NET_TCP_STREAM_INTO_OWNED_FD %out_status, %out_fd_handle, %stream
313
+ EXPAND NET_TCP_STREAM_INTO_RAW_FD %out_status, __net_tcp_stream_owned_raw_%out_status, %stream
314
+ !%out_status
315
+ EXPAND FD_FROM_RAW %out_status, %out_fd_handle, __net_tcp_stream_owned_raw_%out_status
316
+ !__net_tcp_stream_owned_raw_%out_status
317
+ [END_MACRO]
318
+
319
+ [MACRO] NET_TCP_STREAM_FROM_OWNED_FD %out_status, %out_stream, %fd_handle
320
+ EXPAND FD_INTO_RAW %out_status, __net_tcp_stream_from_owned_raw_%out_status, %fd_handle
321
+ !%out_status
322
+ EXPAND NET_TCP_STREAM_FROM_RAW_FD %out_status, %out_stream, __net_tcp_stream_from_owned_raw_%out_status
323
+ !__net_tcp_stream_from_owned_raw_%out_status
324
+ [END_MACRO]
325
+
326
+ [MACRO] NET_TCP_STREAM_SET_KEEPALIVE %out_status, %stream, %enabled
327
+ %out_status = call @sa_std_net_tcp_stream_set_keepalive(%stream, %enabled)
328
+ [END_MACRO]
329
+
330
+ [MACRO] NET_TCP_LISTENER_ACCEPT_ADDR %out_status, %out_stream, %out_addr, %listener
331
+ __net_tcp_accept_addr_stream_%out_status = stack_alloc 8
332
+ __net_tcp_accept_addr_addr_%out_status = stack_alloc 8
333
+ %out_status = call @sa_std_net_tcp_accept_addr(%listener, &__net_tcp_accept_addr_stream_%out_status, &__net_tcp_accept_addr_addr_%out_status)
334
+ %out_stream = load __net_tcp_accept_addr_stream_%out_status+0 as u64
335
+ %out_addr = load __net_tcp_accept_addr_addr_%out_status+0 as u64
336
+ [END_MACRO]
337
+
338
+ [MACRO] NET_TCP_STREAM_KEEPALIVE %out_status, %out_enabled, %stream
339
+ __net_tcp_keepalive_%out_status = stack_alloc 4
340
+ %out_status = call @sa_std_net_tcp_stream_keepalive(%stream, &__net_tcp_keepalive_%out_status)
341
+ %out_enabled = load __net_tcp_keepalive_%out_status+0 as i32
342
+ [END_MACRO]
343
+
344
+ [MACRO] NET_TCP_STREAM_SET_KEEPALIVE_PARAMS %out_status, %stream, %idle_secs, %intvl_secs, %cnt
345
+ %out_status = call @sa_std_net_tcp_stream_set_keepalive_params(%stream, %idle_secs, %intvl_secs, %cnt)
346
+ [END_MACRO]
347
+
348
+
349
+ [MACRO] NET_TCP_STREAM_SET_RECV_BUFFER_SIZE %out_status, %stream, %size
350
+ %out_status = call @sa_std_net_tcp_stream_set_recv_buffer_size(%stream, %size)
351
+ [END_MACRO]
352
+ [MACRO] NET_TCP_STREAM_RECV_BUFFER_SIZE %out_status, %out_size, %stream
353
+ __net_tcp_stream_recv_buffer_size_%out_status = stack_alloc 4
354
+ %out_status = call @sa_std_net_tcp_stream_recv_buffer_size(%stream, &__net_tcp_stream_recv_buffer_size_%out_status)
355
+ %out_size = load __net_tcp_stream_recv_buffer_size_%out_status+0 as u32
356
+ [END_MACRO]
357
+ [MACRO] NET_TCP_STREAM_SET_SEND_BUFFER_SIZE %out_status, %stream, %size
358
+ %out_status = call @sa_std_net_tcp_stream_set_send_buffer_size(%stream, %size)
359
+ [END_MACRO]
360
+ [MACRO] NET_TCP_STREAM_SEND_BUFFER_SIZE %out_status, %out_size, %stream
361
+ __net_tcp_stream_send_buffer_size_%out_status = stack_alloc 4
362
+ %out_status = call @sa_std_net_tcp_stream_send_buffer_size(%stream, &__net_tcp_stream_send_buffer_size_%out_status)
363
+ %out_size = load __net_tcp_stream_send_buffer_size_%out_status+0 as u32
364
+ [END_MACRO]
365
+
366
+ [MACRO] NET_TCP_LISTENER_SET_REUSEADDR %out_status, %listener, %enabled
367
+ %out_status = call @sa_std_net_tcp_listener_set_reuseaddr(%listener, %enabled)
368
+ [END_MACRO]
369
+
370
+ [MACRO] NET_TCP_LISTENER_SET_REUSEPORT %out_status, %listener, %enabled
371
+ %out_status = call @sa_std_net_tcp_listener_set_reuseport(%listener, %enabled)
372
+ [END_MACRO]
373
+
374
+ [MACRO] NET_UNIX_LISTEN %out_status, %out_listener, %path, %path_len
375
+ __net_unix_listen_handle_%out_status = stack_alloc 8
376
+ %out_status = call @sa_std_net_unix_listen(&%path, %path_len, &__net_unix_listen_handle_%out_status)
377
+ %out_listener = load __net_unix_listen_handle_%out_status+0 as u64
378
+ [END_MACRO]
379
+
380
+ [MACRO] NET_UNIX_CONNECT %out_status, %out_stream, %path, %path_len
381
+ __net_unix_connect_handle_%out_status = stack_alloc 8
382
+ %out_status = call @sa_std_net_unix_connect(&%path, %path_len, &__net_unix_connect_handle_%out_status)
383
+ %out_stream = load __net_unix_connect_handle_%out_status+0 as u64
384
+ [END_MACRO]
385
+
386
+ [MACRO] NET_UNIX_ADDR_FROM_ABSTRACT_NAME %out_status, %out_addr, %name, %name_len
387
+ __net_unix_abstract_addr_%out_status = stack_alloc 8
388
+ %out_status = call @sa_std_net_unix_addr_from_abstract_name(&%name, %name_len, &__net_unix_abstract_addr_%out_status)
389
+ %out_addr = load __net_unix_abstract_addr_%out_status+0 as u64
390
+ [END_MACRO]
391
+
392
+ [MACRO] NET_UNIX_ADDR_FROM_PATHNAME %out_status, %out_addr, %path, %path_len
393
+ __net_unix_path_addr_%out_status = stack_alloc 8
394
+ %out_status = call @sa_std_net_unix_addr_from_pathname(&%path, %path_len, &__net_unix_path_addr_%out_status)
395
+ %out_addr = load __net_unix_path_addr_%out_status+0 as u64
396
+ [END_MACRO]
397
+
398
+ [MACRO] NET_UNIX_LISTEN_ADDR %out_status, %out_listener, %addr
399
+ __net_unix_listen_addr_handle_%out_status = stack_alloc 8
400
+ %out_status = call @sa_std_net_unix_listen_addr(%addr, &__net_unix_listen_addr_handle_%out_status)
401
+ %out_listener = load __net_unix_listen_addr_handle_%out_status+0 as u64
402
+ [END_MACRO]
403
+
404
+ [MACRO] NET_UNIX_CONNECT_ADDR %out_status, %out_stream, %addr
405
+ __net_unix_connect_addr_handle_%out_status = stack_alloc 8
406
+ %out_status = call @sa_std_net_unix_connect_addr(%addr, &__net_unix_connect_addr_handle_%out_status)
407
+ %out_stream = load __net_unix_connect_addr_handle_%out_status+0 as u64
408
+ [END_MACRO]
409
+
410
+ [MACRO] NET_UNIX_ACCEPT %out_status, %out_stream, %listener
411
+ __net_unix_accept_handle_%out_status = stack_alloc 8
412
+ %out_status = call @sa_std_net_unix_accept(%listener, &__net_unix_accept_handle_%out_status)
413
+ %out_stream = load __net_unix_accept_handle_%out_status+0 as u64
414
+ [END_MACRO]
415
+
416
+ [MACRO] NET_UNIX_ACCEPT_ADDR %out_status, %out_stream, %out_addr, %listener
417
+ __net_unix_accept_stream_%out_status = stack_alloc 8
418
+ __net_unix_accept_addr_%out_status = stack_alloc 8
419
+ %out_status = call @sa_std_net_unix_accept_addr(%listener, &__net_unix_accept_stream_%out_status, &__net_unix_accept_addr_%out_status)
420
+ %out_stream = load __net_unix_accept_stream_%out_status+0 as u64
421
+ %out_addr = load __net_unix_accept_addr_%out_status+0 as u64
422
+ [END_MACRO]
423
+
424
+ [MACRO] NET_UNIX_PAIR %out_status, %out_left, %out_right
425
+ __net_unix_pair_left_%out_status = stack_alloc 8
426
+ __net_unix_pair_right_%out_status = stack_alloc 8
427
+ %out_status = call @sa_std_net_unix_pair(&__net_unix_pair_left_%out_status, &__net_unix_pair_right_%out_status)
428
+ %out_left = load __net_unix_pair_left_%out_status+0 as u64
429
+ %out_right = load __net_unix_pair_right_%out_status+0 as u64
430
+ [END_MACRO]
431
+
432
+ [MACRO] NET_UNIX_LISTENER_LOCAL_ADDR %out_status, %out_addr, %listener
433
+ __net_unix_listener_addr_%out_status = stack_alloc 8
434
+ %out_status = call @sa_std_net_unix_listener_local_addr(%listener, &__net_unix_listener_addr_%out_status)
435
+ %out_addr = load __net_unix_listener_addr_%out_status+0 as u64
436
+ [END_MACRO]
437
+
438
+ [MACRO] NET_UNIX_LISTENER_TRY_CLONE %out_status, %out_listener, %listener
439
+ __net_unix_listener_clone_%out_status = stack_alloc 8
440
+ %out_status = call @sa_std_net_unix_listener_try_clone(%listener, &__net_unix_listener_clone_%out_status)
441
+ %out_listener = load __net_unix_listener_clone_%out_status+0 as u64
442
+ [END_MACRO]
443
+
444
+ // Rust method-name alias over NET_UNIX_LISTENER_TRY_CLONE.
445
+ [MACRO] NET_UNIX_LISTENER_CLONE %out_status, %out_listener, %listener
446
+ EXPAND NET_UNIX_LISTENER_TRY_CLONE %out_status, %out_listener, %listener
447
+ [END_MACRO]
448
+
449
+ [MACRO] NET_UNIX_LISTENER_AS_RAW_FD %out_status, %out_fd, %listener
450
+ EXPAND FD_AS_RAW %out_status, %out_fd, %listener
451
+ [END_MACRO]
452
+
453
+ [MACRO] NET_UNIX_LISTENER_AS_FD %out_status, %out_fd, %listener
454
+ EXPAND NET_UNIX_LISTENER_AS_RAW_FD %out_status, %out_fd, %listener
455
+ [END_MACRO]
456
+
457
+ [MACRO] NET_UNIX_LISTENER_INTO_RAW_FD %out_status, %out_fd, %listener
458
+ EXPAND FD_INTO_RAW %out_status, %out_fd, %listener
459
+ [END_MACRO]
460
+
461
+ [MACRO] NET_UNIX_LISTENER_FROM_RAW_FD %out_status, %out_listener, %fd
462
+ __net_unix_listener_from_raw_%out_status = stack_alloc 8
463
+ %out_status = call @sa_std_net_unix_listener_from_raw_fd(%fd, &__net_unix_listener_from_raw_%out_status)
464
+ %out_listener = load __net_unix_listener_from_raw_%out_status+0 as u64
465
+ [END_MACRO]
466
+
467
+ [MACRO] NET_UNIX_LISTENER_INTO_OWNED_FD %out_status, %out_fd_handle, %listener
468
+ EXPAND NET_UNIX_LISTENER_INTO_RAW_FD %out_status, __net_unix_listener_owned_raw_%out_status, %listener
469
+ !%out_status
470
+ EXPAND FD_FROM_RAW %out_status, %out_fd_handle, __net_unix_listener_owned_raw_%out_status
471
+ !__net_unix_listener_owned_raw_%out_status
472
+ [END_MACRO]
473
+
474
+ [MACRO] NET_UNIX_LISTENER_FROM_OWNED_FD %out_status, %out_listener, %fd_handle
475
+ EXPAND FD_INTO_RAW %out_status, __net_unix_listener_from_owned_raw_%out_status, %fd_handle
476
+ !%out_status
477
+ EXPAND NET_UNIX_LISTENER_FROM_RAW_FD %out_status, %out_listener, __net_unix_listener_from_owned_raw_%out_status
478
+ !__net_unix_listener_from_owned_raw_%out_status
479
+ [END_MACRO]
480
+
481
+ [MACRO] NET_UNIX_LISTENER_SET_NONBLOCKING %out_status, %listener, %enabled
482
+ EXPAND NET_TCP_LISTENER_SET_NONBLOCKING %out_status, %listener, %enabled
483
+ [END_MACRO]
484
+
485
+ [MACRO] NET_UNIX_LISTENER_TAKE_ERROR %out_status, %out_error, %listener
486
+ EXPAND NET_TCP_LISTENER_TAKE_ERROR %out_status, %out_error, %listener
487
+ [END_MACRO]
488
+
489
+ [MACRO] NET_UNIX_INCOMING_NEW %incoming_ptr, %listener
490
+ EXPAND NET_TCP_INCOMING_NEW %incoming_ptr, %listener
491
+ [END_MACRO]
492
+
493
+ [MACRO] NET_UNIX_INCOMING_LISTENER %out_listener, %incoming_ptr
494
+ EXPAND NET_TCP_INCOMING_LISTENER %out_listener, %incoming_ptr
495
+ [END_MACRO]
496
+
497
+ [MACRO] NET_UNIX_INCOMING_NEXT %out_status, %out_ok, %out_stream, %incoming_ptr
498
+ EXPAND NET_TCP_INCOMING_NEXT %out_status, %out_ok, %out_stream, %incoming_ptr
499
+ [END_MACRO]
500
+
501
+ [MACRO] NET_UNIX_LISTENER_INCOMING %incoming_ptr, %listener
502
+ EXPAND NET_UNIX_INCOMING_NEW %incoming_ptr, %listener
503
+ [END_MACRO]
504
+
505
+ [MACRO] NET_UNIX_STREAM_LOCAL_ADDR %out_status, %out_addr, %stream
506
+ __net_unix_local_addr_%out_status = stack_alloc 8
507
+ %out_status = call @sa_std_net_unix_stream_local_addr(%stream, &__net_unix_local_addr_%out_status)
508
+ %out_addr = load __net_unix_local_addr_%out_status+0 as u64
509
+ [END_MACRO]
510
+
511
+ [MACRO] NET_UNIX_STREAM_TRY_CLONE %out_status, %out_stream, %stream
512
+ __net_unix_stream_clone_%out_status = stack_alloc 8
513
+ %out_status = call @sa_std_net_unix_stream_try_clone(%stream, &__net_unix_stream_clone_%out_status)
514
+ %out_stream = load __net_unix_stream_clone_%out_status+0 as u64
515
+ [END_MACRO]
516
+
517
+ // Rust method-name alias over NET_UNIX_STREAM_TRY_CLONE.
518
+ [MACRO] NET_UNIX_STREAM_CLONE %out_status, %out_stream, %stream
519
+ EXPAND NET_UNIX_STREAM_TRY_CLONE %out_status, %out_stream, %stream
520
+ [END_MACRO]
521
+
522
+ [MACRO] NET_UNIX_STREAM_AS_RAW_FD %out_status, %out_fd, %stream
523
+ EXPAND FD_AS_RAW %out_status, %out_fd, %stream
524
+ [END_MACRO]
525
+
526
+ [MACRO] NET_UNIX_STREAM_AS_FD %out_status, %out_fd, %stream
527
+ EXPAND NET_UNIX_STREAM_AS_RAW_FD %out_status, %out_fd, %stream
528
+ [END_MACRO]
529
+
530
+ [MACRO] NET_UNIX_STREAM_INTO_RAW_FD %out_status, %out_fd, %stream
531
+ EXPAND FD_INTO_RAW %out_status, %out_fd, %stream
532
+ [END_MACRO]
533
+
534
+ [MACRO] NET_UNIX_STREAM_FROM_RAW_FD %out_status, %out_stream, %fd
535
+ __net_unix_stream_from_raw_%out_status = stack_alloc 8
536
+ %out_status = call @sa_std_net_unix_stream_from_raw_fd(%fd, &__net_unix_stream_from_raw_%out_status)
537
+ %out_stream = load __net_unix_stream_from_raw_%out_status+0 as u64
538
+ [END_MACRO]
539
+
540
+ [MACRO] NET_UNIX_STREAM_INTO_OWNED_FD %out_status, %out_fd_handle, %stream
541
+ EXPAND NET_UNIX_STREAM_INTO_RAW_FD %out_status, __net_unix_stream_owned_raw_%out_status, %stream
542
+ !%out_status
543
+ EXPAND FD_FROM_RAW %out_status, %out_fd_handle, __net_unix_stream_owned_raw_%out_status
544
+ !__net_unix_stream_owned_raw_%out_status
545
+ [END_MACRO]
546
+
547
+ [MACRO] NET_UNIX_STREAM_FROM_OWNED_FD %out_status, %out_stream, %fd_handle
548
+ EXPAND FD_INTO_RAW %out_status, __net_unix_stream_from_owned_raw_%out_status, %fd_handle
549
+ !%out_status
550
+ EXPAND NET_UNIX_STREAM_FROM_RAW_FD %out_status, %out_stream, __net_unix_stream_from_owned_raw_%out_status
551
+ !__net_unix_stream_from_owned_raw_%out_status
552
+ [END_MACRO]
553
+
554
+ [MACRO] NET_UNIX_STREAM_PEER_ADDR %out_status, %out_addr, %stream
555
+ __net_unix_peer_addr_%out_status = stack_alloc 8
556
+ %out_status = call @sa_std_net_unix_stream_peer_addr(%stream, &__net_unix_peer_addr_%out_status)
557
+ %out_addr = load __net_unix_peer_addr_%out_status+0 as u64
558
+ [END_MACRO]
559
+
560
+ [MACRO] NET_UNIX_STREAM_SET_PASSCRED %out_status, %stream, %enabled
561
+ %out_status = call @sa_std_net_unix_stream_set_passcred(%stream, %enabled)
562
+ [END_MACRO]
563
+
564
+ [MACRO] NET_UNIX_STREAM_PASSCRED %out_status, %out_enabled, %stream
565
+ __net_unix_passcred_%out_status = stack_alloc 4
566
+ %out_status = call @sa_std_net_unix_stream_passcred(%stream, &__net_unix_passcred_%out_status)
567
+ %out_enabled = load __net_unix_passcred_%out_status+0 as i32
568
+ [END_MACRO]
569
+
570
+ [MACRO] NET_UNIX_STREAM_SET_MARK %out_status, %stream, %mark
571
+ %out_status = call @sa_std_net_unix_stream_set_mark(%stream, %mark)
572
+ [END_MACRO]
573
+
574
+ [MACRO] NET_UNIX_STREAM_PEER_CRED %out_status, %out_pid, %out_uid, %out_gid, %stream
575
+ __net_unix_peer_pid_%out_status = stack_alloc 4
576
+ __net_unix_peer_uid_%out_status = stack_alloc 4
577
+ __net_unix_peer_gid_%out_status = stack_alloc 4
578
+ %out_status = call @sa_std_net_unix_stream_peer_cred(%stream, &__net_unix_peer_pid_%out_status, &__net_unix_peer_uid_%out_status, &__net_unix_peer_gid_%out_status)
579
+ %out_pid = load __net_unix_peer_pid_%out_status+0 as i32
580
+ %out_uid = load __net_unix_peer_uid_%out_status+0 as u32
581
+ %out_gid = load __net_unix_peer_gid_%out_status+0 as u32
582
+ [END_MACRO]
583
+
584
+ [MACRO] NET_UNIX_STREAM_SET_READ_TIMEOUT %out_status, %stream, %timeout_ns
585
+ EXPAND NET_TCP_STREAM_SET_READ_TIMEOUT %out_status, %stream, %timeout_ns
586
+ [END_MACRO]
587
+
588
+ [MACRO] NET_UNIX_STREAM_SET_WRITE_TIMEOUT %out_status, %stream, %timeout_ns
589
+ EXPAND NET_TCP_STREAM_SET_WRITE_TIMEOUT %out_status, %stream, %timeout_ns
590
+ [END_MACRO]
591
+
592
+ [MACRO] NET_UNIX_STREAM_READ_TIMEOUT %out_status, %out_timeout_ns, %stream
593
+ EXPAND NET_TCP_STREAM_READ_TIMEOUT %out_status, %out_timeout_ns, %stream
594
+ [END_MACRO]
595
+
596
+ [MACRO] NET_UNIX_STREAM_WRITE_TIMEOUT %out_status, %out_timeout_ns, %stream
597
+ EXPAND NET_TCP_STREAM_WRITE_TIMEOUT %out_status, %out_timeout_ns, %stream
598
+ [END_MACRO]
599
+
600
+ [MACRO] NET_UNIX_STREAM_SET_NONBLOCKING %out_status, %stream, %enabled
601
+ EXPAND NET_TCP_STREAM_SET_NONBLOCKING %out_status, %stream, %enabled
602
+ [END_MACRO]
603
+
604
+ [MACRO] NET_UNIX_STREAM_TAKE_ERROR %out_status, %out_error, %stream
605
+ EXPAND NET_TCP_STREAM_TAKE_ERROR %out_status, %out_error, %stream
606
+ [END_MACRO]
607
+
608
+ [MACRO] NET_UNIX_STREAM_PEEK %out_status, %out_len, %stream, %buf, %cap
609
+ EXPAND NET_TCP_STREAM_PEEK %out_status, %out_len, %stream, %buf, %cap
610
+ [END_MACRO]
611
+
612
+ [MACRO] NET_UNIX_STREAM_SHUTDOWN %out_status, %stream, %how
613
+ EXPAND NET_TCP_STREAM_SHUTDOWN %out_status, %stream, %how
614
+ [END_MACRO]
615
+
616
+ [MACRO] NET_UNIX_DATAGRAM_UNBOUND %out_status, %out_socket
617
+ __net_unix_datagram_unbound_%out_status = stack_alloc 8
618
+ %out_status = call @sa_std_net_unix_datagram_unbound(&__net_unix_datagram_unbound_%out_status)
619
+ %out_socket = load __net_unix_datagram_unbound_%out_status+0 as u64
620
+ [END_MACRO]
621
+
622
+ [MACRO] NET_UNIX_DATAGRAM_BIND %out_status, %out_socket, %path, %path_len
623
+ __net_unix_datagram_bind_%out_status = stack_alloc 8
624
+ %out_status = call @sa_std_net_unix_datagram_bind(&%path, %path_len, &__net_unix_datagram_bind_%out_status)
625
+ %out_socket = load __net_unix_datagram_bind_%out_status+0 as u64
626
+ [END_MACRO]
627
+
628
+ [MACRO] NET_UNIX_DATAGRAM_BIND_ADDR %out_status, %out_socket, %addr
629
+ __net_unix_datagram_bind_addr_%out_status = stack_alloc 8
630
+ %out_status = call @sa_std_net_unix_datagram_bind_addr(%addr, &__net_unix_datagram_bind_addr_%out_status)
631
+ %out_socket = load __net_unix_datagram_bind_addr_%out_status+0 as u64
632
+ [END_MACRO]
633
+
634
+ [MACRO] NET_UNIX_DATAGRAM_PAIR %out_status, %out_left, %out_right
635
+ __net_unix_datagram_pair_left_%out_status = stack_alloc 8
636
+ __net_unix_datagram_pair_right_%out_status = stack_alloc 8
637
+ %out_status = call @sa_std_net_unix_datagram_pair(&__net_unix_datagram_pair_left_%out_status, &__net_unix_datagram_pair_right_%out_status)
638
+ %out_left = load __net_unix_datagram_pair_left_%out_status+0 as u64
639
+ %out_right = load __net_unix_datagram_pair_right_%out_status+0 as u64
640
+ [END_MACRO]
641
+
642
+ [MACRO] NET_UNIX_DATAGRAM_CONNECT %out_status, %socket, %path, %path_len
643
+ %out_status = call @sa_std_net_unix_datagram_connect(%socket, &%path, %path_len)
644
+ [END_MACRO]
645
+
646
+ [MACRO] NET_UNIX_DATAGRAM_CONNECT_ADDR %out_status, %socket, %addr
647
+ %out_status = call @sa_std_net_unix_datagram_connect_addr(%socket, %addr)
648
+ [END_MACRO]
649
+
650
+ [MACRO] NET_UNIX_DATAGRAM_TRY_CLONE %out_status, %out_socket, %socket
651
+ __net_unix_datagram_clone_%out_status = stack_alloc 8
652
+ %out_status = call @sa_std_net_unix_datagram_try_clone(%socket, &__net_unix_datagram_clone_%out_status)
653
+ %out_socket = load __net_unix_datagram_clone_%out_status+0 as u64
654
+ [END_MACRO]
655
+
656
+ // Rust method-name alias over NET_UNIX_DATAGRAM_TRY_CLONE.
657
+ [MACRO] NET_UNIX_DATAGRAM_CLONE %out_status, %out_socket, %socket
658
+ EXPAND NET_UNIX_DATAGRAM_TRY_CLONE %out_status, %out_socket, %socket
659
+ [END_MACRO]
660
+
661
+ [MACRO] NET_UNIX_DATAGRAM_AS_RAW_FD %out_status, %out_fd, %socket
662
+ EXPAND FD_AS_RAW %out_status, %out_fd, %socket
663
+ [END_MACRO]
664
+
665
+ [MACRO] NET_UNIX_DATAGRAM_AS_FD %out_status, %out_fd, %socket
666
+ EXPAND NET_UNIX_DATAGRAM_AS_RAW_FD %out_status, %out_fd, %socket
667
+ [END_MACRO]
668
+
669
+ [MACRO] NET_UNIX_DATAGRAM_INTO_RAW_FD %out_status, %out_fd, %socket
670
+ EXPAND FD_INTO_RAW %out_status, %out_fd, %socket
671
+ [END_MACRO]
672
+
673
+ [MACRO] NET_UNIX_DATAGRAM_FROM_RAW_FD %out_status, %out_socket, %fd
674
+ __net_unix_datagram_from_raw_%out_status = stack_alloc 8
675
+ %out_status = call @sa_std_net_unix_datagram_from_raw_fd(%fd, &__net_unix_datagram_from_raw_%out_status)
676
+ %out_socket = load __net_unix_datagram_from_raw_%out_status+0 as u64
677
+ [END_MACRO]
678
+
679
+ [MACRO] NET_UNIX_DATAGRAM_INTO_OWNED_FD %out_status, %out_fd_handle, %socket
680
+ EXPAND NET_UNIX_DATAGRAM_INTO_RAW_FD %out_status, __net_unix_datagram_owned_raw_%out_status, %socket
681
+ !%out_status
682
+ EXPAND FD_FROM_RAW %out_status, %out_fd_handle, __net_unix_datagram_owned_raw_%out_status
683
+ !__net_unix_datagram_owned_raw_%out_status
684
+ [END_MACRO]
685
+
686
+ [MACRO] NET_UNIX_DATAGRAM_FROM_OWNED_FD %out_status, %out_socket, %fd_handle
687
+ EXPAND FD_INTO_RAW %out_status, __net_unix_datagram_from_owned_raw_%out_status, %fd_handle
688
+ !%out_status
689
+ EXPAND NET_UNIX_DATAGRAM_FROM_RAW_FD %out_status, %out_socket, __net_unix_datagram_from_owned_raw_%out_status
690
+ !__net_unix_datagram_from_owned_raw_%out_status
691
+ [END_MACRO]
692
+
693
+ [MACRO] NET_UNIX_DATAGRAM_LOCAL_ADDR %out_status, %out_addr, %socket
694
+ __net_unix_datagram_local_addr_%out_status = stack_alloc 8
695
+ %out_status = call @sa_std_net_unix_datagram_local_addr(%socket, &__net_unix_datagram_local_addr_%out_status)
696
+ %out_addr = load __net_unix_datagram_local_addr_%out_status+0 as u64
697
+ [END_MACRO]
698
+
699
+ [MACRO] NET_UNIX_DATAGRAM_PEER_ADDR %out_status, %out_addr, %socket
700
+ __net_unix_datagram_peer_addr_%out_status = stack_alloc 8
701
+ %out_status = call @sa_std_net_unix_datagram_peer_addr(%socket, &__net_unix_datagram_peer_addr_%out_status)
702
+ %out_addr = load __net_unix_datagram_peer_addr_%out_status+0 as u64
703
+ [END_MACRO]
704
+
705
+ [MACRO] NET_UNIX_DATAGRAM_SET_PASSCRED %out_status, %socket, %enabled
706
+ %out_status = call @sa_std_net_unix_datagram_set_passcred(%socket, %enabled)
707
+ [END_MACRO]
708
+
709
+ [MACRO] NET_UNIX_DATAGRAM_PASSCRED %out_status, %out_enabled, %socket
710
+ __net_unix_datagram_passcred_%out_status = stack_alloc 4
711
+ %out_status = call @sa_std_net_unix_datagram_passcred(%socket, &__net_unix_datagram_passcred_%out_status)
712
+ %out_enabled = load __net_unix_datagram_passcred_%out_status+0 as i32
713
+ [END_MACRO]
714
+
715
+ [MACRO] NET_UNIX_DATAGRAM_SET_MARK %out_status, %socket, %mark
716
+ %out_status = call @sa_std_net_unix_datagram_set_mark(%socket, %mark)
717
+ [END_MACRO]
718
+
719
+ [MACRO] NET_UNIX_DATAGRAM_SET_READ_TIMEOUT %out_status, %socket, %timeout_ns
720
+ EXPAND NET_UDP_SET_READ_TIMEOUT %out_status, %socket, %timeout_ns
721
+ [END_MACRO]
722
+
723
+ [MACRO] NET_UNIX_DATAGRAM_SET_WRITE_TIMEOUT %out_status, %socket, %timeout_ns
724
+ EXPAND NET_UDP_SET_WRITE_TIMEOUT %out_status, %socket, %timeout_ns
725
+ [END_MACRO]
726
+
727
+ [MACRO] NET_UNIX_DATAGRAM_READ_TIMEOUT %out_status, %out_timeout_ns, %socket
728
+ EXPAND NET_UDP_READ_TIMEOUT %out_status, %out_timeout_ns, %socket
729
+ [END_MACRO]
730
+
731
+ [MACRO] NET_UNIX_DATAGRAM_WRITE_TIMEOUT %out_status, %out_timeout_ns, %socket
732
+ EXPAND NET_UDP_WRITE_TIMEOUT %out_status, %out_timeout_ns, %socket
733
+ [END_MACRO]
734
+
735
+ [MACRO] NET_UNIX_DATAGRAM_SET_NONBLOCKING %out_status, %socket, %enabled
736
+ EXPAND NET_UDP_SET_NONBLOCKING %out_status, %socket, %enabled
737
+ [END_MACRO]
738
+
739
+ [MACRO] NET_UNIX_DATAGRAM_TAKE_ERROR %out_status, %out_error, %socket
740
+ EXPAND NET_UDP_TAKE_ERROR %out_status, %out_error, %socket
741
+ [END_MACRO]
742
+
743
+ [MACRO] NET_UNIX_DATAGRAM_SEND %out_status, %out_len, %socket, %buf, %len
744
+ EXPAND NET_UDP_SEND %out_status, %out_len, %socket, %buf, %len
745
+ [END_MACRO]
746
+
747
+ [MACRO] NET_UNIX_DATAGRAM_SEND_TO %out_status, %out_len, %socket, %buf, %len, %path, %path_len
748
+ __net_unix_datagram_send_to_len_%out_status = stack_alloc 8
749
+ %out_status = call @sa_std_net_unix_datagram_send_to(%socket, &%buf, %len, &%path, %path_len, &__net_unix_datagram_send_to_len_%out_status)
750
+ %out_len = load __net_unix_datagram_send_to_len_%out_status+0 as u64
751
+ [END_MACRO]
752
+
753
+ [MACRO] NET_UNIX_DATAGRAM_SEND_TO_ADDR %out_status, %out_len, %socket, %buf, %len, %addr
754
+ __net_unix_datagram_send_to_addr_len_%out_status = stack_alloc 8
755
+ %out_status = call @sa_std_net_unix_datagram_send_to_addr(%socket, &%buf, %len, %addr, &__net_unix_datagram_send_to_addr_len_%out_status)
756
+ %out_len = load __net_unix_datagram_send_to_addr_len_%out_status+0 as u64
757
+ [END_MACRO]
758
+
759
+ [MACRO] NET_UNIX_DATAGRAM_RECV %out_status, %out_len, %socket, %buf, %cap
760
+ EXPAND NET_UDP_RECV %out_status, %out_len, %socket, %buf, %cap
761
+ [END_MACRO]
762
+
763
+ [MACRO] NET_UNIX_DATAGRAM_RECV_FROM %out_status, %out_len, %out_addr, %socket, %buf, %cap
764
+ __net_unix_datagram_recv_from_len_%out_status = stack_alloc 8
765
+ __net_unix_datagram_recv_from_addr_%out_status = stack_alloc 8
766
+ %out_status = call @sa_std_net_unix_datagram_recv_from(%socket, &%buf, %cap, &__net_unix_datagram_recv_from_len_%out_status, &__net_unix_datagram_recv_from_addr_%out_status)
767
+ %out_len = load __net_unix_datagram_recv_from_len_%out_status+0 as u64
768
+ %out_addr = load __net_unix_datagram_recv_from_addr_%out_status+0 as u64
769
+ [END_MACRO]
770
+
771
+ [MACRO] NET_UNIX_DATAGRAM_PEEK %out_status, %out_len, %socket, %buf, %cap
772
+ EXPAND NET_UDP_PEEK %out_status, %out_len, %socket, %buf, %cap
773
+ [END_MACRO]
774
+
775
+ [MACRO] NET_UNIX_DATAGRAM_PEEK_FROM %out_status, %out_len, %out_addr, %socket, %buf, %cap
776
+ __net_unix_datagram_peek_from_len_%out_status = stack_alloc 8
777
+ __net_unix_datagram_peek_from_addr_%out_status = stack_alloc 8
778
+ %out_status = call @sa_std_net_unix_datagram_peek_from(%socket, &%buf, %cap, &__net_unix_datagram_peek_from_len_%out_status, &__net_unix_datagram_peek_from_addr_%out_status)
779
+ %out_len = load __net_unix_datagram_peek_from_len_%out_status+0 as u64
780
+ %out_addr = load __net_unix_datagram_peek_from_addr_%out_status+0 as u64
781
+ [END_MACRO]
782
+
783
+ [MACRO] NET_UNIX_DATAGRAM_SHUTDOWN %out_status, %socket, %how
784
+ %out_status = call @sa_std_net_unix_datagram_shutdown(%socket, %how)
785
+ [END_MACRO]
786
+
787
+ [MACRO] NET_UNIX_DATAGRAM_CLOSE %out_status, %socket
788
+ EXPAND NET_UDP_CLOSE %out_status, %socket
789
+ [END_MACRO]
790
+
791
+ // TLS ClientHello fingerprints. Given a caller-built JA3 string (decimal
792
+ // TLSVersion,Ciphers,Extensions,EllipticCurves,ECPointFormats), NET_JA3_HASH
793
+ // writes the 32-char lowercase MD5 hex into %buf. NET_JA4_HASH12 writes the
794
+ // 12-char truncated SHA256 hex used by JA4's cipher/extension sub-hashes.
795
+ [MACRO] NET_JA3_HASH %out_status, %out_len, %ja3, %ja3_len, %buf, %cap
796
+ __net_ja3_len_%out_status = stack_alloc 8
797
+ %out_status = call @sa_std_net_ja3_hash(&%ja3, %ja3_len, &%buf, %cap, &__net_ja3_len_%out_status)
798
+ %out_len = load __net_ja3_len_%out_status+0 as u64
799
+ [END_MACRO]
800
+
801
+ [MACRO] NET_JA4_HASH12 %out_status, %out_len, %data, %data_len, %buf, %cap
802
+ __net_ja4_len_%out_status = stack_alloc 8
803
+ %out_status = call @sa_std_net_ja4_hash12(&%data, %data_len, &%buf, %cap, &__net_ja4_len_%out_status)
804
+ %out_len = load __net_ja4_len_%out_status+0 as u64
805
+ [END_MACRO]
806
+
807
+ // Shared WebSocket and URL helpers. These macros intentionally keep the
808
+ // protocol codecs in the sci runtime so plugins can wrap one implementation.
809
+ [MACRO] NET_WS_ACCEPT_KEY %out_status, %out_len, %key, %key_len, %buf, %cap
810
+ __net_ws_accept_len_%out_status = stack_alloc 8
811
+ %out_status = call @sa_std_ws_accept_key(&%key, %key_len, &%buf, %cap, &__net_ws_accept_len_%out_status)
812
+ %out_len = load __net_ws_accept_len_%out_status+0 as u64
813
+ [END_MACRO]
814
+
815
+ [MACRO] NET_WS_FRAME_PARSE %out_status, %out_fin, %out_opcode, %out_masked, %out_payload_offset, %out_payload_len, %out_frame_len, %mask_buf, %data, %data_len
816
+ __net_ws_fin_%out_status = stack_alloc 1
817
+ __net_ws_opcode_%out_status = stack_alloc 1
818
+ __net_ws_masked_%out_status = stack_alloc 1
819
+ __net_ws_payload_offset_%out_status = stack_alloc 8
820
+ __net_ws_payload_len_%out_status = stack_alloc 8
821
+ __net_ws_frame_len_%out_status = stack_alloc 8
822
+ %out_status = call @sa_std_ws_frame_parse(&%data, %data_len, &__net_ws_fin_%out_status, &__net_ws_opcode_%out_status, &__net_ws_masked_%out_status, &__net_ws_payload_offset_%out_status, &__net_ws_payload_len_%out_status, &__net_ws_frame_len_%out_status, &%mask_buf)
823
+ %out_fin = load __net_ws_fin_%out_status+0 as u8
824
+ %out_opcode = load __net_ws_opcode_%out_status+0 as u8
825
+ %out_masked = load __net_ws_masked_%out_status+0 as u8
826
+ %out_payload_offset = load __net_ws_payload_offset_%out_status+0 as u64
827
+ %out_payload_len = load __net_ws_payload_len_%out_status+0 as u64
828
+ %out_frame_len = load __net_ws_frame_len_%out_status+0 as u64
829
+ [END_MACRO]
830
+
831
+ [MACRO] NET_WS_UNMASK %out_status, %payload, %payload_len, %mask
832
+ %out_status = call @sa_std_ws_unmask(&%payload, %payload_len, &%mask)
833
+ [END_MACRO]
834
+
835
+ [MACRO] NET_WS_FRAME_BUILD %out_status, %out_len, %opcode, %fin, %payload, %payload_len, %mask, %buf, %cap
836
+ __net_ws_build_len_%out_status = stack_alloc 8
837
+ %out_status = call @sa_std_ws_frame_build(%opcode, %fin, &%payload, %payload_len, &%mask, &%buf, %cap, &__net_ws_build_len_%out_status)
838
+ %out_len = load __net_ws_build_len_%out_status+0 as u64
839
+ [END_MACRO]
840
+
841
+ [MACRO] NET_WS_FRAME_BUILD_UNMASKED %out_status, %out_len, %opcode, %fin, %payload, %payload_len, %buf, %cap
842
+ __net_ws_build_unmasked_len_%out_status = stack_alloc 8
843
+ %out_status = call @sa_std_ws_frame_build_unmasked(%opcode, %fin, &%payload, %payload_len, &%buf, %cap, &__net_ws_build_unmasked_len_%out_status)
844
+ %out_len = load __net_ws_build_unmasked_len_%out_status+0 as u64
845
+ [END_MACRO]
846
+
847
+ [MACRO] NET_URL_PARSE %out_status, %out_port, %url, %url_len, %scheme_buf, %scheme_cap, %scheme_len, %host_buf, %host_cap, %host_len, %path_buf, %path_cap, %path_len
848
+ __net_url_scheme_len_%out_status = stack_alloc 8
849
+ __net_url_host_len_%out_status = stack_alloc 8
850
+ __net_url_path_len_%out_status = stack_alloc 8
851
+ __net_url_port_%out_status = stack_alloc 4
852
+ %out_status = call @sa_std_url_parse(&%url, %url_len, &%scheme_buf, %scheme_cap, &__net_url_scheme_len_%out_status, &%host_buf, %host_cap, &__net_url_host_len_%out_status, &%path_buf, %path_cap, &__net_url_path_len_%out_status, &__net_url_port_%out_status)
853
+ %scheme_len = load __net_url_scheme_len_%out_status+0 as u64
854
+ %host_len = load __net_url_host_len_%out_status+0 as u64
855
+ %path_len = load __net_url_path_len_%out_status+0 as u64
856
+ %out_port = load __net_url_port_%out_status+0 as u32
857
+ [END_MACRO]
858
+
859
+ [MACRO] NET_UDP_BIND %out_status, %out_socket, %host, %host_len, %port
860
+ __net_udp_bind_handle_%out_status = stack_alloc 8
861
+ %out_status = call @sa_std_net_udp_bind(&%host, %host_len, %port, &__net_udp_bind_handle_%out_status)
862
+ %out_socket = load __net_udp_bind_handle_%out_status+0 as u64
863
+ [END_MACRO]
864
+
865
+ [MACRO] NET_UDP_AS_RAW_FD %out_status, %out_fd, %socket
866
+ EXPAND FD_AS_RAW %out_status, %out_fd, %socket
867
+ [END_MACRO]
868
+
869
+ [MACRO] NET_UDP_AS_FD %out_status, %out_fd, %socket
870
+ EXPAND NET_UDP_AS_RAW_FD %out_status, %out_fd, %socket
871
+ [END_MACRO]
872
+
873
+ [MACRO] NET_UDP_INTO_RAW_FD %out_status, %out_fd, %socket
874
+ EXPAND FD_INTO_RAW %out_status, %out_fd, %socket
875
+ [END_MACRO]
876
+
877
+ [MACRO] NET_UDP_FROM_RAW_FD %out_status, %out_socket, %fd
878
+ __net_udp_from_raw_%out_status = stack_alloc 8
879
+ %out_status = call @sa_std_net_udp_from_raw_fd(%fd, &__net_udp_from_raw_%out_status)
880
+ %out_socket = load __net_udp_from_raw_%out_status+0 as u64
881
+ [END_MACRO]
882
+
883
+ [MACRO] NET_UDP_INTO_OWNED_FD %out_status, %out_fd_handle, %socket
884
+ EXPAND NET_UDP_INTO_RAW_FD %out_status, __net_udp_owned_raw_%out_status, %socket
885
+ !%out_status
886
+ EXPAND FD_FROM_RAW %out_status, %out_fd_handle, __net_udp_owned_raw_%out_status
887
+ !__net_udp_owned_raw_%out_status
888
+ [END_MACRO]
889
+
890
+ [MACRO] NET_UDP_FROM_OWNED_FD %out_status, %out_socket, %fd_handle
891
+ EXPAND FD_INTO_RAW %out_status, __net_udp_from_owned_raw_%out_status, %fd_handle
892
+ !%out_status
893
+ EXPAND NET_UDP_FROM_RAW_FD %out_status, %out_socket, __net_udp_from_owned_raw_%out_status
894
+ !__net_udp_from_owned_raw_%out_status
895
+ [END_MACRO]
896
+
897
+ [MACRO] NET_UDP_LOCAL_ADDR %out_status, %out_addr, %socket
898
+ __net_udp_addr_%out_status = stack_alloc 8
899
+ %out_status = call @sa_std_net_udp_local_addr(%socket, &__net_udp_addr_%out_status)
900
+ %out_addr = load __net_udp_addr_%out_status+0 as u64
901
+ [END_MACRO]
902
+
903
+ [MACRO] NET_UDP_PEER_ADDR %out_status, %out_addr, %socket
904
+ __net_udp_peer_addr_%out_status = stack_alloc 8
905
+ %out_status = call @sa_std_net_udp_peer_addr(%socket, &__net_udp_peer_addr_%out_status)
906
+ %out_addr = load __net_udp_peer_addr_%out_status+0 as u64
907
+ [END_MACRO]
908
+
909
+ [MACRO] NET_UDP_TRY_CLONE %out_status, %out_socket, %socket
910
+ __net_udp_clone_%out_status = stack_alloc 8
911
+ %out_status = call @sa_std_net_udp_try_clone(%socket, &__net_udp_clone_%out_status)
912
+ %out_socket = load __net_udp_clone_%out_status+0 as u64
913
+ [END_MACRO]
914
+ [MACRO] NET_UDP_CONNECT %out_status, %socket, %host, %host_len, %port
915
+ %out_status = call @sa_std_net_udp_connect(%socket, &%host, %host_len, %port)
916
+ [END_MACRO]
917
+
918
+ [MACRO] NET_UDP_CONNECT_ADDR %out_status, %socket, %addr
919
+ %out_status = call @sa_std_net_udp_connect_addr(%socket, %addr)
920
+ [END_MACRO]
921
+
922
+ [MACRO] NET_UDP_SET_READ_TIMEOUT %out_status, %socket, %timeout_ns
923
+ %out_status = call @sa_std_net_udp_set_read_timeout(%socket, %timeout_ns)
924
+ [END_MACRO]
925
+
926
+ [MACRO] NET_UDP_SET_WRITE_TIMEOUT %out_status, %socket, %timeout_ns
927
+ %out_status = call @sa_std_net_udp_set_write_timeout(%socket, %timeout_ns)
928
+ [END_MACRO]
929
+
930
+ [MACRO] NET_UDP_SET_NONBLOCKING %out_status, %socket, %enabled
931
+ %out_status = call @sa_std_net_udp_set_nonblocking(%socket, %enabled)
932
+ [END_MACRO]
933
+
934
+ [MACRO] NET_UDP_SET_BROADCAST %out_status, %socket, %enabled
935
+ %out_status = call @sa_std_net_udp_set_broadcast(%socket, %enabled)
936
+ [END_MACRO]
937
+
938
+
939
+ [MACRO] NET_UDP_SET_RECV_BUFFER_SIZE %out_status, %socket, %size
940
+ %out_status = call @sa_std_net_udp_set_recv_buffer_size(%socket, %size)
941
+ [END_MACRO]
942
+ [MACRO] NET_UDP_RECV_BUFFER_SIZE %out_status, %out_size, %socket
943
+ __net_udp_recv_buffer_size_%out_status = stack_alloc 4
944
+ %out_status = call @sa_std_net_udp_recv_buffer_size(%socket, &__net_udp_recv_buffer_size_%out_status)
945
+ %out_size = load __net_udp_recv_buffer_size_%out_status+0 as u32
946
+ [END_MACRO]
947
+ [MACRO] NET_UDP_SET_SEND_BUFFER_SIZE %out_status, %socket, %size
948
+ %out_status = call @sa_std_net_udp_set_send_buffer_size(%socket, %size)
949
+ [END_MACRO]
950
+ [MACRO] NET_UDP_SEND_BUFFER_SIZE %out_status, %out_size, %socket
951
+ __net_udp_send_buffer_size_%out_status = stack_alloc 4
952
+ %out_status = call @sa_std_net_udp_send_buffer_size(%socket, &__net_udp_send_buffer_size_%out_status)
953
+ %out_size = load __net_udp_send_buffer_size_%out_status+0 as u32
954
+ [END_MACRO]
955
+
956
+ [MACRO] NET_UDP_SET_ONLY_V6 %out_status, %socket, %enabled
957
+ %out_status = call @sa_std_net_udp_set_only_v6(%socket, %enabled)
958
+ [END_MACRO]
959
+
960
+ [MACRO] NET_UDP_ONLY_V6 %out_status, %out_enabled, %socket
961
+ __net_udp_only_v6_%out_status = stack_alloc 4
962
+ %out_status = call @sa_std_net_udp_only_v6(%socket, &__net_udp_only_v6_%out_status)
963
+ %out_enabled = load __net_udp_only_v6_%out_status+0 as i32
964
+ [END_MACRO]
965
+ [MACRO] NET_UDP_SET_TTL %out_status, %socket, %ttl
966
+ %out_status = call @sa_std_net_udp_set_ttl(%socket, %ttl)
967
+ [END_MACRO]
968
+
969
+ [MACRO] NET_UDP_SET_MULTICAST_LOOP_V4 %out_status, %socket, %enabled
970
+ %out_status = call @sa_std_net_udp_set_multicast_loop_v4(%socket, %enabled)
971
+ [END_MACRO]
972
+
973
+ [MACRO] NET_UDP_SET_MULTICAST_TTL_V4 %out_status, %socket, %ttl
974
+ %out_status = call @sa_std_net_udp_set_multicast_ttl_v4(%socket, %ttl)
975
+ [END_MACRO]
976
+
977
+ [MACRO] NET_UDP_SET_MULTICAST_LOOP_V6 %out_status, %socket, %enabled
978
+ %out_status = call @sa_std_net_udp_set_multicast_loop_v6(%socket, %enabled)
979
+ [END_MACRO]
980
+
981
+ [MACRO] NET_UDP_SET_MULTICAST_HOPS_V6 %out_status, %socket, %hops
982
+ %out_status = call @sa_std_net_udp_set_multicast_hops_v6(%socket, %hops)
983
+ [END_MACRO]
984
+
985
+ [MACRO] NET_UDP_READ_TIMEOUT %out_status, %out_timeout_ns, %socket
986
+ __net_udp_read_timeout_%out_status = stack_alloc 8
987
+ %out_status = call @sa_std_net_udp_read_timeout(%socket, &__net_udp_read_timeout_%out_status)
988
+ %out_timeout_ns = load __net_udp_read_timeout_%out_status+0 as u64
989
+ [END_MACRO]
990
+
991
+ [MACRO] NET_UDP_WRITE_TIMEOUT %out_status, %out_timeout_ns, %socket
992
+ __net_udp_write_timeout_%out_status = stack_alloc 8
993
+ %out_status = call @sa_std_net_udp_write_timeout(%socket, &__net_udp_write_timeout_%out_status)
994
+ %out_timeout_ns = load __net_udp_write_timeout_%out_status+0 as u64
995
+ [END_MACRO]
996
+
997
+ [MACRO] NET_UDP_BROADCAST %out_status, %out_enabled, %socket
998
+ __net_udp_broadcast_%out_status = stack_alloc 4
999
+ %out_status = call @sa_std_net_udp_broadcast(%socket, &__net_udp_broadcast_%out_status)
1000
+ %out_enabled = load __net_udp_broadcast_%out_status+0 as i32
1001
+ [END_MACRO]
1002
+
1003
+ [MACRO] NET_UDP_TTL %out_status, %out_ttl, %socket
1004
+ __net_udp_ttl_%out_status = stack_alloc 4
1005
+ %out_status = call @sa_std_net_udp_ttl(%socket, &__net_udp_ttl_%out_status)
1006
+ %out_ttl = load __net_udp_ttl_%out_status+0 as u32
1007
+ [END_MACRO]
1008
+
1009
+ [MACRO] NET_UDP_MULTICAST_LOOP_V4 %out_status, %out_enabled, %socket
1010
+ __net_udp_multicast_loop_v4_%out_status = stack_alloc 4
1011
+ %out_status = call @sa_std_net_udp_multicast_loop_v4(%socket, &__net_udp_multicast_loop_v4_%out_status)
1012
+ %out_enabled = load __net_udp_multicast_loop_v4_%out_status+0 as i32
1013
+ [END_MACRO]
1014
+
1015
+ [MACRO] NET_UDP_MULTICAST_TTL_V4 %out_status, %out_ttl, %socket
1016
+ __net_udp_multicast_ttl_v4_%out_status = stack_alloc 4
1017
+ %out_status = call @sa_std_net_udp_multicast_ttl_v4(%socket, &__net_udp_multicast_ttl_v4_%out_status)
1018
+ %out_ttl = load __net_udp_multicast_ttl_v4_%out_status+0 as u32
1019
+ [END_MACRO]
1020
+
1021
+ [MACRO] NET_UDP_MULTICAST_LOOP_V6 %out_status, %out_enabled, %socket
1022
+ __net_udp_multicast_loop_v6_%out_status = stack_alloc 4
1023
+ %out_status = call @sa_std_net_udp_multicast_loop_v6(%socket, &__net_udp_multicast_loop_v6_%out_status)
1024
+ %out_enabled = load __net_udp_multicast_loop_v6_%out_status+0 as i32
1025
+ [END_MACRO]
1026
+
1027
+ [MACRO] NET_UDP_MULTICAST_HOPS_V6 %out_status, %out_hops, %socket
1028
+ __net_udp_multicast_hops_v6_%out_status = stack_alloc 4
1029
+ %out_status = call @sa_std_net_udp_multicast_hops_v6(%socket, &__net_udp_multicast_hops_v6_%out_status)
1030
+ %out_hops = load __net_udp_multicast_hops_v6_%out_status+0 as u32
1031
+ [END_MACRO]
1032
+
1033
+ [MACRO] NET_UDP_SET_MULTICAST_IF_V4 %out_status, %socket, %interface_addr
1034
+ %out_status = call @sa_std_net_udp_set_multicast_if_v4(%socket, &%interface_addr)
1035
+ [END_MACRO]
1036
+
1037
+ [MACRO] NET_UDP_MULTICAST_IF_V4 %out_status, %out_interface_addr, %socket
1038
+ %out_status = call @sa_std_net_udp_multicast_if_v4(%socket, &%out_interface_addr)
1039
+ [END_MACRO]
1040
+
1041
+ [MACRO] NET_UDP_SET_MULTICAST_IF_V6 %out_status, %socket, %interface_index
1042
+ %out_status = call @sa_std_net_udp_set_multicast_if_v6(%socket, %interface_index)
1043
+ [END_MACRO]
1044
+
1045
+ [MACRO] NET_UDP_MULTICAST_IF_V6 %out_status, %out_interface_index, %socket
1046
+ __net_udp_multicast_if_v6_%out_status = stack_alloc 4
1047
+ %out_status = call @sa_std_net_udp_multicast_if_v6(%socket, &__net_udp_multicast_if_v6_%out_status)
1048
+ %out_interface_index = load __net_udp_multicast_if_v6_%out_status+0 as u32
1049
+ [END_MACRO]
1050
+
1051
+ [MACRO] NET_UDP_TAKE_ERROR %out_status, %out_error, %socket
1052
+ __net_udp_error_%out_status = stack_alloc 4
1053
+ %out_status = call @sa_std_net_udp_take_error(%socket, &__net_udp_error_%out_status)
1054
+ %out_error = load __net_udp_error_%out_status+0 as i32
1055
+ [END_MACRO]
1056
+
1057
+ [MACRO] NET_UDP_JOIN_MULTICAST_V4 %out_status, %socket, %multi_host, %multi_host_len, %interface_host, %interface_host_len
1058
+ %out_status = call @sa_std_net_udp_join_multicast_v4(%socket, &%multi_host, %multi_host_len, &%interface_host, %interface_host_len)
1059
+ [END_MACRO]
1060
+
1061
+ [MACRO] NET_UDP_LEAVE_MULTICAST_V4 %out_status, %socket, %multi_host, %multi_host_len, %interface_host, %interface_host_len
1062
+ %out_status = call @sa_std_net_udp_leave_multicast_v4(%socket, &%multi_host, %multi_host_len, &%interface_host, %interface_host_len)
1063
+ [END_MACRO]
1064
+
1065
+ [MACRO] NET_UDP_JOIN_MULTICAST_V6 %out_status, %socket, %multi_host, %multi_host_len, %interface_index
1066
+ %out_status = call @sa_std_net_udp_join_multicast_v6(%socket, &%multi_host, %multi_host_len, %interface_index)
1067
+ [END_MACRO]
1068
+
1069
+ [MACRO] NET_UDP_LEAVE_MULTICAST_V6 %out_status, %socket, %multi_host, %multi_host_len, %interface_index
1070
+ %out_status = call @sa_std_net_udp_leave_multicast_v6(%socket, &%multi_host, %multi_host_len, %interface_index)
1071
+ [END_MACRO]
1072
+
1073
+ [MACRO] NET_UDP_SEND %out_status, %out_len, %socket, %buf, %len
1074
+ __net_udp_send_len_%out_status = stack_alloc 8
1075
+ %out_status = call @sa_std_net_udp_send(%socket, &%buf, %len, &__net_udp_send_len_%out_status)
1076
+ %out_len = load __net_udp_send_len_%out_status+0 as u64
1077
+ [END_MACRO]
1078
+
1079
+ [MACRO] NET_UDP_RECV %out_status, %out_len, %socket, %buf, %cap
1080
+ __net_udp_recv_len_%out_status = stack_alloc 8
1081
+ %out_status = call @sa_std_net_udp_recv(%socket, &%buf, %cap, &__net_udp_recv_len_%out_status)
1082
+ %out_len = load __net_udp_recv_len_%out_status+0 as u64
1083
+ [END_MACRO]
1084
+
1085
+ [MACRO] NET_UDP_PEEK %out_status, %out_len, %socket, %buf, %cap
1086
+ __net_udp_peek_len_%out_status = stack_alloc 8
1087
+ %out_status = call @sa_std_net_udp_peek(%socket, &%buf, %cap, &__net_udp_peek_len_%out_status)
1088
+ %out_len = load __net_udp_peek_len_%out_status+0 as u64
1089
+ [END_MACRO]
1090
+
1091
+ [MACRO] NET_UDP_SEND_TO %out_status, %out_len, %socket, %buf, %len, %host, %host_len, %port
1092
+ __net_udp_send_to_len_%out_status = stack_alloc 8
1093
+ %out_status = call @sa_std_net_udp_send_to(%socket, &%buf, %len, &%host, %host_len, %port, &__net_udp_send_to_len_%out_status)
1094
+ %out_len = load __net_udp_send_to_len_%out_status+0 as u64
1095
+ [END_MACRO]
1096
+
1097
+ [MACRO] NET_UDP_RECV_FROM %out_status, %out_len, %out_addr, %socket, %buf, %cap
1098
+ __net_udp_recv_from_len_%out_status = stack_alloc 8
1099
+ __net_udp_recv_from_addr_%out_status = stack_alloc 8
1100
+ %out_status = call @sa_std_net_udp_recv_from(%socket, &%buf, %cap, &__net_udp_recv_from_len_%out_status, &__net_udp_recv_from_addr_%out_status)
1101
+ %out_len = load __net_udp_recv_from_len_%out_status+0 as u64
1102
+ %out_addr = load __net_udp_recv_from_addr_%out_status+0 as u64
1103
+ [END_MACRO]
1104
+
1105
+ [MACRO] NET_UDP_PEEK_FROM %out_status, %out_len, %out_addr, %socket, %buf, %cap
1106
+ __net_udp_peek_from_len_%out_status = stack_alloc 8
1107
+ __net_udp_peek_from_addr_%out_status = stack_alloc 8
1108
+ %out_status = call @sa_std_net_udp_peek_from(%socket, &%buf, %cap, &__net_udp_peek_from_len_%out_status, &__net_udp_peek_from_addr_%out_status)
1109
+ %out_len = load __net_udp_peek_from_len_%out_status+0 as u64
1110
+ %out_addr = load __net_udp_peek_from_addr_%out_status+0 as u64
1111
+ [END_MACRO]
1112
+
1113
+ [MACRO] NET_UDP_SEND_VECTORED %out_status, %out_len, %socket, %iovs, %iov_count
1114
+ __net_udp_send_vec_len_%out_status = stack_alloc 8
1115
+ %out_status = call @sa_std_net_udp_send_vectored(%socket, &%iovs, %iov_count, &__net_udp_send_vec_len_%out_status)
1116
+ %out_len = load __net_udp_send_vec_len_%out_status+0 as u64
1117
+ [END_MACRO]
1118
+
1119
+ [MACRO] NET_UDP_SEND_TO_VECTORED %out_status, %out_len, %socket, %iovs, %iov_count, %host, %host_len, %port
1120
+ __net_udp_send_to_vec_len_%out_status = stack_alloc 8
1121
+ %out_status = call @sa_std_net_udp_send_to_vectored(%socket, &%iovs, %iov_count, &%host, %host_len, %port, &__net_udp_send_to_vec_len_%out_status)
1122
+ %out_len = load __net_udp_send_to_vec_len_%out_status+0 as u64
1123
+ [END_MACRO]
1124
+
1125
+ [MACRO] NET_UDP_RECV_FROM_VECTORED %out_status, %out_len, %out_addr, %socket, %iovs, %iov_count
1126
+ __net_udp_recv_from_vec_len_%out_status = stack_alloc 8
1127
+ __net_udp_recv_from_vec_addr_%out_status = stack_alloc 8
1128
+ %out_status = call @sa_std_net_udp_recv_from_vectored(%socket, &%iovs, %iov_count, &__net_udp_recv_from_vec_len_%out_status, &__net_udp_recv_from_vec_addr_%out_status)
1129
+ %out_len = load __net_udp_recv_from_vec_len_%out_status+0 as u64
1130
+ %out_addr = load __net_udp_recv_from_vec_addr_%out_status+0 as u64
1131
+ [END_MACRO]
1132
+
1133
+ [MACRO] NET_UDP_CLOSE %out_status, %socket
1134
+ %out_status = call @sa_net_udp_close(%socket)
1135
+ [END_MACRO]
1136
+
1137
+ [MACRO] NET_TO_SOCKET_ADDR_LIST %out_status, %out_list, %host, %host_len, %port
1138
+ __net_addr_list_handle_%out_status = stack_alloc 8
1139
+ %out_status = call @sa_std_net_to_socket_addr_list(&%host, %host_len, %port, &__net_addr_list_handle_%out_status)
1140
+ %out_list = load __net_addr_list_handle_%out_status+0 as u64
1141
+ [END_MACRO]
1142
+
1143
+ [MACRO] NET_ADDR_LIST_NEXT %out_status, %out_ok, %out_addr, %list
1144
+ __net_addr_list_next_ok_%out_status = stack_alloc 4
1145
+ __net_addr_list_next_addr_%out_status = stack_alloc 8
1146
+ %out_status = call @sa_std_net_addr_list_next(%list, &__net_addr_list_next_ok_%out_status, &__net_addr_list_next_addr_%out_status)
1147
+ %out_ok = load __net_addr_list_next_ok_%out_status+0 as i32
1148
+ %out_addr = load __net_addr_list_next_addr_%out_status+0 as u64
1149
+ [END_MACRO]
1150
+
1151
+ [MACRO] NET_ADDR_LIST_REMAINING %out_status, %out_remaining, %list
1152
+ __net_addr_list_remaining_%out_status = stack_alloc 8
1153
+ %out_status = call @sa_std_net_addr_list_remaining(%list, &__net_addr_list_remaining_%out_status)
1154
+ %out_remaining = load __net_addr_list_remaining_%out_status+0 as u64
1155
+ [END_MACRO]
1156
+
1157
+ [MACRO] NET_ADDR_LIST_RESET %out_status, %list
1158
+ %out_status = call @sa_std_net_addr_list_reset(%list)
1159
+ [END_MACRO]
1160
+
1161
+ [MACRO] NET_ADDR_LIST_FREE %out_status, %list
1162
+ %out_status = call @sa_std_net_addr_list_free(%list)
1163
+ [END_MACRO]
1164
+ [MACRO] NET_TO_SOCKET_ADDR_FIRST %out_status, %out_addr, %host, %host_len, %port
1165
+ __net_to_socket_addr_%out_status = stack_alloc 8
1166
+ %out_status = call @sa_std_net_to_socket_addr_first(&%host, %host_len, %port, &__net_to_socket_addr_%out_status)
1167
+ %out_addr = load __net_to_socket_addr_%out_status+0 as u64
1168
+ [END_MACRO]
1169
+
1170
+ [MACRO] NET_ADDR_HOST %out_ptr, %addr
1171
+ %out_ptr = call @sa_net_addr_host(%addr)
1172
+ [END_MACRO]
1173
+
1174
+ [MACRO] NET_ADDR_HOST_LEN %out_len, %addr
1175
+ %out_len = call @sa_net_addr_host_len(%addr)
1176
+ [END_MACRO]
1177
+
1178
+ [MACRO] NET_ADDR_PORT %out_port, %addr
1179
+ %out_port = call @sa_net_addr_port(%addr)
1180
+ [END_MACRO]
1181
+
1182
+ [MACRO] NET_ADDR_FAMILY %out_family, %addr
1183
+ %out_family = call @sa_net_addr_family(%addr)
1184
+ [END_MACRO]
1185
+
1186
+ [MACRO] NET_ADDR_SCOPE_ID %out_scope_id, %addr
1187
+ %out_scope_id = call @sa_net_addr_scope_id(%addr)
1188
+ [END_MACRO]
1189
+
1190
+ [MACRO] NET_ADDR_FORMAT %out_status, %out_len, %addr, %buf, %cap
1191
+ __net_addr_format_len_%out_status = stack_alloc 8
1192
+ %out_status = call @sa_std_net_addr_format(%addr, &%buf, %cap, &__net_addr_format_len_%out_status)
1193
+ %out_len = load __net_addr_format_len_%out_status+0 as u64
1194
+ [END_MACRO]
1195
+
1196
+ [MACRO] NET_ADDR_IS_IPV4 %out_flag, %addr
1197
+ __net_addr_family_%out_flag = call @sa_net_addr_family(%addr)
1198
+ %out_flag = eq __net_addr_family_%out_flag, SA_NET_AF_INET
1199
+ !__net_addr_family_%out_flag
1200
+ [END_MACRO]
1201
+
1202
+ [MACRO] NET_ADDR_IS_IPV6 %out_flag, %addr
1203
+ __net_addr_family_%out_flag = call @sa_net_addr_family(%addr)
1204
+ %out_flag = eq __net_addr_family_%out_flag, SA_NET_AF_INET6
1205
+ !__net_addr_family_%out_flag
1206
+ [END_MACRO]
1207
+
1208
+ [MACRO] NET_ADDR_FREE %out_status, %addr
1209
+ __net_addr_free_%out_status = call @sa_net_addr_free(%addr)
1210
+ %out_status = load __net_addr_free_%out_status+0 as i32
1211
+ !__net_addr_free_%out_status
1212
+ [END_MACRO]
1213
+
1214
+ [MACRO] NET_UNIX_ADDR_KIND %out_kind, %addr
1215
+ %out_kind = call @sa_net_unix_addr_kind(%addr)
1216
+ [END_MACRO]
1217
+
1218
+ [MACRO] NET_UNIX_ADDR_IS_UNNAMED %out_flag, %addr
1219
+ %out_flag = call @sa_net_unix_addr_is_unnamed(%addr)
1220
+ [END_MACRO]
1221
+
1222
+ [MACRO] NET_UNIX_ADDR_PATH_PTR %out_ptr, %addr
1223
+ %out_ptr = call @sa_net_unix_addr_path_ptr(%addr)
1224
+ [END_MACRO]
1225
+
1226
+ [MACRO] NET_UNIX_ADDR_PATH_LEN %out_len, %addr
1227
+ %out_len = call @sa_net_unix_addr_path_len(%addr)
1228
+ [END_MACRO]
1229
+
1230
+ [MACRO] NET_UNIX_ADDR_AS_PATHNAME_PTR %out_ptr, %addr
1231
+ EXPAND NET_UNIX_ADDR_PATH_PTR %out_ptr, %addr
1232
+ [END_MACRO]
1233
+
1234
+ [MACRO] NET_UNIX_ADDR_AS_PATHNAME_LEN %out_len, %addr
1235
+ EXPAND NET_UNIX_ADDR_PATH_LEN %out_len, %addr
1236
+ [END_MACRO]
1237
+
1238
+ [MACRO] NET_UNIX_ADDR_ABSTRACT_PTR %out_ptr, %addr
1239
+ %out_ptr = call @sa_net_unix_addr_abstract_ptr(%addr)
1240
+ [END_MACRO]
1241
+
1242
+ [MACRO] NET_UNIX_ADDR_ABSTRACT_LEN %out_len, %addr
1243
+ %out_len = call @sa_net_unix_addr_abstract_len(%addr)
1244
+ [END_MACRO]
1245
+
1246
+ [MACRO] NET_UNIX_ADDR_AS_ABSTRACT_NAME_PTR %out_ptr, %addr
1247
+ EXPAND NET_UNIX_ADDR_ABSTRACT_PTR %out_ptr, %addr
1248
+ [END_MACRO]
1249
+
1250
+ [MACRO] NET_UNIX_ADDR_AS_ABSTRACT_NAME_LEN %out_len, %addr
1251
+ EXPAND NET_UNIX_ADDR_ABSTRACT_LEN %out_len, %addr
1252
+ [END_MACRO]
1253
+
1254
+ [MACRO] NET_UNIX_ADDR_FREE %out_status, %addr
1255
+ __net_unix_addr_free_%out_status = call @sa_net_unix_addr_free(%addr)
1256
+ %out_status = load __net_unix_addr_free_%out_status+0 as i32
1257
+ !__net_unix_addr_free_%out_status
1258
+ [END_MACRO]
1259
+
1260
+ [MACRO] NET_IPV4_NEW %addr, %a, %b, %c, %d
1261
+ store %addr+NetIpv4Addr_a, %a as u8
1262
+ store %addr+NetIpv4Addr_b, %b as u8
1263
+ store %addr+NetIpv4Addr_c, %c as u8
1264
+ store %addr+NetIpv4Addr_d, %d as u8
1265
+ [END_MACRO]
1266
+
1267
+ [MACRO] NET_IPV4_UNSPECIFIED %addr
1268
+ EXPAND NET_IPV4_NEW %addr, 0, 0, 0, 0
1269
+ [END_MACRO]
1270
+
1271
+ // Rust-style Default for Ipv4Addr: UNSPECIFIED.
1272
+ [MACRO] NET_IPV4_DEFAULT %addr
1273
+ EXPAND NET_IPV4_UNSPECIFIED %addr
1274
+ [END_MACRO]
1275
+
1276
+ [MACRO] NET_IPV4_LOCALHOST %addr
1277
+ EXPAND NET_IPV4_NEW %addr, 127, 0, 0, 1
1278
+ [END_MACRO]
1279
+
1280
+ [MACRO] NET_IPV4_BROADCAST %addr
1281
+ EXPAND NET_IPV4_NEW %addr, 255, 255, 255, 255
1282
+ [END_MACRO]
1283
+
1284
+ [MACRO] NET_IPV4_BITS %out_bits
1285
+ %out_bits = add 0, NET_IPV4_BITS_VALUE
1286
+ [END_MACRO]
1287
+
1288
+ [MACRO] NET_IPV4_OCTETS %out_a, %out_b, %out_c, %out_d, %addr
1289
+ %out_a = load %addr+NetIpv4Addr_a as u8
1290
+ %out_b = load %addr+NetIpv4Addr_b as u8
1291
+ %out_c = load %addr+NetIpv4Addr_c as u8
1292
+ %out_d = load %addr+NetIpv4Addr_d as u8
1293
+ [END_MACRO]
1294
+
1295
+ [MACRO] NET_IPV4_AS_OCTETS_PTR %out_ptr, %addr
1296
+ %out_ptr = ptr_add %addr, 0
1297
+ [END_MACRO]
1298
+
1299
+ [MACRO] NET_IPV4_WRITE_OCTETS %out_ok, %dst_ptr, %dst_len, %addr
1300
+ __net_ipv4_write_fits_%out_ok = uge %dst_len, 4
1301
+ br __net_ipv4_write_fits_%out_ok -> L_NET_IPV4_WRITE_OCTETS_OK_%out_ok, L_NET_IPV4_WRITE_OCTETS_FAIL_%out_ok
1302
+
1303
+ L_NET_IPV4_WRITE_OCTETS_OK_%out_ok:
1304
+ __net_ipv4_write_a_%out_ok = load %addr+NetIpv4Addr_a as u8
1305
+ __net_ipv4_write_b_%out_ok = load %addr+NetIpv4Addr_b as u8
1306
+ __net_ipv4_write_c_%out_ok = load %addr+NetIpv4Addr_c as u8
1307
+ __net_ipv4_write_d_%out_ok = load %addr+NetIpv4Addr_d as u8
1308
+ store %dst_ptr+0, __net_ipv4_write_a_%out_ok as u8
1309
+ __net_ipv4_write_p1_%out_ok = ptr_add %dst_ptr, 1
1310
+ __net_ipv4_write_p2_%out_ok = ptr_add %dst_ptr, 2
1311
+ __net_ipv4_write_p3_%out_ok = ptr_add %dst_ptr, 3
1312
+ store __net_ipv4_write_p1_%out_ok+0, __net_ipv4_write_b_%out_ok as u8
1313
+ store __net_ipv4_write_p2_%out_ok+0, __net_ipv4_write_c_%out_ok as u8
1314
+ store __net_ipv4_write_p3_%out_ok+0, __net_ipv4_write_d_%out_ok as u8
1315
+ %out_ok = add 0, 1
1316
+ !__net_ipv4_write_p3_%out_ok
1317
+ !__net_ipv4_write_p2_%out_ok
1318
+ !__net_ipv4_write_p1_%out_ok
1319
+ !__net_ipv4_write_d_%out_ok
1320
+ !__net_ipv4_write_c_%out_ok
1321
+ !__net_ipv4_write_b_%out_ok
1322
+ !__net_ipv4_write_a_%out_ok
1323
+ !__net_ipv4_write_fits_%out_ok
1324
+ jmp L_NET_IPV4_WRITE_OCTETS_END_%out_ok
1325
+
1326
+ L_NET_IPV4_WRITE_OCTETS_FAIL_%out_ok:
1327
+ %out_ok = add 0, 0
1328
+ !__net_ipv4_write_fits_%out_ok
1329
+
1330
+ L_NET_IPV4_WRITE_OCTETS_END_%out_ok:
1331
+ [END_MACRO]
1332
+
1333
+ [MACRO] NET_IPV4_FROM_OCTETS %addr, %a, %b, %c, %d
1334
+ EXPAND NET_IPV4_NEW %addr, %a, %b, %c, %d
1335
+ [END_MACRO]
1336
+
1337
+ [MACRO] NET_IPV4_COPY %dst_addr, %src_addr
1338
+ __net_ipv4_copy_a_%dst_addr = load %src_addr+NetIpv4Addr_a as u8
1339
+ __net_ipv4_copy_b_%dst_addr = load %src_addr+NetIpv4Addr_b as u8
1340
+ __net_ipv4_copy_c_%dst_addr = load %src_addr+NetIpv4Addr_c as u8
1341
+ __net_ipv4_copy_d_%dst_addr = load %src_addr+NetIpv4Addr_d as u8
1342
+ EXPAND NET_IPV4_NEW %dst_addr, __net_ipv4_copy_a_%dst_addr, __net_ipv4_copy_b_%dst_addr, __net_ipv4_copy_c_%dst_addr, __net_ipv4_copy_d_%dst_addr
1343
+ !__net_ipv4_copy_d_%dst_addr
1344
+ !__net_ipv4_copy_c_%dst_addr
1345
+ !__net_ipv4_copy_b_%dst_addr
1346
+ !__net_ipv4_copy_a_%dst_addr
1347
+ [END_MACRO]
1348
+
1349
+ [MACRO] NET_IPV4_TO_BITS %out_bits, %addr
1350
+ __net_ipv4_bits_a_%out_bits = load %addr+NetIpv4Addr_a as u8
1351
+ __net_ipv4_bits_b_%out_bits = load %addr+NetIpv4Addr_b as u8
1352
+ __net_ipv4_bits_c_%out_bits = load %addr+NetIpv4Addr_c as u8
1353
+ __net_ipv4_bits_d_%out_bits = load %addr+NetIpv4Addr_d as u8
1354
+ __net_ipv4_bits_a_shift_%out_bits = shl __net_ipv4_bits_a_%out_bits, 24
1355
+ __net_ipv4_bits_b_shift_%out_bits = shl __net_ipv4_bits_b_%out_bits, 16
1356
+ __net_ipv4_bits_c_shift_%out_bits = shl __net_ipv4_bits_c_%out_bits, 8
1357
+ __net_ipv4_bits_ab_%out_bits = or __net_ipv4_bits_a_shift_%out_bits, __net_ipv4_bits_b_shift_%out_bits
1358
+ __net_ipv4_bits_cd_%out_bits = or __net_ipv4_bits_c_shift_%out_bits, __net_ipv4_bits_d_%out_bits
1359
+ %out_bits = or __net_ipv4_bits_ab_%out_bits, __net_ipv4_bits_cd_%out_bits
1360
+ !__net_ipv4_bits_cd_%out_bits
1361
+ !__net_ipv4_bits_ab_%out_bits
1362
+ !__net_ipv4_bits_c_shift_%out_bits
1363
+ !__net_ipv4_bits_b_shift_%out_bits
1364
+ !__net_ipv4_bits_a_shift_%out_bits
1365
+ !__net_ipv4_bits_d_%out_bits
1366
+ !__net_ipv4_bits_c_%out_bits
1367
+ !__net_ipv4_bits_b_%out_bits
1368
+ !__net_ipv4_bits_a_%out_bits
1369
+ [END_MACRO]
1370
+
1371
+ [MACRO] DEFAULT_HASHER_WRITE_NET_IPV4 %hasher, %addr
1372
+ __net_ipv4_hash_bits_%hasher = load %addr+NetIpv4Addr_a as u32
1373
+ EXPAND DEFAULT_HASHER_WRITE_U32 %hasher, __net_ipv4_hash_bits_%hasher
1374
+ !__net_ipv4_hash_bits_%hasher
1375
+ [END_MACRO]
1376
+
1377
+ [MACRO] NET_IPV4_HASH %out_hash, %addr
1378
+ __net_ipv4_hash_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1379
+ EXPAND DEFAULT_HASHER_NEW __net_ipv4_hash_hasher_%out_hash
1380
+ EXPAND DEFAULT_HASHER_WRITE_NET_IPV4 __net_ipv4_hash_hasher_%out_hash, %addr
1381
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __net_ipv4_hash_hasher_%out_hash
1382
+ [END_MACRO]
1383
+
1384
+ [MACRO] BUILD_HASHER_DEFAULT_HASH_ONE_NET_IPV4 %out_hash, %builder, %addr
1385
+ __build_hash_one_ipv4_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1386
+ EXPAND BUILD_HASHER_DEFAULT_BUILD __build_hash_one_ipv4_hasher_%out_hash, %builder
1387
+ EXPAND DEFAULT_HASHER_WRITE_NET_IPV4 __build_hash_one_ipv4_hasher_%out_hash, %addr
1388
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __build_hash_one_ipv4_hasher_%out_hash
1389
+ [END_MACRO]
1390
+
1391
+ [MACRO] RANDOM_STATE_HASH_ONE_NET_IPV4 %out_hash, %state, %addr
1392
+ __random_state_hash_one_ipv4_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1393
+ EXPAND RANDOM_STATE_BUILD __random_state_hash_one_ipv4_hasher_%out_hash, %state
1394
+ EXPAND DEFAULT_HASHER_WRITE_NET_IPV4 __random_state_hash_one_ipv4_hasher_%out_hash, %addr
1395
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __random_state_hash_one_ipv4_hasher_%out_hash
1396
+ [END_MACRO]
1397
+
1398
+ [MACRO] DEFAULT_HASHER_WRITE_NET_SOCKET_ADDR_V4 %hasher, %socket_addr
1399
+ EXPAND NET_SOCKET_ADDR_V4_IP_PTR __net_sock_v4_hash_ip_%hasher, %socket_addr
1400
+ __net_sock_v4_hash_port_%hasher = load %socket_addr+NetSocketAddrV4_port as u16
1401
+ EXPAND DEFAULT_HASHER_WRITE_NET_IPV4 %hasher, __net_sock_v4_hash_ip_%hasher
1402
+ EXPAND DEFAULT_HASHER_WRITE_U16 %hasher, __net_sock_v4_hash_port_%hasher
1403
+ !__net_sock_v4_hash_port_%hasher
1404
+ !__net_sock_v4_hash_ip_%hasher
1405
+ [END_MACRO]
1406
+
1407
+ [MACRO] NET_SOCKET_ADDR_V4_HASH %out_hash, %socket_addr
1408
+ __net_sock_v4_hash_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1409
+ EXPAND DEFAULT_HASHER_NEW __net_sock_v4_hash_hasher_%out_hash
1410
+ EXPAND DEFAULT_HASHER_WRITE_NET_SOCKET_ADDR_V4 __net_sock_v4_hash_hasher_%out_hash, %socket_addr
1411
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __net_sock_v4_hash_hasher_%out_hash
1412
+ [END_MACRO]
1413
+
1414
+ [MACRO] BUILD_HASHER_DEFAULT_HASH_ONE_NET_SOCKET_ADDR_V4 %out_hash, %builder, %socket_addr
1415
+ __build_hash_one_sock_v4_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1416
+ EXPAND BUILD_HASHER_DEFAULT_BUILD __build_hash_one_sock_v4_hasher_%out_hash, %builder
1417
+ EXPAND DEFAULT_HASHER_WRITE_NET_SOCKET_ADDR_V4 __build_hash_one_sock_v4_hasher_%out_hash, %socket_addr
1418
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __build_hash_one_sock_v4_hasher_%out_hash
1419
+ [END_MACRO]
1420
+
1421
+ [MACRO] RANDOM_STATE_HASH_ONE_NET_SOCKET_ADDR_V4 %out_hash, %state, %socket_addr
1422
+ __random_state_hash_one_sock_v4_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1423
+ EXPAND RANDOM_STATE_BUILD __random_state_hash_one_sock_v4_hasher_%out_hash, %state
1424
+ EXPAND DEFAULT_HASHER_WRITE_NET_SOCKET_ADDR_V4 __random_state_hash_one_sock_v4_hasher_%out_hash, %socket_addr
1425
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __random_state_hash_one_sock_v4_hasher_%out_hash
1426
+ [END_MACRO]
1427
+
1428
+ [MACRO] DEFAULT_HASHER_WRITE_NET_IPV6 %hasher, %addr
1429
+ __net_ipv6_hash_s0_%hasher = load %addr+NetIpv6Addr_s0 as u16
1430
+ __net_ipv6_hash_s1_%hasher = load %addr+NetIpv6Addr_s1 as u16
1431
+ __net_ipv6_hash_s2_%hasher = load %addr+NetIpv6Addr_s2 as u16
1432
+ __net_ipv6_hash_s3_%hasher = load %addr+NetIpv6Addr_s3 as u16
1433
+ __net_ipv6_hash_s4_%hasher = load %addr+NetIpv6Addr_s4 as u16
1434
+ __net_ipv6_hash_s5_%hasher = load %addr+NetIpv6Addr_s5 as u16
1435
+ __net_ipv6_hash_s6_%hasher = load %addr+NetIpv6Addr_s6 as u16
1436
+ __net_ipv6_hash_s7_%hasher = load %addr+NetIpv6Addr_s7 as u16
1437
+ EXPAND DEFAULT_HASHER_WRITE_U16 %hasher, __net_ipv6_hash_s0_%hasher
1438
+ EXPAND DEFAULT_HASHER_WRITE_U16 %hasher, __net_ipv6_hash_s1_%hasher
1439
+ EXPAND DEFAULT_HASHER_WRITE_U16 %hasher, __net_ipv6_hash_s2_%hasher
1440
+ EXPAND DEFAULT_HASHER_WRITE_U16 %hasher, __net_ipv6_hash_s3_%hasher
1441
+ EXPAND DEFAULT_HASHER_WRITE_U16 %hasher, __net_ipv6_hash_s4_%hasher
1442
+ EXPAND DEFAULT_HASHER_WRITE_U16 %hasher, __net_ipv6_hash_s5_%hasher
1443
+ EXPAND DEFAULT_HASHER_WRITE_U16 %hasher, __net_ipv6_hash_s6_%hasher
1444
+ EXPAND DEFAULT_HASHER_WRITE_U16 %hasher, __net_ipv6_hash_s7_%hasher
1445
+ !__net_ipv6_hash_s7_%hasher
1446
+ !__net_ipv6_hash_s6_%hasher
1447
+ !__net_ipv6_hash_s5_%hasher
1448
+ !__net_ipv6_hash_s4_%hasher
1449
+ !__net_ipv6_hash_s3_%hasher
1450
+ !__net_ipv6_hash_s2_%hasher
1451
+ !__net_ipv6_hash_s1_%hasher
1452
+ !__net_ipv6_hash_s0_%hasher
1453
+ [END_MACRO]
1454
+
1455
+ [MACRO] NET_IPV6_HASH %out_hash, %addr
1456
+ __net_ipv6_hash_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1457
+ EXPAND DEFAULT_HASHER_NEW __net_ipv6_hash_hasher_%out_hash
1458
+ EXPAND DEFAULT_HASHER_WRITE_NET_IPV6 __net_ipv6_hash_hasher_%out_hash, %addr
1459
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __net_ipv6_hash_hasher_%out_hash
1460
+ [END_MACRO]
1461
+
1462
+ [MACRO] BUILD_HASHER_DEFAULT_HASH_ONE_NET_IPV6 %out_hash, %builder, %addr
1463
+ __build_hash_one_ipv6_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1464
+ EXPAND BUILD_HASHER_DEFAULT_BUILD __build_hash_one_ipv6_hasher_%out_hash, %builder
1465
+ EXPAND DEFAULT_HASHER_WRITE_NET_IPV6 __build_hash_one_ipv6_hasher_%out_hash, %addr
1466
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __build_hash_one_ipv6_hasher_%out_hash
1467
+ [END_MACRO]
1468
+
1469
+ [MACRO] RANDOM_STATE_HASH_ONE_NET_IPV6 %out_hash, %state, %addr
1470
+ __random_state_hash_one_ipv6_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1471
+ EXPAND RANDOM_STATE_BUILD __random_state_hash_one_ipv6_hasher_%out_hash, %state
1472
+ EXPAND DEFAULT_HASHER_WRITE_NET_IPV6 __random_state_hash_one_ipv6_hasher_%out_hash, %addr
1473
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __random_state_hash_one_ipv6_hasher_%out_hash
1474
+ [END_MACRO]
1475
+
1476
+ [MACRO] DEFAULT_HASHER_WRITE_NET_SOCKET_ADDR_V6 %hasher, %socket_addr
1477
+ EXPAND NET_SOCKET_ADDR_V6_IP_PTR __net_sock_v6_hash_ip_%hasher, %socket_addr
1478
+ __net_sock_v6_hash_port_%hasher = load %socket_addr+NetSocketAddrV6_port as u16
1479
+ __net_sock_v6_hash_flow_%hasher = load %socket_addr+NetSocketAddrV6_flowinfo as u32
1480
+ __net_sock_v6_hash_scope_%hasher = load %socket_addr+NetSocketAddrV6_scope_id as u32
1481
+ EXPAND DEFAULT_HASHER_WRITE_NET_IPV6 %hasher, __net_sock_v6_hash_ip_%hasher
1482
+ EXPAND DEFAULT_HASHER_WRITE_U16 %hasher, __net_sock_v6_hash_port_%hasher
1483
+ EXPAND DEFAULT_HASHER_WRITE_U32 %hasher, __net_sock_v6_hash_flow_%hasher
1484
+ EXPAND DEFAULT_HASHER_WRITE_U32 %hasher, __net_sock_v6_hash_scope_%hasher
1485
+ !__net_sock_v6_hash_scope_%hasher
1486
+ !__net_sock_v6_hash_flow_%hasher
1487
+ !__net_sock_v6_hash_port_%hasher
1488
+ !__net_sock_v6_hash_ip_%hasher
1489
+ [END_MACRO]
1490
+
1491
+ [MACRO] NET_SOCKET_ADDR_V6_HASH %out_hash, %socket_addr
1492
+ __net_sock_v6_hash_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1493
+ EXPAND DEFAULT_HASHER_NEW __net_sock_v6_hash_hasher_%out_hash
1494
+ EXPAND DEFAULT_HASHER_WRITE_NET_SOCKET_ADDR_V6 __net_sock_v6_hash_hasher_%out_hash, %socket_addr
1495
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __net_sock_v6_hash_hasher_%out_hash
1496
+ [END_MACRO]
1497
+
1498
+ [MACRO] BUILD_HASHER_DEFAULT_HASH_ONE_NET_SOCKET_ADDR_V6 %out_hash, %builder, %socket_addr
1499
+ __build_hash_one_sock_v6_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1500
+ EXPAND BUILD_HASHER_DEFAULT_BUILD __build_hash_one_sock_v6_hasher_%out_hash, %builder
1501
+ EXPAND DEFAULT_HASHER_WRITE_NET_SOCKET_ADDR_V6 __build_hash_one_sock_v6_hasher_%out_hash, %socket_addr
1502
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __build_hash_one_sock_v6_hasher_%out_hash
1503
+ [END_MACRO]
1504
+
1505
+ [MACRO] RANDOM_STATE_HASH_ONE_NET_SOCKET_ADDR_V6 %out_hash, %state, %socket_addr
1506
+ __random_state_hash_one_sock_v6_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1507
+ EXPAND RANDOM_STATE_BUILD __random_state_hash_one_sock_v6_hasher_%out_hash, %state
1508
+ EXPAND DEFAULT_HASHER_WRITE_NET_SOCKET_ADDR_V6 __random_state_hash_one_sock_v6_hasher_%out_hash, %socket_addr
1509
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __random_state_hash_one_sock_v6_hasher_%out_hash
1510
+ [END_MACRO]
1511
+ [MACRO] DEFAULT_HASHER_WRITE_NET_IP_ADDR %hasher, %ipaddr
1512
+ __net_ip_hash_tag_%hasher = load %ipaddr+NetIpAddr_tag as u64
1513
+ EXPAND DEFAULT_HASHER_WRITE_U64 %hasher, __net_ip_hash_tag_%hasher
1514
+ __net_ip_hash_payload_%hasher = ptr_add %ipaddr, 8
1515
+ __net_ip_hash_is_v4_%hasher = eq __net_ip_hash_tag_%hasher, NET_IP_ADDR_V4
1516
+ br __net_ip_hash_is_v4_%hasher -> L_NET_IP_HASH_V4_%hasher, L_NET_IP_HASH_V6_%hasher
1517
+ L_NET_IP_HASH_V4_%hasher:
1518
+ EXPAND DEFAULT_HASHER_WRITE_NET_IPV4 %hasher, __net_ip_hash_payload_%hasher
1519
+ jmp L_NET_IP_HASH_DONE_%hasher
1520
+ L_NET_IP_HASH_V6_%hasher:
1521
+ EXPAND DEFAULT_HASHER_WRITE_NET_IPV6 %hasher, __net_ip_hash_payload_%hasher
1522
+ L_NET_IP_HASH_DONE_%hasher:
1523
+ !__net_ip_hash_is_v4_%hasher
1524
+ !__net_ip_hash_payload_%hasher
1525
+ !__net_ip_hash_tag_%hasher
1526
+ [END_MACRO]
1527
+
1528
+ [MACRO] NET_IP_ADDR_HASH %out_hash, %ipaddr
1529
+ __net_ip_hash_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1530
+ EXPAND DEFAULT_HASHER_NEW __net_ip_hash_hasher_%out_hash
1531
+ EXPAND DEFAULT_HASHER_WRITE_NET_IP_ADDR __net_ip_hash_hasher_%out_hash, %ipaddr
1532
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __net_ip_hash_hasher_%out_hash
1533
+ [END_MACRO]
1534
+
1535
+ [MACRO] BUILD_HASHER_DEFAULT_HASH_ONE_NET_IP_ADDR %out_hash, %builder, %ipaddr
1536
+ __build_hash_one_ip_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1537
+ EXPAND BUILD_HASHER_DEFAULT_BUILD __build_hash_one_ip_hasher_%out_hash, %builder
1538
+ EXPAND DEFAULT_HASHER_WRITE_NET_IP_ADDR __build_hash_one_ip_hasher_%out_hash, %ipaddr
1539
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __build_hash_one_ip_hasher_%out_hash
1540
+ [END_MACRO]
1541
+
1542
+ [MACRO] RANDOM_STATE_HASH_ONE_NET_IP_ADDR %out_hash, %state, %ipaddr
1543
+ __random_state_hash_one_ip_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1544
+ EXPAND RANDOM_STATE_BUILD __random_state_hash_one_ip_hasher_%out_hash, %state
1545
+ EXPAND DEFAULT_HASHER_WRITE_NET_IP_ADDR __random_state_hash_one_ip_hasher_%out_hash, %ipaddr
1546
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __random_state_hash_one_ip_hasher_%out_hash
1547
+ [END_MACRO]
1548
+
1549
+ [MACRO] DEFAULT_HASHER_WRITE_NET_SOCKET_ADDR %hasher, %socket_addr
1550
+ __net_socket_hash_tag_%hasher = load %socket_addr+NetSocketAddr_tag as u64
1551
+ EXPAND DEFAULT_HASHER_WRITE_U64 %hasher, __net_socket_hash_tag_%hasher
1552
+ __net_socket_hash_payload_%hasher = ptr_add %socket_addr, 8
1553
+ __net_socket_hash_is_v4_%hasher = eq __net_socket_hash_tag_%hasher, NET_IP_ADDR_V4
1554
+ br __net_socket_hash_is_v4_%hasher -> L_NET_SOCKET_HASH_V4_%hasher, L_NET_SOCKET_HASH_V6_%hasher
1555
+ L_NET_SOCKET_HASH_V4_%hasher:
1556
+ EXPAND DEFAULT_HASHER_WRITE_NET_SOCKET_ADDR_V4 %hasher, __net_socket_hash_payload_%hasher
1557
+ jmp L_NET_SOCKET_HASH_DONE_%hasher
1558
+ L_NET_SOCKET_HASH_V6_%hasher:
1559
+ EXPAND DEFAULT_HASHER_WRITE_NET_SOCKET_ADDR_V6 %hasher, __net_socket_hash_payload_%hasher
1560
+ L_NET_SOCKET_HASH_DONE_%hasher:
1561
+ !__net_socket_hash_is_v4_%hasher
1562
+ !__net_socket_hash_payload_%hasher
1563
+ !__net_socket_hash_tag_%hasher
1564
+ [END_MACRO]
1565
+
1566
+ [MACRO] NET_SOCKET_ADDR_HASH %out_hash, %socket_addr
1567
+ __net_socket_hash_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1568
+ EXPAND DEFAULT_HASHER_NEW __net_socket_hash_hasher_%out_hash
1569
+ EXPAND DEFAULT_HASHER_WRITE_NET_SOCKET_ADDR __net_socket_hash_hasher_%out_hash, %socket_addr
1570
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __net_socket_hash_hasher_%out_hash
1571
+ [END_MACRO]
1572
+
1573
+ [MACRO] BUILD_HASHER_DEFAULT_HASH_ONE_NET_SOCKET_ADDR %out_hash, %builder, %socket_addr
1574
+ __build_hash_one_socket_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1575
+ EXPAND BUILD_HASHER_DEFAULT_BUILD __build_hash_one_socket_hasher_%out_hash, %builder
1576
+ EXPAND DEFAULT_HASHER_WRITE_NET_SOCKET_ADDR __build_hash_one_socket_hasher_%out_hash, %socket_addr
1577
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __build_hash_one_socket_hasher_%out_hash
1578
+ [END_MACRO]
1579
+
1580
+ [MACRO] RANDOM_STATE_HASH_ONE_NET_SOCKET_ADDR %out_hash, %state, %socket_addr
1581
+ __random_state_hash_one_socket_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1582
+ EXPAND RANDOM_STATE_BUILD __random_state_hash_one_socket_hasher_%out_hash, %state
1583
+ EXPAND DEFAULT_HASHER_WRITE_NET_SOCKET_ADDR __random_state_hash_one_socket_hasher_%out_hash, %socket_addr
1584
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __random_state_hash_one_socket_hasher_%out_hash
1585
+ [END_MACRO]
1586
+
1587
+ [MACRO] NET_IPV4_FROM_BITS %addr, %bits
1588
+ __net_ipv4_from_a_%addr = lshr %bits, 24
1589
+ __net_ipv4_from_b_raw_%addr = lshr %bits, 16
1590
+ __net_ipv4_from_b_%addr = and __net_ipv4_from_b_raw_%addr, 255
1591
+ __net_ipv4_from_c_raw_%addr = lshr %bits, 8
1592
+ __net_ipv4_from_c_%addr = and __net_ipv4_from_c_raw_%addr, 255
1593
+ __net_ipv4_from_d_%addr = and %bits, 255
1594
+ EXPAND NET_IPV4_NEW %addr, __net_ipv4_from_a_%addr, __net_ipv4_from_b_%addr, __net_ipv4_from_c_%addr, __net_ipv4_from_d_%addr
1595
+ !__net_ipv4_from_d_%addr
1596
+ !__net_ipv4_from_c_%addr
1597
+ !__net_ipv4_from_c_raw_%addr
1598
+ !__net_ipv4_from_b_%addr
1599
+ !__net_ipv4_from_b_raw_%addr
1600
+ !__net_ipv4_from_a_%addr
1601
+ [END_MACRO]
1602
+
1603
+ [MACRO] NET_IPV4_TRY_PARSE_ASCII %out_ok, %addr, %ptr, %len
1604
+ %out_ok = call @sa_net_ipv4_parse_ascii(&%ptr, %len, &%addr)
1605
+ [END_MACRO]
1606
+
1607
+ [MACRO] NET_IPV4_TRY_PARSE_ASCII_DETAIL %out_ok, %out_kind, %addr, %ptr, %len
1608
+ %out_kind = add 0, ADDR_PARSE_ERROR_IPV4
1609
+ EXPAND NET_IPV4_TRY_PARSE_ASCII %out_ok, %addr, %ptr, %len
1610
+ [END_MACRO]
1611
+
1612
+ [MACRO] NET_IPV4_PARSE_ASCII %out_ok, %addr, %ptr, %len
1613
+ EXPAND NET_IPV4_TRY_PARSE_ASCII %out_ok, %addr, %ptr, %len
1614
+ [END_MACRO]
1615
+
1616
+ [MACRO] NET_IPV4_PARSE_ASCII_DETAIL %out_ok, %out_kind, %addr, %ptr, %len
1617
+ EXPAND NET_IPV4_TRY_PARSE_ASCII_DETAIL %out_ok, %out_kind, %addr, %ptr, %len
1618
+ [END_MACRO]
1619
+
1620
+ [MACRO] NET_IPV6_TRY_PARSE_ASCII %out_ok, %addr, %ptr, %len
1621
+ %out_ok = call @sa_net_ipv6_parse_ascii(&%ptr, %len, &%addr)
1622
+ [END_MACRO]
1623
+
1624
+ [MACRO] NET_IPV6_TRY_PARSE_ASCII_DETAIL %out_ok, %out_kind, %addr, %ptr, %len
1625
+ %out_kind = add 0, ADDR_PARSE_ERROR_IPV6
1626
+ EXPAND NET_IPV6_TRY_PARSE_ASCII %out_ok, %addr, %ptr, %len
1627
+ [END_MACRO]
1628
+
1629
+ [MACRO] NET_IPV6_PARSE_ASCII %out_ok, %addr, %ptr, %len
1630
+ EXPAND NET_IPV6_TRY_PARSE_ASCII %out_ok, %addr, %ptr, %len
1631
+ [END_MACRO]
1632
+
1633
+ [MACRO] NET_IPV6_PARSE_ASCII_DETAIL %out_ok, %out_kind, %addr, %ptr, %len
1634
+ EXPAND NET_IPV6_TRY_PARSE_ASCII_DETAIL %out_ok, %out_kind, %addr, %ptr, %len
1635
+ [END_MACRO]
1636
+
1637
+
1638
+ [MACRO] NET_IPV4_FORMAT_ASCII %out_ok, %out_len, %addr, %dst_ptr, %dst_cap
1639
+ __net_ipv4_fmt_len_slot_%out_ok = stack_alloc 8
1640
+ store __net_ipv4_fmt_len_slot_%out_ok+0, 0 as u64
1641
+ %out_ok = call @sa_net_ipv4_format_ascii(&%addr, &%dst_ptr, %dst_cap, &__net_ipv4_fmt_len_slot_%out_ok)
1642
+ %out_len = load __net_ipv4_fmt_len_slot_%out_ok+0 as u64
1643
+ [END_MACRO]
1644
+
1645
+ [MACRO] NET_IPV6_FORMAT_ASCII %out_ok, %out_len, %addr, %dst_ptr, %dst_cap
1646
+ __net_ipv6_fmt_len_slot_%out_ok = stack_alloc 8
1647
+ store __net_ipv6_fmt_len_slot_%out_ok+0, 0 as u64
1648
+ %out_ok = call @sa_net_ipv6_format_ascii(&%addr, &%dst_ptr, %dst_cap, &__net_ipv6_fmt_len_slot_%out_ok)
1649
+ %out_len = load __net_ipv6_fmt_len_slot_%out_ok+0 as u64
1650
+ [END_MACRO]
1651
+
1652
+ [MACRO] NET_SOCKET_ADDR_V4_FORMAT_ASCII %out_ok, %out_len, %socket_addr, %dst_ptr, %dst_cap
1653
+ __net_sock_v4_fmt_len_slot_%out_ok = stack_alloc 8
1654
+ store __net_sock_v4_fmt_len_slot_%out_ok+0, 0 as u64
1655
+ %out_ok = call @sa_net_socket_addr_v4_format_ascii(&%socket_addr, &%dst_ptr, %dst_cap, &__net_sock_v4_fmt_len_slot_%out_ok)
1656
+ %out_len = load __net_sock_v4_fmt_len_slot_%out_ok+0 as u64
1657
+ [END_MACRO]
1658
+
1659
+ [MACRO] NET_SOCKET_ADDR_V6_FORMAT_ASCII %out_ok, %out_len, %socket_addr, %dst_ptr, %dst_cap
1660
+ __net_sock_v6_fmt_len_slot_%out_ok = stack_alloc 8
1661
+ store __net_sock_v6_fmt_len_slot_%out_ok+0, 0 as u64
1662
+ %out_ok = call @sa_net_socket_addr_v6_format_ascii(&%socket_addr, &%dst_ptr, %dst_cap, &__net_sock_v6_fmt_len_slot_%out_ok)
1663
+ %out_len = load __net_sock_v6_fmt_len_slot_%out_ok+0 as u64
1664
+ [END_MACRO]
1665
+
1666
+ [MACRO] NET_IP_ADDR_FORMAT_ASCII %out_ok, %out_len, %ipaddr, %dst_ptr, %dst_cap
1667
+ __net_ip_fmt_tag_%out_ok = load %ipaddr+NetIpAddr_tag as u64
1668
+ __net_ip_fmt_payload_%out_ok = ptr_add %ipaddr, 8
1669
+ __net_ip_fmt_is_v4_%out_ok = eq __net_ip_fmt_tag_%out_ok, NET_IP_ADDR_V4
1670
+ br __net_ip_fmt_is_v4_%out_ok -> L_NET_IP_FMT_V4_%out_ok, L_NET_IP_FMT_V6_%out_ok
1671
+ L_NET_IP_FMT_V4_%out_ok:
1672
+ EXPAND NET_IPV4_FORMAT_ASCII %out_ok, %out_len, __net_ip_fmt_payload_%out_ok, %dst_ptr, %dst_cap
1673
+ jmp L_NET_IP_FMT_DONE_%out_ok
1674
+ L_NET_IP_FMT_V6_%out_ok:
1675
+ EXPAND NET_IPV6_FORMAT_ASCII %out_ok, %out_len, __net_ip_fmt_payload_%out_ok, %dst_ptr, %dst_cap
1676
+ jmp L_NET_IP_FMT_DONE_%out_ok
1677
+ L_NET_IP_FMT_DONE_%out_ok:
1678
+ !__net_ip_fmt_is_v4_%out_ok
1679
+ !__net_ip_fmt_payload_%out_ok
1680
+ !__net_ip_fmt_tag_%out_ok
1681
+ [END_MACRO]
1682
+
1683
+ [MACRO] NET_SOCKET_ADDR_FORMAT_ASCII %out_ok, %out_len, %socket_addr, %dst_ptr, %dst_cap
1684
+ __net_sock_fmt_tag_%out_ok = load %socket_addr+NetSocketAddr_tag as u64
1685
+ __net_sock_fmt_payload_%out_ok = ptr_add %socket_addr, 8
1686
+ __net_sock_fmt_is_v4_%out_ok = eq __net_sock_fmt_tag_%out_ok, NET_IP_ADDR_V4
1687
+ br __net_sock_fmt_is_v4_%out_ok -> L_NET_SOCK_FMT_V4_%out_ok, L_NET_SOCK_FMT_V6_%out_ok
1688
+ L_NET_SOCK_FMT_V4_%out_ok:
1689
+ EXPAND NET_SOCKET_ADDR_V4_FORMAT_ASCII %out_ok, %out_len, __net_sock_fmt_payload_%out_ok, %dst_ptr, %dst_cap
1690
+ jmp L_NET_SOCK_FMT_DONE_%out_ok
1691
+ L_NET_SOCK_FMT_V6_%out_ok:
1692
+ EXPAND NET_SOCKET_ADDR_V6_FORMAT_ASCII %out_ok, %out_len, __net_sock_fmt_payload_%out_ok, %dst_ptr, %dst_cap
1693
+ jmp L_NET_SOCK_FMT_DONE_%out_ok
1694
+ L_NET_SOCK_FMT_DONE_%out_ok:
1695
+ !__net_sock_fmt_is_v4_%out_ok
1696
+ !__net_sock_fmt_payload_%out_ok
1697
+ !__net_sock_fmt_tag_%out_ok
1698
+ [END_MACRO]
1699
+
1700
+
1701
+ [MACRO] NET_IPV4_EQ %out_bool, %left, %right
1702
+ __net_ipv4_la_%out_bool = load %left+NetIpv4Addr_a as u8
1703
+ __net_ipv4_lb_%out_bool = load %left+NetIpv4Addr_b as u8
1704
+ __net_ipv4_lc_%out_bool = load %left+NetIpv4Addr_c as u8
1705
+ __net_ipv4_ld_%out_bool = load %left+NetIpv4Addr_d as u8
1706
+ __net_ipv4_ra_%out_bool = load %right+NetIpv4Addr_a as u8
1707
+ __net_ipv4_rb_%out_bool = load %right+NetIpv4Addr_b as u8
1708
+ __net_ipv4_rc_%out_bool = load %right+NetIpv4Addr_c as u8
1709
+ __net_ipv4_rd_%out_bool = load %right+NetIpv4Addr_d as u8
1710
+ __net_ipv4_ea_%out_bool = eq __net_ipv4_la_%out_bool, __net_ipv4_ra_%out_bool
1711
+ __net_ipv4_eb_%out_bool = eq __net_ipv4_lb_%out_bool, __net_ipv4_rb_%out_bool
1712
+ __net_ipv4_ec_%out_bool = eq __net_ipv4_lc_%out_bool, __net_ipv4_rc_%out_bool
1713
+ __net_ipv4_ed_%out_bool = eq __net_ipv4_ld_%out_bool, __net_ipv4_rd_%out_bool
1714
+ __net_ipv4_eab_%out_bool = and __net_ipv4_ea_%out_bool, __net_ipv4_eb_%out_bool
1715
+ __net_ipv4_ecd_%out_bool = and __net_ipv4_ec_%out_bool, __net_ipv4_ed_%out_bool
1716
+ %out_bool = and __net_ipv4_eab_%out_bool, __net_ipv4_ecd_%out_bool
1717
+ !__net_ipv4_ecd_%out_bool
1718
+ !__net_ipv4_eab_%out_bool
1719
+ !__net_ipv4_ed_%out_bool
1720
+ !__net_ipv4_ec_%out_bool
1721
+ !__net_ipv4_eb_%out_bool
1722
+ !__net_ipv4_ea_%out_bool
1723
+ !__net_ipv4_rd_%out_bool
1724
+ !__net_ipv4_rc_%out_bool
1725
+ !__net_ipv4_rb_%out_bool
1726
+ !__net_ipv4_ra_%out_bool
1727
+ !__net_ipv4_ld_%out_bool
1728
+ !__net_ipv4_lc_%out_bool
1729
+ !__net_ipv4_lb_%out_bool
1730
+ !__net_ipv4_la_%out_bool
1731
+ [END_MACRO]
1732
+
1733
+ [MACRO] NET_IPV4_IS_UNSPECIFIED %out_bool, %addr
1734
+ __net_ipv4_a_%out_bool = load %addr+NetIpv4Addr_a as u8
1735
+ __net_ipv4_b_%out_bool = load %addr+NetIpv4Addr_b as u8
1736
+ __net_ipv4_c_%out_bool = load %addr+NetIpv4Addr_c as u8
1737
+ __net_ipv4_d_%out_bool = load %addr+NetIpv4Addr_d as u8
1738
+ __net_ipv4_ab_%out_bool = or __net_ipv4_a_%out_bool, __net_ipv4_b_%out_bool
1739
+ __net_ipv4_cd_%out_bool = or __net_ipv4_c_%out_bool, __net_ipv4_d_%out_bool
1740
+ __net_ipv4_any_%out_bool = or __net_ipv4_ab_%out_bool, __net_ipv4_cd_%out_bool
1741
+ %out_bool = eq __net_ipv4_any_%out_bool, 0
1742
+ !__net_ipv4_any_%out_bool
1743
+ !__net_ipv4_cd_%out_bool
1744
+ !__net_ipv4_ab_%out_bool
1745
+ !__net_ipv4_d_%out_bool
1746
+ !__net_ipv4_c_%out_bool
1747
+ !__net_ipv4_b_%out_bool
1748
+ !__net_ipv4_a_%out_bool
1749
+ [END_MACRO]
1750
+
1751
+ [MACRO] NET_IPV4_IS_LOOPBACK %out_bool, %addr
1752
+ __net_ipv4_a_%out_bool = load %addr+NetIpv4Addr_a as u8
1753
+ %out_bool = eq __net_ipv4_a_%out_bool, 127
1754
+ !__net_ipv4_a_%out_bool
1755
+ [END_MACRO]
1756
+
1757
+ [MACRO] NET_IPV4_IS_PRIVATE %out_bool, %addr
1758
+ __net_ipv4_a_%out_bool = load %addr+NetIpv4Addr_a as u8
1759
+ __net_ipv4_b_%out_bool = load %addr+NetIpv4Addr_b as u8
1760
+ __net_ipv4_is_10_%out_bool = eq __net_ipv4_a_%out_bool, 10
1761
+ __net_ipv4_is_172_%out_bool = eq __net_ipv4_a_%out_bool, 172
1762
+ __net_ipv4_172_lo_%out_bool = uge __net_ipv4_b_%out_bool, 16
1763
+ __net_ipv4_172_hi_%out_bool = ule __net_ipv4_b_%out_bool, 31
1764
+ __net_ipv4_172_range_%out_bool = and __net_ipv4_172_lo_%out_bool, __net_ipv4_172_hi_%out_bool
1765
+ __net_ipv4_172_private_%out_bool = and __net_ipv4_is_172_%out_bool, __net_ipv4_172_range_%out_bool
1766
+ __net_ipv4_is_192_%out_bool = eq __net_ipv4_a_%out_bool, 192
1767
+ __net_ipv4_is_168_%out_bool = eq __net_ipv4_b_%out_bool, 168
1768
+ __net_ipv4_192_private_%out_bool = and __net_ipv4_is_192_%out_bool, __net_ipv4_is_168_%out_bool
1769
+ __net_ipv4_left_%out_bool = or __net_ipv4_is_10_%out_bool, __net_ipv4_172_private_%out_bool
1770
+ %out_bool = or __net_ipv4_left_%out_bool, __net_ipv4_192_private_%out_bool
1771
+ !__net_ipv4_left_%out_bool
1772
+ !__net_ipv4_192_private_%out_bool
1773
+ !__net_ipv4_is_168_%out_bool
1774
+ !__net_ipv4_is_192_%out_bool
1775
+ !__net_ipv4_172_private_%out_bool
1776
+ !__net_ipv4_172_range_%out_bool
1777
+ !__net_ipv4_172_hi_%out_bool
1778
+ !__net_ipv4_172_lo_%out_bool
1779
+ !__net_ipv4_is_172_%out_bool
1780
+ !__net_ipv4_is_10_%out_bool
1781
+ !__net_ipv4_b_%out_bool
1782
+ !__net_ipv4_a_%out_bool
1783
+ [END_MACRO]
1784
+
1785
+ [MACRO] NET_IPV4_IS_LINK_LOCAL %out_bool, %addr
1786
+ __net_ipv4_a_%out_bool = load %addr+NetIpv4Addr_a as u8
1787
+ __net_ipv4_b_%out_bool = load %addr+NetIpv4Addr_b as u8
1788
+ __net_ipv4_a_ok_%out_bool = eq __net_ipv4_a_%out_bool, 169
1789
+ __net_ipv4_b_ok_%out_bool = eq __net_ipv4_b_%out_bool, 254
1790
+ %out_bool = and __net_ipv4_a_ok_%out_bool, __net_ipv4_b_ok_%out_bool
1791
+ !__net_ipv4_b_ok_%out_bool
1792
+ !__net_ipv4_a_ok_%out_bool
1793
+ !__net_ipv4_b_%out_bool
1794
+ !__net_ipv4_a_%out_bool
1795
+ [END_MACRO]
1796
+
1797
+ [MACRO] NET_IPV4_IS_SHARED %out_bool, %addr
1798
+ __net_ipv4_a_%out_bool = load %addr+NetIpv4Addr_a as u8
1799
+ __net_ipv4_b_%out_bool = load %addr+NetIpv4Addr_b as u8
1800
+ __net_ipv4_is_100_%out_bool = eq __net_ipv4_a_%out_bool, 100
1801
+ __net_ipv4_b_mask_%out_bool = and __net_ipv4_b_%out_bool, 192
1802
+ __net_ipv4_b_range_%out_bool = eq __net_ipv4_b_mask_%out_bool, 64
1803
+ %out_bool = and __net_ipv4_is_100_%out_bool, __net_ipv4_b_range_%out_bool
1804
+ !__net_ipv4_b_range_%out_bool
1805
+ !__net_ipv4_b_mask_%out_bool
1806
+ !__net_ipv4_is_100_%out_bool
1807
+ !__net_ipv4_b_%out_bool
1808
+ !__net_ipv4_a_%out_bool
1809
+ [END_MACRO]
1810
+
1811
+ [MACRO] NET_IPV4_IS_BENCHMARKING %out_bool, %addr
1812
+ __net_ipv4_a_%out_bool = load %addr+NetIpv4Addr_a as u8
1813
+ __net_ipv4_b_%out_bool = load %addr+NetIpv4Addr_b as u8
1814
+ __net_ipv4_is_198_%out_bool = eq __net_ipv4_a_%out_bool, 198
1815
+ __net_ipv4_b_mask_%out_bool = and __net_ipv4_b_%out_bool, 254
1816
+ __net_ipv4_b_range_%out_bool = eq __net_ipv4_b_mask_%out_bool, 18
1817
+ %out_bool = and __net_ipv4_is_198_%out_bool, __net_ipv4_b_range_%out_bool
1818
+ !__net_ipv4_b_range_%out_bool
1819
+ !__net_ipv4_b_mask_%out_bool
1820
+ !__net_ipv4_is_198_%out_bool
1821
+ !__net_ipv4_b_%out_bool
1822
+ !__net_ipv4_a_%out_bool
1823
+ [END_MACRO]
1824
+
1825
+ [MACRO] NET_IPV4_IS_RESERVED %out_bool, %addr
1826
+ __net_ipv4_a_%out_bool = load %addr+NetIpv4Addr_a as u8
1827
+ __net_ipv4_mask_%out_bool = and __net_ipv4_a_%out_bool, 240
1828
+ __net_ipv4_reserved_range_%out_bool = eq __net_ipv4_mask_%out_bool, 240
1829
+ EXPAND NET_IPV4_IS_BROADCAST __net_ipv4_broadcast_%out_bool, %addr
1830
+ __net_ipv4_not_broadcast_%out_bool = eq __net_ipv4_broadcast_%out_bool, 0
1831
+ %out_bool = and __net_ipv4_reserved_range_%out_bool, __net_ipv4_not_broadcast_%out_bool
1832
+ !__net_ipv4_not_broadcast_%out_bool
1833
+ !__net_ipv4_broadcast_%out_bool
1834
+ !__net_ipv4_reserved_range_%out_bool
1835
+ !__net_ipv4_mask_%out_bool
1836
+ !__net_ipv4_a_%out_bool
1837
+ [END_MACRO]
1838
+
1839
+ [MACRO] NET_IPV4_IS_MULTICAST %out_bool, %addr
1840
+ __net_ipv4_a_%out_bool = load %addr+NetIpv4Addr_a as u8
1841
+ __net_ipv4_lo_%out_bool = uge __net_ipv4_a_%out_bool, 224
1842
+ __net_ipv4_hi_%out_bool = ule __net_ipv4_a_%out_bool, 239
1843
+ %out_bool = and __net_ipv4_lo_%out_bool, __net_ipv4_hi_%out_bool
1844
+ !__net_ipv4_hi_%out_bool
1845
+ !__net_ipv4_lo_%out_bool
1846
+ !__net_ipv4_a_%out_bool
1847
+ [END_MACRO]
1848
+
1849
+ [MACRO] NET_IPV4_IS_BROADCAST %out_bool, %addr
1850
+ __net_ipv4_a_%out_bool = load %addr+NetIpv4Addr_a as u8
1851
+ __net_ipv4_b_%out_bool = load %addr+NetIpv4Addr_b as u8
1852
+ __net_ipv4_c_%out_bool = load %addr+NetIpv4Addr_c as u8
1853
+ __net_ipv4_d_%out_bool = load %addr+NetIpv4Addr_d as u8
1854
+ __net_ipv4_ea_%out_bool = eq __net_ipv4_a_%out_bool, 255
1855
+ __net_ipv4_eb_%out_bool = eq __net_ipv4_b_%out_bool, 255
1856
+ __net_ipv4_ec_%out_bool = eq __net_ipv4_c_%out_bool, 255
1857
+ __net_ipv4_ed_%out_bool = eq __net_ipv4_d_%out_bool, 255
1858
+ __net_ipv4_eab_%out_bool = and __net_ipv4_ea_%out_bool, __net_ipv4_eb_%out_bool
1859
+ __net_ipv4_ecd_%out_bool = and __net_ipv4_ec_%out_bool, __net_ipv4_ed_%out_bool
1860
+ %out_bool = and __net_ipv4_eab_%out_bool, __net_ipv4_ecd_%out_bool
1861
+ !__net_ipv4_ecd_%out_bool
1862
+ !__net_ipv4_eab_%out_bool
1863
+ !__net_ipv4_ed_%out_bool
1864
+ !__net_ipv4_ec_%out_bool
1865
+ !__net_ipv4_eb_%out_bool
1866
+ !__net_ipv4_ea_%out_bool
1867
+ !__net_ipv4_d_%out_bool
1868
+ !__net_ipv4_c_%out_bool
1869
+ !__net_ipv4_b_%out_bool
1870
+ !__net_ipv4_a_%out_bool
1871
+ [END_MACRO]
1872
+
1873
+ [MACRO] NET_IPV4_IS_DOCUMENTATION %out_bool, %addr
1874
+ __net_ipv4_a_%out_bool = load %addr+NetIpv4Addr_a as u8
1875
+ __net_ipv4_b_%out_bool = load %addr+NetIpv4Addr_b as u8
1876
+ __net_ipv4_c_%out_bool = load %addr+NetIpv4Addr_c as u8
1877
+ __net_ipv4_192_%out_bool = eq __net_ipv4_a_%out_bool, 192
1878
+ __net_ipv4_0_%out_bool = eq __net_ipv4_b_%out_bool, 0
1879
+ __net_ipv4_2_%out_bool = eq __net_ipv4_c_%out_bool, 2
1880
+ __net_ipv4_doc1a_%out_bool = and __net_ipv4_192_%out_bool, __net_ipv4_0_%out_bool
1881
+ __net_ipv4_doc1_%out_bool = and __net_ipv4_doc1a_%out_bool, __net_ipv4_2_%out_bool
1882
+ __net_ipv4_198_%out_bool = eq __net_ipv4_a_%out_bool, 198
1883
+ __net_ipv4_51_%out_bool = eq __net_ipv4_b_%out_bool, 51
1884
+ __net_ipv4_100_%out_bool = eq __net_ipv4_c_%out_bool, 100
1885
+ __net_ipv4_doc2a_%out_bool = and __net_ipv4_198_%out_bool, __net_ipv4_51_%out_bool
1886
+ __net_ipv4_doc2_%out_bool = and __net_ipv4_doc2a_%out_bool, __net_ipv4_100_%out_bool
1887
+ __net_ipv4_203_%out_bool = eq __net_ipv4_a_%out_bool, 203
1888
+ __net_ipv4_113_%out_bool = eq __net_ipv4_c_%out_bool, 113
1889
+ __net_ipv4_doc3a_%out_bool = and __net_ipv4_203_%out_bool, __net_ipv4_0_%out_bool
1890
+ __net_ipv4_doc3_%out_bool = and __net_ipv4_doc3a_%out_bool, __net_ipv4_113_%out_bool
1891
+ __net_ipv4_left_%out_bool = or __net_ipv4_doc1_%out_bool, __net_ipv4_doc2_%out_bool
1892
+ %out_bool = or __net_ipv4_left_%out_bool, __net_ipv4_doc3_%out_bool
1893
+ !__net_ipv4_left_%out_bool
1894
+ !__net_ipv4_doc3_%out_bool
1895
+ !__net_ipv4_doc3a_%out_bool
1896
+ !__net_ipv4_113_%out_bool
1897
+ !__net_ipv4_203_%out_bool
1898
+ !__net_ipv4_doc2_%out_bool
1899
+ !__net_ipv4_doc2a_%out_bool
1900
+ !__net_ipv4_100_%out_bool
1901
+ !__net_ipv4_51_%out_bool
1902
+ !__net_ipv4_198_%out_bool
1903
+ !__net_ipv4_doc1_%out_bool
1904
+ !__net_ipv4_doc1a_%out_bool
1905
+ !__net_ipv4_2_%out_bool
1906
+ !__net_ipv4_0_%out_bool
1907
+ !__net_ipv4_192_%out_bool
1908
+ !__net_ipv4_c_%out_bool
1909
+ !__net_ipv4_b_%out_bool
1910
+ !__net_ipv4_a_%out_bool
1911
+ [END_MACRO]
1912
+
1913
+ [MACRO] NET_IPV4_IS_GLOBAL %out_bool, %addr
1914
+ __net_ipv4_a_%out_bool = load %addr+NetIpv4Addr_a as u8
1915
+ __net_ipv4_b_%out_bool = load %addr+NetIpv4Addr_b as u8
1916
+ __net_ipv4_c_%out_bool = load %addr+NetIpv4Addr_c as u8
1917
+ __net_ipv4_d_%out_bool = load %addr+NetIpv4Addr_d as u8
1918
+ __net_ipv4_this_network_%out_bool = eq __net_ipv4_a_%out_bool, 0
1919
+ EXPAND NET_IPV4_IS_PRIVATE __net_ipv4_private_%out_bool, %addr
1920
+ EXPAND NET_IPV4_IS_SHARED __net_ipv4_shared_%out_bool, %addr
1921
+ EXPAND NET_IPV4_IS_LOOPBACK __net_ipv4_loopback_%out_bool, %addr
1922
+ EXPAND NET_IPV4_IS_LINK_LOCAL __net_ipv4_link_%out_bool, %addr
1923
+ __net_ipv4_192_%out_bool = eq __net_ipv4_a_%out_bool, 192
1924
+ __net_ipv4_0_%out_bool = eq __net_ipv4_b_%out_bool, 0
1925
+ __net_ipv4_0c_%out_bool = eq __net_ipv4_c_%out_bool, 0
1926
+ __net_ipv4_d_not_9_%out_bool = ne __net_ipv4_d_%out_bool, 9
1927
+ __net_ipv4_d_not_10_%out_bool = ne __net_ipv4_d_%out_bool, 10
1928
+ __net_ipv4_d_excluded_%out_bool = and __net_ipv4_d_not_9_%out_bool, __net_ipv4_d_not_10_%out_bool
1929
+ __net_ipv4_proto0a_%out_bool = and __net_ipv4_192_%out_bool, __net_ipv4_0_%out_bool
1930
+ __net_ipv4_proto0b_%out_bool = and __net_ipv4_proto0a_%out_bool, __net_ipv4_0c_%out_bool
1931
+ __net_ipv4_proto0_%out_bool = and __net_ipv4_proto0b_%out_bool, __net_ipv4_d_excluded_%out_bool
1932
+ EXPAND NET_IPV4_IS_DOCUMENTATION __net_ipv4_doc_%out_bool, %addr
1933
+ EXPAND NET_IPV4_IS_BENCHMARKING __net_ipv4_bench_%out_bool, %addr
1934
+ EXPAND NET_IPV4_IS_RESERVED __net_ipv4_reserved_%out_bool, %addr
1935
+ EXPAND NET_IPV4_IS_BROADCAST __net_ipv4_broadcast_%out_bool, %addr
1936
+ __net_ipv4_ng01_%out_bool = or __net_ipv4_this_network_%out_bool, __net_ipv4_private_%out_bool
1937
+ __net_ipv4_ng02_%out_bool = or __net_ipv4_ng01_%out_bool, __net_ipv4_shared_%out_bool
1938
+ __net_ipv4_ng03_%out_bool = or __net_ipv4_ng02_%out_bool, __net_ipv4_loopback_%out_bool
1939
+ __net_ipv4_ng04_%out_bool = or __net_ipv4_ng03_%out_bool, __net_ipv4_link_%out_bool
1940
+ __net_ipv4_ng05_%out_bool = or __net_ipv4_ng04_%out_bool, __net_ipv4_proto0_%out_bool
1941
+ __net_ipv4_ng06_%out_bool = or __net_ipv4_ng05_%out_bool, __net_ipv4_doc_%out_bool
1942
+ __net_ipv4_ng07_%out_bool = or __net_ipv4_ng06_%out_bool, __net_ipv4_bench_%out_bool
1943
+ __net_ipv4_ng08_%out_bool = or __net_ipv4_ng07_%out_bool, __net_ipv4_reserved_%out_bool
1944
+ __net_ipv4_not_global_%out_bool = or __net_ipv4_ng08_%out_bool, __net_ipv4_broadcast_%out_bool
1945
+ %out_bool = eq __net_ipv4_not_global_%out_bool, 0
1946
+ !__net_ipv4_not_global_%out_bool
1947
+ !__net_ipv4_ng08_%out_bool
1948
+ !__net_ipv4_ng07_%out_bool
1949
+ !__net_ipv4_ng06_%out_bool
1950
+ !__net_ipv4_ng05_%out_bool
1951
+ !__net_ipv4_ng04_%out_bool
1952
+ !__net_ipv4_ng03_%out_bool
1953
+ !__net_ipv4_ng02_%out_bool
1954
+ !__net_ipv4_ng01_%out_bool
1955
+ !__net_ipv4_broadcast_%out_bool
1956
+ !__net_ipv4_reserved_%out_bool
1957
+ !__net_ipv4_bench_%out_bool
1958
+ !__net_ipv4_doc_%out_bool
1959
+ !__net_ipv4_proto0_%out_bool
1960
+ !__net_ipv4_proto0b_%out_bool
1961
+ !__net_ipv4_proto0a_%out_bool
1962
+ !__net_ipv4_d_excluded_%out_bool
1963
+ !__net_ipv4_d_not_10_%out_bool
1964
+ !__net_ipv4_d_not_9_%out_bool
1965
+ !__net_ipv4_0c_%out_bool
1966
+ !__net_ipv4_0_%out_bool
1967
+ !__net_ipv4_192_%out_bool
1968
+ !__net_ipv4_link_%out_bool
1969
+ !__net_ipv4_loopback_%out_bool
1970
+ !__net_ipv4_shared_%out_bool
1971
+ !__net_ipv4_private_%out_bool
1972
+ !__net_ipv4_this_network_%out_bool
1973
+ !__net_ipv4_d_%out_bool
1974
+ !__net_ipv4_c_%out_bool
1975
+ !__net_ipv4_b_%out_bool
1976
+ !__net_ipv4_a_%out_bool
1977
+ [END_MACRO]
1978
+
1979
+ [MACRO] NET_IPV4_TO_IPV6_COMPATIBLE %ipv6, %ipv4
1980
+ __net_ipv4_compat_a_%ipv6 = load %ipv4+NetIpv4Addr_a as u8
1981
+ __net_ipv4_compat_b_%ipv6 = load %ipv4+NetIpv4Addr_b as u8
1982
+ __net_ipv4_compat_c_%ipv6 = load %ipv4+NetIpv4Addr_c as u8
1983
+ __net_ipv4_compat_d_%ipv6 = load %ipv4+NetIpv4Addr_d as u8
1984
+ __net_ipv4_compat_ab_%ipv6 = shl __net_ipv4_compat_a_%ipv6, 8
1985
+ __net_ipv4_compat_s6_%ipv6 = or __net_ipv4_compat_ab_%ipv6, __net_ipv4_compat_b_%ipv6
1986
+ __net_ipv4_compat_cd_%ipv6 = shl __net_ipv4_compat_c_%ipv6, 8
1987
+ __net_ipv4_compat_s7_%ipv6 = or __net_ipv4_compat_cd_%ipv6, __net_ipv4_compat_d_%ipv6
1988
+ EXPAND NET_IPV6_NEW %ipv6, 0, 0, 0, 0, 0, 0, __net_ipv4_compat_s6_%ipv6, __net_ipv4_compat_s7_%ipv6
1989
+ !__net_ipv4_compat_s7_%ipv6
1990
+ !__net_ipv4_compat_cd_%ipv6
1991
+ !__net_ipv4_compat_s6_%ipv6
1992
+ !__net_ipv4_compat_ab_%ipv6
1993
+ !__net_ipv4_compat_d_%ipv6
1994
+ !__net_ipv4_compat_c_%ipv6
1995
+ !__net_ipv4_compat_b_%ipv6
1996
+ !__net_ipv4_compat_a_%ipv6
1997
+ [END_MACRO]
1998
+
1999
+ [MACRO] NET_IPV4_TO_IPV6_MAPPED %ipv6, %ipv4
2000
+ __net_ipv4_mapped_a_%ipv6 = load %ipv4+NetIpv4Addr_a as u8
2001
+ __net_ipv4_mapped_b_%ipv6 = load %ipv4+NetIpv4Addr_b as u8
2002
+ __net_ipv4_mapped_c_%ipv6 = load %ipv4+NetIpv4Addr_c as u8
2003
+ __net_ipv4_mapped_d_%ipv6 = load %ipv4+NetIpv4Addr_d as u8
2004
+ __net_ipv4_mapped_ab_%ipv6 = shl __net_ipv4_mapped_a_%ipv6, 8
2005
+ __net_ipv4_mapped_s6_%ipv6 = or __net_ipv4_mapped_ab_%ipv6, __net_ipv4_mapped_b_%ipv6
2006
+ __net_ipv4_mapped_cd_%ipv6 = shl __net_ipv4_mapped_c_%ipv6, 8
2007
+ __net_ipv4_mapped_s7_%ipv6 = or __net_ipv4_mapped_cd_%ipv6, __net_ipv4_mapped_d_%ipv6
2008
+ EXPAND NET_IPV6_NEW %ipv6, 0, 0, 0, 0, 0, 65535, __net_ipv4_mapped_s6_%ipv6, __net_ipv4_mapped_s7_%ipv6
2009
+ !__net_ipv4_mapped_s7_%ipv6
2010
+ !__net_ipv4_mapped_cd_%ipv6
2011
+ !__net_ipv4_mapped_s6_%ipv6
2012
+ !__net_ipv4_mapped_ab_%ipv6
2013
+ !__net_ipv4_mapped_d_%ipv6
2014
+ !__net_ipv4_mapped_c_%ipv6
2015
+ !__net_ipv4_mapped_b_%ipv6
2016
+ !__net_ipv4_mapped_a_%ipv6
2017
+ [END_MACRO]
2018
+
2019
+ [MACRO] NET_IPV6_NEW %addr, %s0, %s1, %s2, %s3, %s4, %s5, %s6, %s7
2020
+ store %addr+NetIpv6Addr_s0, %s0 as u16
2021
+ store %addr+NetIpv6Addr_s1, %s1 as u16
2022
+ store %addr+NetIpv6Addr_s2, %s2 as u16
2023
+ store %addr+NetIpv6Addr_s3, %s3 as u16
2024
+ store %addr+NetIpv6Addr_s4, %s4 as u16
2025
+ store %addr+NetIpv6Addr_s5, %s5 as u16
2026
+ store %addr+NetIpv6Addr_s6, %s6 as u16
2027
+ store %addr+NetIpv6Addr_s7, %s7 as u16
2028
+ [END_MACRO]
2029
+
2030
+ [MACRO] NET_IPV6_SEGMENTS %out_s0, %out_s1, %out_s2, %out_s3, %out_s4, %out_s5, %out_s6, %out_s7, %addr
2031
+ %out_s0 = load %addr+NetIpv6Addr_s0 as u16
2032
+ %out_s1 = load %addr+NetIpv6Addr_s1 as u16
2033
+ %out_s2 = load %addr+NetIpv6Addr_s2 as u16
2034
+ %out_s3 = load %addr+NetIpv6Addr_s3 as u16
2035
+ %out_s4 = load %addr+NetIpv6Addr_s4 as u16
2036
+ %out_s5 = load %addr+NetIpv6Addr_s5 as u16
2037
+ %out_s6 = load %addr+NetIpv6Addr_s6 as u16
2038
+ %out_s7 = load %addr+NetIpv6Addr_s7 as u16
2039
+ [END_MACRO]
2040
+
2041
+ [MACRO] NET_IPV6_FROM_SEGMENTS %addr, %s0, %s1, %s2, %s3, %s4, %s5, %s6, %s7
2042
+ EXPAND NET_IPV6_NEW %addr, %s0, %s1, %s2, %s3, %s4, %s5, %s6, %s7
2043
+ [END_MACRO]
2044
+
2045
+ [MACRO] NET_IPV6_UNSPECIFIED %addr
2046
+ EXPAND NET_IPV6_NEW %addr, 0, 0, 0, 0, 0, 0, 0, 0
2047
+ [END_MACRO]
2048
+
2049
+ // Rust-style Default for Ipv6Addr: UNSPECIFIED.
2050
+ [MACRO] NET_IPV6_DEFAULT %addr
2051
+ EXPAND NET_IPV6_UNSPECIFIED %addr
2052
+ [END_MACRO]
2053
+
2054
+ [MACRO] NET_IPV6_LOCALHOST %addr
2055
+ EXPAND NET_IPV6_NEW %addr, 0, 0, 0, 0, 0, 0, 0, 1
2056
+ [END_MACRO]
2057
+
2058
+ [MACRO] NET_IPV6_BITS %out_bits
2059
+ %out_bits = add 0, NET_IPV6_BITS_VALUE
2060
+ [END_MACRO]
2061
+
2062
+ [MACRO] NET_IPV6_OCTETS %out_b0, %out_b1, %out_b2, %out_b3, %out_b4, %out_b5, %out_b6, %out_b7, %out_b8, %out_b9, %out_b10, %out_b11, %out_b12, %out_b13, %out_b14, %out_b15, %addr
2063
+ __net_ipv6_oct_s0_%out_b0 = load %addr+NetIpv6Addr_s0 as u16
2064
+ __net_ipv6_oct_s1_%out_b0 = load %addr+NetIpv6Addr_s1 as u16
2065
+ __net_ipv6_oct_s2_%out_b0 = load %addr+NetIpv6Addr_s2 as u16
2066
+ __net_ipv6_oct_s3_%out_b0 = load %addr+NetIpv6Addr_s3 as u16
2067
+ __net_ipv6_oct_s4_%out_b0 = load %addr+NetIpv6Addr_s4 as u16
2068
+ __net_ipv6_oct_s5_%out_b0 = load %addr+NetIpv6Addr_s5 as u16
2069
+ __net_ipv6_oct_s6_%out_b0 = load %addr+NetIpv6Addr_s6 as u16
2070
+ __net_ipv6_oct_s7_%out_b0 = load %addr+NetIpv6Addr_s7 as u16
2071
+ %out_b0 = lshr __net_ipv6_oct_s0_%out_b0, 8
2072
+ %out_b1 = and __net_ipv6_oct_s0_%out_b0, 255
2073
+ %out_b2 = lshr __net_ipv6_oct_s1_%out_b0, 8
2074
+ %out_b3 = and __net_ipv6_oct_s1_%out_b0, 255
2075
+ %out_b4 = lshr __net_ipv6_oct_s2_%out_b0, 8
2076
+ %out_b5 = and __net_ipv6_oct_s2_%out_b0, 255
2077
+ %out_b6 = lshr __net_ipv6_oct_s3_%out_b0, 8
2078
+ %out_b7 = and __net_ipv6_oct_s3_%out_b0, 255
2079
+ %out_b8 = lshr __net_ipv6_oct_s4_%out_b0, 8
2080
+ %out_b9 = and __net_ipv6_oct_s4_%out_b0, 255
2081
+ %out_b10 = lshr __net_ipv6_oct_s5_%out_b0, 8
2082
+ %out_b11 = and __net_ipv6_oct_s5_%out_b0, 255
2083
+ %out_b12 = lshr __net_ipv6_oct_s6_%out_b0, 8
2084
+ %out_b13 = and __net_ipv6_oct_s6_%out_b0, 255
2085
+ %out_b14 = lshr __net_ipv6_oct_s7_%out_b0, 8
2086
+ %out_b15 = and __net_ipv6_oct_s7_%out_b0, 255
2087
+ !__net_ipv6_oct_s7_%out_b0
2088
+ !__net_ipv6_oct_s6_%out_b0
2089
+ !__net_ipv6_oct_s5_%out_b0
2090
+ !__net_ipv6_oct_s4_%out_b0
2091
+ !__net_ipv6_oct_s3_%out_b0
2092
+ !__net_ipv6_oct_s2_%out_b0
2093
+ !__net_ipv6_oct_s1_%out_b0
2094
+ !__net_ipv6_oct_s0_%out_b0
2095
+ [END_MACRO]
2096
+
2097
+ [MACRO] NET_IPV6_AS_OCTETS_PTR %out_ptr, %addr
2098
+ __net_ipv6_octets_view_%out_ptr = stack_alloc 16
2099
+ EXPAND NET_IPV6_WRITE_OCTETS __net_ipv6_octets_view_ok_%out_ptr, __net_ipv6_octets_view_%out_ptr, 16, %addr
2100
+ %out_ptr = ptr_add __net_ipv6_octets_view_%out_ptr, 0
2101
+ !__net_ipv6_octets_view_ok_%out_ptr
2102
+ [END_MACRO]
2103
+
2104
+ [MACRO] NET_IPV6_WRITE_OCTETS %out_ok, %dst_ptr, %dst_len, %addr
2105
+ __net_ipv6_write_fits_%out_ok = uge %dst_len, 16
2106
+ br __net_ipv6_write_fits_%out_ok -> L_NET_IPV6_WRITE_OCTETS_OK_%out_ok, L_NET_IPV6_WRITE_OCTETS_FAIL_%out_ok
2107
+
2108
+ L_NET_IPV6_WRITE_OCTETS_OK_%out_ok:
2109
+ EXPAND NET_IPV6_OCTETS __net_ipv6_write_b0_%out_ok, __net_ipv6_write_b1_%out_ok, __net_ipv6_write_b2_%out_ok, __net_ipv6_write_b3_%out_ok, __net_ipv6_write_b4_%out_ok, __net_ipv6_write_b5_%out_ok, __net_ipv6_write_b6_%out_ok, __net_ipv6_write_b7_%out_ok, __net_ipv6_write_b8_%out_ok, __net_ipv6_write_b9_%out_ok, __net_ipv6_write_b10_%out_ok, __net_ipv6_write_b11_%out_ok, __net_ipv6_write_b12_%out_ok, __net_ipv6_write_b13_%out_ok, __net_ipv6_write_b14_%out_ok, __net_ipv6_write_b15_%out_ok, %addr
2110
+ store %dst_ptr+0, __net_ipv6_write_b0_%out_ok as u8
2111
+ __net_ipv6_write_p1_%out_ok = ptr_add %dst_ptr, 1
2112
+ __net_ipv6_write_p2_%out_ok = ptr_add %dst_ptr, 2
2113
+ __net_ipv6_write_p3_%out_ok = ptr_add %dst_ptr, 3
2114
+ __net_ipv6_write_p4_%out_ok = ptr_add %dst_ptr, 4
2115
+ __net_ipv6_write_p5_%out_ok = ptr_add %dst_ptr, 5
2116
+ __net_ipv6_write_p6_%out_ok = ptr_add %dst_ptr, 6
2117
+ __net_ipv6_write_p7_%out_ok = ptr_add %dst_ptr, 7
2118
+ __net_ipv6_write_p8_%out_ok = ptr_add %dst_ptr, 8
2119
+ __net_ipv6_write_p9_%out_ok = ptr_add %dst_ptr, 9
2120
+ __net_ipv6_write_p10_%out_ok = ptr_add %dst_ptr, 10
2121
+ __net_ipv6_write_p11_%out_ok = ptr_add %dst_ptr, 11
2122
+ __net_ipv6_write_p12_%out_ok = ptr_add %dst_ptr, 12
2123
+ __net_ipv6_write_p13_%out_ok = ptr_add %dst_ptr, 13
2124
+ __net_ipv6_write_p14_%out_ok = ptr_add %dst_ptr, 14
2125
+ __net_ipv6_write_p15_%out_ok = ptr_add %dst_ptr, 15
2126
+ store __net_ipv6_write_p1_%out_ok+0, __net_ipv6_write_b1_%out_ok as u8
2127
+ store __net_ipv6_write_p2_%out_ok+0, __net_ipv6_write_b2_%out_ok as u8
2128
+ store __net_ipv6_write_p3_%out_ok+0, __net_ipv6_write_b3_%out_ok as u8
2129
+ store __net_ipv6_write_p4_%out_ok+0, __net_ipv6_write_b4_%out_ok as u8
2130
+ store __net_ipv6_write_p5_%out_ok+0, __net_ipv6_write_b5_%out_ok as u8
2131
+ store __net_ipv6_write_p6_%out_ok+0, __net_ipv6_write_b6_%out_ok as u8
2132
+ store __net_ipv6_write_p7_%out_ok+0, __net_ipv6_write_b7_%out_ok as u8
2133
+ store __net_ipv6_write_p8_%out_ok+0, __net_ipv6_write_b8_%out_ok as u8
2134
+ store __net_ipv6_write_p9_%out_ok+0, __net_ipv6_write_b9_%out_ok as u8
2135
+ store __net_ipv6_write_p10_%out_ok+0, __net_ipv6_write_b10_%out_ok as u8
2136
+ store __net_ipv6_write_p11_%out_ok+0, __net_ipv6_write_b11_%out_ok as u8
2137
+ store __net_ipv6_write_p12_%out_ok+0, __net_ipv6_write_b12_%out_ok as u8
2138
+ store __net_ipv6_write_p13_%out_ok+0, __net_ipv6_write_b13_%out_ok as u8
2139
+ store __net_ipv6_write_p14_%out_ok+0, __net_ipv6_write_b14_%out_ok as u8
2140
+ store __net_ipv6_write_p15_%out_ok+0, __net_ipv6_write_b15_%out_ok as u8
2141
+ %out_ok = add 0, 1
2142
+ !__net_ipv6_write_p15_%out_ok
2143
+ !__net_ipv6_write_p14_%out_ok
2144
+ !__net_ipv6_write_p13_%out_ok
2145
+ !__net_ipv6_write_p12_%out_ok
2146
+ !__net_ipv6_write_p11_%out_ok
2147
+ !__net_ipv6_write_p10_%out_ok
2148
+ !__net_ipv6_write_p9_%out_ok
2149
+ !__net_ipv6_write_p8_%out_ok
2150
+ !__net_ipv6_write_p7_%out_ok
2151
+ !__net_ipv6_write_p6_%out_ok
2152
+ !__net_ipv6_write_p5_%out_ok
2153
+ !__net_ipv6_write_p4_%out_ok
2154
+ !__net_ipv6_write_p3_%out_ok
2155
+ !__net_ipv6_write_p2_%out_ok
2156
+ !__net_ipv6_write_p1_%out_ok
2157
+ !__net_ipv6_write_b15_%out_ok
2158
+ !__net_ipv6_write_b14_%out_ok
2159
+ !__net_ipv6_write_b13_%out_ok
2160
+ !__net_ipv6_write_b12_%out_ok
2161
+ !__net_ipv6_write_b11_%out_ok
2162
+ !__net_ipv6_write_b10_%out_ok
2163
+ !__net_ipv6_write_b9_%out_ok
2164
+ !__net_ipv6_write_b8_%out_ok
2165
+ !__net_ipv6_write_b7_%out_ok
2166
+ !__net_ipv6_write_b6_%out_ok
2167
+ !__net_ipv6_write_b5_%out_ok
2168
+ !__net_ipv6_write_b4_%out_ok
2169
+ !__net_ipv6_write_b3_%out_ok
2170
+ !__net_ipv6_write_b2_%out_ok
2171
+ !__net_ipv6_write_b1_%out_ok
2172
+ !__net_ipv6_write_b0_%out_ok
2173
+ !__net_ipv6_write_fits_%out_ok
2174
+ jmp L_NET_IPV6_WRITE_OCTETS_END_%out_ok
2175
+
2176
+ L_NET_IPV6_WRITE_OCTETS_FAIL_%out_ok:
2177
+ %out_ok = add 0, 0
2178
+ !__net_ipv6_write_fits_%out_ok
2179
+
2180
+ L_NET_IPV6_WRITE_OCTETS_END_%out_ok:
2181
+ [END_MACRO]
2182
+
2183
+ [MACRO] NET_IPV6_FROM_OCTETS %addr, %b0, %b1, %b2, %b3, %b4, %b5, %b6, %b7, %b8, %b9, %b10, %b11, %b12, %b13, %b14, %b15
2184
+ __net_ipv6_from_oct_s0_hi_%addr = shl %b0, 8
2185
+ __net_ipv6_from_oct_s0_%addr = or __net_ipv6_from_oct_s0_hi_%addr, %b1
2186
+ __net_ipv6_from_oct_s1_hi_%addr = shl %b2, 8
2187
+ __net_ipv6_from_oct_s1_%addr = or __net_ipv6_from_oct_s1_hi_%addr, %b3
2188
+ __net_ipv6_from_oct_s2_hi_%addr = shl %b4, 8
2189
+ __net_ipv6_from_oct_s2_%addr = or __net_ipv6_from_oct_s2_hi_%addr, %b5
2190
+ __net_ipv6_from_oct_s3_hi_%addr = shl %b6, 8
2191
+ __net_ipv6_from_oct_s3_%addr = or __net_ipv6_from_oct_s3_hi_%addr, %b7
2192
+ __net_ipv6_from_oct_s4_hi_%addr = shl %b8, 8
2193
+ __net_ipv6_from_oct_s4_%addr = or __net_ipv6_from_oct_s4_hi_%addr, %b9
2194
+ __net_ipv6_from_oct_s5_hi_%addr = shl %b10, 8
2195
+ __net_ipv6_from_oct_s5_%addr = or __net_ipv6_from_oct_s5_hi_%addr, %b11
2196
+ __net_ipv6_from_oct_s6_hi_%addr = shl %b12, 8
2197
+ __net_ipv6_from_oct_s6_%addr = or __net_ipv6_from_oct_s6_hi_%addr, %b13
2198
+ __net_ipv6_from_oct_s7_hi_%addr = shl %b14, 8
2199
+ __net_ipv6_from_oct_s7_%addr = or __net_ipv6_from_oct_s7_hi_%addr, %b15
2200
+ EXPAND NET_IPV6_NEW %addr, __net_ipv6_from_oct_s0_%addr, __net_ipv6_from_oct_s1_%addr, __net_ipv6_from_oct_s2_%addr, __net_ipv6_from_oct_s3_%addr, __net_ipv6_from_oct_s4_%addr, __net_ipv6_from_oct_s5_%addr, __net_ipv6_from_oct_s6_%addr, __net_ipv6_from_oct_s7_%addr
2201
+ !__net_ipv6_from_oct_s7_%addr
2202
+ !__net_ipv6_from_oct_s7_hi_%addr
2203
+ !__net_ipv6_from_oct_s6_%addr
2204
+ !__net_ipv6_from_oct_s6_hi_%addr
2205
+ !__net_ipv6_from_oct_s5_%addr
2206
+ !__net_ipv6_from_oct_s5_hi_%addr
2207
+ !__net_ipv6_from_oct_s4_%addr
2208
+ !__net_ipv6_from_oct_s4_hi_%addr
2209
+ !__net_ipv6_from_oct_s3_%addr
2210
+ !__net_ipv6_from_oct_s3_hi_%addr
2211
+ !__net_ipv6_from_oct_s2_%addr
2212
+ !__net_ipv6_from_oct_s2_hi_%addr
2213
+ !__net_ipv6_from_oct_s1_%addr
2214
+ !__net_ipv6_from_oct_s1_hi_%addr
2215
+ !__net_ipv6_from_oct_s0_%addr
2216
+ !__net_ipv6_from_oct_s0_hi_%addr
2217
+ [END_MACRO]
2218
+
2219
+ [MACRO] NET_IPV6_COPY %dst_addr, %src_addr
2220
+ __net_ipv6_copy_s0_%dst_addr = load %src_addr+NetIpv6Addr_s0 as u16
2221
+ __net_ipv6_copy_s1_%dst_addr = load %src_addr+NetIpv6Addr_s1 as u16
2222
+ __net_ipv6_copy_s2_%dst_addr = load %src_addr+NetIpv6Addr_s2 as u16
2223
+ __net_ipv6_copy_s3_%dst_addr = load %src_addr+NetIpv6Addr_s3 as u16
2224
+ __net_ipv6_copy_s4_%dst_addr = load %src_addr+NetIpv6Addr_s4 as u16
2225
+ __net_ipv6_copy_s5_%dst_addr = load %src_addr+NetIpv6Addr_s5 as u16
2226
+ __net_ipv6_copy_s6_%dst_addr = load %src_addr+NetIpv6Addr_s6 as u16
2227
+ __net_ipv6_copy_s7_%dst_addr = load %src_addr+NetIpv6Addr_s7 as u16
2228
+ EXPAND NET_IPV6_NEW %dst_addr, __net_ipv6_copy_s0_%dst_addr, __net_ipv6_copy_s1_%dst_addr, __net_ipv6_copy_s2_%dst_addr, __net_ipv6_copy_s3_%dst_addr, __net_ipv6_copy_s4_%dst_addr, __net_ipv6_copy_s5_%dst_addr, __net_ipv6_copy_s6_%dst_addr, __net_ipv6_copy_s7_%dst_addr
2229
+ !__net_ipv6_copy_s7_%dst_addr
2230
+ !__net_ipv6_copy_s6_%dst_addr
2231
+ !__net_ipv6_copy_s5_%dst_addr
2232
+ !__net_ipv6_copy_s4_%dst_addr
2233
+ !__net_ipv6_copy_s3_%dst_addr
2234
+ !__net_ipv6_copy_s2_%dst_addr
2235
+ !__net_ipv6_copy_s1_%dst_addr
2236
+ !__net_ipv6_copy_s0_%dst_addr
2237
+ [END_MACRO]
2238
+
2239
+ [MACRO] NET_IPV6_TO_BITS64 %out_hi, %out_lo, %addr
2240
+ __net_ipv6_bits_s0_%out_hi = load %addr+NetIpv6Addr_s0 as u16
2241
+ __net_ipv6_bits_s1_%out_hi = load %addr+NetIpv6Addr_s1 as u16
2242
+ __net_ipv6_bits_s2_%out_hi = load %addr+NetIpv6Addr_s2 as u16
2243
+ __net_ipv6_bits_s3_%out_hi = load %addr+NetIpv6Addr_s3 as u16
2244
+ __net_ipv6_bits_s4_%out_hi = load %addr+NetIpv6Addr_s4 as u16
2245
+ __net_ipv6_bits_s5_%out_hi = load %addr+NetIpv6Addr_s5 as u16
2246
+ __net_ipv6_bits_s6_%out_hi = load %addr+NetIpv6Addr_s6 as u16
2247
+ __net_ipv6_bits_s7_%out_hi = load %addr+NetIpv6Addr_s7 as u16
2248
+ __net_ipv6_bits_s0_shift_%out_hi = shl __net_ipv6_bits_s0_%out_hi, 48
2249
+ __net_ipv6_bits_s1_shift_%out_hi = shl __net_ipv6_bits_s1_%out_hi, 32
2250
+ __net_ipv6_bits_s2_shift_%out_hi = shl __net_ipv6_bits_s2_%out_hi, 16
2251
+ __net_ipv6_bits_hi01_%out_hi = or __net_ipv6_bits_s0_shift_%out_hi, __net_ipv6_bits_s1_shift_%out_hi
2252
+ __net_ipv6_bits_hi23_%out_hi = or __net_ipv6_bits_s2_shift_%out_hi, __net_ipv6_bits_s3_%out_hi
2253
+ %out_hi = or __net_ipv6_bits_hi01_%out_hi, __net_ipv6_bits_hi23_%out_hi
2254
+ __net_ipv6_bits_s4_shift_%out_hi = shl __net_ipv6_bits_s4_%out_hi, 48
2255
+ __net_ipv6_bits_s5_shift_%out_hi = shl __net_ipv6_bits_s5_%out_hi, 32
2256
+ __net_ipv6_bits_s6_shift_%out_hi = shl __net_ipv6_bits_s6_%out_hi, 16
2257
+ __net_ipv6_bits_lo45_%out_hi = or __net_ipv6_bits_s4_shift_%out_hi, __net_ipv6_bits_s5_shift_%out_hi
2258
+ __net_ipv6_bits_lo67_%out_hi = or __net_ipv6_bits_s6_shift_%out_hi, __net_ipv6_bits_s7_%out_hi
2259
+ %out_lo = or __net_ipv6_bits_lo45_%out_hi, __net_ipv6_bits_lo67_%out_hi
2260
+ !__net_ipv6_bits_lo67_%out_hi
2261
+ !__net_ipv6_bits_lo45_%out_hi
2262
+ !__net_ipv6_bits_s6_shift_%out_hi
2263
+ !__net_ipv6_bits_s5_shift_%out_hi
2264
+ !__net_ipv6_bits_s4_shift_%out_hi
2265
+ !__net_ipv6_bits_hi23_%out_hi
2266
+ !__net_ipv6_bits_hi01_%out_hi
2267
+ !__net_ipv6_bits_s2_shift_%out_hi
2268
+ !__net_ipv6_bits_s1_shift_%out_hi
2269
+ !__net_ipv6_bits_s0_shift_%out_hi
2270
+ !__net_ipv6_bits_s7_%out_hi
2271
+ !__net_ipv6_bits_s6_%out_hi
2272
+ !__net_ipv6_bits_s5_%out_hi
2273
+ !__net_ipv6_bits_s4_%out_hi
2274
+ !__net_ipv6_bits_s3_%out_hi
2275
+ !__net_ipv6_bits_s2_%out_hi
2276
+ !__net_ipv6_bits_s1_%out_hi
2277
+ !__net_ipv6_bits_s0_%out_hi
2278
+ [END_MACRO]
2279
+
2280
+ [MACRO] NET_IPV6_FROM_BITS64 %addr, %hi, %lo
2281
+ __net_ipv6_from_s0_%addr = lshr %hi, 48
2282
+ __net_ipv6_from_s1_raw_%addr = lshr %hi, 32
2283
+ __net_ipv6_from_s1_%addr = and __net_ipv6_from_s1_raw_%addr, 65535
2284
+ __net_ipv6_from_s2_raw_%addr = lshr %hi, 16
2285
+ __net_ipv6_from_s2_%addr = and __net_ipv6_from_s2_raw_%addr, 65535
2286
+ __net_ipv6_from_s3_%addr = and %hi, 65535
2287
+ __net_ipv6_from_s4_%addr = lshr %lo, 48
2288
+ __net_ipv6_from_s5_raw_%addr = lshr %lo, 32
2289
+ __net_ipv6_from_s5_%addr = and __net_ipv6_from_s5_raw_%addr, 65535
2290
+ __net_ipv6_from_s6_raw_%addr = lshr %lo, 16
2291
+ __net_ipv6_from_s6_%addr = and __net_ipv6_from_s6_raw_%addr, 65535
2292
+ __net_ipv6_from_s7_%addr = and %lo, 65535
2293
+ EXPAND NET_IPV6_NEW %addr, __net_ipv6_from_s0_%addr, __net_ipv6_from_s1_%addr, __net_ipv6_from_s2_%addr, __net_ipv6_from_s3_%addr, __net_ipv6_from_s4_%addr, __net_ipv6_from_s5_%addr, __net_ipv6_from_s6_%addr, __net_ipv6_from_s7_%addr
2294
+ !__net_ipv6_from_s7_%addr
2295
+ !__net_ipv6_from_s6_%addr
2296
+ !__net_ipv6_from_s6_raw_%addr
2297
+ !__net_ipv6_from_s5_%addr
2298
+ !__net_ipv6_from_s5_raw_%addr
2299
+ !__net_ipv6_from_s4_%addr
2300
+ !__net_ipv6_from_s3_%addr
2301
+ !__net_ipv6_from_s2_%addr
2302
+ !__net_ipv6_from_s2_raw_%addr
2303
+ !__net_ipv6_from_s1_%addr
2304
+ !__net_ipv6_from_s1_raw_%addr
2305
+ !__net_ipv6_from_s0_%addr
2306
+ [END_MACRO]
2307
+
2308
+ [MACRO] NET_IPV6_EQ %out_bool, %left, %right
2309
+ __net_ipv6_l0_%out_bool = load %left+NetIpv6Addr_s0 as u16
2310
+ __net_ipv6_l1_%out_bool = load %left+NetIpv6Addr_s1 as u16
2311
+ __net_ipv6_l2_%out_bool = load %left+NetIpv6Addr_s2 as u16
2312
+ __net_ipv6_l3_%out_bool = load %left+NetIpv6Addr_s3 as u16
2313
+ __net_ipv6_l4_%out_bool = load %left+NetIpv6Addr_s4 as u16
2314
+ __net_ipv6_l5_%out_bool = load %left+NetIpv6Addr_s5 as u16
2315
+ __net_ipv6_l6_%out_bool = load %left+NetIpv6Addr_s6 as u16
2316
+ __net_ipv6_l7_%out_bool = load %left+NetIpv6Addr_s7 as u16
2317
+ __net_ipv6_r0_%out_bool = load %right+NetIpv6Addr_s0 as u16
2318
+ __net_ipv6_r1_%out_bool = load %right+NetIpv6Addr_s1 as u16
2319
+ __net_ipv6_r2_%out_bool = load %right+NetIpv6Addr_s2 as u16
2320
+ __net_ipv6_r3_%out_bool = load %right+NetIpv6Addr_s3 as u16
2321
+ __net_ipv6_r4_%out_bool = load %right+NetIpv6Addr_s4 as u16
2322
+ __net_ipv6_r5_%out_bool = load %right+NetIpv6Addr_s5 as u16
2323
+ __net_ipv6_r6_%out_bool = load %right+NetIpv6Addr_s6 as u16
2324
+ __net_ipv6_r7_%out_bool = load %right+NetIpv6Addr_s7 as u16
2325
+ __net_ipv6_e0_%out_bool = eq __net_ipv6_l0_%out_bool, __net_ipv6_r0_%out_bool
2326
+ __net_ipv6_e1_%out_bool = eq __net_ipv6_l1_%out_bool, __net_ipv6_r1_%out_bool
2327
+ __net_ipv6_e2_%out_bool = eq __net_ipv6_l2_%out_bool, __net_ipv6_r2_%out_bool
2328
+ __net_ipv6_e3_%out_bool = eq __net_ipv6_l3_%out_bool, __net_ipv6_r3_%out_bool
2329
+ __net_ipv6_e4_%out_bool = eq __net_ipv6_l4_%out_bool, __net_ipv6_r4_%out_bool
2330
+ __net_ipv6_e5_%out_bool = eq __net_ipv6_l5_%out_bool, __net_ipv6_r5_%out_bool
2331
+ __net_ipv6_e6_%out_bool = eq __net_ipv6_l6_%out_bool, __net_ipv6_r6_%out_bool
2332
+ __net_ipv6_e7_%out_bool = eq __net_ipv6_l7_%out_bool, __net_ipv6_r7_%out_bool
2333
+ __net_ipv6_e01_%out_bool = and __net_ipv6_e0_%out_bool, __net_ipv6_e1_%out_bool
2334
+ __net_ipv6_e23_%out_bool = and __net_ipv6_e2_%out_bool, __net_ipv6_e3_%out_bool
2335
+ __net_ipv6_e45_%out_bool = and __net_ipv6_e4_%out_bool, __net_ipv6_e5_%out_bool
2336
+ __net_ipv6_e67_%out_bool = and __net_ipv6_e6_%out_bool, __net_ipv6_e7_%out_bool
2337
+ __net_ipv6_e03_%out_bool = and __net_ipv6_e01_%out_bool, __net_ipv6_e23_%out_bool
2338
+ __net_ipv6_e47_%out_bool = and __net_ipv6_e45_%out_bool, __net_ipv6_e67_%out_bool
2339
+ %out_bool = and __net_ipv6_e03_%out_bool, __net_ipv6_e47_%out_bool
2340
+ !__net_ipv6_e47_%out_bool
2341
+ !__net_ipv6_e03_%out_bool
2342
+ !__net_ipv6_e67_%out_bool
2343
+ !__net_ipv6_e45_%out_bool
2344
+ !__net_ipv6_e23_%out_bool
2345
+ !__net_ipv6_e01_%out_bool
2346
+ !__net_ipv6_e7_%out_bool
2347
+ !__net_ipv6_e6_%out_bool
2348
+ !__net_ipv6_e5_%out_bool
2349
+ !__net_ipv6_e4_%out_bool
2350
+ !__net_ipv6_e3_%out_bool
2351
+ !__net_ipv6_e2_%out_bool
2352
+ !__net_ipv6_e1_%out_bool
2353
+ !__net_ipv6_e0_%out_bool
2354
+ !__net_ipv6_r7_%out_bool
2355
+ !__net_ipv6_r6_%out_bool
2356
+ !__net_ipv6_r5_%out_bool
2357
+ !__net_ipv6_r4_%out_bool
2358
+ !__net_ipv6_r3_%out_bool
2359
+ !__net_ipv6_r2_%out_bool
2360
+ !__net_ipv6_r1_%out_bool
2361
+ !__net_ipv6_r0_%out_bool
2362
+ !__net_ipv6_l7_%out_bool
2363
+ !__net_ipv6_l6_%out_bool
2364
+ !__net_ipv6_l5_%out_bool
2365
+ !__net_ipv6_l4_%out_bool
2366
+ !__net_ipv6_l3_%out_bool
2367
+ !__net_ipv6_l2_%out_bool
2368
+ !__net_ipv6_l1_%out_bool
2369
+ !__net_ipv6_l0_%out_bool
2370
+ [END_MACRO]
2371
+
2372
+ [MACRO] NET_IPV6_IS_UNSPECIFIED %out_bool, %addr
2373
+ __net_ipv6_zero_%out_bool = stack_alloc NetIpv6Addr_SIZE
2374
+ EXPAND NET_IPV6_NEW __net_ipv6_zero_%out_bool, 0, 0, 0, 0, 0, 0, 0, 0
2375
+ EXPAND NET_IPV6_EQ %out_bool, %addr, __net_ipv6_zero_%out_bool
2376
+ [END_MACRO]
2377
+
2378
+ [MACRO] NET_IPV6_IS_LOOPBACK %out_bool, %addr
2379
+ __net_ipv6_loop_%out_bool = stack_alloc NetIpv6Addr_SIZE
2380
+ EXPAND NET_IPV6_NEW __net_ipv6_loop_%out_bool, 0, 0, 0, 0, 0, 0, 0, 1
2381
+ EXPAND NET_IPV6_EQ %out_bool, %addr, __net_ipv6_loop_%out_bool
2382
+ [END_MACRO]
2383
+
2384
+ [MACRO] NET_IPV6_IS_MULTICAST %out_bool, %addr
2385
+ __net_ipv6_s0_%out_bool = load %addr+NetIpv6Addr_s0 as u16
2386
+ __net_ipv6_masked_%out_bool = and __net_ipv6_s0_%out_bool, 65280
2387
+ %out_bool = eq __net_ipv6_masked_%out_bool, 65280
2388
+ !__net_ipv6_masked_%out_bool
2389
+ !__net_ipv6_s0_%out_bool
2390
+ [END_MACRO]
2391
+
2392
+ [MACRO] NET_IPV6_IS_UNIQUE_LOCAL %out_bool, %addr
2393
+ __net_ipv6_s0_%out_bool = load %addr+NetIpv6Addr_s0 as u16
2394
+ __net_ipv6_masked_%out_bool = and __net_ipv6_s0_%out_bool, 65024
2395
+ %out_bool = eq __net_ipv6_masked_%out_bool, 64512
2396
+ !__net_ipv6_masked_%out_bool
2397
+ !__net_ipv6_s0_%out_bool
2398
+ [END_MACRO]
2399
+
2400
+ [MACRO] NET_IPV6_IS_UNICAST_LINK_LOCAL %out_bool, %addr
2401
+ __net_ipv6_s0_%out_bool = load %addr+NetIpv6Addr_s0 as u16
2402
+ __net_ipv6_masked_%out_bool = and __net_ipv6_s0_%out_bool, 65472
2403
+ %out_bool = eq __net_ipv6_masked_%out_bool, 65152
2404
+ !__net_ipv6_masked_%out_bool
2405
+ !__net_ipv6_s0_%out_bool
2406
+ [END_MACRO]
2407
+
2408
+ [MACRO] NET_IPV6_IS_UNICAST %out_bool, %addr
2409
+ EXPAND NET_IPV6_IS_MULTICAST __net_ipv6_multicast_%out_bool, %addr
2410
+ %out_bool = eq __net_ipv6_multicast_%out_bool, 0
2411
+ !__net_ipv6_multicast_%out_bool
2412
+ [END_MACRO]
2413
+
2414
+ [MACRO] NET_IPV6_IS_DOCUMENTATION %out_bool, %addr
2415
+ __net_ipv6_s0_%out_bool = load %addr+NetIpv6Addr_s0 as u16
2416
+ __net_ipv6_s1_%out_bool = load %addr+NetIpv6Addr_s1 as u16
2417
+ __net_ipv6_doc2001_%out_bool = eq __net_ipv6_s0_%out_bool, 8193
2418
+ __net_ipv6_doc0db8_%out_bool = eq __net_ipv6_s1_%out_bool, 3512
2419
+ __net_ipv6_doc1_%out_bool = and __net_ipv6_doc2001_%out_bool, __net_ipv6_doc0db8_%out_bool
2420
+ __net_ipv6_doc3fff_%out_bool = eq __net_ipv6_s0_%out_bool, 16383
2421
+ __net_ipv6_doc3fff_range_%out_bool = ule __net_ipv6_s1_%out_bool, 4095
2422
+ __net_ipv6_doc2_%out_bool = and __net_ipv6_doc3fff_%out_bool, __net_ipv6_doc3fff_range_%out_bool
2423
+ %out_bool = or __net_ipv6_doc1_%out_bool, __net_ipv6_doc2_%out_bool
2424
+ !__net_ipv6_doc2_%out_bool
2425
+ !__net_ipv6_doc3fff_range_%out_bool
2426
+ !__net_ipv6_doc3fff_%out_bool
2427
+ !__net_ipv6_doc1_%out_bool
2428
+ !__net_ipv6_doc0db8_%out_bool
2429
+ !__net_ipv6_doc2001_%out_bool
2430
+ !__net_ipv6_s1_%out_bool
2431
+ !__net_ipv6_s0_%out_bool
2432
+ [END_MACRO]
2433
+
2434
+ [MACRO] NET_IPV6_IS_BENCHMARKING %out_bool, %addr
2435
+ __net_ipv6_s0_%out_bool = load %addr+NetIpv6Addr_s0 as u16
2436
+ __net_ipv6_s1_%out_bool = load %addr+NetIpv6Addr_s1 as u16
2437
+ __net_ipv6_s2_%out_bool = load %addr+NetIpv6Addr_s2 as u16
2438
+ __net_ipv6_2001_%out_bool = eq __net_ipv6_s0_%out_bool, 8193
2439
+ __net_ipv6_0002_%out_bool = eq __net_ipv6_s1_%out_bool, 2
2440
+ __net_ipv6_0000_%out_bool = eq __net_ipv6_s2_%out_bool, 0
2441
+ __net_ipv6_left_%out_bool = and __net_ipv6_2001_%out_bool, __net_ipv6_0002_%out_bool
2442
+ %out_bool = and __net_ipv6_left_%out_bool, __net_ipv6_0000_%out_bool
2443
+ !__net_ipv6_left_%out_bool
2444
+ !__net_ipv6_0000_%out_bool
2445
+ !__net_ipv6_0002_%out_bool
2446
+ !__net_ipv6_2001_%out_bool
2447
+ !__net_ipv6_s2_%out_bool
2448
+ !__net_ipv6_s1_%out_bool
2449
+ !__net_ipv6_s0_%out_bool
2450
+ [END_MACRO]
2451
+
2452
+ [MACRO] NET_IPV6_IS_GLOBAL %out_bool, %addr
2453
+ __net_ipv6_global_s0_%out_bool = load %addr+NetIpv6Addr_s0 as u16
2454
+ __net_ipv6_global_s1_%out_bool = load %addr+NetIpv6Addr_s1 as u16
2455
+ __net_ipv6_global_s2_%out_bool = load %addr+NetIpv6Addr_s2 as u16
2456
+ __net_ipv6_global_s3_%out_bool = load %addr+NetIpv6Addr_s3 as u16
2457
+ __net_ipv6_global_s4_%out_bool = load %addr+NetIpv6Addr_s4 as u16
2458
+ __net_ipv6_global_s5_%out_bool = load %addr+NetIpv6Addr_s5 as u16
2459
+ __net_ipv6_global_s6_%out_bool = load %addr+NetIpv6Addr_s6 as u16
2460
+ __net_ipv6_global_s7_%out_bool = load %addr+NetIpv6Addr_s7 as u16
2461
+ EXPAND NET_IPV6_IS_UNSPECIFIED __net_ipv6_global_unspec_%out_bool, %addr
2462
+ EXPAND NET_IPV6_IS_LOOPBACK __net_ipv6_global_loop_%out_bool, %addr
2463
+ EXPAND NET_IPV6_IS_IPV4_MAPPED __net_ipv6_global_mapped_%out_bool, %addr
2464
+ EXPAND NET_IPV6_IS_DOCUMENTATION __net_ipv6_global_doc_%out_bool, %addr
2465
+ EXPAND NET_IPV6_IS_UNIQUE_LOCAL __net_ipv6_global_unique_%out_bool, %addr
2466
+ EXPAND NET_IPV6_IS_UNICAST_LINK_LOCAL __net_ipv6_global_link_%out_bool, %addr
2467
+
2468
+ __net_ipv6_global_trans_s0_%out_bool = eq __net_ipv6_global_s0_%out_bool, 100
2469
+ __net_ipv6_global_trans_s1_%out_bool = eq __net_ipv6_global_s1_%out_bool, 65435
2470
+ __net_ipv6_global_trans_s2_%out_bool = eq __net_ipv6_global_s2_%out_bool, 1
2471
+ __net_ipv6_global_trans_01_%out_bool = and __net_ipv6_global_trans_s0_%out_bool, __net_ipv6_global_trans_s1_%out_bool
2472
+ __net_ipv6_global_translate_%out_bool = and __net_ipv6_global_trans_01_%out_bool, __net_ipv6_global_trans_s2_%out_bool
2473
+
2474
+ __net_ipv6_global_discard_s0_%out_bool = eq __net_ipv6_global_s0_%out_bool, 256
2475
+ __net_ipv6_global_discard_s1_%out_bool = eq __net_ipv6_global_s1_%out_bool, 0
2476
+ __net_ipv6_global_discard_s2_%out_bool = eq __net_ipv6_global_s2_%out_bool, 0
2477
+ __net_ipv6_global_discard_s3_%out_bool = eq __net_ipv6_global_s3_%out_bool, 0
2478
+ __net_ipv6_global_discard_01_%out_bool = and __net_ipv6_global_discard_s0_%out_bool, __net_ipv6_global_discard_s1_%out_bool
2479
+ __net_ipv6_global_discard_23_%out_bool = and __net_ipv6_global_discard_s2_%out_bool, __net_ipv6_global_discard_s3_%out_bool
2480
+ __net_ipv6_global_discard_%out_bool = and __net_ipv6_global_discard_01_%out_bool, __net_ipv6_global_discard_23_%out_bool
2481
+
2482
+ __net_ipv6_global_2001_%out_bool = eq __net_ipv6_global_s0_%out_bool, 8193
2483
+ __net_ipv6_global_proto_s1_%out_bool = ult __net_ipv6_global_s1_%out_bool, 512
2484
+ __net_ipv6_global_proto_range_%out_bool = and __net_ipv6_global_2001_%out_bool, __net_ipv6_global_proto_s1_%out_bool
2485
+ __net_ipv6_global_s1_1_%out_bool = eq __net_ipv6_global_s1_%out_bool, 1
2486
+ __net_ipv6_global_s2_zero_%out_bool = eq __net_ipv6_global_s2_%out_bool, 0
2487
+ __net_ipv6_global_s3_zero_%out_bool = eq __net_ipv6_global_s3_%out_bool, 0
2488
+ __net_ipv6_global_s4_zero_%out_bool = eq __net_ipv6_global_s4_%out_bool, 0
2489
+ __net_ipv6_global_s5_zero_%out_bool = eq __net_ipv6_global_s5_%out_bool, 0
2490
+ __net_ipv6_global_s6_zero_%out_bool = eq __net_ipv6_global_s6_%out_bool, 0
2491
+ __net_ipv6_global_tail_23_%out_bool = and __net_ipv6_global_s2_zero_%out_bool, __net_ipv6_global_s3_zero_%out_bool
2492
+ __net_ipv6_global_tail_45_%out_bool = and __net_ipv6_global_s4_zero_%out_bool, __net_ipv6_global_s5_zero_%out_bool
2493
+ __net_ipv6_global_tail_26a_%out_bool = and __net_ipv6_global_tail_23_%out_bool, __net_ipv6_global_tail_45_%out_bool
2494
+ __net_ipv6_global_tail_26_%out_bool = and __net_ipv6_global_tail_26a_%out_bool, __net_ipv6_global_s6_zero_%out_bool
2495
+ __net_ipv6_global_s7_1_%out_bool = eq __net_ipv6_global_s7_%out_bool, 1
2496
+ __net_ipv6_global_s7_2_%out_bool = eq __net_ipv6_global_s7_%out_bool, 2
2497
+ __net_ipv6_global_anycast_tail_%out_bool = or __net_ipv6_global_s7_1_%out_bool, __net_ipv6_global_s7_2_%out_bool
2498
+ __net_ipv6_global_anycast_a_%out_bool = and __net_ipv6_global_2001_%out_bool, __net_ipv6_global_s1_1_%out_bool
2499
+ __net_ipv6_global_anycast_b_%out_bool = and __net_ipv6_global_anycast_a_%out_bool, __net_ipv6_global_tail_26_%out_bool
2500
+ __net_ipv6_global_anycast_%out_bool = and __net_ipv6_global_anycast_b_%out_bool, __net_ipv6_global_anycast_tail_%out_bool
2501
+ __net_ipv6_global_amt_%out_bool = eq __net_ipv6_global_s1_%out_bool, 3
2502
+ __net_ipv6_global_as112_s1_%out_bool = eq __net_ipv6_global_s1_%out_bool, 4
2503
+ __net_ipv6_global_as112_s2_%out_bool = eq __net_ipv6_global_s2_%out_bool, 274
2504
+ __net_ipv6_global_as112_%out_bool = and __net_ipv6_global_as112_s1_%out_bool, __net_ipv6_global_as112_s2_%out_bool
2505
+ __net_ipv6_global_orchid_lo_%out_bool = uge __net_ipv6_global_s1_%out_bool, 32
2506
+ __net_ipv6_global_orchid_hi_%out_bool = ule __net_ipv6_global_s1_%out_bool, 63
2507
+ __net_ipv6_global_orchid_%out_bool = and __net_ipv6_global_orchid_lo_%out_bool, __net_ipv6_global_orchid_hi_%out_bool
2508
+ __net_ipv6_global_proto_allow01_%out_bool = or __net_ipv6_global_anycast_%out_bool, __net_ipv6_global_amt_%out_bool
2509
+ __net_ipv6_global_proto_allow02_%out_bool = or __net_ipv6_global_proto_allow01_%out_bool, __net_ipv6_global_as112_%out_bool
2510
+ __net_ipv6_global_proto_allowed_%out_bool = or __net_ipv6_global_proto_allow02_%out_bool, __net_ipv6_global_orchid_%out_bool
2511
+ __net_ipv6_global_proto_block_%out_bool = eq __net_ipv6_global_proto_allowed_%out_bool, 0
2512
+ __net_ipv6_global_proto_%out_bool = and __net_ipv6_global_proto_range_%out_bool, __net_ipv6_global_proto_block_%out_bool
2513
+
2514
+ __net_ipv6_global_6to4_%out_bool = eq __net_ipv6_global_s0_%out_bool, 8194
2515
+ __net_ipv6_global_srv6_%out_bool = eq __net_ipv6_global_s0_%out_bool, 24320
2516
+ __net_ipv6_global_ex01_%out_bool = or __net_ipv6_global_unspec_%out_bool, __net_ipv6_global_loop_%out_bool
2517
+ __net_ipv6_global_ex02_%out_bool = or __net_ipv6_global_ex01_%out_bool, __net_ipv6_global_mapped_%out_bool
2518
+ __net_ipv6_global_ex03_%out_bool = or __net_ipv6_global_ex02_%out_bool, __net_ipv6_global_translate_%out_bool
2519
+ __net_ipv6_global_ex04_%out_bool = or __net_ipv6_global_ex03_%out_bool, __net_ipv6_global_discard_%out_bool
2520
+ __net_ipv6_global_ex05_%out_bool = or __net_ipv6_global_ex04_%out_bool, __net_ipv6_global_proto_%out_bool
2521
+ __net_ipv6_global_ex06_%out_bool = or __net_ipv6_global_ex05_%out_bool, __net_ipv6_global_6to4_%out_bool
2522
+ __net_ipv6_global_ex07_%out_bool = or __net_ipv6_global_ex06_%out_bool, __net_ipv6_global_doc_%out_bool
2523
+ __net_ipv6_global_ex08_%out_bool = or __net_ipv6_global_ex07_%out_bool, __net_ipv6_global_srv6_%out_bool
2524
+ __net_ipv6_global_ex09_%out_bool = or __net_ipv6_global_ex08_%out_bool, __net_ipv6_global_unique_%out_bool
2525
+ __net_ipv6_global_excluded_%out_bool = or __net_ipv6_global_ex09_%out_bool, __net_ipv6_global_link_%out_bool
2526
+ %out_bool = eq __net_ipv6_global_excluded_%out_bool, 0
2527
+ !__net_ipv6_global_excluded_%out_bool
2528
+ !__net_ipv6_global_ex09_%out_bool
2529
+ !__net_ipv6_global_ex08_%out_bool
2530
+ !__net_ipv6_global_ex07_%out_bool
2531
+ !__net_ipv6_global_ex06_%out_bool
2532
+ !__net_ipv6_global_ex05_%out_bool
2533
+ !__net_ipv6_global_ex04_%out_bool
2534
+ !__net_ipv6_global_ex03_%out_bool
2535
+ !__net_ipv6_global_ex02_%out_bool
2536
+ !__net_ipv6_global_ex01_%out_bool
2537
+ !__net_ipv6_global_srv6_%out_bool
2538
+ !__net_ipv6_global_6to4_%out_bool
2539
+ !__net_ipv6_global_proto_%out_bool
2540
+ !__net_ipv6_global_proto_block_%out_bool
2541
+ !__net_ipv6_global_proto_allowed_%out_bool
2542
+ !__net_ipv6_global_proto_allow02_%out_bool
2543
+ !__net_ipv6_global_proto_allow01_%out_bool
2544
+ !__net_ipv6_global_orchid_%out_bool
2545
+ !__net_ipv6_global_orchid_hi_%out_bool
2546
+ !__net_ipv6_global_orchid_lo_%out_bool
2547
+ !__net_ipv6_global_as112_%out_bool
2548
+ !__net_ipv6_global_as112_s2_%out_bool
2549
+ !__net_ipv6_global_as112_s1_%out_bool
2550
+ !__net_ipv6_global_amt_%out_bool
2551
+ !__net_ipv6_global_anycast_%out_bool
2552
+ !__net_ipv6_global_anycast_b_%out_bool
2553
+ !__net_ipv6_global_anycast_a_%out_bool
2554
+ !__net_ipv6_global_anycast_tail_%out_bool
2555
+ !__net_ipv6_global_s7_2_%out_bool
2556
+ !__net_ipv6_global_s7_1_%out_bool
2557
+ !__net_ipv6_global_tail_26_%out_bool
2558
+ !__net_ipv6_global_tail_26a_%out_bool
2559
+ !__net_ipv6_global_tail_45_%out_bool
2560
+ !__net_ipv6_global_tail_23_%out_bool
2561
+ !__net_ipv6_global_s6_zero_%out_bool
2562
+ !__net_ipv6_global_s5_zero_%out_bool
2563
+ !__net_ipv6_global_s4_zero_%out_bool
2564
+ !__net_ipv6_global_s3_zero_%out_bool
2565
+ !__net_ipv6_global_s2_zero_%out_bool
2566
+ !__net_ipv6_global_s1_1_%out_bool
2567
+ !__net_ipv6_global_proto_range_%out_bool
2568
+ !__net_ipv6_global_proto_s1_%out_bool
2569
+ !__net_ipv6_global_2001_%out_bool
2570
+ !__net_ipv6_global_discard_%out_bool
2571
+ !__net_ipv6_global_discard_23_%out_bool
2572
+ !__net_ipv6_global_discard_01_%out_bool
2573
+ !__net_ipv6_global_discard_s3_%out_bool
2574
+ !__net_ipv6_global_discard_s2_%out_bool
2575
+ !__net_ipv6_global_discard_s1_%out_bool
2576
+ !__net_ipv6_global_discard_s0_%out_bool
2577
+ !__net_ipv6_global_translate_%out_bool
2578
+ !__net_ipv6_global_trans_01_%out_bool
2579
+ !__net_ipv6_global_trans_s2_%out_bool
2580
+ !__net_ipv6_global_trans_s1_%out_bool
2581
+ !__net_ipv6_global_trans_s0_%out_bool
2582
+ !__net_ipv6_global_link_%out_bool
2583
+ !__net_ipv6_global_unique_%out_bool
2584
+ !__net_ipv6_global_doc_%out_bool
2585
+ !__net_ipv6_global_mapped_%out_bool
2586
+ !__net_ipv6_global_loop_%out_bool
2587
+ !__net_ipv6_global_unspec_%out_bool
2588
+ !__net_ipv6_global_s7_%out_bool
2589
+ !__net_ipv6_global_s6_%out_bool
2590
+ !__net_ipv6_global_s5_%out_bool
2591
+ !__net_ipv6_global_s4_%out_bool
2592
+ !__net_ipv6_global_s3_%out_bool
2593
+ !__net_ipv6_global_s2_%out_bool
2594
+ !__net_ipv6_global_s1_%out_bool
2595
+ !__net_ipv6_global_s0_%out_bool
2596
+ [END_MACRO]
2597
+
2598
+ [MACRO] NET_IPV6_IS_IPV4_MAPPED %out_bool, %addr
2599
+ __net_ipv6_s0_%out_bool = load %addr+NetIpv6Addr_s0 as u16
2600
+ __net_ipv6_s1_%out_bool = load %addr+NetIpv6Addr_s1 as u16
2601
+ __net_ipv6_s2_%out_bool = load %addr+NetIpv6Addr_s2 as u16
2602
+ __net_ipv6_s3_%out_bool = load %addr+NetIpv6Addr_s3 as u16
2603
+ __net_ipv6_s4_%out_bool = load %addr+NetIpv6Addr_s4 as u16
2604
+ __net_ipv6_s5_%out_bool = load %addr+NetIpv6Addr_s5 as u16
2605
+ __net_ipv6_e0_%out_bool = eq __net_ipv6_s0_%out_bool, 0
2606
+ __net_ipv6_e1_%out_bool = eq __net_ipv6_s1_%out_bool, 0
2607
+ __net_ipv6_e2_%out_bool = eq __net_ipv6_s2_%out_bool, 0
2608
+ __net_ipv6_e3_%out_bool = eq __net_ipv6_s3_%out_bool, 0
2609
+ __net_ipv6_e4_%out_bool = eq __net_ipv6_s4_%out_bool, 0
2610
+ __net_ipv6_e5_%out_bool = eq __net_ipv6_s5_%out_bool, 65535
2611
+ __net_ipv6_e01_%out_bool = and __net_ipv6_e0_%out_bool, __net_ipv6_e1_%out_bool
2612
+ __net_ipv6_e23_%out_bool = and __net_ipv6_e2_%out_bool, __net_ipv6_e3_%out_bool
2613
+ __net_ipv6_e45_%out_bool = and __net_ipv6_e4_%out_bool, __net_ipv6_e5_%out_bool
2614
+ __net_ipv6_e03_%out_bool = and __net_ipv6_e01_%out_bool, __net_ipv6_e23_%out_bool
2615
+ %out_bool = and __net_ipv6_e03_%out_bool, __net_ipv6_e45_%out_bool
2616
+ !__net_ipv6_e03_%out_bool
2617
+ !__net_ipv6_e45_%out_bool
2618
+ !__net_ipv6_e23_%out_bool
2619
+ !__net_ipv6_e01_%out_bool
2620
+ !__net_ipv6_e5_%out_bool
2621
+ !__net_ipv6_e4_%out_bool
2622
+ !__net_ipv6_e3_%out_bool
2623
+ !__net_ipv6_e2_%out_bool
2624
+ !__net_ipv6_e1_%out_bool
2625
+ !__net_ipv6_e0_%out_bool
2626
+ !__net_ipv6_s5_%out_bool
2627
+ !__net_ipv6_s4_%out_bool
2628
+ !__net_ipv6_s3_%out_bool
2629
+ !__net_ipv6_s2_%out_bool
2630
+ !__net_ipv6_s1_%out_bool
2631
+ !__net_ipv6_s0_%out_bool
2632
+ [END_MACRO]
2633
+
2634
+ [MACRO] NET_IPV6_MULTICAST_SCOPE %out_ok, %out_scope, %addr
2635
+ EXPAND NET_IPV6_IS_MULTICAST %out_ok, %addr
2636
+ __net_ipv6_scope_s0_%out_scope = load %addr+NetIpv6Addr_s0 as u16
2637
+ %out_scope = and __net_ipv6_scope_s0_%out_scope, 15
2638
+ !__net_ipv6_scope_s0_%out_scope
2639
+ [END_MACRO]
2640
+
2641
+ [MACRO] NET_IPV6_MULTICAST_SCOPE_IS %out_bool, %scope, %expected_scope
2642
+ %out_bool = eq %scope, %expected_scope
2643
+ [END_MACRO]
2644
+
2645
+ [MACRO] NET_IPV6_MULTICAST_SCOPE_IS_INTERFACE_LOCAL %out_bool, %scope
2646
+ EXPAND NET_IPV6_MULTICAST_SCOPE_IS %out_bool, %scope, NET_IPV6_MULTICAST_SCOPE_INTERFACE_LOCAL
2647
+ [END_MACRO]
2648
+
2649
+ [MACRO] NET_IPV6_MULTICAST_SCOPE_IS_LINK_LOCAL %out_bool, %scope
2650
+ EXPAND NET_IPV6_MULTICAST_SCOPE_IS %out_bool, %scope, NET_IPV6_MULTICAST_SCOPE_LINK_LOCAL
2651
+ [END_MACRO]
2652
+
2653
+ [MACRO] NET_IPV6_MULTICAST_SCOPE_IS_REALM_LOCAL %out_bool, %scope
2654
+ EXPAND NET_IPV6_MULTICAST_SCOPE_IS %out_bool, %scope, NET_IPV6_MULTICAST_SCOPE_REALM_LOCAL
2655
+ [END_MACRO]
2656
+
2657
+ [MACRO] NET_IPV6_MULTICAST_SCOPE_IS_RESERVED %out_bool, %scope
2658
+ __net_ipv6_scope_reserved_zero_%out_bool = eq %scope, NET_IPV6_MULTICAST_SCOPE_RESERVED_ZERO
2659
+ __net_ipv6_scope_reserved_f_%out_bool = eq %scope, NET_IPV6_MULTICAST_SCOPE_RESERVED_F
2660
+ %out_bool = or __net_ipv6_scope_reserved_zero_%out_bool, __net_ipv6_scope_reserved_f_%out_bool
2661
+ !__net_ipv6_scope_reserved_f_%out_bool
2662
+ !__net_ipv6_scope_reserved_zero_%out_bool
2663
+ [END_MACRO]
2664
+
2665
+ [MACRO] NET_IPV6_MULTICAST_SCOPE_IS_UNASSIGNED %out_bool, %scope
2666
+ __net_ipv6_scope_unassigned6_%out_bool = eq %scope, NET_IPV6_MULTICAST_SCOPE_UNASSIGNED6
2667
+ __net_ipv6_scope_unassigned7_%out_bool = eq %scope, NET_IPV6_MULTICAST_SCOPE_UNASSIGNED7
2668
+ __net_ipv6_scope_unassigned9_%out_bool = uge %scope, NET_IPV6_MULTICAST_SCOPE_UNASSIGNED9
2669
+ __net_ipv6_scope_unassignedd_%out_bool = ule %scope, NET_IPV6_MULTICAST_SCOPE_UNASSIGNED_D
2670
+ __net_ipv6_scope_unassigned9d_%out_bool = and __net_ipv6_scope_unassigned9_%out_bool, __net_ipv6_scope_unassignedd_%out_bool
2671
+ %out_bool = or __net_ipv6_scope_unassigned6_%out_bool, __net_ipv6_scope_unassigned7_%out_bool
2672
+ %out_bool = or %out_bool, __net_ipv6_scope_unassigned9d_%out_bool
2673
+ !__net_ipv6_scope_unassigned9d_%out_bool
2674
+ !__net_ipv6_scope_unassignedd_%out_bool
2675
+ !__net_ipv6_scope_unassigned9_%out_bool
2676
+ !__net_ipv6_scope_unassigned7_%out_bool
2677
+ !__net_ipv6_scope_unassigned6_%out_bool
2678
+ [END_MACRO]
2679
+
2680
+ [MACRO] NET_IPV6_MULTICAST_SCOPE_IS_ADMIN_LOCAL %out_bool, %scope
2681
+ EXPAND NET_IPV6_MULTICAST_SCOPE_IS %out_bool, %scope, NET_IPV6_MULTICAST_SCOPE_ADMIN_LOCAL
2682
+ [END_MACRO]
2683
+
2684
+ [MACRO] NET_IPV6_MULTICAST_SCOPE_IS_SITE_LOCAL %out_bool, %scope
2685
+ EXPAND NET_IPV6_MULTICAST_SCOPE_IS %out_bool, %scope, NET_IPV6_MULTICAST_SCOPE_SITE_LOCAL
2686
+ [END_MACRO]
2687
+
2688
+ [MACRO] NET_IPV6_MULTICAST_SCOPE_IS_ORGANIZATION_LOCAL %out_bool, %scope
2689
+ EXPAND NET_IPV6_MULTICAST_SCOPE_IS %out_bool, %scope, NET_IPV6_MULTICAST_SCOPE_ORGANIZATION_LOCAL
2690
+ [END_MACRO]
2691
+
2692
+ [MACRO] NET_IPV6_MULTICAST_SCOPE_IS_GLOBAL %out_bool, %scope
2693
+ EXPAND NET_IPV6_MULTICAST_SCOPE_IS %out_bool, %scope, NET_IPV6_MULTICAST_SCOPE_GLOBAL
2694
+ [END_MACRO]
2695
+
2696
+ [MACRO] NET_IPV6_TO_IPV4_MAPPED %out_ok, %ipv4, %addr
2697
+ EXPAND NET_IPV6_IS_IPV4_MAPPED %out_ok, %addr
2698
+ __net_ipv6_map_s6_%ipv4 = load %addr+NetIpv6Addr_s6 as u16
2699
+ __net_ipv6_map_s7_%ipv4 = load %addr+NetIpv6Addr_s7 as u16
2700
+ __net_ipv6_map_a_%ipv4 = lshr __net_ipv6_map_s6_%ipv4, 8
2701
+ __net_ipv6_map_b_%ipv4 = and __net_ipv6_map_s6_%ipv4, 255
2702
+ __net_ipv6_map_c_%ipv4 = lshr __net_ipv6_map_s7_%ipv4, 8
2703
+ __net_ipv6_map_d_%ipv4 = and __net_ipv6_map_s7_%ipv4, 255
2704
+ EXPAND NET_IPV4_NEW %ipv4, __net_ipv6_map_a_%ipv4, __net_ipv6_map_b_%ipv4, __net_ipv6_map_c_%ipv4, __net_ipv6_map_d_%ipv4
2705
+ !__net_ipv6_map_d_%ipv4
2706
+ !__net_ipv6_map_c_%ipv4
2707
+ !__net_ipv6_map_b_%ipv4
2708
+ !__net_ipv6_map_a_%ipv4
2709
+ !__net_ipv6_map_s7_%ipv4
2710
+ !__net_ipv6_map_s6_%ipv4
2711
+ [END_MACRO]
2712
+
2713
+ [MACRO] NET_IPV6_TO_IPV4 %out_ok, %ipv4, %addr
2714
+ __net_ipv6_to4_s0_%ipv4 = load %addr+NetIpv6Addr_s0 as u16
2715
+ __net_ipv6_to4_s1_%ipv4 = load %addr+NetIpv6Addr_s1 as u16
2716
+ __net_ipv6_to4_s2_%ipv4 = load %addr+NetIpv6Addr_s2 as u16
2717
+ __net_ipv6_to4_s3_%ipv4 = load %addr+NetIpv6Addr_s3 as u16
2718
+ __net_ipv6_to4_s4_%ipv4 = load %addr+NetIpv6Addr_s4 as u16
2719
+ __net_ipv6_to4_s5_%ipv4 = load %addr+NetIpv6Addr_s5 as u16
2720
+ __net_ipv6_to4_s6_%ipv4 = load %addr+NetIpv6Addr_s6 as u16
2721
+ __net_ipv6_to4_s7_%ipv4 = load %addr+NetIpv6Addr_s7 as u16
2722
+ __net_ipv6_to4_e0_%ipv4 = eq __net_ipv6_to4_s0_%ipv4, 0
2723
+ __net_ipv6_to4_e1_%ipv4 = eq __net_ipv6_to4_s1_%ipv4, 0
2724
+ __net_ipv6_to4_e2_%ipv4 = eq __net_ipv6_to4_s2_%ipv4, 0
2725
+ __net_ipv6_to4_e3_%ipv4 = eq __net_ipv6_to4_s3_%ipv4, 0
2726
+ __net_ipv6_to4_e4_%ipv4 = eq __net_ipv6_to4_s4_%ipv4, 0
2727
+ __net_ipv6_to4_s5_zero_%ipv4 = eq __net_ipv6_to4_s5_%ipv4, 0
2728
+ __net_ipv6_to4_s5_ffff_%ipv4 = eq __net_ipv6_to4_s5_%ipv4, 65535
2729
+ __net_ipv6_to4_s5_ok_%ipv4 = or __net_ipv6_to4_s5_zero_%ipv4, __net_ipv6_to4_s5_ffff_%ipv4
2730
+ __net_ipv6_to4_e01_%ipv4 = and __net_ipv6_to4_e0_%ipv4, __net_ipv6_to4_e1_%ipv4
2731
+ __net_ipv6_to4_e23_%ipv4 = and __net_ipv6_to4_e2_%ipv4, __net_ipv6_to4_e3_%ipv4
2732
+ __net_ipv6_to4_e04_%ipv4 = and __net_ipv6_to4_e01_%ipv4, __net_ipv6_to4_e23_%ipv4
2733
+ __net_ipv6_to4_e05_%ipv4 = and __net_ipv6_to4_e04_%ipv4, __net_ipv6_to4_e4_%ipv4
2734
+ %out_ok = and __net_ipv6_to4_e05_%ipv4, __net_ipv6_to4_s5_ok_%ipv4
2735
+ __net_ipv6_to4_a_%ipv4 = lshr __net_ipv6_to4_s6_%ipv4, 8
2736
+ __net_ipv6_to4_b_%ipv4 = and __net_ipv6_to4_s6_%ipv4, 255
2737
+ __net_ipv6_to4_c_%ipv4 = lshr __net_ipv6_to4_s7_%ipv4, 8
2738
+ __net_ipv6_to4_d_%ipv4 = and __net_ipv6_to4_s7_%ipv4, 255
2739
+ EXPAND NET_IPV4_NEW %ipv4, __net_ipv6_to4_a_%ipv4, __net_ipv6_to4_b_%ipv4, __net_ipv6_to4_c_%ipv4, __net_ipv6_to4_d_%ipv4
2740
+ !__net_ipv6_to4_d_%ipv4
2741
+ !__net_ipv6_to4_c_%ipv4
2742
+ !__net_ipv6_to4_b_%ipv4
2743
+ !__net_ipv6_to4_a_%ipv4
2744
+ !__net_ipv6_to4_e05_%ipv4
2745
+ !__net_ipv6_to4_e04_%ipv4
2746
+ !__net_ipv6_to4_e23_%ipv4
2747
+ !__net_ipv6_to4_e01_%ipv4
2748
+ !__net_ipv6_to4_s5_ok_%ipv4
2749
+ !__net_ipv6_to4_s5_ffff_%ipv4
2750
+ !__net_ipv6_to4_s5_zero_%ipv4
2751
+ !__net_ipv6_to4_e4_%ipv4
2752
+ !__net_ipv6_to4_e3_%ipv4
2753
+ !__net_ipv6_to4_e2_%ipv4
2754
+ !__net_ipv6_to4_e1_%ipv4
2755
+ !__net_ipv6_to4_e0_%ipv4
2756
+ !__net_ipv6_to4_s7_%ipv4
2757
+ !__net_ipv6_to4_s6_%ipv4
2758
+ !__net_ipv6_to4_s5_%ipv4
2759
+ !__net_ipv6_to4_s4_%ipv4
2760
+ !__net_ipv6_to4_s3_%ipv4
2761
+ !__net_ipv6_to4_s2_%ipv4
2762
+ !__net_ipv6_to4_s1_%ipv4
2763
+ !__net_ipv6_to4_s0_%ipv4
2764
+ [END_MACRO]
2765
+
2766
+ [MACRO] NET_IPV6_IS_UNICAST_GLOBAL %out_bool, %addr
2767
+ EXPAND NET_IPV6_IS_UNICAST __net_ipv6_unicast_%out_bool, %addr
2768
+ EXPAND NET_IPV6_IS_LOOPBACK __net_ipv6_loopback_%out_bool, %addr
2769
+ EXPAND NET_IPV6_IS_UNICAST_LINK_LOCAL __net_ipv6_link_%out_bool, %addr
2770
+ EXPAND NET_IPV6_IS_UNIQUE_LOCAL __net_ipv6_unique_%out_bool, %addr
2771
+ EXPAND NET_IPV6_IS_UNSPECIFIED __net_ipv6_unspec_%out_bool, %addr
2772
+ EXPAND NET_IPV6_IS_DOCUMENTATION __net_ipv6_doc_%out_bool, %addr
2773
+ EXPAND NET_IPV6_IS_BENCHMARKING __net_ipv6_bench_%out_bool, %addr
2774
+ __net_ipv6_ng01_%out_bool = or __net_ipv6_loopback_%out_bool, __net_ipv6_link_%out_bool
2775
+ __net_ipv6_ng02_%out_bool = or __net_ipv6_ng01_%out_bool, __net_ipv6_unique_%out_bool
2776
+ __net_ipv6_ng03_%out_bool = or __net_ipv6_ng02_%out_bool, __net_ipv6_unspec_%out_bool
2777
+ __net_ipv6_ng04_%out_bool = or __net_ipv6_ng03_%out_bool, __net_ipv6_doc_%out_bool
2778
+ __net_ipv6_not_global_%out_bool = or __net_ipv6_ng04_%out_bool, __net_ipv6_bench_%out_bool
2779
+ __net_ipv6_no_exclusion_%out_bool = eq __net_ipv6_not_global_%out_bool, 0
2780
+ %out_bool = and __net_ipv6_unicast_%out_bool, __net_ipv6_no_exclusion_%out_bool
2781
+ !__net_ipv6_no_exclusion_%out_bool
2782
+ !__net_ipv6_not_global_%out_bool
2783
+ !__net_ipv6_ng04_%out_bool
2784
+ !__net_ipv6_ng03_%out_bool
2785
+ !__net_ipv6_ng02_%out_bool
2786
+ !__net_ipv6_ng01_%out_bool
2787
+ !__net_ipv6_bench_%out_bool
2788
+ !__net_ipv6_doc_%out_bool
2789
+ !__net_ipv6_unspec_%out_bool
2790
+ !__net_ipv6_unique_%out_bool
2791
+ !__net_ipv6_link_%out_bool
2792
+ !__net_ipv6_loopback_%out_bool
2793
+ !__net_ipv6_unicast_%out_bool
2794
+ [END_MACRO]
2795
+
2796
+ [MACRO] NET_IPV6_TO_CANONICAL %out_ipaddr, %addr
2797
+ __net_ipv6_canon_v4_%out_ipaddr = stack_alloc NetIpv4Addr_SIZE
2798
+ EXPAND NET_IPV6_TO_IPV4_MAPPED __net_ipv6_canon_mapped_%out_ipaddr, __net_ipv6_canon_v4_%out_ipaddr, %addr
2799
+ br __net_ipv6_canon_mapped_%out_ipaddr -> L_NET_IPV6_CANON_V4_%out_ipaddr, L_NET_IPV6_CANON_V6_%out_ipaddr
2800
+
2801
+ L_NET_IPV6_CANON_V4_%out_ipaddr:
2802
+ EXPAND NET_IP_ADDR_V4_NEW %out_ipaddr, __net_ipv6_canon_v4_%out_ipaddr
2803
+ !__net_ipv6_canon_mapped_%out_ipaddr
2804
+ jmp L_NET_IPV6_CANON_DONE_%out_ipaddr
2805
+
2806
+ L_NET_IPV6_CANON_V6_%out_ipaddr:
2807
+ EXPAND NET_IP_ADDR_V6_NEW %out_ipaddr, %addr
2808
+ !__net_ipv6_canon_mapped_%out_ipaddr
2809
+
2810
+ L_NET_IPV6_CANON_DONE_%out_ipaddr:
2811
+ [END_MACRO]
2812
+
2813
+ [MACRO] NET_IP_ADDR_V4_NEW %ipaddr, %ipv4
2814
+ store %ipaddr+NetIpAddr_tag, NET_IP_ADDR_V4 as u64
2815
+ __net_ip_v4_payload_%ipaddr = ptr_add %ipaddr, 8
2816
+ __net_ip_v4_a_%ipaddr = load %ipv4+NetIpv4Addr_a as u8
2817
+ __net_ip_v4_b_%ipaddr = load %ipv4+NetIpv4Addr_b as u8
2818
+ __net_ip_v4_c_%ipaddr = load %ipv4+NetIpv4Addr_c as u8
2819
+ __net_ip_v4_d_%ipaddr = load %ipv4+NetIpv4Addr_d as u8
2820
+ store __net_ip_v4_payload_%ipaddr+NetIpv4Addr_a, __net_ip_v4_a_%ipaddr as u8
2821
+ store __net_ip_v4_payload_%ipaddr+NetIpv4Addr_b, __net_ip_v4_b_%ipaddr as u8
2822
+ store __net_ip_v4_payload_%ipaddr+NetIpv4Addr_c, __net_ip_v4_c_%ipaddr as u8
2823
+ store __net_ip_v4_payload_%ipaddr+NetIpv4Addr_d, __net_ip_v4_d_%ipaddr as u8
2824
+ !__net_ip_v4_d_%ipaddr
2825
+ !__net_ip_v4_c_%ipaddr
2826
+ !__net_ip_v4_b_%ipaddr
2827
+ !__net_ip_v4_a_%ipaddr
2828
+ !__net_ip_v4_payload_%ipaddr
2829
+ [END_MACRO]
2830
+
2831
+ [MACRO] NET_IP_ADDR_V6_NEW %ipaddr, %ipv6
2832
+ store %ipaddr+NetIpAddr_tag, NET_IP_ADDR_V6 as u64
2833
+ __net_ip_v6_payload_%ipaddr = ptr_add %ipaddr, 8
2834
+ __net_ip_v6_s0_%ipaddr = load %ipv6+NetIpv6Addr_s0 as u16
2835
+ __net_ip_v6_s1_%ipaddr = load %ipv6+NetIpv6Addr_s1 as u16
2836
+ __net_ip_v6_s2_%ipaddr = load %ipv6+NetIpv6Addr_s2 as u16
2837
+ __net_ip_v6_s3_%ipaddr = load %ipv6+NetIpv6Addr_s3 as u16
2838
+ __net_ip_v6_s4_%ipaddr = load %ipv6+NetIpv6Addr_s4 as u16
2839
+ __net_ip_v6_s5_%ipaddr = load %ipv6+NetIpv6Addr_s5 as u16
2840
+ __net_ip_v6_s6_%ipaddr = load %ipv6+NetIpv6Addr_s6 as u16
2841
+ __net_ip_v6_s7_%ipaddr = load %ipv6+NetIpv6Addr_s7 as u16
2842
+ store __net_ip_v6_payload_%ipaddr+NetIpv6Addr_s0, __net_ip_v6_s0_%ipaddr as u16
2843
+ store __net_ip_v6_payload_%ipaddr+NetIpv6Addr_s1, __net_ip_v6_s1_%ipaddr as u16
2844
+ store __net_ip_v6_payload_%ipaddr+NetIpv6Addr_s2, __net_ip_v6_s2_%ipaddr as u16
2845
+ store __net_ip_v6_payload_%ipaddr+NetIpv6Addr_s3, __net_ip_v6_s3_%ipaddr as u16
2846
+ store __net_ip_v6_payload_%ipaddr+NetIpv6Addr_s4, __net_ip_v6_s4_%ipaddr as u16
2847
+ store __net_ip_v6_payload_%ipaddr+NetIpv6Addr_s5, __net_ip_v6_s5_%ipaddr as u16
2848
+ store __net_ip_v6_payload_%ipaddr+NetIpv6Addr_s6, __net_ip_v6_s6_%ipaddr as u16
2849
+ store __net_ip_v6_payload_%ipaddr+NetIpv6Addr_s7, __net_ip_v6_s7_%ipaddr as u16
2850
+ !__net_ip_v6_s7_%ipaddr
2851
+ !__net_ip_v6_s6_%ipaddr
2852
+ !__net_ip_v6_s5_%ipaddr
2853
+ !__net_ip_v6_s4_%ipaddr
2854
+ !__net_ip_v6_s3_%ipaddr
2855
+ !__net_ip_v6_s2_%ipaddr
2856
+ !__net_ip_v6_s1_%ipaddr
2857
+ !__net_ip_v6_s0_%ipaddr
2858
+ !__net_ip_v6_payload_%ipaddr
2859
+ [END_MACRO]
2860
+
2861
+ [MACRO] NET_IP_ADDR_V4_UNSPECIFIED %ipaddr
2862
+ __net_ip_v4_unspec_%ipaddr = stack_alloc NetIpv4Addr_SIZE
2863
+ EXPAND NET_IPV4_UNSPECIFIED __net_ip_v4_unspec_%ipaddr
2864
+ EXPAND NET_IP_ADDR_V4_NEW %ipaddr, __net_ip_v4_unspec_%ipaddr
2865
+ [END_MACRO]
2866
+
2867
+ // Rust-style Default for IpAddr: Ipv4Addr::UNSPECIFIED.
2868
+ [MACRO] NET_IP_ADDR_DEFAULT %ipaddr
2869
+ EXPAND NET_IP_ADDR_V4_UNSPECIFIED %ipaddr
2870
+ [END_MACRO]
2871
+
2872
+ [MACRO] NET_IP_ADDR_V4_LOCALHOST %ipaddr
2873
+ __net_ip_v4_local_%ipaddr = stack_alloc NetIpv4Addr_SIZE
2874
+ EXPAND NET_IPV4_LOCALHOST __net_ip_v4_local_%ipaddr
2875
+ EXPAND NET_IP_ADDR_V4_NEW %ipaddr, __net_ip_v4_local_%ipaddr
2876
+ [END_MACRO]
2877
+
2878
+ [MACRO] NET_IP_ADDR_V4_BROADCAST %ipaddr
2879
+ __net_ip_v4_bcast_%ipaddr = stack_alloc NetIpv4Addr_SIZE
2880
+ EXPAND NET_IPV4_BROADCAST __net_ip_v4_bcast_%ipaddr
2881
+ EXPAND NET_IP_ADDR_V4_NEW %ipaddr, __net_ip_v4_bcast_%ipaddr
2882
+ [END_MACRO]
2883
+
2884
+ [MACRO] NET_IP_ADDR_V6_UNSPECIFIED %ipaddr
2885
+ __net_ip_v6_unspec_%ipaddr = stack_alloc NetIpv6Addr_SIZE
2886
+ EXPAND NET_IPV6_UNSPECIFIED __net_ip_v6_unspec_%ipaddr
2887
+ EXPAND NET_IP_ADDR_V6_NEW %ipaddr, __net_ip_v6_unspec_%ipaddr
2888
+ [END_MACRO]
2889
+
2890
+ [MACRO] NET_IP_ADDR_V6_LOCALHOST %ipaddr
2891
+ __net_ip_v6_local_%ipaddr = stack_alloc NetIpv6Addr_SIZE
2892
+ EXPAND NET_IPV6_LOCALHOST __net_ip_v6_local_%ipaddr
2893
+ EXPAND NET_IP_ADDR_V6_NEW %ipaddr, __net_ip_v6_local_%ipaddr
2894
+ [END_MACRO]
2895
+
2896
+ [MACRO] NET_IP_ADDR_TRY_PARSE_ASCII %out_ok, %ipaddr, %ptr, %len
2897
+ __net_ip_parse_v4_%out_ok = stack_alloc NetIpv4Addr_SIZE
2898
+ __net_ip_parse_v6_%out_ok = stack_alloc NetIpv6Addr_SIZE
2899
+ __net_ip_parse_v4_ok_%out_ok = call @sa_net_ipv4_parse_ascii(&%ptr, %len, &__net_ip_parse_v4_%out_ok)
2900
+ br __net_ip_parse_v4_ok_%out_ok -> L_NET_IP_PARSE_V4_OK_%out_ok, L_NET_IP_PARSE_TRY_V6_%out_ok
2901
+
2902
+ L_NET_IP_PARSE_V4_OK_%out_ok:
2903
+ %out_ok = add 0, 1
2904
+ EXPAND NET_IP_ADDR_V4_NEW %ipaddr, __net_ip_parse_v4_%out_ok
2905
+ !__net_ip_parse_v4_ok_%out_ok
2906
+ jmp L_NET_IP_PARSE_DONE_%out_ok
2907
+
2908
+ L_NET_IP_PARSE_TRY_V6_%out_ok:
2909
+ !__net_ip_parse_v4_ok_%out_ok
2910
+ __net_ip_parse_v6_ok_%out_ok = call @sa_net_ipv6_parse_ascii(&%ptr, %len, &__net_ip_parse_v6_%out_ok)
2911
+ br __net_ip_parse_v6_ok_%out_ok -> L_NET_IP_PARSE_V6_OK_%out_ok, L_NET_IP_PARSE_FAIL_%out_ok
2912
+
2913
+ L_NET_IP_PARSE_V6_OK_%out_ok:
2914
+ %out_ok = add 0, 1
2915
+ EXPAND NET_IP_ADDR_V6_NEW %ipaddr, __net_ip_parse_v6_%out_ok
2916
+ !__net_ip_parse_v6_ok_%out_ok
2917
+ jmp L_NET_IP_PARSE_DONE_%out_ok
2918
+
2919
+ L_NET_IP_PARSE_FAIL_%out_ok:
2920
+ %out_ok = add 0, 0
2921
+ EXPAND NET_IP_ADDR_V4_UNSPECIFIED %ipaddr
2922
+ !__net_ip_parse_v6_ok_%out_ok
2923
+
2924
+ L_NET_IP_PARSE_DONE_%out_ok:
2925
+ [END_MACRO]
2926
+
2927
+ [MACRO] NET_IP_ADDR_TRY_PARSE_ASCII_DETAIL %out_ok, %out_kind, %ipaddr, %ptr, %len
2928
+ %out_kind = add 0, ADDR_PARSE_ERROR_IP
2929
+ EXPAND NET_IP_ADDR_TRY_PARSE_ASCII %out_ok, %ipaddr, %ptr, %len
2930
+ [END_MACRO]
2931
+
2932
+ [MACRO] NET_IP_ADDR_PARSE_ASCII %out_ok, %ipaddr, %ptr, %len
2933
+ EXPAND NET_IP_ADDR_TRY_PARSE_ASCII %out_ok, %ipaddr, %ptr, %len
2934
+ [END_MACRO]
2935
+
2936
+ [MACRO] NET_IP_ADDR_PARSE_ASCII_DETAIL %out_ok, %out_kind, %ipaddr, %ptr, %len
2937
+ EXPAND NET_IP_ADDR_TRY_PARSE_ASCII_DETAIL %out_ok, %out_kind, %ipaddr, %ptr, %len
2938
+ [END_MACRO]
2939
+
2940
+ [MACRO] NET_IP_ADDR_COPY %dst_ipaddr, %src_ipaddr
2941
+ __net_ip_copy_tag_%dst_ipaddr = load %src_ipaddr+NetIpAddr_tag as u64
2942
+ __net_ip_copy_src_%dst_ipaddr = ptr_add %src_ipaddr, 8
2943
+ __net_ip_copy_dst_%dst_ipaddr = ptr_add %dst_ipaddr, 8
2944
+ store %dst_ipaddr+NetIpAddr_tag, __net_ip_copy_tag_%dst_ipaddr as u64
2945
+ __net_ip_copy_is_v4_%dst_ipaddr = eq __net_ip_copy_tag_%dst_ipaddr, NET_IP_ADDR_V4
2946
+ br __net_ip_copy_is_v4_%dst_ipaddr -> L_NET_IP_COPY_V4_%dst_ipaddr, L_NET_IP_COPY_V6_%dst_ipaddr
2947
+ L_NET_IP_COPY_V4_%dst_ipaddr:
2948
+ EXPAND NET_IPV4_COPY __net_ip_copy_dst_%dst_ipaddr, __net_ip_copy_src_%dst_ipaddr
2949
+ jmp L_NET_IP_COPY_DONE_%dst_ipaddr
2950
+ L_NET_IP_COPY_V6_%dst_ipaddr:
2951
+ EXPAND NET_IPV6_COPY __net_ip_copy_dst_%dst_ipaddr, __net_ip_copy_src_%dst_ipaddr
2952
+ jmp L_NET_IP_COPY_DONE_%dst_ipaddr
2953
+ L_NET_IP_COPY_DONE_%dst_ipaddr:
2954
+ !__net_ip_copy_is_v4_%dst_ipaddr
2955
+ !__net_ip_copy_dst_%dst_ipaddr
2956
+ !__net_ip_copy_src_%dst_ipaddr
2957
+ !__net_ip_copy_tag_%dst_ipaddr
2958
+ [END_MACRO]
2959
+
2960
+ [MACRO] NET_IP_ADDR_IS_IPV4 %out_bool, %ipaddr
2961
+ __net_ip_tag_%out_bool = load %ipaddr+NetIpAddr_tag as u64
2962
+ %out_bool = eq __net_ip_tag_%out_bool, NET_IP_ADDR_V4
2963
+ !__net_ip_tag_%out_bool
2964
+ [END_MACRO]
2965
+
2966
+ [MACRO] NET_IP_ADDR_IS_IPV6 %out_bool, %ipaddr
2967
+ __net_ip_tag_%out_bool = load %ipaddr+NetIpAddr_tag as u64
2968
+ %out_bool = eq __net_ip_tag_%out_bool, NET_IP_ADDR_V6
2969
+ !__net_ip_tag_%out_bool
2970
+ [END_MACRO]
2971
+
2972
+ [MACRO] NET_IP_ADDR_PAYLOAD_PTR %out_ptr, %ipaddr
2973
+ %out_ptr = ptr_add %ipaddr, 8
2974
+ [END_MACRO]
2975
+
2976
+ [MACRO] NET_IP_ADDR_FAMILY %out_family, %ipaddr
2977
+ __net_ip_family_tag_%out_family = load %ipaddr+NetIpAddr_tag as u64
2978
+ __net_ip_family_is_v4_%out_family = eq __net_ip_family_tag_%out_family, NET_IP_ADDR_V4
2979
+ br __net_ip_family_is_v4_%out_family -> L_NET_IP_FAMILY_V4_%out_family, L_NET_IP_FAMILY_V6_%out_family
2980
+ L_NET_IP_FAMILY_V4_%out_family:
2981
+ %out_family = add 0, SA_NET_AF_INET
2982
+ jmp L_NET_IP_FAMILY_DONE_%out_family
2983
+ L_NET_IP_FAMILY_V6_%out_family:
2984
+ %out_family = add 0, SA_NET_AF_INET6
2985
+ jmp L_NET_IP_FAMILY_DONE_%out_family
2986
+ L_NET_IP_FAMILY_DONE_%out_family:
2987
+ !__net_ip_family_is_v4_%out_family
2988
+ !__net_ip_family_tag_%out_family
2989
+ [END_MACRO]
2990
+
2991
+ [MACRO] NET_IP_ADDR_OCTET_LEN %out_len, %ipaddr
2992
+ __net_ip_octet_len_tag_%out_len = load %ipaddr+NetIpAddr_tag as u64
2993
+ __net_ip_octet_len_v4_%out_len = eq __net_ip_octet_len_tag_%out_len, NET_IP_ADDR_V4
2994
+ br __net_ip_octet_len_v4_%out_len -> L_NET_IP_OCTET_LEN_V4_%out_len, L_NET_IP_OCTET_LEN_V6_%out_len
2995
+ L_NET_IP_OCTET_LEN_V4_%out_len:
2996
+ %out_len = add 0, 4
2997
+ jmp L_NET_IP_OCTET_LEN_DONE_%out_len
2998
+ L_NET_IP_OCTET_LEN_V6_%out_len:
2999
+ %out_len = add 0, 16
3000
+ jmp L_NET_IP_OCTET_LEN_DONE_%out_len
3001
+ L_NET_IP_OCTET_LEN_DONE_%out_len:
3002
+ !__net_ip_octet_len_v4_%out_len
3003
+ !__net_ip_octet_len_tag_%out_len
3004
+ [END_MACRO]
3005
+
3006
+ [MACRO] NET_IP_ADDR_AS_OCTETS_PTR %out_ptr, %ipaddr
3007
+ __net_ip_octets_view_%out_ptr = stack_alloc 16
3008
+ __net_ip_octets_tag_%out_ptr = load %ipaddr+NetIpAddr_tag as u64
3009
+ __net_ip_octets_payload_%out_ptr = ptr_add %ipaddr, 8
3010
+ __net_ip_octets_is_v4_%out_ptr = eq __net_ip_octets_tag_%out_ptr, NET_IP_ADDR_V4
3011
+ br __net_ip_octets_is_v4_%out_ptr -> L_NET_IP_OCTETS_PTR_V4_%out_ptr, L_NET_IP_OCTETS_PTR_V6_%out_ptr
3012
+ L_NET_IP_OCTETS_PTR_V4_%out_ptr:
3013
+ EXPAND NET_IPV4_WRITE_OCTETS __net_ip_octets_v4_ok_%out_ptr, __net_ip_octets_view_%out_ptr, 16, __net_ip_octets_payload_%out_ptr
3014
+ jmp L_NET_IP_OCTETS_PTR_DONE_%out_ptr
3015
+ L_NET_IP_OCTETS_PTR_V6_%out_ptr:
3016
+ EXPAND NET_IPV6_WRITE_OCTETS __net_ip_octets_v6_ok_%out_ptr, __net_ip_octets_view_%out_ptr, 16, __net_ip_octets_payload_%out_ptr
3017
+ L_NET_IP_OCTETS_PTR_DONE_%out_ptr:
3018
+ %out_ptr = ptr_add __net_ip_octets_view_%out_ptr, 0
3019
+ !__net_ip_octets_is_v4_%out_ptr
3020
+ !__net_ip_octets_payload_%out_ptr
3021
+ !__net_ip_octets_tag_%out_ptr
3022
+ [END_MACRO]
3023
+
3024
+ [MACRO] NET_IP_ADDR_WRITE_OCTETS %out_ok, %dst_ptr, %dst_len, %ipaddr
3025
+ __net_ip_write_tag_%out_ok = load %ipaddr+NetIpAddr_tag as u64
3026
+ __net_ip_write_payload_%out_ok = ptr_add %ipaddr, 8
3027
+ __net_ip_write_v4_%out_ok = eq __net_ip_write_tag_%out_ok, NET_IP_ADDR_V4
3028
+ br __net_ip_write_v4_%out_ok -> L_NET_IP_WRITE_OCTETS_V4_%out_ok, L_NET_IP_WRITE_OCTETS_V6_%out_ok
3029
+
3030
+ L_NET_IP_WRITE_OCTETS_V4_%out_ok:
3031
+ EXPAND NET_IPV4_WRITE_OCTETS %out_ok, %dst_ptr, %dst_len, __net_ip_write_payload_%out_ok
3032
+ jmp L_NET_IP_WRITE_OCTETS_DONE_%out_ok
3033
+
3034
+ L_NET_IP_WRITE_OCTETS_V6_%out_ok:
3035
+ EXPAND NET_IPV6_WRITE_OCTETS %out_ok, %dst_ptr, %dst_len, __net_ip_write_payload_%out_ok
3036
+ jmp L_NET_IP_WRITE_OCTETS_DONE_%out_ok
3037
+
3038
+ L_NET_IP_WRITE_OCTETS_DONE_%out_ok:
3039
+ !__net_ip_write_v4_%out_ok
3040
+ !__net_ip_write_payload_%out_ok
3041
+ !__net_ip_write_tag_%out_ok
3042
+ [END_MACRO]
3043
+
3044
+ [MACRO] NET_IP_ADDR_EQ %out_bool, %left, %right
3045
+ __net_ip_eq_ltag_%out_bool = load %left+NetIpAddr_tag as u64
3046
+ __net_ip_eq_rtag_%out_bool = load %right+NetIpAddr_tag as u64
3047
+ __net_ip_eq_same_tag_%out_bool = eq __net_ip_eq_ltag_%out_bool, __net_ip_eq_rtag_%out_bool
3048
+ br __net_ip_eq_same_tag_%out_bool -> L_NET_IP_EQ_SAME_%out_bool, L_NET_IP_EQ_DIFF_%out_bool
3049
+ L_NET_IP_EQ_DIFF_%out_bool:
3050
+ %out_bool = add 0, 0
3051
+ jmp L_NET_IP_EQ_DONE_%out_bool
3052
+ L_NET_IP_EQ_SAME_%out_bool:
3053
+ __net_ip_eq_lpayload_%out_bool = ptr_add %left, 8
3054
+ __net_ip_eq_rpayload_%out_bool = ptr_add %right, 8
3055
+ __net_ip_eq_is_v4_%out_bool = eq __net_ip_eq_ltag_%out_bool, NET_IP_ADDR_V4
3056
+ br __net_ip_eq_is_v4_%out_bool -> L_NET_IP_EQ_V4_%out_bool, L_NET_IP_EQ_V6_%out_bool
3057
+ L_NET_IP_EQ_V4_%out_bool:
3058
+ EXPAND NET_IPV4_EQ %out_bool, __net_ip_eq_lpayload_%out_bool, __net_ip_eq_rpayload_%out_bool
3059
+ jmp L_NET_IP_EQ_SAME_DONE_%out_bool
3060
+ L_NET_IP_EQ_V6_%out_bool:
3061
+ EXPAND NET_IPV6_EQ %out_bool, __net_ip_eq_lpayload_%out_bool, __net_ip_eq_rpayload_%out_bool
3062
+ jmp L_NET_IP_EQ_SAME_DONE_%out_bool
3063
+ L_NET_IP_EQ_SAME_DONE_%out_bool:
3064
+ !__net_ip_eq_is_v4_%out_bool
3065
+ !__net_ip_eq_rpayload_%out_bool
3066
+ !__net_ip_eq_lpayload_%out_bool
3067
+ jmp L_NET_IP_EQ_DONE_%out_bool
3068
+ L_NET_IP_EQ_DONE_%out_bool:
3069
+ !__net_ip_eq_same_tag_%out_bool
3070
+ !__net_ip_eq_rtag_%out_bool
3071
+ !__net_ip_eq_ltag_%out_bool
3072
+ [END_MACRO]
3073
+
3074
+ [MACRO] NET_IP_ADDR_IS_UNSPECIFIED %out_bool, %ipaddr
3075
+ __net_ip_unspec_tag_%out_bool = load %ipaddr+NetIpAddr_tag as u64
3076
+ __net_ip_unspec_payload_%out_bool = ptr_add %ipaddr, 8
3077
+ __net_ip_unspec_is_v4_%out_bool = eq __net_ip_unspec_tag_%out_bool, NET_IP_ADDR_V4
3078
+ br __net_ip_unspec_is_v4_%out_bool -> L_NET_IP_UNSPEC_V4_%out_bool, L_NET_IP_UNSPEC_V6_%out_bool
3079
+ L_NET_IP_UNSPEC_V4_%out_bool:
3080
+ EXPAND NET_IPV4_IS_UNSPECIFIED %out_bool, __net_ip_unspec_payload_%out_bool
3081
+ jmp L_NET_IP_UNSPEC_DONE_%out_bool
3082
+ L_NET_IP_UNSPEC_V6_%out_bool:
3083
+ EXPAND NET_IPV6_IS_UNSPECIFIED %out_bool, __net_ip_unspec_payload_%out_bool
3084
+ jmp L_NET_IP_UNSPEC_DONE_%out_bool
3085
+ L_NET_IP_UNSPEC_DONE_%out_bool:
3086
+ !__net_ip_unspec_is_v4_%out_bool
3087
+ !__net_ip_unspec_payload_%out_bool
3088
+ !__net_ip_unspec_tag_%out_bool
3089
+ [END_MACRO]
3090
+
3091
+ [MACRO] NET_IP_ADDR_IS_LOOPBACK %out_bool, %ipaddr
3092
+ __net_ip_loop_tag_%out_bool = load %ipaddr+NetIpAddr_tag as u64
3093
+ __net_ip_loop_payload_%out_bool = ptr_add %ipaddr, 8
3094
+ __net_ip_loop_is_v4_%out_bool = eq __net_ip_loop_tag_%out_bool, NET_IP_ADDR_V4
3095
+ br __net_ip_loop_is_v4_%out_bool -> L_NET_IP_LOOP_V4_%out_bool, L_NET_IP_LOOP_V6_%out_bool
3096
+ L_NET_IP_LOOP_V4_%out_bool:
3097
+ EXPAND NET_IPV4_IS_LOOPBACK %out_bool, __net_ip_loop_payload_%out_bool
3098
+ jmp L_NET_IP_LOOP_DONE_%out_bool
3099
+ L_NET_IP_LOOP_V6_%out_bool:
3100
+ EXPAND NET_IPV6_IS_LOOPBACK %out_bool, __net_ip_loop_payload_%out_bool
3101
+ jmp L_NET_IP_LOOP_DONE_%out_bool
3102
+ L_NET_IP_LOOP_DONE_%out_bool:
3103
+ !__net_ip_loop_is_v4_%out_bool
3104
+ !__net_ip_loop_payload_%out_bool
3105
+ !__net_ip_loop_tag_%out_bool
3106
+ [END_MACRO]
3107
+
3108
+ [MACRO] NET_IP_ADDR_IS_MULTICAST %out_bool, %ipaddr
3109
+ __net_ip_multi_tag_%out_bool = load %ipaddr+NetIpAddr_tag as u64
3110
+ __net_ip_multi_payload_%out_bool = ptr_add %ipaddr, 8
3111
+ __net_ip_multi_is_v4_%out_bool = eq __net_ip_multi_tag_%out_bool, NET_IP_ADDR_V4
3112
+ br __net_ip_multi_is_v4_%out_bool -> L_NET_IP_MULTI_V4_%out_bool, L_NET_IP_MULTI_V6_%out_bool
3113
+ L_NET_IP_MULTI_V4_%out_bool:
3114
+ EXPAND NET_IPV4_IS_MULTICAST %out_bool, __net_ip_multi_payload_%out_bool
3115
+ jmp L_NET_IP_MULTI_DONE_%out_bool
3116
+ L_NET_IP_MULTI_V6_%out_bool:
3117
+ EXPAND NET_IPV6_IS_MULTICAST %out_bool, __net_ip_multi_payload_%out_bool
3118
+ jmp L_NET_IP_MULTI_DONE_%out_bool
3119
+ L_NET_IP_MULTI_DONE_%out_bool:
3120
+ !__net_ip_multi_is_v4_%out_bool
3121
+ !__net_ip_multi_payload_%out_bool
3122
+ !__net_ip_multi_tag_%out_bool
3123
+ [END_MACRO]
3124
+
3125
+ [MACRO] NET_IP_ADDR_IS_DOCUMENTATION %out_bool, %ipaddr
3126
+ __net_ip_doc_tag_%out_bool = load %ipaddr+NetIpAddr_tag as u64
3127
+ __net_ip_doc_payload_%out_bool = ptr_add %ipaddr, 8
3128
+ __net_ip_doc_is_v4_%out_bool = eq __net_ip_doc_tag_%out_bool, NET_IP_ADDR_V4
3129
+ br __net_ip_doc_is_v4_%out_bool -> L_NET_IP_DOC_V4_%out_bool, L_NET_IP_DOC_V6_%out_bool
3130
+ L_NET_IP_DOC_V4_%out_bool:
3131
+ EXPAND NET_IPV4_IS_DOCUMENTATION %out_bool, __net_ip_doc_payload_%out_bool
3132
+ jmp L_NET_IP_DOC_DONE_%out_bool
3133
+ L_NET_IP_DOC_V6_%out_bool:
3134
+ EXPAND NET_IPV6_IS_DOCUMENTATION %out_bool, __net_ip_doc_payload_%out_bool
3135
+ jmp L_NET_IP_DOC_DONE_%out_bool
3136
+ L_NET_IP_DOC_DONE_%out_bool:
3137
+ !__net_ip_doc_is_v4_%out_bool
3138
+ !__net_ip_doc_payload_%out_bool
3139
+ !__net_ip_doc_tag_%out_bool
3140
+ [END_MACRO]
3141
+
3142
+ [MACRO] NET_IP_ADDR_IS_BENCHMARKING %out_bool, %ipaddr
3143
+ __net_ip_bench_tag_%out_bool = load %ipaddr+NetIpAddr_tag as u64
3144
+ __net_ip_bench_payload_%out_bool = ptr_add %ipaddr, 8
3145
+ __net_ip_bench_is_v4_%out_bool = eq __net_ip_bench_tag_%out_bool, NET_IP_ADDR_V4
3146
+ br __net_ip_bench_is_v4_%out_bool -> L_NET_IP_BENCH_V4_%out_bool, L_NET_IP_BENCH_V6_%out_bool
3147
+ L_NET_IP_BENCH_V4_%out_bool:
3148
+ EXPAND NET_IPV4_IS_BENCHMARKING %out_bool, __net_ip_bench_payload_%out_bool
3149
+ jmp L_NET_IP_BENCH_DONE_%out_bool
3150
+ L_NET_IP_BENCH_V6_%out_bool:
3151
+ EXPAND NET_IPV6_IS_BENCHMARKING %out_bool, __net_ip_bench_payload_%out_bool
3152
+ jmp L_NET_IP_BENCH_DONE_%out_bool
3153
+ L_NET_IP_BENCH_DONE_%out_bool:
3154
+ !__net_ip_bench_is_v4_%out_bool
3155
+ !__net_ip_bench_payload_%out_bool
3156
+ !__net_ip_bench_tag_%out_bool
3157
+ [END_MACRO]
3158
+
3159
+ [MACRO] NET_IP_ADDR_IS_GLOBAL %out_bool, %ipaddr
3160
+ __net_ip_global_tag_%out_bool = load %ipaddr+NetIpAddr_tag as u64
3161
+ __net_ip_global_payload_%out_bool = ptr_add %ipaddr, 8
3162
+ __net_ip_global_is_v4_%out_bool = eq __net_ip_global_tag_%out_bool, NET_IP_ADDR_V4
3163
+ br __net_ip_global_is_v4_%out_bool -> L_NET_IP_GLOBAL_V4_%out_bool, L_NET_IP_GLOBAL_V6_%out_bool
3164
+ L_NET_IP_GLOBAL_V4_%out_bool:
3165
+ EXPAND NET_IPV4_IS_GLOBAL %out_bool, __net_ip_global_payload_%out_bool
3166
+ jmp L_NET_IP_GLOBAL_DONE_%out_bool
3167
+ L_NET_IP_GLOBAL_V6_%out_bool:
3168
+ EXPAND NET_IPV6_IS_GLOBAL %out_bool, __net_ip_global_payload_%out_bool
3169
+ jmp L_NET_IP_GLOBAL_DONE_%out_bool
3170
+ L_NET_IP_GLOBAL_DONE_%out_bool:
3171
+ !__net_ip_global_is_v4_%out_bool
3172
+ !__net_ip_global_payload_%out_bool
3173
+ !__net_ip_global_tag_%out_bool
3174
+ [END_MACRO]
3175
+
3176
+ [MACRO] NET_IP_ADDR_IS_PRIVATE %out_bool, %ipaddr
3177
+ __net_ip_private_tag_%out_bool = load %ipaddr+NetIpAddr_tag as u64
3178
+ __net_ip_private_payload_%out_bool = ptr_add %ipaddr, 8
3179
+ __net_ip_private_is_v4_%out_bool = eq __net_ip_private_tag_%out_bool, NET_IP_ADDR_V4
3180
+ br __net_ip_private_is_v4_%out_bool -> L_NET_IP_PRIVATE_V4_%out_bool, L_NET_IP_PRIVATE_V6_%out_bool
3181
+ L_NET_IP_PRIVATE_V4_%out_bool:
3182
+ EXPAND NET_IPV4_IS_PRIVATE %out_bool, __net_ip_private_payload_%out_bool
3183
+ jmp L_NET_IP_PRIVATE_DONE_%out_bool
3184
+ L_NET_IP_PRIVATE_V6_%out_bool:
3185
+ EXPAND NET_IPV6_IS_UNIQUE_LOCAL %out_bool, __net_ip_private_payload_%out_bool
3186
+ jmp L_NET_IP_PRIVATE_DONE_%out_bool
3187
+ L_NET_IP_PRIVATE_DONE_%out_bool:
3188
+ !__net_ip_private_is_v4_%out_bool
3189
+ !__net_ip_private_payload_%out_bool
3190
+ !__net_ip_private_tag_%out_bool
3191
+ [END_MACRO]
3192
+
3193
+ [MACRO] NET_IP_ADDR_IS_LINK_LOCAL %out_bool, %ipaddr
3194
+ __net_ip_link_tag_%out_bool = load %ipaddr+NetIpAddr_tag as u64
3195
+ __net_ip_link_payload_%out_bool = ptr_add %ipaddr, 8
3196
+ __net_ip_link_is_v4_%out_bool = eq __net_ip_link_tag_%out_bool, NET_IP_ADDR_V4
3197
+ br __net_ip_link_is_v4_%out_bool -> L_NET_IP_LINK_V4_%out_bool, L_NET_IP_LINK_V6_%out_bool
3198
+ L_NET_IP_LINK_V4_%out_bool:
3199
+ EXPAND NET_IPV4_IS_LINK_LOCAL %out_bool, __net_ip_link_payload_%out_bool
3200
+ jmp L_NET_IP_LINK_DONE_%out_bool
3201
+ L_NET_IP_LINK_V6_%out_bool:
3202
+ EXPAND NET_IPV6_IS_UNICAST_LINK_LOCAL %out_bool, __net_ip_link_payload_%out_bool
3203
+ jmp L_NET_IP_LINK_DONE_%out_bool
3204
+ L_NET_IP_LINK_DONE_%out_bool:
3205
+ !__net_ip_link_is_v4_%out_bool
3206
+ !__net_ip_link_payload_%out_bool
3207
+ !__net_ip_link_tag_%out_bool
3208
+ [END_MACRO]
3209
+
3210
+ [MACRO] NET_IP_ADDR_IS_SHARED %out_bool, %ipaddr
3211
+ __net_ip_shared_tag_%out_bool = load %ipaddr+NetIpAddr_tag as u64
3212
+ __net_ip_shared_payload_%out_bool = ptr_add %ipaddr, 8
3213
+ __net_ip_shared_is_v4_%out_bool = eq __net_ip_shared_tag_%out_bool, NET_IP_ADDR_V4
3214
+ br __net_ip_shared_is_v4_%out_bool -> L_NET_IP_SHARED_V4_%out_bool, L_NET_IP_SHARED_V6_%out_bool
3215
+ L_NET_IP_SHARED_V4_%out_bool:
3216
+ EXPAND NET_IPV4_IS_SHARED %out_bool, __net_ip_shared_payload_%out_bool
3217
+ jmp L_NET_IP_SHARED_DONE_%out_bool
3218
+ L_NET_IP_SHARED_V6_%out_bool:
3219
+ %out_bool = add 0, 0
3220
+ jmp L_NET_IP_SHARED_DONE_%out_bool
3221
+ L_NET_IP_SHARED_DONE_%out_bool:
3222
+ !__net_ip_shared_is_v4_%out_bool
3223
+ !__net_ip_shared_payload_%out_bool
3224
+ !__net_ip_shared_tag_%out_bool
3225
+ [END_MACRO]
3226
+
3227
+ [MACRO] NET_IP_ADDR_IS_RESERVED %out_bool, %ipaddr
3228
+ __net_ip_reserved_tag_%out_bool = load %ipaddr+NetIpAddr_tag as u64
3229
+ __net_ip_reserved_payload_%out_bool = ptr_add %ipaddr, 8
3230
+ __net_ip_reserved_is_v4_%out_bool = eq __net_ip_reserved_tag_%out_bool, NET_IP_ADDR_V4
3231
+ br __net_ip_reserved_is_v4_%out_bool -> L_NET_IP_RESERVED_V4_%out_bool, L_NET_IP_RESERVED_V6_%out_bool
3232
+ L_NET_IP_RESERVED_V4_%out_bool:
3233
+ EXPAND NET_IPV4_IS_RESERVED %out_bool, __net_ip_reserved_payload_%out_bool
3234
+ jmp L_NET_IP_RESERVED_DONE_%out_bool
3235
+ L_NET_IP_RESERVED_V6_%out_bool:
3236
+ %out_bool = add 0, 0
3237
+ jmp L_NET_IP_RESERVED_DONE_%out_bool
3238
+ L_NET_IP_RESERVED_DONE_%out_bool:
3239
+ !__net_ip_reserved_is_v4_%out_bool
3240
+ !__net_ip_reserved_payload_%out_bool
3241
+ !__net_ip_reserved_tag_%out_bool
3242
+ [END_MACRO]
3243
+
3244
+ [MACRO] NET_IP_ADDR_IS_UNICAST_GLOBAL %out_bool, %ipaddr
3245
+ __net_ip_uglobal_tag_%out_bool = load %ipaddr+NetIpAddr_tag as u64
3246
+ __net_ip_uglobal_payload_%out_bool = ptr_add %ipaddr, 8
3247
+ __net_ip_uglobal_is_v4_%out_bool = eq __net_ip_uglobal_tag_%out_bool, NET_IP_ADDR_V4
3248
+ br __net_ip_uglobal_is_v4_%out_bool -> L_NET_IP_UGLOBAL_V4_%out_bool, L_NET_IP_UGLOBAL_V6_%out_bool
3249
+ L_NET_IP_UGLOBAL_V4_%out_bool:
3250
+ EXPAND NET_IPV4_IS_GLOBAL %out_bool, __net_ip_uglobal_payload_%out_bool
3251
+ jmp L_NET_IP_UGLOBAL_DONE_%out_bool
3252
+ L_NET_IP_UGLOBAL_V6_%out_bool:
3253
+ EXPAND NET_IPV6_IS_UNICAST_GLOBAL %out_bool, __net_ip_uglobal_payload_%out_bool
3254
+ jmp L_NET_IP_UGLOBAL_DONE_%out_bool
3255
+ L_NET_IP_UGLOBAL_DONE_%out_bool:
3256
+ !__net_ip_uglobal_is_v4_%out_bool
3257
+ !__net_ip_uglobal_payload_%out_bool
3258
+ !__net_ip_uglobal_tag_%out_bool
3259
+ [END_MACRO]
3260
+
3261
+ [MACRO] NET_IP_ADDR_IS_UNICAST %out_bool, %ipaddr
3262
+ __net_ip_unicast_tag_%out_bool = load %ipaddr+NetIpAddr_tag as u64
3263
+ __net_ip_unicast_payload_%out_bool = ptr_add %ipaddr, 8
3264
+ __net_ip_unicast_is_v4_%out_bool = eq __net_ip_unicast_tag_%out_bool, NET_IP_ADDR_V4
3265
+ br __net_ip_unicast_is_v4_%out_bool -> L_NET_IP_UNICAST_V4_%out_bool, L_NET_IP_UNICAST_V6_%out_bool
3266
+ L_NET_IP_UNICAST_V4_%out_bool:
3267
+ EXPAND NET_IPV4_IS_MULTICAST __net_ip_unicast_multi_%out_bool, __net_ip_unicast_payload_%out_bool
3268
+ EXPAND NET_IPV4_IS_BROADCAST __net_ip_unicast_broadcast_%out_bool, __net_ip_unicast_payload_%out_bool
3269
+ __net_ip_unicast_not_multi_%out_bool = eq __net_ip_unicast_multi_%out_bool, 0
3270
+ __net_ip_unicast_not_broadcast_%out_bool = eq __net_ip_unicast_broadcast_%out_bool, 0
3271
+ %out_bool = and __net_ip_unicast_not_multi_%out_bool, __net_ip_unicast_not_broadcast_%out_bool
3272
+ !__net_ip_unicast_not_broadcast_%out_bool
3273
+ !__net_ip_unicast_not_multi_%out_bool
3274
+ !__net_ip_unicast_broadcast_%out_bool
3275
+ !__net_ip_unicast_multi_%out_bool
3276
+ jmp L_NET_IP_UNICAST_DONE_%out_bool
3277
+ L_NET_IP_UNICAST_V6_%out_bool:
3278
+ EXPAND NET_IPV6_IS_UNICAST %out_bool, __net_ip_unicast_payload_%out_bool
3279
+ jmp L_NET_IP_UNICAST_DONE_%out_bool
3280
+ L_NET_IP_UNICAST_DONE_%out_bool:
3281
+ !__net_ip_unicast_is_v4_%out_bool
3282
+ !__net_ip_unicast_payload_%out_bool
3283
+ !__net_ip_unicast_tag_%out_bool
3284
+ [END_MACRO]
3285
+
3286
+ [MACRO] NET_IP_ADDR_IS_UNICAST_LINK_LOCAL %out_bool, %ipaddr
3287
+ EXPAND NET_IP_ADDR_IS_LINK_LOCAL %out_bool, %ipaddr
3288
+ [END_MACRO]
3289
+
3290
+ [MACRO] NET_IP_ADDR_IS_UNIQUE_LOCAL %out_bool, %ipaddr
3291
+ __net_ip_unique_tag_%out_bool = load %ipaddr+NetIpAddr_tag as u64
3292
+ __net_ip_unique_payload_%out_bool = ptr_add %ipaddr, 8
3293
+ __net_ip_unique_is_v4_%out_bool = eq __net_ip_unique_tag_%out_bool, NET_IP_ADDR_V4
3294
+ br __net_ip_unique_is_v4_%out_bool -> L_NET_IP_UNIQUE_V4_%out_bool, L_NET_IP_UNIQUE_V6_%out_bool
3295
+ L_NET_IP_UNIQUE_V4_%out_bool:
3296
+ %out_bool = add 0, 0
3297
+ jmp L_NET_IP_UNIQUE_DONE_%out_bool
3298
+ L_NET_IP_UNIQUE_V6_%out_bool:
3299
+ EXPAND NET_IPV6_IS_UNIQUE_LOCAL %out_bool, __net_ip_unique_payload_%out_bool
3300
+ jmp L_NET_IP_UNIQUE_DONE_%out_bool
3301
+ L_NET_IP_UNIQUE_DONE_%out_bool:
3302
+ !__net_ip_unique_is_v4_%out_bool
3303
+ !__net_ip_unique_payload_%out_bool
3304
+ !__net_ip_unique_tag_%out_bool
3305
+ [END_MACRO]
3306
+
3307
+ [MACRO] NET_IP_ADDR_IS_IPV4_MAPPED %out_bool, %ipaddr
3308
+ __net_ip_mapped_tag_%out_bool = load %ipaddr+NetIpAddr_tag as u64
3309
+ __net_ip_mapped_payload_%out_bool = ptr_add %ipaddr, 8
3310
+ __net_ip_mapped_is_v4_%out_bool = eq __net_ip_mapped_tag_%out_bool, NET_IP_ADDR_V4
3311
+ br __net_ip_mapped_is_v4_%out_bool -> L_NET_IP_MAPPED_V4_%out_bool, L_NET_IP_MAPPED_V6_%out_bool
3312
+ L_NET_IP_MAPPED_V4_%out_bool:
3313
+ %out_bool = add 0, 0
3314
+ jmp L_NET_IP_MAPPED_DONE_%out_bool
3315
+ L_NET_IP_MAPPED_V6_%out_bool:
3316
+ EXPAND NET_IPV6_IS_IPV4_MAPPED %out_bool, __net_ip_mapped_payload_%out_bool
3317
+ jmp L_NET_IP_MAPPED_DONE_%out_bool
3318
+ L_NET_IP_MAPPED_DONE_%out_bool:
3319
+ !__net_ip_mapped_is_v4_%out_bool
3320
+ !__net_ip_mapped_payload_%out_bool
3321
+ !__net_ip_mapped_tag_%out_bool
3322
+ [END_MACRO]
3323
+
3324
+ [MACRO] NET_IP_ADDR_MULTICAST_SCOPE %out_ok, %out_scope, %ipaddr
3325
+ __net_ip_scope_tag_%out_scope = load %ipaddr+NetIpAddr_tag as u64
3326
+ __net_ip_scope_payload_%out_scope = ptr_add %ipaddr, 8
3327
+ __net_ip_scope_is_v4_%out_scope = eq __net_ip_scope_tag_%out_scope, NET_IP_ADDR_V4
3328
+ br __net_ip_scope_is_v4_%out_scope -> L_NET_IP_SCOPE_V4_%out_scope, L_NET_IP_SCOPE_V6_%out_scope
3329
+ L_NET_IP_SCOPE_V4_%out_scope:
3330
+ %out_ok = add 0, 0
3331
+ %out_scope = add 0, 0
3332
+ jmp L_NET_IP_SCOPE_DONE_%out_scope
3333
+ L_NET_IP_SCOPE_V6_%out_scope:
3334
+ EXPAND NET_IPV6_MULTICAST_SCOPE %out_ok, %out_scope, __net_ip_scope_payload_%out_scope
3335
+ jmp L_NET_IP_SCOPE_DONE_%out_scope
3336
+ L_NET_IP_SCOPE_DONE_%out_scope:
3337
+ !__net_ip_scope_is_v4_%out_scope
3338
+ !__net_ip_scope_payload_%out_scope
3339
+ !__net_ip_scope_tag_%out_scope
3340
+ [END_MACRO]
3341
+
3342
+ [MACRO] NET_IP_ADDR_TO_IPV4 %out_ok, %ipv4, %ipaddr
3343
+ __net_ip_to4_tag_%ipv4 = load %ipaddr+NetIpAddr_tag as u64
3344
+ __net_ip_to4_payload_%ipv4 = ptr_add %ipaddr, 8
3345
+ __net_ip_to4_is_v4_%ipv4 = eq __net_ip_to4_tag_%ipv4, NET_IP_ADDR_V4
3346
+ br __net_ip_to4_is_v4_%ipv4 -> L_NET_IP_TO4_V4_%ipv4, L_NET_IP_TO4_V6_%ipv4
3347
+ L_NET_IP_TO4_V4_%ipv4:
3348
+ %out_ok = add 0, 1
3349
+ EXPAND NET_IPV4_COPY %ipv4, __net_ip_to4_payload_%ipv4
3350
+ jmp L_NET_IP_TO4_DONE_%ipv4
3351
+ L_NET_IP_TO4_V6_%ipv4:
3352
+ EXPAND NET_IPV6_TO_IPV4 %out_ok, %ipv4, __net_ip_to4_payload_%ipv4
3353
+ jmp L_NET_IP_TO4_DONE_%ipv4
3354
+ L_NET_IP_TO4_DONE_%ipv4:
3355
+ !__net_ip_to4_is_v4_%ipv4
3356
+ !__net_ip_to4_payload_%ipv4
3357
+ !__net_ip_to4_tag_%ipv4
3358
+ [END_MACRO]
3359
+
3360
+ [MACRO] NET_IP_ADDR_TO_IPV6 %out_ok, %ipv6, %ipaddr
3361
+ __net_ip_to6_tag_%ipv6 = load %ipaddr+NetIpAddr_tag as u64
3362
+ __net_ip_to6_payload_%ipv6 = ptr_add %ipaddr, 8
3363
+ __net_ip_to6_is_v6_%ipv6 = eq __net_ip_to6_tag_%ipv6, NET_IP_ADDR_V6
3364
+ br __net_ip_to6_is_v6_%ipv6 -> L_NET_IP_TO6_V6_%ipv6, L_NET_IP_TO6_V4_%ipv6
3365
+ L_NET_IP_TO6_V6_%ipv6:
3366
+ %out_ok = add 0, 1
3367
+ EXPAND NET_IPV6_COPY %ipv6, __net_ip_to6_payload_%ipv6
3368
+ jmp L_NET_IP_TO6_DONE_%ipv6
3369
+ L_NET_IP_TO6_V4_%ipv6:
3370
+ %out_ok = add 0, 0
3371
+ EXPAND NET_IPV6_UNSPECIFIED %ipv6
3372
+ jmp L_NET_IP_TO6_DONE_%ipv6
3373
+ L_NET_IP_TO6_DONE_%ipv6:
3374
+ !__net_ip_to6_is_v6_%ipv6
3375
+ !__net_ip_to6_payload_%ipv6
3376
+ !__net_ip_to6_tag_%ipv6
3377
+ [END_MACRO]
3378
+
3379
+
3380
+ [MACRO] NET_IP_ADDR_TO_CANONICAL %out_ipaddr, %ipaddr
3381
+ __net_ip_canon_tag_%out_ipaddr = load %ipaddr+NetIpAddr_tag as u64
3382
+ __net_ip_canon_payload_%out_ipaddr = ptr_add %ipaddr, 8
3383
+ __net_ip_canon_is_v4_%out_ipaddr = eq __net_ip_canon_tag_%out_ipaddr, NET_IP_ADDR_V4
3384
+ br __net_ip_canon_is_v4_%out_ipaddr -> L_NET_IP_CANON_V4_%out_ipaddr, L_NET_IP_CANON_V6_%out_ipaddr
3385
+ L_NET_IP_CANON_V4_%out_ipaddr:
3386
+ EXPAND NET_IP_ADDR_V4_NEW %out_ipaddr, __net_ip_canon_payload_%out_ipaddr
3387
+ jmp L_NET_IP_CANON_DONE_%out_ipaddr
3388
+ L_NET_IP_CANON_V6_%out_ipaddr:
3389
+ __net_ip_canon_v4_%out_ipaddr = stack_alloc NetIpv4Addr_SIZE
3390
+ EXPAND NET_IPV6_TO_IPV4_MAPPED __net_ip_canon_mapped_%out_ipaddr, __net_ip_canon_v4_%out_ipaddr, __net_ip_canon_payload_%out_ipaddr
3391
+ br __net_ip_canon_mapped_%out_ipaddr -> L_NET_IP_CANON_MAPPED_%out_ipaddr, L_NET_IP_CANON_KEEP_V6_%out_ipaddr
3392
+ L_NET_IP_CANON_MAPPED_%out_ipaddr:
3393
+ EXPAND NET_IP_ADDR_V4_NEW %out_ipaddr, __net_ip_canon_v4_%out_ipaddr
3394
+ jmp L_NET_IP_CANON_DONE_%out_ipaddr
3395
+ L_NET_IP_CANON_KEEP_V6_%out_ipaddr:
3396
+ EXPAND NET_IP_ADDR_V6_NEW %out_ipaddr, __net_ip_canon_payload_%out_ipaddr
3397
+ jmp L_NET_IP_CANON_DONE_%out_ipaddr
3398
+ L_NET_IP_CANON_DONE_%out_ipaddr:
3399
+ !__net_ip_canon_is_v4_%out_ipaddr
3400
+ !__net_ip_canon_payload_%out_ipaddr
3401
+ !__net_ip_canon_tag_%out_ipaddr
3402
+ [END_MACRO]
3403
+
3404
+ [MACRO] NET_SOCKET_ADDR_V4_NEW %socket_addr, %ipv4, %port
3405
+ __net_sock_v4_ip_%socket_addr = ptr_add %socket_addr, 0
3406
+ __net_sock_v4_a_%socket_addr = load %ipv4+NetIpv4Addr_a as u8
3407
+ __net_sock_v4_b_%socket_addr = load %ipv4+NetIpv4Addr_b as u8
3408
+ __net_sock_v4_c_%socket_addr = load %ipv4+NetIpv4Addr_c as u8
3409
+ __net_sock_v4_d_%socket_addr = load %ipv4+NetIpv4Addr_d as u8
3410
+ store __net_sock_v4_ip_%socket_addr+NetIpv4Addr_a, __net_sock_v4_a_%socket_addr as u8
3411
+ store __net_sock_v4_ip_%socket_addr+NetIpv4Addr_b, __net_sock_v4_b_%socket_addr as u8
3412
+ store __net_sock_v4_ip_%socket_addr+NetIpv4Addr_c, __net_sock_v4_c_%socket_addr as u8
3413
+ store __net_sock_v4_ip_%socket_addr+NetIpv4Addr_d, __net_sock_v4_d_%socket_addr as u8
3414
+ store %socket_addr+NetSocketAddrV4_port, %port as u16
3415
+ !__net_sock_v4_d_%socket_addr
3416
+ !__net_sock_v4_c_%socket_addr
3417
+ !__net_sock_v4_b_%socket_addr
3418
+ !__net_sock_v4_a_%socket_addr
3419
+ !__net_sock_v4_ip_%socket_addr
3420
+ [END_MACRO]
3421
+
3422
+ // Rust-style Default for SocketAddrV4: 0.0.0.0:0.
3423
+ [MACRO] NET_SOCKET_ADDR_V4_DEFAULT %socket_addr
3424
+ __net_sock_v4_default_ip_%socket_addr = stack_alloc NetIpv4Addr_SIZE
3425
+ EXPAND NET_IPV4_DEFAULT __net_sock_v4_default_ip_%socket_addr
3426
+ EXPAND NET_SOCKET_ADDR_V4_NEW %socket_addr, __net_sock_v4_default_ip_%socket_addr, 0
3427
+ [END_MACRO]
3428
+
3429
+ [MACRO] NET_SOCKET_ADDR_V4_IP_PTR %out_ptr, %socket_addr
3430
+ %out_ptr = ptr_add %socket_addr, 0
3431
+ [END_MACRO]
3432
+
3433
+ [MACRO] NET_SOCKET_ADDR_V4_AS_OCTETS_PTR %out_ptr, %socket_addr
3434
+ EXPAND NET_SOCKET_ADDR_V4_IP_PTR %out_ptr, %socket_addr
3435
+ [END_MACRO]
3436
+
3437
+ [MACRO] NET_SOCKET_ADDR_V4_IP %out_ipv4, %socket_addr
3438
+ EXPAND NET_SOCKET_ADDR_V4_IP_PTR __net_sock_v4_ip_src_%out_ipv4, %socket_addr
3439
+ EXPAND NET_IPV4_COPY %out_ipv4, __net_sock_v4_ip_src_%out_ipv4
3440
+ !__net_sock_v4_ip_src_%out_ipv4
3441
+ [END_MACRO]
3442
+
3443
+ [MACRO] NET_SOCKET_ADDR_V4_SET_IP %socket_addr, %ipv4
3444
+ __net_sock_v4_set_ip_%socket_addr = ptr_add %socket_addr, 0
3445
+ EXPAND NET_IPV4_COPY __net_sock_v4_set_ip_%socket_addr, %ipv4
3446
+ !__net_sock_v4_set_ip_%socket_addr
3447
+ [END_MACRO]
3448
+
3449
+ [MACRO] NET_SOCKET_ADDR_V4_PORT %out_port, %socket_addr
3450
+ %out_port = load %socket_addr+NetSocketAddrV4_port as u16
3451
+ [END_MACRO]
3452
+
3453
+ [MACRO] NET_SOCKET_ADDR_V4_SET_PORT %socket_addr, %port
3454
+ store %socket_addr+NetSocketAddrV4_port, %port as u16
3455
+ [END_MACRO]
3456
+
3457
+ [MACRO] NET_SOCKET_ADDR_V4_EQ %out_bool, %left, %right
3458
+ EXPAND NET_SOCKET_ADDR_V4_IP_PTR __net_sock_v4_eq_lip_%out_bool, %left
3459
+ EXPAND NET_SOCKET_ADDR_V4_IP_PTR __net_sock_v4_eq_rip_%out_bool, %right
3460
+ EXPAND NET_IPV4_EQ __net_sock_v4_eq_ip_%out_bool, __net_sock_v4_eq_lip_%out_bool, __net_sock_v4_eq_rip_%out_bool
3461
+ __net_sock_v4_eq_lport_%out_bool = load %left+NetSocketAddrV4_port as u16
3462
+ __net_sock_v4_eq_rport_%out_bool = load %right+NetSocketAddrV4_port as u16
3463
+ __net_sock_v4_eq_port_%out_bool = eq __net_sock_v4_eq_lport_%out_bool, __net_sock_v4_eq_rport_%out_bool
3464
+ %out_bool = and __net_sock_v4_eq_ip_%out_bool, __net_sock_v4_eq_port_%out_bool
3465
+ !__net_sock_v4_eq_port_%out_bool
3466
+ !__net_sock_v4_eq_rport_%out_bool
3467
+ !__net_sock_v4_eq_lport_%out_bool
3468
+ !__net_sock_v4_eq_ip_%out_bool
3469
+ !__net_sock_v4_eq_rip_%out_bool
3470
+ !__net_sock_v4_eq_lip_%out_bool
3471
+ [END_MACRO]
3472
+
3473
+ [MACRO] NET_SOCKET_ADDR_V4_TRY_PARSE_ASCII %out_ok, %socket_addr, %ptr, %len
3474
+ %out_ok = call @sa_net_socket_addr_v4_parse_ascii(&%ptr, %len, &%socket_addr)
3475
+ [END_MACRO]
3476
+
3477
+ [MACRO] NET_SOCKET_ADDR_V4_TRY_PARSE_ASCII_DETAIL %out_ok, %out_kind, %socket_addr, %ptr, %len
3478
+ %out_kind = add 0, ADDR_PARSE_ERROR_SOCKET_V4
3479
+ EXPAND NET_SOCKET_ADDR_V4_TRY_PARSE_ASCII %out_ok, %socket_addr, %ptr, %len
3480
+ [END_MACRO]
3481
+
3482
+ [MACRO] NET_SOCKET_ADDR_V4_PARSE_ASCII %out_ok, %socket_addr, %ptr, %len
3483
+ EXPAND NET_SOCKET_ADDR_V4_TRY_PARSE_ASCII %out_ok, %socket_addr, %ptr, %len
3484
+ [END_MACRO]
3485
+
3486
+ [MACRO] NET_SOCKET_ADDR_V4_PARSE_ASCII_DETAIL %out_ok, %out_kind, %socket_addr, %ptr, %len
3487
+ EXPAND NET_SOCKET_ADDR_V4_TRY_PARSE_ASCII_DETAIL %out_ok, %out_kind, %socket_addr, %ptr, %len
3488
+ [END_MACRO]
3489
+
3490
+ [MACRO] NET_SOCKET_ADDR_V6_TRY_PARSE_ASCII %out_ok, %socket_addr, %ptr, %len
3491
+ %out_ok = call @sa_net_socket_addr_v6_parse_ascii(&%ptr, %len, &%socket_addr)
3492
+ [END_MACRO]
3493
+
3494
+ [MACRO] NET_SOCKET_ADDR_V6_TRY_PARSE_ASCII_DETAIL %out_ok, %out_kind, %socket_addr, %ptr, %len
3495
+ %out_kind = add 0, ADDR_PARSE_ERROR_SOCKET_V6
3496
+ EXPAND NET_SOCKET_ADDR_V6_TRY_PARSE_ASCII %out_ok, %socket_addr, %ptr, %len
3497
+ [END_MACRO]
3498
+
3499
+ [MACRO] NET_SOCKET_ADDR_V6_PARSE_ASCII %out_ok, %socket_addr, %ptr, %len
3500
+ EXPAND NET_SOCKET_ADDR_V6_TRY_PARSE_ASCII %out_ok, %socket_addr, %ptr, %len
3501
+ [END_MACRO]
3502
+
3503
+ [MACRO] NET_SOCKET_ADDR_V6_PARSE_ASCII_DETAIL %out_ok, %out_kind, %socket_addr, %ptr, %len
3504
+ EXPAND NET_SOCKET_ADDR_V6_TRY_PARSE_ASCII_DETAIL %out_ok, %out_kind, %socket_addr, %ptr, %len
3505
+ [END_MACRO]
3506
+
3507
+
3508
+ [MACRO] NET_SOCKET_ADDR_TRY_PARSE_ASCII %out_ok, %socket_addr, %ptr, %len
3509
+ __net_sock_parse_v4_%out_ok = stack_alloc NetSocketAddrV4_SIZE
3510
+ __net_sock_parse_v6_%out_ok = stack_alloc NetSocketAddrV6_SIZE
3511
+ __net_sock_parse_unspec_%out_ok = stack_alloc NetIpv4Addr_SIZE
3512
+ EXPAND NET_SOCKET_ADDR_V4_TRY_PARSE_ASCII __net_sock_parse_v4_ok_%out_ok, __net_sock_parse_v4_%out_ok, %ptr, %len
3513
+ br __net_sock_parse_v4_ok_%out_ok -> L_NET_SOCKET_PARSE_V4_OK_%out_ok, L_NET_SOCKET_PARSE_TRY_V6_%out_ok
3514
+
3515
+ L_NET_SOCKET_PARSE_V4_OK_%out_ok:
3516
+ %out_ok = add 0, 1
3517
+ EXPAND NET_SOCKET_ADDR_FROM_V4 %socket_addr, __net_sock_parse_v4_%out_ok
3518
+ !__net_sock_parse_v4_ok_%out_ok
3519
+ jmp L_NET_SOCKET_PARSE_DONE_%out_ok
3520
+
3521
+ L_NET_SOCKET_PARSE_TRY_V6_%out_ok:
3522
+ !__net_sock_parse_v4_ok_%out_ok
3523
+ EXPAND NET_SOCKET_ADDR_V6_TRY_PARSE_ASCII __net_sock_parse_v6_ok_%out_ok, __net_sock_parse_v6_%out_ok, %ptr, %len
3524
+ br __net_sock_parse_v6_ok_%out_ok -> L_NET_SOCKET_PARSE_V6_OK_%out_ok, L_NET_SOCKET_PARSE_FAIL_%out_ok
3525
+
3526
+ L_NET_SOCKET_PARSE_V6_OK_%out_ok:
3527
+ %out_ok = add 0, 1
3528
+ EXPAND NET_SOCKET_ADDR_FROM_V6 %socket_addr, __net_sock_parse_v6_%out_ok
3529
+ !__net_sock_parse_v6_ok_%out_ok
3530
+ jmp L_NET_SOCKET_PARSE_DONE_%out_ok
3531
+
3532
+ L_NET_SOCKET_PARSE_FAIL_%out_ok:
3533
+ %out_ok = add 0, 0
3534
+ EXPAND NET_IPV4_UNSPECIFIED __net_sock_parse_unspec_%out_ok
3535
+ EXPAND NET_SOCKET_ADDR_V4_NEW __net_sock_parse_v4_%out_ok, __net_sock_parse_unspec_%out_ok, 0
3536
+ EXPAND NET_SOCKET_ADDR_FROM_V4 %socket_addr, __net_sock_parse_v4_%out_ok
3537
+ !__net_sock_parse_v6_ok_%out_ok
3538
+
3539
+ L_NET_SOCKET_PARSE_DONE_%out_ok:
3540
+ [END_MACRO]
3541
+
3542
+ [MACRO] NET_SOCKET_ADDR_PARSE_ASCII %out_ok, %socket_addr, %ptr, %len
3543
+ EXPAND NET_SOCKET_ADDR_TRY_PARSE_ASCII %out_ok, %socket_addr, %ptr, %len
3544
+ [END_MACRO]
3545
+
3546
+ [MACRO] NET_SOCKET_ADDR_TRY_PARSE_ASCII_DETAIL %out_ok, %out_kind, %socket_addr, %ptr, %len
3547
+ %out_kind = add 0, ADDR_PARSE_ERROR_SOCKET
3548
+ EXPAND NET_SOCKET_ADDR_TRY_PARSE_ASCII %out_ok, %socket_addr, %ptr, %len
3549
+ [END_MACRO]
3550
+
3551
+ [MACRO] NET_SOCKET_ADDR_PARSE_ASCII_DETAIL %out_ok, %out_kind, %socket_addr, %ptr, %len
3552
+ EXPAND NET_SOCKET_ADDR_TRY_PARSE_ASCII_DETAIL %out_ok, %out_kind, %socket_addr, %ptr, %len
3553
+ [END_MACRO]
3554
+
3555
+ [MACRO] NET_SOCKET_ADDR_V6_NEW %socket_addr, %ipv6, %port, %flowinfo, %scope_id
3556
+ __net_sock_v6_ip_%socket_addr = ptr_add %socket_addr, 0
3557
+ __net_sock_v6_s0_%socket_addr = load %ipv6+NetIpv6Addr_s0 as u16
3558
+ __net_sock_v6_s1_%socket_addr = load %ipv6+NetIpv6Addr_s1 as u16
3559
+ __net_sock_v6_s2_%socket_addr = load %ipv6+NetIpv6Addr_s2 as u16
3560
+ __net_sock_v6_s3_%socket_addr = load %ipv6+NetIpv6Addr_s3 as u16
3561
+ __net_sock_v6_s4_%socket_addr = load %ipv6+NetIpv6Addr_s4 as u16
3562
+ __net_sock_v6_s5_%socket_addr = load %ipv6+NetIpv6Addr_s5 as u16
3563
+ __net_sock_v6_s6_%socket_addr = load %ipv6+NetIpv6Addr_s6 as u16
3564
+ __net_sock_v6_s7_%socket_addr = load %ipv6+NetIpv6Addr_s7 as u16
3565
+ store __net_sock_v6_ip_%socket_addr+NetIpv6Addr_s0, __net_sock_v6_s0_%socket_addr as u16
3566
+ store __net_sock_v6_ip_%socket_addr+NetIpv6Addr_s1, __net_sock_v6_s1_%socket_addr as u16
3567
+ store __net_sock_v6_ip_%socket_addr+NetIpv6Addr_s2, __net_sock_v6_s2_%socket_addr as u16
3568
+ store __net_sock_v6_ip_%socket_addr+NetIpv6Addr_s3, __net_sock_v6_s3_%socket_addr as u16
3569
+ store __net_sock_v6_ip_%socket_addr+NetIpv6Addr_s4, __net_sock_v6_s4_%socket_addr as u16
3570
+ store __net_sock_v6_ip_%socket_addr+NetIpv6Addr_s5, __net_sock_v6_s5_%socket_addr as u16
3571
+ store __net_sock_v6_ip_%socket_addr+NetIpv6Addr_s6, __net_sock_v6_s6_%socket_addr as u16
3572
+ store __net_sock_v6_ip_%socket_addr+NetIpv6Addr_s7, __net_sock_v6_s7_%socket_addr as u16
3573
+ store %socket_addr+NetSocketAddrV6_port, %port as u16
3574
+ store %socket_addr+NetSocketAddrV6_flowinfo, %flowinfo as u32
3575
+ store %socket_addr+NetSocketAddrV6_scope_id, %scope_id as u32
3576
+ !__net_sock_v6_s7_%socket_addr
3577
+ !__net_sock_v6_s6_%socket_addr
3578
+ !__net_sock_v6_s5_%socket_addr
3579
+ !__net_sock_v6_s4_%socket_addr
3580
+ !__net_sock_v6_s3_%socket_addr
3581
+ !__net_sock_v6_s2_%socket_addr
3582
+ !__net_sock_v6_s1_%socket_addr
3583
+ !__net_sock_v6_s0_%socket_addr
3584
+ !__net_sock_v6_ip_%socket_addr
3585
+ [END_MACRO]
3586
+
3587
+ // Rust-style Default for SocketAddrV6: [::]:0 with flowinfo/scope_id 0.
3588
+ [MACRO] NET_SOCKET_ADDR_V6_DEFAULT %socket_addr
3589
+ __net_sock_v6_default_ip_%socket_addr = stack_alloc NetIpv6Addr_SIZE
3590
+ EXPAND NET_IPV6_DEFAULT __net_sock_v6_default_ip_%socket_addr
3591
+ EXPAND NET_SOCKET_ADDR_V6_NEW %socket_addr, __net_sock_v6_default_ip_%socket_addr, 0, 0, 0
3592
+ [END_MACRO]
3593
+
3594
+ [MACRO] NET_SOCKET_ADDR_V6_IP_PTR %out_ptr, %socket_addr
3595
+ %out_ptr = ptr_add %socket_addr, 0
3596
+ [END_MACRO]
3597
+
3598
+ [MACRO] NET_SOCKET_ADDR_V6_AS_OCTETS_PTR %out_ptr, %socket_addr
3599
+ EXPAND NET_SOCKET_ADDR_V6_IP_PTR __net_sock_v6_octets_ip_%out_ptr, %socket_addr
3600
+ EXPAND NET_IPV6_AS_OCTETS_PTR %out_ptr, __net_sock_v6_octets_ip_%out_ptr
3601
+ !__net_sock_v6_octets_ip_%out_ptr
3602
+ [END_MACRO]
3603
+
3604
+ [MACRO] NET_SOCKET_ADDR_V6_IP %out_ipv6, %socket_addr
3605
+ EXPAND NET_SOCKET_ADDR_V6_IP_PTR __net_sock_v6_ip_src_%out_ipv6, %socket_addr
3606
+ EXPAND NET_IPV6_COPY %out_ipv6, __net_sock_v6_ip_src_%out_ipv6
3607
+ !__net_sock_v6_ip_src_%out_ipv6
3608
+ [END_MACRO]
3609
+
3610
+ [MACRO] NET_SOCKET_ADDR_V6_SET_IP %socket_addr, %ipv6
3611
+ __net_sock_v6_set_ip_%socket_addr = ptr_add %socket_addr, 0
3612
+ EXPAND NET_IPV6_COPY __net_sock_v6_set_ip_%socket_addr, %ipv6
3613
+ !__net_sock_v6_set_ip_%socket_addr
3614
+ [END_MACRO]
3615
+
3616
+ [MACRO] NET_SOCKET_ADDR_V6_PORT %out_port, %socket_addr
3617
+ %out_port = load %socket_addr+NetSocketAddrV6_port as u16
3618
+ [END_MACRO]
3619
+
3620
+ [MACRO] NET_SOCKET_ADDR_V6_SET_PORT %socket_addr, %port
3621
+ store %socket_addr+NetSocketAddrV6_port, %port as u16
3622
+ [END_MACRO]
3623
+
3624
+ [MACRO] NET_SOCKET_ADDR_V6_FLOWINFO %out_flowinfo, %socket_addr
3625
+ %out_flowinfo = load %socket_addr+NetSocketAddrV6_flowinfo as u32
3626
+ [END_MACRO]
3627
+
3628
+ [MACRO] NET_SOCKET_ADDR_V6_SET_FLOWINFO %socket_addr, %flowinfo
3629
+ store %socket_addr+NetSocketAddrV6_flowinfo, %flowinfo as u32
3630
+ [END_MACRO]
3631
+
3632
+ [MACRO] NET_SOCKET_ADDR_V6_SCOPE_ID %out_scope_id, %socket_addr
3633
+ %out_scope_id = load %socket_addr+NetSocketAddrV6_scope_id as u32
3634
+ [END_MACRO]
3635
+
3636
+ [MACRO] NET_SOCKET_ADDR_V6_SET_SCOPE_ID %socket_addr, %scope_id
3637
+ store %socket_addr+NetSocketAddrV6_scope_id, %scope_id as u32
3638
+ [END_MACRO]
3639
+
3640
+ [MACRO] NET_SOCKET_ADDR_V6_EQ %out_bool, %left, %right
3641
+ EXPAND NET_SOCKET_ADDR_V6_IP_PTR __net_sock_v6_eq_lip_%out_bool, %left
3642
+ EXPAND NET_SOCKET_ADDR_V6_IP_PTR __net_sock_v6_eq_rip_%out_bool, %right
3643
+ EXPAND NET_IPV6_EQ __net_sock_v6_eq_ip_%out_bool, __net_sock_v6_eq_lip_%out_bool, __net_sock_v6_eq_rip_%out_bool
3644
+ __net_sock_v6_eq_lport_%out_bool = load %left+NetSocketAddrV6_port as u16
3645
+ __net_sock_v6_eq_rport_%out_bool = load %right+NetSocketAddrV6_port as u16
3646
+ __net_sock_v6_eq_lflow_%out_bool = load %left+NetSocketAddrV6_flowinfo as u32
3647
+ __net_sock_v6_eq_rflow_%out_bool = load %right+NetSocketAddrV6_flowinfo as u32
3648
+ __net_sock_v6_eq_lscope_%out_bool = load %left+NetSocketAddrV6_scope_id as u32
3649
+ __net_sock_v6_eq_rscope_%out_bool = load %right+NetSocketAddrV6_scope_id as u32
3650
+ __net_sock_v6_eq_port_%out_bool = eq __net_sock_v6_eq_lport_%out_bool, __net_sock_v6_eq_rport_%out_bool
3651
+ __net_sock_v6_eq_flow_%out_bool = eq __net_sock_v6_eq_lflow_%out_bool, __net_sock_v6_eq_rflow_%out_bool
3652
+ __net_sock_v6_eq_scope_%out_bool = eq __net_sock_v6_eq_lscope_%out_bool, __net_sock_v6_eq_rscope_%out_bool
3653
+ __net_sock_v6_eq_meta1_%out_bool = and __net_sock_v6_eq_port_%out_bool, __net_sock_v6_eq_flow_%out_bool
3654
+ __net_sock_v6_eq_meta_%out_bool = and __net_sock_v6_eq_meta1_%out_bool, __net_sock_v6_eq_scope_%out_bool
3655
+ %out_bool = and __net_sock_v6_eq_ip_%out_bool, __net_sock_v6_eq_meta_%out_bool
3656
+ !__net_sock_v6_eq_meta_%out_bool
3657
+ !__net_sock_v6_eq_meta1_%out_bool
3658
+ !__net_sock_v6_eq_scope_%out_bool
3659
+ !__net_sock_v6_eq_flow_%out_bool
3660
+ !__net_sock_v6_eq_port_%out_bool
3661
+ !__net_sock_v6_eq_rscope_%out_bool
3662
+ !__net_sock_v6_eq_lscope_%out_bool
3663
+ !__net_sock_v6_eq_rflow_%out_bool
3664
+ !__net_sock_v6_eq_lflow_%out_bool
3665
+ !__net_sock_v6_eq_rport_%out_bool
3666
+ !__net_sock_v6_eq_lport_%out_bool
3667
+ !__net_sock_v6_eq_ip_%out_bool
3668
+ !__net_sock_v6_eq_rip_%out_bool
3669
+ !__net_sock_v6_eq_lip_%out_bool
3670
+ [END_MACRO]
3671
+
3672
+ [MACRO] NET_SOCKET_ADDR_FROM_V4 %socket_addr, %socket_v4
3673
+ store %socket_addr+NetSocketAddr_tag, NET_IP_ADDR_V4 as u64
3674
+ __net_sock_from_v4_ip_%socket_addr = ptr_add %socket_addr, 8
3675
+ EXPAND NET_SOCKET_ADDR_V4_IP_PTR __net_sock_from_v4_src_%socket_addr, %socket_v4
3676
+ EXPAND NET_SOCKET_ADDR_V4_NEW __net_sock_from_v4_ip_%socket_addr, __net_sock_from_v4_src_%socket_addr, 0
3677
+ __net_sock_from_v4_port_%socket_addr = load %socket_v4+NetSocketAddrV4_port as u16
3678
+ store __net_sock_from_v4_ip_%socket_addr+NetSocketAddrV4_port, __net_sock_from_v4_port_%socket_addr as u16
3679
+ !__net_sock_from_v4_port_%socket_addr
3680
+ !__net_sock_from_v4_src_%socket_addr
3681
+ !__net_sock_from_v4_ip_%socket_addr
3682
+ [END_MACRO]
3683
+
3684
+ [MACRO] NET_SOCKET_ADDR_FROM_V6 %socket_addr, %socket_v6
3685
+ store %socket_addr+NetSocketAddr_tag, NET_IP_ADDR_V6 as u64
3686
+ __net_sock_from_v6_dst_%socket_addr = ptr_add %socket_addr, 8
3687
+ EXPAND NET_SOCKET_ADDR_V6_IP_PTR __net_sock_from_v6_src_ip_%socket_addr, %socket_v6
3688
+ __net_sock_from_v6_port_%socket_addr = load %socket_v6+NetSocketAddrV6_port as u16
3689
+ __net_sock_from_v6_flow_%socket_addr = load %socket_v6+NetSocketAddrV6_flowinfo as u32
3690
+ __net_sock_from_v6_scope_%socket_addr = load %socket_v6+NetSocketAddrV6_scope_id as u32
3691
+ EXPAND NET_SOCKET_ADDR_V6_NEW __net_sock_from_v6_dst_%socket_addr, __net_sock_from_v6_src_ip_%socket_addr, __net_sock_from_v6_port_%socket_addr, __net_sock_from_v6_flow_%socket_addr, __net_sock_from_v6_scope_%socket_addr
3692
+ !__net_sock_from_v6_scope_%socket_addr
3693
+ !__net_sock_from_v6_flow_%socket_addr
3694
+ !__net_sock_from_v6_port_%socket_addr
3695
+ !__net_sock_from_v6_src_ip_%socket_addr
3696
+ !__net_sock_from_v6_dst_%socket_addr
3697
+ [END_MACRO]
3698
+
3699
+ [MACRO] NET_SOCKET_ADDR_IS_IPV4 %out_bool, %socket_addr
3700
+ __net_sock_tag_%out_bool = load %socket_addr+NetSocketAddr_tag as u64
3701
+ %out_bool = eq __net_sock_tag_%out_bool, NET_IP_ADDR_V4
3702
+ !__net_sock_tag_%out_bool
3703
+ [END_MACRO]
3704
+
3705
+ [MACRO] NET_SOCKET_ADDR_IS_IPV6 %out_bool, %socket_addr
3706
+ __net_sock_tag_%out_bool = load %socket_addr+NetSocketAddr_tag as u64
3707
+ %out_bool = eq __net_sock_tag_%out_bool, NET_IP_ADDR_V6
3708
+ !__net_sock_tag_%out_bool
3709
+ [END_MACRO]
3710
+
3711
+ [MACRO] NET_SOCKET_ADDR_PAYLOAD_PTR %out_ptr, %socket_addr
3712
+ %out_ptr = ptr_add %socket_addr, 8
3713
+ [END_MACRO]
3714
+
3715
+ [MACRO] NET_SOCKET_ADDR_FAMILY %out_family, %socket_addr
3716
+ __net_sock_family_tag_%out_family = load %socket_addr+NetSocketAddr_tag as u64
3717
+ __net_sock_family_is_v4_%out_family = eq __net_sock_family_tag_%out_family, NET_IP_ADDR_V4
3718
+ br __net_sock_family_is_v4_%out_family -> L_NET_SOCKET_FAMILY_V4_%out_family, L_NET_SOCKET_FAMILY_V6_%out_family
3719
+ L_NET_SOCKET_FAMILY_V4_%out_family:
3720
+ %out_family = add 0, SA_NET_AF_INET
3721
+ jmp L_NET_SOCKET_FAMILY_DONE_%out_family
3722
+ L_NET_SOCKET_FAMILY_V6_%out_family:
3723
+ %out_family = add 0, SA_NET_AF_INET6
3724
+ jmp L_NET_SOCKET_FAMILY_DONE_%out_family
3725
+ L_NET_SOCKET_FAMILY_DONE_%out_family:
3726
+ !__net_sock_family_is_v4_%out_family
3727
+ !__net_sock_family_tag_%out_family
3728
+ [END_MACRO]
3729
+
3730
+ [MACRO] NET_SOCKET_ADDR_EQ %out_bool, %left, %right
3731
+ __net_sock_eq_ltag_%out_bool = load %left+NetSocketAddr_tag as u64
3732
+ __net_sock_eq_rtag_%out_bool = load %right+NetSocketAddr_tag as u64
3733
+ __net_sock_eq_same_tag_%out_bool = eq __net_sock_eq_ltag_%out_bool, __net_sock_eq_rtag_%out_bool
3734
+ br __net_sock_eq_same_tag_%out_bool -> L_NET_SOCKET_EQ_SAME_%out_bool, L_NET_SOCKET_EQ_DIFF_%out_bool
3735
+ L_NET_SOCKET_EQ_DIFF_%out_bool:
3736
+ %out_bool = add 0, 0
3737
+ jmp L_NET_SOCKET_EQ_DONE_%out_bool
3738
+ L_NET_SOCKET_EQ_SAME_%out_bool:
3739
+ __net_sock_eq_lpayload_%out_bool = ptr_add %left, 8
3740
+ __net_sock_eq_rpayload_%out_bool = ptr_add %right, 8
3741
+ __net_sock_eq_is_v4_%out_bool = eq __net_sock_eq_ltag_%out_bool, NET_IP_ADDR_V4
3742
+ br __net_sock_eq_is_v4_%out_bool -> L_NET_SOCKET_EQ_V4_%out_bool, L_NET_SOCKET_EQ_V6_%out_bool
3743
+ L_NET_SOCKET_EQ_V4_%out_bool:
3744
+ EXPAND NET_SOCKET_ADDR_V4_EQ %out_bool, __net_sock_eq_lpayload_%out_bool, __net_sock_eq_rpayload_%out_bool
3745
+ jmp L_NET_SOCKET_EQ_SAME_DONE_%out_bool
3746
+ L_NET_SOCKET_EQ_V6_%out_bool:
3747
+ EXPAND NET_SOCKET_ADDR_V6_EQ %out_bool, __net_sock_eq_lpayload_%out_bool, __net_sock_eq_rpayload_%out_bool
3748
+ jmp L_NET_SOCKET_EQ_SAME_DONE_%out_bool
3749
+ L_NET_SOCKET_EQ_SAME_DONE_%out_bool:
3750
+ !__net_sock_eq_is_v4_%out_bool
3751
+ !__net_sock_eq_rpayload_%out_bool
3752
+ !__net_sock_eq_lpayload_%out_bool
3753
+ jmp L_NET_SOCKET_EQ_DONE_%out_bool
3754
+ L_NET_SOCKET_EQ_DONE_%out_bool:
3755
+ !__net_sock_eq_same_tag_%out_bool
3756
+ !__net_sock_eq_rtag_%out_bool
3757
+ !__net_sock_eq_ltag_%out_bool
3758
+ [END_MACRO]
3759
+
3760
+ [MACRO] NET_SOCKET_ADDR_NEW %socket_addr, %ipaddr, %port
3761
+ __net_sock_new_tag_%socket_addr = load %ipaddr+NetIpAddr_tag as u64
3762
+ __net_sock_new_payload_%socket_addr = ptr_add %socket_addr, 8
3763
+ __net_sock_new_ip_payload_%socket_addr = ptr_add %ipaddr, 8
3764
+ store %socket_addr+NetSocketAddr_tag, __net_sock_new_tag_%socket_addr as u64
3765
+ __net_sock_new_is_v4_%socket_addr = eq __net_sock_new_tag_%socket_addr, NET_IP_ADDR_V4
3766
+ br __net_sock_new_is_v4_%socket_addr -> L_NET_SOCKET_NEW_V4_%socket_addr_%ipaddr, L_NET_SOCKET_NEW_V6_%socket_addr_%ipaddr
3767
+ L_NET_SOCKET_NEW_V4_%socket_addr_%ipaddr:
3768
+ EXPAND NET_SOCKET_ADDR_V4_NEW __net_sock_new_payload_%socket_addr, __net_sock_new_ip_payload_%socket_addr, %port
3769
+ jmp L_NET_SOCKET_NEW_DONE_%socket_addr_%ipaddr
3770
+ L_NET_SOCKET_NEW_V6_%socket_addr_%ipaddr:
3771
+ EXPAND NET_SOCKET_ADDR_V6_NEW __net_sock_new_payload_%socket_addr, __net_sock_new_ip_payload_%socket_addr, %port, 0, 0
3772
+ jmp L_NET_SOCKET_NEW_DONE_%socket_addr_%ipaddr
3773
+ L_NET_SOCKET_NEW_DONE_%socket_addr_%ipaddr:
3774
+ !__net_sock_new_is_v4_%socket_addr
3775
+ !__net_sock_new_ip_payload_%socket_addr
3776
+ !__net_sock_new_payload_%socket_addr
3777
+ !__net_sock_new_tag_%socket_addr
3778
+ [END_MACRO]
3779
+
3780
+ // Rust-style Default for SocketAddr: unspecified IPv4 with port 0.
3781
+ [MACRO] NET_SOCKET_ADDR_DEFAULT %socket_addr
3782
+ __net_sock_default_ip_%socket_addr = stack_alloc NetIpAddr_SIZE
3783
+ EXPAND NET_IP_ADDR_DEFAULT __net_sock_default_ip_%socket_addr
3784
+ EXPAND NET_SOCKET_ADDR_NEW %socket_addr, __net_sock_default_ip_%socket_addr, 0
3785
+ [END_MACRO]
3786
+
3787
+ [MACRO] NET_SOCKET_ADDR_IP %out_ipaddr, %socket_addr
3788
+ __net_sock_ip_tag_%out_ipaddr = load %socket_addr+NetSocketAddr_tag as u64
3789
+ __net_sock_ip_payload_%out_ipaddr = ptr_add %socket_addr, 8
3790
+ __net_sock_ip_is_v4_%out_ipaddr = eq __net_sock_ip_tag_%out_ipaddr, NET_IP_ADDR_V4
3791
+ br __net_sock_ip_is_v4_%out_ipaddr -> L_NET_SOCKET_IP_V4_%out_ipaddr, L_NET_SOCKET_IP_V6_%out_ipaddr
3792
+ L_NET_SOCKET_IP_V4_%out_ipaddr:
3793
+ EXPAND NET_SOCKET_ADDR_V4_IP_PTR __net_sock_ip_v4_%out_ipaddr, __net_sock_ip_payload_%out_ipaddr
3794
+ EXPAND NET_IP_ADDR_V4_NEW %out_ipaddr, __net_sock_ip_v4_%out_ipaddr
3795
+ !__net_sock_ip_v4_%out_ipaddr
3796
+ jmp L_NET_SOCKET_IP_DONE_%out_ipaddr
3797
+ L_NET_SOCKET_IP_V6_%out_ipaddr:
3798
+ EXPAND NET_SOCKET_ADDR_V6_IP_PTR __net_sock_ip_v6_%out_ipaddr, __net_sock_ip_payload_%out_ipaddr
3799
+ EXPAND NET_IP_ADDR_V6_NEW %out_ipaddr, __net_sock_ip_v6_%out_ipaddr
3800
+ !__net_sock_ip_v6_%out_ipaddr
3801
+ jmp L_NET_SOCKET_IP_DONE_%out_ipaddr
3802
+ L_NET_SOCKET_IP_DONE_%out_ipaddr:
3803
+ !__net_sock_ip_is_v4_%out_ipaddr
3804
+ !__net_sock_ip_payload_%out_ipaddr
3805
+ !__net_sock_ip_tag_%out_ipaddr
3806
+ [END_MACRO]
3807
+
3808
+ [MACRO] NET_SOCKET_ADDR_PORT %out_port, %socket_addr
3809
+ __net_sock_port_tag_%out_port = load %socket_addr+NetSocketAddr_tag as u64
3810
+ __net_sock_port_payload_%out_port = ptr_add %socket_addr, 8
3811
+ __net_sock_port_is_v4_%out_port = eq __net_sock_port_tag_%out_port, NET_IP_ADDR_V4
3812
+ br __net_sock_port_is_v4_%out_port -> L_NET_SOCKET_PORT_V4_%out_port, L_NET_SOCKET_PORT_V6_%out_port
3813
+ L_NET_SOCKET_PORT_V4_%out_port:
3814
+ EXPAND NET_SOCKET_ADDR_V4_PORT %out_port, __net_sock_port_payload_%out_port
3815
+ jmp L_NET_SOCKET_PORT_DONE_%out_port
3816
+ L_NET_SOCKET_PORT_V6_%out_port:
3817
+ EXPAND NET_SOCKET_ADDR_V6_PORT %out_port, __net_sock_port_payload_%out_port
3818
+ jmp L_NET_SOCKET_PORT_DONE_%out_port
3819
+ L_NET_SOCKET_PORT_DONE_%out_port:
3820
+ !__net_sock_port_is_v4_%out_port
3821
+ !__net_sock_port_payload_%out_port
3822
+ !__net_sock_port_tag_%out_port
3823
+ [END_MACRO]
3824
+
3825
+ [MACRO] NET_SOCKET_ADDR_SET_PORT %socket_addr, %port
3826
+ __net_sock_set_port_tag_%socket_addr = load %socket_addr+NetSocketAddr_tag as u64
3827
+ __net_sock_set_port_payload_%socket_addr = ptr_add %socket_addr, 8
3828
+ __net_sock_set_port_is_v4_%socket_addr = eq __net_sock_set_port_tag_%socket_addr, NET_IP_ADDR_V4
3829
+ br __net_sock_set_port_is_v4_%socket_addr -> L_NET_SOCKET_SET_PORT_V4_%socket_addr, L_NET_SOCKET_SET_PORT_V6_%socket_addr
3830
+ L_NET_SOCKET_SET_PORT_V4_%socket_addr:
3831
+ EXPAND NET_SOCKET_ADDR_V4_SET_PORT __net_sock_set_port_payload_%socket_addr, %port
3832
+ jmp L_NET_SOCKET_SET_PORT_DONE_%socket_addr
3833
+ L_NET_SOCKET_SET_PORT_V6_%socket_addr:
3834
+ EXPAND NET_SOCKET_ADDR_V6_SET_PORT __net_sock_set_port_payload_%socket_addr, %port
3835
+ jmp L_NET_SOCKET_SET_PORT_DONE_%socket_addr
3836
+ L_NET_SOCKET_SET_PORT_DONE_%socket_addr:
3837
+ !__net_sock_set_port_is_v4_%socket_addr
3838
+ !__net_sock_set_port_payload_%socket_addr
3839
+ !__net_sock_set_port_tag_%socket_addr
3840
+ [END_MACRO]
3841
+
3842
+ [MACRO] NET_SOCKET_ADDR_SET_IP %socket_addr, %ipaddr
3843
+ __net_sock_set_ip_old_tag_%socket_addr = load %socket_addr+NetSocketAddr_tag as u64
3844
+ __net_sock_set_ip_new_tag_%socket_addr = load %ipaddr+NetIpAddr_tag as u64
3845
+ __net_sock_set_ip_old_payload_%socket_addr = ptr_add %socket_addr, 8
3846
+ __net_sock_set_ip_new_payload_%socket_addr = ptr_add %ipaddr, 8
3847
+ __net_sock_set_ip_same_%socket_addr = eq __net_sock_set_ip_old_tag_%socket_addr, __net_sock_set_ip_new_tag_%socket_addr
3848
+ br __net_sock_set_ip_same_%socket_addr -> L_NET_SOCKET_SET_IP_SAME_%socket_addr, L_NET_SOCKET_SET_IP_REBUILD_%socket_addr
3849
+ L_NET_SOCKET_SET_IP_SAME_%socket_addr:
3850
+ __net_sock_set_ip_is_v4_%socket_addr = eq __net_sock_set_ip_new_tag_%socket_addr, NET_IP_ADDR_V4
3851
+ br __net_sock_set_ip_is_v4_%socket_addr -> L_NET_SOCKET_SET_IP_SAME_V4_%socket_addr, L_NET_SOCKET_SET_IP_SAME_V6_%socket_addr
3852
+ L_NET_SOCKET_SET_IP_SAME_V4_%socket_addr:
3853
+ EXPAND NET_SOCKET_ADDR_V4_SET_IP __net_sock_set_ip_old_payload_%socket_addr, __net_sock_set_ip_new_payload_%socket_addr
3854
+ jmp L_NET_SOCKET_SET_IP_DONE_%socket_addr
3855
+ L_NET_SOCKET_SET_IP_SAME_V6_%socket_addr:
3856
+ EXPAND NET_SOCKET_ADDR_V6_SET_IP __net_sock_set_ip_old_payload_%socket_addr, __net_sock_set_ip_new_payload_%socket_addr
3857
+ jmp L_NET_SOCKET_SET_IP_DONE_%socket_addr
3858
+ L_NET_SOCKET_SET_IP_REBUILD_%socket_addr:
3859
+ EXPAND NET_SOCKET_ADDR_PORT __net_sock_set_ip_port_%socket_addr, %socket_addr
3860
+ EXPAND NET_SOCKET_ADDR_NEW %socket_addr, %ipaddr, __net_sock_set_ip_port_%socket_addr
3861
+ !__net_sock_set_ip_port_%socket_addr
3862
+ jmp L_NET_SOCKET_SET_IP_DONE_%socket_addr
3863
+ L_NET_SOCKET_SET_IP_DONE_%socket_addr:
3864
+ !__net_sock_set_ip_is_v4_%socket_addr
3865
+ !__net_sock_set_ip_same_%socket_addr
3866
+ !__net_sock_set_ip_new_payload_%socket_addr
3867
+ !__net_sock_set_ip_old_payload_%socket_addr
3868
+ !__net_sock_set_ip_new_tag_%socket_addr
3869
+ !__net_sock_set_ip_old_tag_%socket_addr
3870
+ [END_MACRO]
3871
+
3872
+ [MACRO] NET_SOCKET_ADDR_FLOWINFO %out_ok, %out_flowinfo, %socket_addr
3873
+ __net_sock_flow_tag_%out_ok = load %socket_addr+NetSocketAddr_tag as u64
3874
+ __net_sock_flow_payload_%out_ok = ptr_add %socket_addr, 8
3875
+ __net_sock_flow_is_v6_%out_ok = eq __net_sock_flow_tag_%out_ok, NET_IP_ADDR_V6
3876
+ br __net_sock_flow_is_v6_%out_ok -> L_NET_SOCKET_FLOW_V6_%out_ok, L_NET_SOCKET_FLOW_V4_%out_ok
3877
+ L_NET_SOCKET_FLOW_V6_%out_ok:
3878
+ %out_ok = add 0, 1
3879
+ EXPAND NET_SOCKET_ADDR_V6_FLOWINFO %out_flowinfo, __net_sock_flow_payload_%out_ok
3880
+ jmp L_NET_SOCKET_FLOW_DONE_%out_ok
3881
+ L_NET_SOCKET_FLOW_V4_%out_ok:
3882
+ %out_ok = add 0, 0
3883
+ %out_flowinfo = add 0, 0
3884
+ jmp L_NET_SOCKET_FLOW_DONE_%out_ok
3885
+ L_NET_SOCKET_FLOW_DONE_%out_ok:
3886
+ !__net_sock_flow_is_v6_%out_ok
3887
+ !__net_sock_flow_payload_%out_ok
3888
+ !__net_sock_flow_tag_%out_ok
3889
+ [END_MACRO]
3890
+
3891
+ [MACRO] NET_SOCKET_ADDR_SET_FLOWINFO %out_ok, %socket_addr, %flowinfo
3892
+ __net_sock_set_flow_tag_%out_ok = load %socket_addr+NetSocketAddr_tag as u64
3893
+ __net_sock_set_flow_payload_%out_ok = ptr_add %socket_addr, 8
3894
+ __net_sock_set_flow_is_v6_%out_ok = eq __net_sock_set_flow_tag_%out_ok, NET_IP_ADDR_V6
3895
+ br __net_sock_set_flow_is_v6_%out_ok -> L_NET_SOCKET_SET_FLOW_V6_%out_ok, L_NET_SOCKET_SET_FLOW_V4_%out_ok
3896
+ L_NET_SOCKET_SET_FLOW_V6_%out_ok:
3897
+ EXPAND NET_SOCKET_ADDR_V6_SET_FLOWINFO __net_sock_set_flow_payload_%out_ok, %flowinfo
3898
+ %out_ok = add 0, 1
3899
+ jmp L_NET_SOCKET_SET_FLOW_DONE_%out_ok
3900
+ L_NET_SOCKET_SET_FLOW_V4_%out_ok:
3901
+ %out_ok = add 0, 0
3902
+ jmp L_NET_SOCKET_SET_FLOW_DONE_%out_ok
3903
+ L_NET_SOCKET_SET_FLOW_DONE_%out_ok:
3904
+ !__net_sock_set_flow_is_v6_%out_ok
3905
+ !__net_sock_set_flow_payload_%out_ok
3906
+ !__net_sock_set_flow_tag_%out_ok
3907
+ [END_MACRO]
3908
+
3909
+ [MACRO] NET_SOCKET_ADDR_SCOPE_ID %out_ok, %out_scope_id, %socket_addr
3910
+ __net_sock_scope_tag_%out_ok = load %socket_addr+NetSocketAddr_tag as u64
3911
+ __net_sock_scope_payload_%out_ok = ptr_add %socket_addr, 8
3912
+ __net_sock_scope_is_v6_%out_ok = eq __net_sock_scope_tag_%out_ok, NET_IP_ADDR_V6
3913
+ br __net_sock_scope_is_v6_%out_ok -> L_NET_SOCKET_SCOPE_V6_%out_ok, L_NET_SOCKET_SCOPE_V4_%out_ok
3914
+ L_NET_SOCKET_SCOPE_V6_%out_ok:
3915
+ %out_ok = add 0, 1
3916
+ EXPAND NET_SOCKET_ADDR_V6_SCOPE_ID %out_scope_id, __net_sock_scope_payload_%out_ok
3917
+ jmp L_NET_SOCKET_SCOPE_DONE_%out_ok
3918
+ L_NET_SOCKET_SCOPE_V4_%out_ok:
3919
+ %out_ok = add 0, 0
3920
+ %out_scope_id = add 0, 0
3921
+ jmp L_NET_SOCKET_SCOPE_DONE_%out_ok
3922
+ L_NET_SOCKET_SCOPE_DONE_%out_ok:
3923
+ !__net_sock_scope_is_v6_%out_ok
3924
+ !__net_sock_scope_payload_%out_ok
3925
+ !__net_sock_scope_tag_%out_ok
3926
+ [END_MACRO]
3927
+
3928
+ [MACRO] NET_SOCKET_ADDR_SET_SCOPE_ID %out_ok, %socket_addr, %scope_id
3929
+ __net_sock_set_scope_tag_%out_ok = load %socket_addr+NetSocketAddr_tag as u64
3930
+ __net_sock_set_scope_payload_%out_ok = ptr_add %socket_addr, 8
3931
+ __net_sock_set_scope_is_v6_%out_ok = eq __net_sock_set_scope_tag_%out_ok, NET_IP_ADDR_V6
3932
+ br __net_sock_set_scope_is_v6_%out_ok -> L_NET_SOCKET_SET_SCOPE_V6_%out_ok, L_NET_SOCKET_SET_SCOPE_V4_%out_ok
3933
+ L_NET_SOCKET_SET_SCOPE_V6_%out_ok:
3934
+ EXPAND NET_SOCKET_ADDR_V6_SET_SCOPE_ID __net_sock_set_scope_payload_%out_ok, %scope_id
3935
+ %out_ok = add 0, 1
3936
+ jmp L_NET_SOCKET_SET_SCOPE_DONE_%out_ok
3937
+ L_NET_SOCKET_SET_SCOPE_V4_%out_ok:
3938
+ %out_ok = add 0, 0
3939
+ jmp L_NET_SOCKET_SET_SCOPE_DONE_%out_ok
3940
+ L_NET_SOCKET_SET_SCOPE_DONE_%out_ok:
3941
+ !__net_sock_set_scope_is_v6_%out_ok
3942
+ !__net_sock_set_scope_payload_%out_ok
3943
+ !__net_sock_set_scope_tag_%out_ok
3944
+ [END_MACRO]
3945
+
3946
+ // Explicit byte-oriented aliases over the existing stream/datagram ABI.
3947
+ [MACRO] NET_TCP_STREAM_READ_BYTES %out_status, %out_len, %stream, %buf, %cap
3948
+ EXPAND NET_TCP_STREAM_READ %out_status, %out_len, %stream, %buf, %cap
3949
+ [END_MACRO]
3950
+
3951
+ [MACRO] NET_TCP_STREAM_PEEK_BYTES %out_status, %out_len, %stream, %buf, %cap
3952
+ EXPAND NET_TCP_STREAM_PEEK %out_status, %out_len, %stream, %buf, %cap
3953
+ [END_MACRO]
3954
+
3955
+ [MACRO] NET_TCP_STREAM_WRITE_BYTES %out_status, %out_len, %stream, %buf, %len
3956
+ EXPAND NET_TCP_STREAM_WRITE %out_status, %out_len, %stream, %buf, %len
3957
+ [END_MACRO]
3958
+
3959
+ [MACRO] NET_TCP_STREAM_WRITE_ALL_BYTES %out_status, %stream, %buf, %len
3960
+ EXPAND NET_TCP_STREAM_WRITE_ALL %out_status, %stream, %buf, %len
3961
+ [END_MACRO]
3962
+
3963
+ [MACRO] NET_UNIX_STREAM_PEEK_BYTES %out_status, %out_len, %stream, %buf, %cap
3964
+ EXPAND NET_UNIX_STREAM_PEEK %out_status, %out_len, %stream, %buf, %cap
3965
+ [END_MACRO]
3966
+
3967
+ [MACRO] NET_UNIX_DATAGRAM_SEND_BYTES %out_status, %out_len, %socket, %buf, %len
3968
+ EXPAND NET_UNIX_DATAGRAM_SEND %out_status, %out_len, %socket, %buf, %len
3969
+ [END_MACRO]
3970
+
3971
+ [MACRO] NET_UNIX_DATAGRAM_RECV_BYTES %out_status, %out_len, %socket, %buf, %cap
3972
+ EXPAND NET_UNIX_DATAGRAM_RECV %out_status, %out_len, %socket, %buf, %cap
3973
+ [END_MACRO]
3974
+
3975
+ [MACRO] NET_UDP_SEND_BYTES %out_status, %out_len, %socket, %buf, %len
3976
+ EXPAND NET_UDP_SEND %out_status, %out_len, %socket, %buf, %len
3977
+ [END_MACRO]
3978
+
3979
+ [MACRO] NET_UDP_RECV_BYTES %out_status, %out_len, %socket, %buf, %cap
3980
+ EXPAND NET_UDP_RECV %out_status, %out_len, %socket, %buf, %cap
3981
+ [END_MACRO]
3982
+
3983
+ [MACRO] NET_UDP_PEEK_BYTES %out_status, %out_len, %socket, %buf, %cap
3984
+ EXPAND NET_UDP_PEEK %out_status, %out_len, %socket, %buf, %cap
3985
+ [END_MACRO]
3986
+
3987
+ [MACRO] NET_UDP_SEND_TO_BYTES %out_status, %out_len, %socket, %buf, %len, %host, %host_len, %port
3988
+ EXPAND NET_UDP_SEND_TO %out_status, %out_len, %socket, %buf, %len, %host, %host_len, %port
3989
+ [END_MACRO]
3990
+
3991
+ [MACRO] NET_UDP_RECV_FROM_BYTES %out_status, %out_len, %out_addr, %socket, %buf, %cap
3992
+ EXPAND NET_UDP_RECV_FROM %out_status, %out_len, %out_addr, %socket, %buf, %cap
3993
+ [END_MACRO]
3994
+
3995
+ [MACRO] NET_UDP_PEEK_FROM_BYTES %out_status, %out_len, %out_addr, %socket, %buf, %cap
3996
+ EXPAND NET_UDP_PEEK_FROM %out_status, %out_len, %out_addr, %socket, %buf, %cap
3997
+ [END_MACRO]
3998
+
3999
+ // Rust-style spelling aliases for platform socket option helpers.
4000
+ [MACRO] NET_TCP_LISTENER_SET_REUSE_ADDR %out_status, %listener, %enabled
4001
+ EXPAND NET_TCP_LISTENER_SET_REUSEADDR %out_status, %listener, %enabled
4002
+ [END_MACRO]
4003
+
4004
+ [MACRO] NET_TCP_LISTENER_SET_REUSE_PORT %out_status, %listener, %enabled
4005
+ EXPAND NET_TCP_LISTENER_SET_REUSEPORT %out_status, %listener, %enabled
4006
+ [END_MACRO]
4007
+
4008
+ [MACRO] NET_TCP_STREAM_SET_QUICK_ACK %out_status, %stream, %enabled
4009
+ EXPAND NET_TCP_STREAM_SET_QUICKACK %out_status, %stream, %enabled
4010
+ [END_MACRO]
4011
+
4012
+ [MACRO] NET_TCP_STREAM_QUICK_ACK %out_status, %out_enabled, %stream
4013
+ EXPAND NET_TCP_STREAM_QUICKACK %out_status, %out_enabled, %stream
4014
+ [END_MACRO]
4015
+
4016
+ [MACRO] NET_TCP_STREAM_SET_DEFER_ACCEPT %out_status, %stream, %seconds
4017
+ EXPAND NET_TCP_STREAM_SET_DEFERACCEPT %out_status, %stream, %seconds
4018
+ [END_MACRO]
4019
+
4020
+ [MACRO] NET_TCP_STREAM_DEFER_ACCEPT %out_status, %out_seconds, %stream
4021
+ EXPAND NET_TCP_STREAM_DEFERACCEPT %out_status, %out_seconds, %stream
4022
+ [END_MACRO]
4023
+
4024
+ [MACRO] NET_TCP_STREAM_SET_KEEP_ALIVE %out_status, %stream, %enabled
4025
+ EXPAND NET_TCP_STREAM_SET_KEEPALIVE %out_status, %stream, %enabled
4026
+ [END_MACRO]
4027
+
4028
+ [MACRO] NET_TCP_STREAM_SET_KEEP_ALIVE_PARAMS %out_status, %stream, %idle_secs, %intvl_secs, %cnt
4029
+ EXPAND NET_TCP_STREAM_SET_KEEPALIVE_PARAMS %out_status, %stream, %idle_secs, %intvl_secs, %cnt
4030
+ [END_MACRO]
4031
+ // Convert the public SA status code into the stable Rust-style ErrorKind
4032
+ // discriminator. Network APIs expose SA status codes; take_error values are
4033
+ // raw errno/WSA values and intentionally are not accepted here.
4034
+
4035
+ // Rust-style stable network error code facade over public SA status values.
4036
+ [MACRO] NET_ERROR_CODE_FROM_STATUS %out_code, %status
4037
+ %out_code = call @sa_std_net_error_code_from_status(%status)
4038
+ [END_MACRO]
4039
+
4040
+ [MACRO] NET_TCP_CONNECT_TIMEOUT_ALL %out_status, %out_stream, %host, %host_len, %port, %timeout_ns
4041
+ __net_tcp_connect_timeout_all_handle_%out_status = stack_alloc 8
4042
+ %out_status = call @sa_std_net_tcp_connect_timeout_all(&%host, %host_len, %port, %timeout_ns, &__net_tcp_connect_timeout_all_handle_%out_status)
4043
+ %out_stream = load __net_tcp_connect_timeout_all_handle_%out_status+0 as u64
4044
+ [END_MACRO]
4045
+
4046
+ [MACRO] NET_TCP_CONNECT_TIMEOUT %out_status, %out_stream, %host, %host_len, %port, %timeout_ns
4047
+ __net_tcp_connect_timeout_handle_%out_status = stack_alloc 8
4048
+ %out_status = call @sa_std_net_tcp_connect_timeout(&%host, %host_len, %port, %timeout_ns, &__net_tcp_connect_timeout_handle_%out_status)
4049
+ %out_stream = load __net_tcp_connect_timeout_handle_%out_status+0 as u64
4050
+ [END_MACRO]
4051
+
4052
+ [MACRO] NET_TCP_CONNECT_TIMEOUT_ADDR %out_status, %out_stream, %addr, %timeout_ns
4053
+ __net_tcp_connect_timeout_addr_handle_%out_status = stack_alloc 8
4054
+ %out_status = call @sa_std_net_tcp_connect_timeout_addr(%addr, %timeout_ns, &__net_tcp_connect_timeout_addr_handle_%out_status)
4055
+ %out_stream = load __net_tcp_connect_timeout_addr_handle_%out_status+0 as u64
4056
+ [END_MACRO]
4057
+
4058
+ [MACRO] NET_ERROR_CODE_FROM_POSIX_ERRNO %out_code, %errno
4059
+ %out_code = call @sa_std_net_error_code_from_posix_errno(%errno)
4060
+ [END_MACRO]
4061
+
4062
+ [MACRO] NET_ERROR_CODE_FROM_WSA_ERROR %out_code, %error
4063
+ %out_code = call @sa_std_net_error_code_from_wsa_error(%error)
4064
+ [END_MACRO]
4065
+
4066
+ [MACRO] NET_ERROR_CODE_NAME %out_status, %code, %out_ptr, %out_cap, %out_len
4067
+ %out_status = call @sa_std_net_error_code_name(%code, %out_ptr, %out_cap, %out_len)
4068
+ [END_MACRO]
4069
+
4070
+ [MACRO] NET_ERROR_PLATFORM %out_platform
4071
+ %out_platform = call @sa_std_net_error_platform()
4072
+ [END_MACRO]
4073
+
4074
+ [MACRO] NET_ERROR_CODE_FROM_NATIVE_ERROR %out_code, %error
4075
+ %out_code = call @sa_std_net_error_code_from_native_error(%error)
4076
+ [END_MACRO]
4077
+
4078
+ [MACRO] NET_ERROR_NEW %error_ptr, %code, %platform, %raw, %status
4079
+ store %error_ptr+SaNetError_code, %code as i32
4080
+ store %error_ptr+SaNetError_platform, %platform as i32
4081
+ store %error_ptr+SaNetError_raw, %raw as i32
4082
+ store %error_ptr+SaNetError_status, %status as i32
4083
+ [END_MACRO]
4084
+
4085
+ [MACRO] NET_ERROR_FROM_STATUS %error_ptr, %status
4086
+ EXPAND NET_ERROR_CODE_FROM_STATUS __net_error_status_code_%error_ptr, %status
4087
+ EXPAND NET_ERROR_NEW %error_ptr, __net_error_status_code_%error_ptr, SA_NET_ERROR_PLATFORM_NONE, 0, %status
4088
+ !__net_error_status_code_%error_ptr
4089
+ [END_MACRO]
4090
+
4091
+ [MACRO] NET_ERROR_FROM_NATIVE %error_ptr, %raw
4092
+ EXPAND NET_ERROR_PLATFORM __net_error_native_platform_%error_ptr
4093
+ EXPAND NET_ERROR_CODE_FROM_NATIVE_ERROR __net_error_native_code_%error_ptr, %raw
4094
+ EXPAND NET_ERROR_NEW %error_ptr, __net_error_native_code_%error_ptr, __net_error_native_platform_%error_ptr, %raw, SA_NET_STATUS_NET
4095
+ !__net_error_native_code_%error_ptr
4096
+ !__net_error_native_platform_%error_ptr
4097
+ [END_MACRO]
4098
+
4099
+ [MACRO] NET_ERROR_KIND %out_code, %error_ptr
4100
+ %out_code = load %error_ptr+SaNetError_code as i32
4101
+ [END_MACRO]
4102
+
4103
+ [MACRO] NET_ERROR_PLATFORM_OF %out_platform, %error_ptr
4104
+ %out_platform = load %error_ptr+SaNetError_platform as i32
4105
+ [END_MACRO]
4106
+
4107
+ [MACRO] NET_ERROR_RAW_OS_ERROR %out_has, %out_raw, %error_ptr
4108
+ __net_error_raw_platform_%out_has = load %error_ptr+SaNetError_platform as i32
4109
+ %out_raw = load %error_ptr+SaNetError_raw as i32
4110
+ %out_has = ne __net_error_raw_platform_%out_has, SA_NET_ERROR_PLATFORM_NONE
4111
+ !__net_error_raw_platform_%out_has
4112
+ [END_MACRO]
4113
+
4114
+ [MACRO] NET_ERROR_STATUS %out_status, %error_ptr
4115
+ %out_status = load %error_ptr+SaNetError_status as i32
4116
+ [END_MACRO]
4117
+
4118
+ [MACRO] NET_ERROR_IS_OK %out_bool, %error_ptr
4119
+ __net_error_ok_code_%out_bool = load %error_ptr+SaNetError_code as i32
4120
+ %out_bool = eq __net_error_ok_code_%out_bool, SA_NET_ERROR_CODE_OK
4121
+ !__net_error_ok_code_%out_bool
4122
+ [END_MACRO]
4123
+ [MACRO] NET_ERROR_KIND_FROM_STATUS %out_kind, %status
4124
+ __net_kind_invalid_arg_%out_kind = eq %status, SA_NET_STATUS_INVALID_ARGUMENT
4125
+ br __net_kind_invalid_arg_%out_kind -> L_NET_KIND_INVALID_ARG_%out_kind, L_NET_KIND_INVALID_HANDLE_%out_kind
4126
+ L_NET_KIND_INVALID_ARG_%out_kind:
4127
+ %out_kind = add 0, IO_ERROR_KIND_INVALID_INPUT
4128
+ !__net_kind_invalid_arg_%out_kind
4129
+ jmp L_NET_KIND_END_%out_kind
4130
+ L_NET_KIND_INVALID_HANDLE_%out_kind:
4131
+ __net_kind_invalid_handle_%out_kind = eq %status, SA_NET_STATUS_INVALID_HANDLE
4132
+ br __net_kind_invalid_handle_%out_kind -> L_NET_KIND_INVALID_HANDLE_VALUE_%out_kind, L_NET_KIND_NOT_FOUND_%out_kind
4133
+ L_NET_KIND_INVALID_HANDLE_VALUE_%out_kind:
4134
+ %out_kind = add 0, IO_ERROR_KIND_NOT_CONNECTED
4135
+ !__net_kind_invalid_handle_%out_kind
4136
+ !__net_kind_invalid_arg_%out_kind
4137
+ jmp L_NET_KIND_END_%out_kind
4138
+ L_NET_KIND_NOT_FOUND_%out_kind:
4139
+ __net_kind_not_found_%out_kind = eq %status, SA_NET_STATUS_NOT_FOUND
4140
+ br __net_kind_not_found_%out_kind -> L_NET_KIND_NOT_FOUND_VALUE_%out_kind, L_NET_KIND_ACCESS_%out_kind
4141
+ L_NET_KIND_NOT_FOUND_VALUE_%out_kind:
4142
+ %out_kind = add 0, IO_ERROR_KIND_NOT_FOUND
4143
+ !__net_kind_not_found_%out_kind
4144
+ !__net_kind_invalid_handle_%out_kind
4145
+ !__net_kind_invalid_arg_%out_kind
4146
+ jmp L_NET_KIND_END_%out_kind
4147
+ L_NET_KIND_ACCESS_%out_kind:
4148
+ __net_kind_access_%out_kind = eq %status, SA_NET_STATUS_ACCESS
4149
+ br __net_kind_access_%out_kind -> L_NET_KIND_ACCESS_VALUE_%out_kind, L_NET_KIND_NO_MEMORY_%out_kind
4150
+ L_NET_KIND_ACCESS_VALUE_%out_kind:
4151
+ %out_kind = add 0, IO_ERROR_KIND_PERMISSION_DENIED
4152
+ !__net_kind_access_%out_kind
4153
+ !__net_kind_not_found_%out_kind
4154
+ !__net_kind_invalid_handle_%out_kind
4155
+ !__net_kind_invalid_arg_%out_kind
4156
+ jmp L_NET_KIND_END_%out_kind
4157
+ L_NET_KIND_NO_MEMORY_%out_kind:
4158
+ __net_kind_no_memory_%out_kind = eq %status, SA_NET_STATUS_NO_MEMORY
4159
+ br __net_kind_no_memory_%out_kind -> L_NET_KIND_NO_MEMORY_VALUE_%out_kind, L_NET_KIND_IO_%out_kind
4160
+ L_NET_KIND_NO_MEMORY_VALUE_%out_kind:
4161
+ %out_kind = add 0, IO_ERROR_KIND_OUT_OF_MEMORY
4162
+ !__net_kind_no_memory_%out_kind
4163
+ !__net_kind_access_%out_kind
4164
+ !__net_kind_not_found_%out_kind
4165
+ !__net_kind_invalid_handle_%out_kind
4166
+ !__net_kind_invalid_arg_%out_kind
4167
+ jmp L_NET_KIND_END_%out_kind
4168
+ L_NET_KIND_IO_%out_kind:
4169
+ __net_kind_io_%out_kind = eq %status, SA_NET_STATUS_IO
4170
+ br __net_kind_io_%out_kind -> L_NET_KIND_IO_VALUE_%out_kind, L_NET_KIND_NET_%out_kind
4171
+ L_NET_KIND_IO_VALUE_%out_kind:
4172
+ %out_kind = add 0, IO_ERROR_KIND_OTHER
4173
+ !__net_kind_io_%out_kind
4174
+ !__net_kind_no_memory_%out_kind
4175
+ !__net_kind_access_%out_kind
4176
+ !__net_kind_not_found_%out_kind
4177
+ !__net_kind_invalid_handle_%out_kind
4178
+ !__net_kind_invalid_arg_%out_kind
4179
+ jmp L_NET_KIND_END_%out_kind
4180
+ L_NET_KIND_NET_%out_kind:
4181
+ __net_kind_net_%out_kind = eq %status, SA_NET_STATUS_NET
4182
+ br __net_kind_net_%out_kind -> L_NET_KIND_NET_VALUE_%out_kind, L_NET_KIND_UNSUPPORTED_%out_kind
4183
+ L_NET_KIND_NET_VALUE_%out_kind:
4184
+ %out_kind = add 0, IO_ERROR_KIND_NETWORK_UNREACHABLE
4185
+ !__net_kind_net_%out_kind
4186
+ !__net_kind_io_%out_kind
4187
+ !__net_kind_no_memory_%out_kind
4188
+ !__net_kind_access_%out_kind
4189
+ !__net_kind_not_found_%out_kind
4190
+ !__net_kind_invalid_handle_%out_kind
4191
+ !__net_kind_invalid_arg_%out_kind
4192
+ jmp L_NET_KIND_END_%out_kind
4193
+ L_NET_KIND_UNSUPPORTED_%out_kind:
4194
+ __net_kind_unsupported_%out_kind = eq %status, SA_NET_STATUS_UNSUPPORTED
4195
+ br __net_kind_unsupported_%out_kind -> L_NET_KIND_UNSUPPORTED_VALUE_%out_kind, L_NET_KIND_OTHER_%out_kind
4196
+ L_NET_KIND_UNSUPPORTED_VALUE_%out_kind:
4197
+ %out_kind = add 0, IO_ERROR_KIND_UNSUPPORTED
4198
+ !__net_kind_unsupported_%out_kind
4199
+ !__net_kind_net_%out_kind
4200
+ !__net_kind_io_%out_kind
4201
+ !__net_kind_no_memory_%out_kind
4202
+ !__net_kind_access_%out_kind
4203
+ !__net_kind_not_found_%out_kind
4204
+ !__net_kind_invalid_handle_%out_kind
4205
+ !__net_kind_invalid_arg_%out_kind
4206
+ jmp L_NET_KIND_END_%out_kind
4207
+ L_NET_KIND_OTHER_%out_kind:
4208
+ %out_kind = add 0, IO_ERROR_KIND_OTHER
4209
+ !__net_kind_unsupported_%out_kind
4210
+ !__net_kind_net_%out_kind
4211
+ !__net_kind_io_%out_kind
4212
+ !__net_kind_no_memory_%out_kind
4213
+ !__net_kind_access_%out_kind
4214
+ !__net_kind_not_found_%out_kind
4215
+ !__net_kind_invalid_handle_%out_kind
4216
+ !__net_kind_invalid_arg_%out_kind
4217
+ L_NET_KIND_END_%out_kind:
4218
+ [END_MACRO]
4219
+ // Rust-style spelling aliases. SA exposes the 128-bit value as two u64
4220
+ // registers because the language has no native u128 scalar.
4221
+ [MACRO] NET_IPV6_TO_BITS %out_hi, %out_lo, %addr
4222
+ EXPAND NET_IPV6_TO_BITS64 %out_hi, %out_lo, %addr
4223
+ [END_MACRO]
4224
+
4225
+ [MACRO] NET_IPV6_FROM_BITS %addr, %hi, %lo
4226
+ EXPAND NET_IPV6_FROM_BITS64 %addr, %hi, %lo
4227
+ [END_MACRO]