puma-plus-core 0.1.0

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 (1055) hide show
  1. checksums.yaml +7 -0
  2. data/ext/puma_plus_core/extconf.rb +85 -0
  3. data/go/cmd/puma-plus/main.go +472 -0
  4. data/go/go.mod +20 -0
  5. data/go/go.sum +38 -0
  6. data/go/internal/control/booted_test.go +97 -0
  7. data/go/internal/control/decide.go +427 -0
  8. data/go/internal/control/decide_test.go +526 -0
  9. data/go/internal/control/loop.go +343 -0
  10. data/go/internal/control/loop_test.go +228 -0
  11. data/go/internal/control/replay.go +121 -0
  12. data/go/internal/control/sim/cooldown_test.go +74 -0
  13. data/go/internal/control/sim/sim.go +599 -0
  14. data/go/internal/control/sim/sim_test.go +300 -0
  15. data/go/internal/frontend/acceptor.go +164 -0
  16. data/go/internal/frontend/altsvc.go +57 -0
  17. data/go/internal/frontend/altsvc_test.go +170 -0
  18. data/go/internal/frontend/bodypump.go +81 -0
  19. data/go/internal/frontend/env.go +224 -0
  20. data/go/internal/frontend/env_test.go +64 -0
  21. data/go/internal/frontend/handler.go +543 -0
  22. data/go/internal/frontend/handler_test.go +486 -0
  23. data/go/internal/frontend/hijack.go +108 -0
  24. data/go/internal/frontend/hijack_test.go +197 -0
  25. data/go/internal/frontend/hooks_test.go +283 -0
  26. data/go/internal/frontend/launcher_test.go +289 -0
  27. data/go/internal/frontend/listeners.go +196 -0
  28. data/go/internal/frontend/protocol_test.go +391 -0
  29. data/go/internal/frontend/ractor_shepherd.go +160 -0
  30. data/go/internal/frontend/ractor_smoke_test.go +168 -0
  31. data/go/internal/frontend/realcert_test.go +163 -0
  32. data/go/internal/frontend/rtbridge.go +410 -0
  33. data/go/internal/frontend/shepherd.go +188 -0
  34. data/go/internal/frontend/socket.go +37 -0
  35. data/go/internal/frontend/socketpair_test.go +34 -0
  36. data/go/internal/frontend/tlscert.go +184 -0
  37. data/go/internal/frontend/tlscert_test.go +81 -0
  38. data/go/internal/frontend/wscontrol.go +198 -0
  39. data/go/internal/metrics/collector.go +207 -0
  40. data/go/internal/metrics/endpoints.go +244 -0
  41. data/go/internal/metrics/gvl.go +136 -0
  42. data/go/internal/metrics/gvl_test.go +122 -0
  43. data/go/internal/metrics/hist.go +204 -0
  44. data/go/internal/metrics/hist_test.go +353 -0
  45. data/go/internal/metrics/window.go +120 -0
  46. data/go/internal/queue/drain_test.go +141 -0
  47. data/go/internal/queue/queue.go +297 -0
  48. data/go/internal/realtime/event.go +53 -0
  49. data/go/internal/realtime/hub.go +456 -0
  50. data/go/internal/realtime/hub_test.go +370 -0
  51. data/go/internal/realtime/id.go +69 -0
  52. data/go/internal/realtime/id_test.go +64 -0
  53. data/go/internal/websocket/frame.go +186 -0
  54. data/go/internal/websocket/serve.go +196 -0
  55. data/go/internal/websocket/transport.go +101 -0
  56. data/go/internal/webtransport/serve.go +169 -0
  57. data/go/internal/webtransport/transport.go +220 -0
  58. data/go/internal/wire/golden_test.go +250 -0
  59. data/go/internal/wire/rack_test.go +40 -0
  60. data/go/internal/wire/ractor_test.go +43 -0
  61. data/go/internal/wire/wire.go +401 -0
  62. data/go/vendor/github.com/dunglas/httpsfv/LICENSE +27 -0
  63. data/go/vendor/github.com/dunglas/httpsfv/README.md +25 -0
  64. data/go/vendor/github.com/dunglas/httpsfv/bareitem.go +115 -0
  65. data/go/vendor/github.com/dunglas/httpsfv/binary.go +59 -0
  66. data/go/vendor/github.com/dunglas/httpsfv/boolean.go +49 -0
  67. data/go/vendor/github.com/dunglas/httpsfv/date.go +41 -0
  68. data/go/vendor/github.com/dunglas/httpsfv/decimal.go +64 -0
  69. data/go/vendor/github.com/dunglas/httpsfv/decode.go +63 -0
  70. data/go/vendor/github.com/dunglas/httpsfv/dictionary.go +167 -0
  71. data/go/vendor/github.com/dunglas/httpsfv/displaystring.go +105 -0
  72. data/go/vendor/github.com/dunglas/httpsfv/encode.go +42 -0
  73. data/go/vendor/github.com/dunglas/httpsfv/innerlist.go +91 -0
  74. data/go/vendor/github.com/dunglas/httpsfv/integer.go +120 -0
  75. data/go/vendor/github.com/dunglas/httpsfv/item.go +73 -0
  76. data/go/vendor/github.com/dunglas/httpsfv/key.go +81 -0
  77. data/go/vendor/github.com/dunglas/httpsfv/list.go +99 -0
  78. data/go/vendor/github.com/dunglas/httpsfv/member.go +9 -0
  79. data/go/vendor/github.com/dunglas/httpsfv/params.go +143 -0
  80. data/go/vendor/github.com/dunglas/httpsfv/string.go +88 -0
  81. data/go/vendor/github.com/dunglas/httpsfv/token.go +71 -0
  82. data/go/vendor/github.com/dunglas/httpsfv/utils.go +16 -0
  83. data/go/vendor/github.com/quic-go/qpack/LICENSE.md +7 -0
  84. data/go/vendor/github.com/quic-go/qpack/README.md +21 -0
  85. data/go/vendor/github.com/quic-go/qpack/decoder.go +183 -0
  86. data/go/vendor/github.com/quic-go/qpack/encoder.go +95 -0
  87. data/go/vendor/github.com/quic-go/qpack/header_field.go +16 -0
  88. data/go/vendor/github.com/quic-go/qpack/static_table.go +255 -0
  89. data/go/vendor/github.com/quic-go/qpack/varint.go +69 -0
  90. data/go/vendor/github.com/quic-go/quic-go/FIPS140.md +37 -0
  91. data/go/vendor/github.com/quic-go/quic-go/FUZZING.md +59 -0
  92. data/go/vendor/github.com/quic-go/quic-go/LICENSE +21 -0
  93. data/go/vendor/github.com/quic-go/quic-go/README.md +65 -0
  94. data/go/vendor/github.com/quic-go/quic-go/SECURITY.md +14 -0
  95. data/go/vendor/github.com/quic-go/quic-go/buffer_pool.go +92 -0
  96. data/go/vendor/github.com/quic-go/quic-go/client.go +109 -0
  97. data/go/vendor/github.com/quic-go/quic-go/closed_conn.go +58 -0
  98. data/go/vendor/github.com/quic-go/quic-go/codecov.yml +23 -0
  99. data/go/vendor/github.com/quic-go/quic-go/config.go +129 -0
  100. data/go/vendor/github.com/quic-go/quic-go/conn_id_generator.go +212 -0
  101. data/go/vendor/github.com/quic-go/quic-go/conn_id_manager.go +321 -0
  102. data/go/vendor/github.com/quic-go/quic-go/connection.go +3150 -0
  103. data/go/vendor/github.com/quic-go/quic-go/connection_logging.go +315 -0
  104. data/go/vendor/github.com/quic-go/quic-go/crypto_stream.go +249 -0
  105. data/go/vendor/github.com/quic-go/quic-go/crypto_stream_manager.go +73 -0
  106. data/go/vendor/github.com/quic-go/quic-go/datagram_queue.go +137 -0
  107. data/go/vendor/github.com/quic-go/quic-go/errors.go +105 -0
  108. data/go/vendor/github.com/quic-go/quic-go/flow_controller_base.go +84 -0
  109. data/go/vendor/github.com/quic-go/quic-go/flow_controller_connection.go +186 -0
  110. data/go/vendor/github.com/quic-go/quic-go/flow_controller_stream.go +196 -0
  111. data/go/vendor/github.com/quic-go/quic-go/frame_sorter.go +274 -0
  112. data/go/vendor/github.com/quic-go/quic-go/framer.go +295 -0
  113. data/go/vendor/github.com/quic-go/quic-go/http3/README.md +9 -0
  114. data/go/vendor/github.com/quic-go/quic-go/http3/body.go +137 -0
  115. data/go/vendor/github.com/quic-go/quic-go/http3/capsule.go +148 -0
  116. data/go/vendor/github.com/quic-go/quic-go/http3/client.go +496 -0
  117. data/go/vendor/github.com/quic-go/quic-go/http3/conn.go +319 -0
  118. data/go/vendor/github.com/quic-go/quic-go/http3/error.go +63 -0
  119. data/go/vendor/github.com/quic-go/quic-go/http3/error_codes.go +84 -0
  120. data/go/vendor/github.com/quic-go/quic-go/http3/frames.go +327 -0
  121. data/go/vendor/github.com/quic-go/quic-go/http3/gzip_reader.go +39 -0
  122. data/go/vendor/github.com/quic-go/quic-go/http3/headers.go +429 -0
  123. data/go/vendor/github.com/quic-go/quic-go/http3/ip_addr.go +48 -0
  124. data/go/vendor/github.com/quic-go/quic-go/http3/mockgen.go +11 -0
  125. data/go/vendor/github.com/quic-go/quic-go/http3/qlog/event.go +138 -0
  126. data/go/vendor/github.com/quic-go/quic-go/http3/qlog/frame.go +220 -0
  127. data/go/vendor/github.com/quic-go/quic-go/http3/qlog/qlog_dir.go +15 -0
  128. data/go/vendor/github.com/quic-go/quic-go/http3/qlog.go +56 -0
  129. data/go/vendor/github.com/quic-go/quic-go/http3/request_writer.go +324 -0
  130. data/go/vendor/github.com/quic-go/quic-go/http3/response_writer.go +372 -0
  131. data/go/vendor/github.com/quic-go/quic-go/http3/server.go +738 -0
  132. data/go/vendor/github.com/quic-go/quic-go/http3/server_conn.go +259 -0
  133. data/go/vendor/github.com/quic-go/quic-go/http3/state_tracking_stream.go +173 -0
  134. data/go/vendor/github.com/quic-go/quic-go/http3/stream.go +406 -0
  135. data/go/vendor/github.com/quic-go/quic-go/http3/trace.go +105 -0
  136. data/go/vendor/github.com/quic-go/quic-go/http3/transport.go +538 -0
  137. data/go/vendor/github.com/quic-go/quic-go/interface.go +221 -0
  138. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/ack_eliciting.go +33 -0
  139. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/ecn.go +340 -0
  140. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/frame.go +21 -0
  141. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/interfaces.go +39 -0
  142. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/lost_packet_tracker.go +73 -0
  143. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/mockgen.go +6 -0
  144. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/packet.go +60 -0
  145. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/packet_number_generator.go +84 -0
  146. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_handler.go +119 -0
  147. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_history.go +159 -0
  148. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/received_packet_tracker.go +228 -0
  149. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/send_mode.go +46 -0
  150. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/sent_packet_handler.go +1143 -0
  151. data/go/vendor/github.com/quic-go/quic-go/internal/ackhandler/sent_packet_history.go +274 -0
  152. data/go/vendor/github.com/quic-go/quic-go/internal/congestion/bandwidth.go +22 -0
  153. data/go/vendor/github.com/quic-go/quic-go/internal/congestion/clock.go +20 -0
  154. data/go/vendor/github.com/quic-go/quic-go/internal/congestion/cubic.go +214 -0
  155. data/go/vendor/github.com/quic-go/quic-go/internal/congestion/cubic_sender.go +330 -0
  156. data/go/vendor/github.com/quic-go/quic-go/internal/congestion/hybrid_slow_start.go +112 -0
  157. data/go/vendor/github.com/quic-go/quic-go/internal/congestion/interface.go +27 -0
  158. data/go/vendor/github.com/quic-go/quic-go/internal/congestion/pacer.go +110 -0
  159. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/aead.go +91 -0
  160. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/cipher_suite.go +114 -0
  161. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/cipher_suite_fips140.go +48 -0
  162. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/crypto_setup.go +718 -0
  163. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/fake_conn.go +21 -0
  164. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/fips140_go126.go +9 -0
  165. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/fips140_legacy.go +7 -0
  166. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/header_protector.go +134 -0
  167. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/hkdf.go +26 -0
  168. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/initial_aead.go +80 -0
  169. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/interface.go +140 -0
  170. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/quic_event_go125.go +11 -0
  171. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/quic_event_go126.go +11 -0
  172. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/retry_go125.go +68 -0
  173. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/retry_go126.go +70 -0
  174. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/session_ticket.go +55 -0
  175. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/tls_config_go126.go +54 -0
  176. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/tls_config_go127.go +24 -0
  177. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/token_generator.go +126 -0
  178. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/token_protector.go +78 -0
  179. data/go/vendor/github.com/quic-go/quic-go/internal/handshake/updatable_aead.go +372 -0
  180. data/go/vendor/github.com/quic-go/quic-go/internal/monotime/time.go +90 -0
  181. data/go/vendor/github.com/quic-go/quic-go/internal/protocol/connection_id.go +116 -0
  182. data/go/vendor/github.com/quic-go/quic-go/internal/protocol/encryption_level.go +65 -0
  183. data/go/vendor/github.com/quic-go/quic-go/internal/protocol/key_phase.go +36 -0
  184. data/go/vendor/github.com/quic-go/quic-go/internal/protocol/packet_number.go +57 -0
  185. data/go/vendor/github.com/quic-go/quic-go/internal/protocol/params.go +169 -0
  186. data/go/vendor/github.com/quic-go/quic-go/internal/protocol/perspective.go +26 -0
  187. data/go/vendor/github.com/quic-go/quic-go/internal/protocol/protocol.go +156 -0
  188. data/go/vendor/github.com/quic-go/quic-go/internal/protocol/stream.go +102 -0
  189. data/go/vendor/github.com/quic-go/quic-go/internal/protocol/version.go +115 -0
  190. data/go/vendor/github.com/quic-go/quic-go/internal/qerr/error_codes.go +87 -0
  191. data/go/vendor/github.com/quic-go/quic-go/internal/qerr/errors.go +134 -0
  192. data/go/vendor/github.com/quic-go/quic-go/internal/utils/buffered_write_closer.go +26 -0
  193. data/go/vendor/github.com/quic-go/quic-go/internal/utils/connstats.go +14 -0
  194. data/go/vendor/github.com/quic-go/quic-go/internal/utils/linkedlist/README.md +6 -0
  195. data/go/vendor/github.com/quic-go/quic-go/internal/utils/linkedlist/linkedlist.go +264 -0
  196. data/go/vendor/github.com/quic-go/quic-go/internal/utils/log.go +131 -0
  197. data/go/vendor/github.com/quic-go/quic-go/internal/utils/rand.go +29 -0
  198. data/go/vendor/github.com/quic-go/quic-go/internal/utils/ringbuffer/ringbuffer.go +96 -0
  199. data/go/vendor/github.com/quic-go/quic-go/internal/utils/rtt_stats.go +159 -0
  200. data/go/vendor/github.com/quic-go/quic-go/internal/wire/ack_frame.go +298 -0
  201. data/go/vendor/github.com/quic-go/quic-go/internal/wire/ack_frequency_frame.go +65 -0
  202. data/go/vendor/github.com/quic-go/quic-go/internal/wire/ack_range.go +14 -0
  203. data/go/vendor/github.com/quic-go/quic-go/internal/wire/connection_close_frame.go +75 -0
  204. data/go/vendor/github.com/quic-go/quic-go/internal/wire/crypto_frame.go +97 -0
  205. data/go/vendor/github.com/quic-go/quic-go/internal/wire/data_blocked_frame.go +29 -0
  206. data/go/vendor/github.com/quic-go/quic-go/internal/wire/datagram_frame.go +85 -0
  207. data/go/vendor/github.com/quic-go/quic-go/internal/wire/extended_header.go +164 -0
  208. data/go/vendor/github.com/quic-go/quic-go/internal/wire/frame.go +33 -0
  209. data/go/vendor/github.com/quic-go/quic-go/internal/wire/frame_parser.go +192 -0
  210. data/go/vendor/github.com/quic-go/quic-go/internal/wire/frame_type.go +81 -0
  211. data/go/vendor/github.com/quic-go/quic-go/internal/wire/handshake_done_frame.go +17 -0
  212. data/go/vendor/github.com/quic-go/quic-go/internal/wire/header.go +302 -0
  213. data/go/vendor/github.com/quic-go/quic-go/internal/wire/immediate_ack_frame.go +18 -0
  214. data/go/vendor/github.com/quic-go/quic-go/internal/wire/log.go +74 -0
  215. data/go/vendor/github.com/quic-go/quic-go/internal/wire/max_data_frame.go +33 -0
  216. data/go/vendor/github.com/quic-go/quic-go/internal/wire/max_stream_data_frame.go +43 -0
  217. data/go/vendor/github.com/quic-go/quic-go/internal/wire/max_streams_frame.go +50 -0
  218. data/go/vendor/github.com/quic-go/quic-go/internal/wire/new_connection_id_frame.go +80 -0
  219. data/go/vendor/github.com/quic-go/quic-go/internal/wire/new_token_frame.go +43 -0
  220. data/go/vendor/github.com/quic-go/quic-go/internal/wire/path_challenge_frame.go +32 -0
  221. data/go/vendor/github.com/quic-go/quic-go/internal/wire/path_response_frame.go +32 -0
  222. data/go/vendor/github.com/quic-go/quic-go/internal/wire/ping_frame.go +17 -0
  223. data/go/vendor/github.com/quic-go/quic-go/internal/wire/pool.go +33 -0
  224. data/go/vendor/github.com/quic-go/quic-go/internal/wire/reset_stream_frame.go +79 -0
  225. data/go/vendor/github.com/quic-go/quic-go/internal/wire/retire_connection_id_frame.go +30 -0
  226. data/go/vendor/github.com/quic-go/quic-go/internal/wire/short_header.go +62 -0
  227. data/go/vendor/github.com/quic-go/quic-go/internal/wire/stop_sending_frame.go +45 -0
  228. data/go/vendor/github.com/quic-go/quic-go/internal/wire/stream_data_blocked_frame.go +42 -0
  229. data/go/vendor/github.com/quic-go/quic-go/internal/wire/stream_frame.go +191 -0
  230. data/go/vendor/github.com/quic-go/quic-go/internal/wire/streams_blocked_frame.go +50 -0
  231. data/go/vendor/github.com/quic-go/quic-go/internal/wire/transport_parameters.go +593 -0
  232. data/go/vendor/github.com/quic-go/quic-go/internal/wire/version_negotiation.go +53 -0
  233. data/go/vendor/github.com/quic-go/quic-go/mockgen.go +47 -0
  234. data/go/vendor/github.com/quic-go/quic-go/mtu_discoverer.go +253 -0
  235. data/go/vendor/github.com/quic-go/quic-go/oss-fuzz.sh +52 -0
  236. data/go/vendor/github.com/quic-go/quic-go/packet_packer.go +1009 -0
  237. data/go/vendor/github.com/quic-go/quic-go/packet_unpacker.go +222 -0
  238. data/go/vendor/github.com/quic-go/quic-go/path_manager.go +206 -0
  239. data/go/vendor/github.com/quic-go/quic-go/path_manager_outgoing.go +314 -0
  240. data/go/vendor/github.com/quic-go/quic-go/qlog/event.go +849 -0
  241. data/go/vendor/github.com/quic-go/quic-go/qlog/frame.go +481 -0
  242. data/go/vendor/github.com/quic-go/quic-go/qlog/packet_header.go +96 -0
  243. data/go/vendor/github.com/quic-go/quic-go/qlog/qlog_dir.go +61 -0
  244. data/go/vendor/github.com/quic-go/quic-go/qlog/types.go +305 -0
  245. data/go/vendor/github.com/quic-go/quic-go/qlogwriter/jsontext/encoder.go +324 -0
  246. data/go/vendor/github.com/quic-go/quic-go/qlogwriter/trace.go +124 -0
  247. data/go/vendor/github.com/quic-go/quic-go/qlogwriter/writer.go +229 -0
  248. data/go/vendor/github.com/quic-go/quic-go/quicvarint/io.go +98 -0
  249. data/go/vendor/github.com/quic-go/quic-go/quicvarint/varint.go +180 -0
  250. data/go/vendor/github.com/quic-go/quic-go/receive_stream.go +578 -0
  251. data/go/vendor/github.com/quic-go/quic-go/retransmission_queue.go +158 -0
  252. data/go/vendor/github.com/quic-go/quic-go/send_conn.go +124 -0
  253. data/go/vendor/github.com/quic-go/quic-go/send_queue.go +112 -0
  254. data/go/vendor/github.com/quic-go/quic-go/send_stream.go +915 -0
  255. data/go/vendor/github.com/quic-go/quic-go/server.go +1119 -0
  256. data/go/vendor/github.com/quic-go/quic-go/sni.go +136 -0
  257. data/go/vendor/github.com/quic-go/quic-go/stateless_reset.go +42 -0
  258. data/go/vendor/github.com/quic-go/quic-go/stream.go +253 -0
  259. data/go/vendor/github.com/quic-go/quic-go/streams_map.go +356 -0
  260. data/go/vendor/github.com/quic-go/quic-go/streams_map_incoming.go +209 -0
  261. data/go/vendor/github.com/quic-go/quic-go/streams_map_outgoing.go +253 -0
  262. data/go/vendor/github.com/quic-go/quic-go/sys_conn.go +143 -0
  263. data/go/vendor/github.com/quic-go/quic-go/sys_conn_buffers.go +68 -0
  264. data/go/vendor/github.com/quic-go/quic-go/sys_conn_buffers_write.go +70 -0
  265. data/go/vendor/github.com/quic-go/quic-go/sys_conn_df.go +22 -0
  266. data/go/vendor/github.com/quic-go/quic-go/sys_conn_df_darwin.go +90 -0
  267. data/go/vendor/github.com/quic-go/quic-go/sys_conn_df_linux.go +42 -0
  268. data/go/vendor/github.com/quic-go/quic-go/sys_conn_df_windows.go +52 -0
  269. data/go/vendor/github.com/quic-go/quic-go/sys_conn_helper_darwin.go +38 -0
  270. data/go/vendor/github.com/quic-go/quic-go/sys_conn_helper_freebsd.go +33 -0
  271. data/go/vendor/github.com/quic-go/quic-go/sys_conn_helper_linux.go +156 -0
  272. data/go/vendor/github.com/quic-go/quic-go/sys_conn_helper_nonlinux.go +10 -0
  273. data/go/vendor/github.com/quic-go/quic-go/sys_conn_no_oob.go +21 -0
  274. data/go/vendor/github.com/quic-go/quic-go/sys_conn_oob.go +338 -0
  275. data/go/vendor/github.com/quic-go/quic-go/sys_conn_windows.go +42 -0
  276. data/go/vendor/github.com/quic-go/quic-go/token_store.go +116 -0
  277. data/go/vendor/github.com/quic-go/quic-go/transport.go +848 -0
  278. data/go/vendor/github.com/quic-go/webtransport-go/LICENSE +7 -0
  279. data/go/vendor/github.com/quic-go/webtransport-go/README.md +31 -0
  280. data/go/vendor/github.com/quic-go/webtransport-go/SECURITY.md +14 -0
  281. data/go/vendor/github.com/quic-go/webtransport-go/capsule.go +261 -0
  282. data/go/vendor/github.com/quic-go/webtransport-go/client_conn.go +289 -0
  283. data/go/vendor/github.com/quic-go/webtransport-go/codecov.yml +12 -0
  284. data/go/vendor/github.com/quic-go/webtransport-go/config.go +90 -0
  285. data/go/vendor/github.com/quic-go/webtransport-go/errors.go +96 -0
  286. data/go/vendor/github.com/quic-go/webtransport-go/flow_control.go +107 -0
  287. data/go/vendor/github.com/quic-go/webtransport-go/protocol.go +59 -0
  288. data/go/vendor/github.com/quic-go/webtransport-go/receive_stream.go +185 -0
  289. data/go/vendor/github.com/quic-go/webtransport-go/send_stream.go +322 -0
  290. data/go/vendor/github.com/quic-go/webtransport-go/server.go +533 -0
  291. data/go/vendor/github.com/quic-go/webtransport-go/session.go +463 -0
  292. data/go/vendor/github.com/quic-go/webtransport-go/session_manager.go +190 -0
  293. data/go/vendor/github.com/quic-go/webtransport-go/stream.go +147 -0
  294. data/go/vendor/github.com/quic-go/webtransport-go/streams_map_incoming.go +179 -0
  295. data/go/vendor/github.com/quic-go/webtransport-go/streams_map_outgoing.go +357 -0
  296. data/go/vendor/github.com/quic-go/webtransport-go/transport.go +126 -0
  297. data/go/vendor/golang.org/x/crypto/LICENSE +27 -0
  298. data/go/vendor/golang.org/x/crypto/PATENTS +22 -0
  299. data/go/vendor/golang.org/x/crypto/chacha20/chacha_arm64.go +16 -0
  300. data/go/vendor/golang.org/x/crypto/chacha20/chacha_arm64.s +307 -0
  301. data/go/vendor/golang.org/x/crypto/chacha20/chacha_generic.go +398 -0
  302. data/go/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go +13 -0
  303. data/go/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.go +16 -0
  304. data/go/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.s +501 -0
  305. data/go/vendor/golang.org/x/crypto/chacha20/chacha_s390x.go +27 -0
  306. data/go/vendor/golang.org/x/crypto/chacha20/chacha_s390x.s +224 -0
  307. data/go/vendor/golang.org/x/crypto/chacha20/xor.go +42 -0
  308. data/go/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go +101 -0
  309. data/go/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.go +92 -0
  310. data/go/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s +5230 -0
  311. data/go/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_generic.go +87 -0
  312. data/go/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_noasm.go +15 -0
  313. data/go/vendor/golang.org/x/crypto/chacha20poly1305/fips140only_compat.go +9 -0
  314. data/go/vendor/golang.org/x/crypto/chacha20poly1305/fips140only_go1.26.go +11 -0
  315. data/go/vendor/golang.org/x/crypto/chacha20poly1305/xchacha20poly1305.go +89 -0
  316. data/go/vendor/golang.org/x/crypto/internal/alias/alias.go +31 -0
  317. data/go/vendor/golang.org/x/crypto/internal/alias/alias_purego.go +34 -0
  318. data/go/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go +9 -0
  319. data/go/vendor/golang.org/x/crypto/internal/poly1305/poly1305.go +99 -0
  320. data/go/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.s +93 -0
  321. data/go/vendor/golang.org/x/crypto/internal/poly1305/sum_asm.go +47 -0
  322. data/go/vendor/golang.org/x/crypto/internal/poly1305/sum_generic.go +312 -0
  323. data/go/vendor/golang.org/x/crypto/internal/poly1305/sum_loong64.s +123 -0
  324. data/go/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.s +187 -0
  325. data/go/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.go +76 -0
  326. data/go/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.s +503 -0
  327. data/go/vendor/golang.org/x/net/LICENSE +27 -0
  328. data/go/vendor/golang.org/x/net/PATENTS +22 -0
  329. data/go/vendor/golang.org/x/net/bpf/asm.go +41 -0
  330. data/go/vendor/golang.org/x/net/bpf/constants.go +222 -0
  331. data/go/vendor/golang.org/x/net/bpf/doc.go +87 -0
  332. data/go/vendor/golang.org/x/net/bpf/instructions.go +726 -0
  333. data/go/vendor/golang.org/x/net/bpf/setter.go +10 -0
  334. data/go/vendor/golang.org/x/net/bpf/vm.go +150 -0
  335. data/go/vendor/golang.org/x/net/bpf/vm_instructions.go +182 -0
  336. data/go/vendor/golang.org/x/net/http/httpguts/guts.go +50 -0
  337. data/go/vendor/golang.org/x/net/http/httpguts/httplex.go +347 -0
  338. data/go/vendor/golang.org/x/net/http2/README.md +19 -0
  339. data/go/vendor/golang.org/x/net/http2/ascii.go +53 -0
  340. data/go/vendor/golang.org/x/net/http2/ciphers.go +641 -0
  341. data/go/vendor/golang.org/x/net/http2/client_conn_pool.go +301 -0
  342. data/go/vendor/golang.org/x/net/http2/client_priority_go126.go +20 -0
  343. data/go/vendor/golang.org/x/net/http2/client_priority_go127.go +13 -0
  344. data/go/vendor/golang.org/x/net/http2/clientconn.go +57 -0
  345. data/go/vendor/golang.org/x/net/http2/config.go +171 -0
  346. data/go/vendor/golang.org/x/net/http2/config_go125.go +15 -0
  347. data/go/vendor/golang.org/x/net/http2/config_go126.go +15 -0
  348. data/go/vendor/golang.org/x/net/http2/databuffer.go +149 -0
  349. data/go/vendor/golang.org/x/net/http2/errors.go +145 -0
  350. data/go/vendor/golang.org/x/net/http2/flow.go +120 -0
  351. data/go/vendor/golang.org/x/net/http2/frame.go +1871 -0
  352. data/go/vendor/golang.org/x/net/http2/gotrack.go +181 -0
  353. data/go/vendor/golang.org/x/net/http2/h2c/h2c.go +256 -0
  354. data/go/vendor/golang.org/x/net/http2/hpack/encode.go +245 -0
  355. data/go/vendor/golang.org/x/net/http2/hpack/hpack.go +523 -0
  356. data/go/vendor/golang.org/x/net/http2/hpack/huffman.go +226 -0
  357. data/go/vendor/golang.org/x/net/http2/hpack/static_table.go +188 -0
  358. data/go/vendor/golang.org/x/net/http2/hpack/tables.go +403 -0
  359. data/go/vendor/golang.org/x/net/http2/http2.go +415 -0
  360. data/go/vendor/golang.org/x/net/http2/pipe.go +184 -0
  361. data/go/vendor/golang.org/x/net/http2/server.go +3217 -0
  362. data/go/vendor/golang.org/x/net/http2/server_common.go +221 -0
  363. data/go/vendor/golang.org/x/net/http2/server_wrap.go +217 -0
  364. data/go/vendor/golang.org/x/net/http2/transport.go +3036 -0
  365. data/go/vendor/golang.org/x/net/http2/transport_common.go +447 -0
  366. data/go/vendor/golang.org/x/net/http2/transport_wrap.go +394 -0
  367. data/go/vendor/golang.org/x/net/http2/unencrypted.go +32 -0
  368. data/go/vendor/golang.org/x/net/http2/write.go +381 -0
  369. data/go/vendor/golang.org/x/net/http2/writesched.go +252 -0
  370. data/go/vendor/golang.org/x/net/http2/writesched_common.go +90 -0
  371. data/go/vendor/golang.org/x/net/http2/writesched_priority_rfc7540.go +420 -0
  372. data/go/vendor/golang.org/x/net/http2/writesched_priority_rfc9218.go +226 -0
  373. data/go/vendor/golang.org/x/net/http2/writesched_random.go +81 -0
  374. data/go/vendor/golang.org/x/net/http2/writesched_roundrobin.go +121 -0
  375. data/go/vendor/golang.org/x/net/idna/idna.go +884 -0
  376. data/go/vendor/golang.org/x/net/idna/punycode.go +220 -0
  377. data/go/vendor/golang.org/x/net/idna/tables15.0.0.go +5144 -0
  378. data/go/vendor/golang.org/x/net/idna/tables17.0.0.go +5302 -0
  379. data/go/vendor/golang.org/x/net/idna/trie.go +51 -0
  380. data/go/vendor/golang.org/x/net/idna/trieval.go +119 -0
  381. data/go/vendor/golang.org/x/net/internal/httpcommon/ascii.go +53 -0
  382. data/go/vendor/golang.org/x/net/internal/httpcommon/headermap.go +115 -0
  383. data/go/vendor/golang.org/x/net/internal/httpcommon/request.go +475 -0
  384. data/go/vendor/golang.org/x/net/internal/httpsfv/httpsfv.go +665 -0
  385. data/go/vendor/golang.org/x/net/internal/iana/const.go +223 -0
  386. data/go/vendor/golang.org/x/net/internal/socket/cmsghdr.go +11 -0
  387. data/go/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go +13 -0
  388. data/go/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go +13 -0
  389. data/go/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go +13 -0
  390. data/go/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go +13 -0
  391. data/go/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go +27 -0
  392. data/go/vendor/golang.org/x/net/internal/socket/cmsghdr_unix.go +21 -0
  393. data/go/vendor/golang.org/x/net/internal/socket/cmsghdr_zos_s390x.go +11 -0
  394. data/go/vendor/golang.org/x/net/internal/socket/complete_dontwait.go +25 -0
  395. data/go/vendor/golang.org/x/net/internal/socket/complete_nodontwait.go +21 -0
  396. data/go/vendor/golang.org/x/net/internal/socket/empty.s +7 -0
  397. data/go/vendor/golang.org/x/net/internal/socket/error_unix.go +31 -0
  398. data/go/vendor/golang.org/x/net/internal/socket/error_windows.go +26 -0
  399. data/go/vendor/golang.org/x/net/internal/socket/iovec_32bit.go +18 -0
  400. data/go/vendor/golang.org/x/net/internal/socket/iovec_64bit.go +18 -0
  401. data/go/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go +18 -0
  402. data/go/vendor/golang.org/x/net/internal/socket/iovec_stub.go +11 -0
  403. data/go/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go +21 -0
  404. data/go/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go +195 -0
  405. data/go/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go +39 -0
  406. data/go/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go +16 -0
  407. data/go/vendor/golang.org/x/net/internal/socket/msghdr_linux.go +36 -0
  408. data/go/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go +23 -0
  409. data/go/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go +23 -0
  410. data/go/vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go +14 -0
  411. data/go/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go +38 -0
  412. data/go/vendor/golang.org/x/net/internal/socket/msghdr_stub.go +14 -0
  413. data/go/vendor/golang.org/x/net/internal/socket/msghdr_zos_s390x.go +35 -0
  414. data/go/vendor/golang.org/x/net/internal/socket/norace.go +12 -0
  415. data/go/vendor/golang.org/x/net/internal/socket/race.go +37 -0
  416. data/go/vendor/golang.org/x/net/internal/socket/rawconn.go +91 -0
  417. data/go/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go +53 -0
  418. data/go/vendor/golang.org/x/net/internal/socket/rawconn_msg.go +59 -0
  419. data/go/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go +15 -0
  420. data/go/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go +15 -0
  421. data/go/vendor/golang.org/x/net/internal/socket/socket.go +281 -0
  422. data/go/vendor/golang.org/x/net/internal/socket/sys_bsd.go +15 -0
  423. data/go/vendor/golang.org/x/net/internal/socket/sys_const_unix.go +20 -0
  424. data/go/vendor/golang.org/x/net/internal/socket/sys_linux.go +22 -0
  425. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_386.go +28 -0
  426. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_386.s +11 -0
  427. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go +10 -0
  428. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_arm.go +10 -0
  429. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go +10 -0
  430. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_loong64.go +12 -0
  431. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_mips.go +10 -0
  432. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go +10 -0
  433. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go +10 -0
  434. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go +10 -0
  435. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_ppc.go +10 -0
  436. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go +10 -0
  437. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go +10 -0
  438. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_riscv64.go +12 -0
  439. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go +28 -0
  440. data/go/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s +11 -0
  441. data/go/vendor/golang.org/x/net/internal/socket/sys_netbsd.go +25 -0
  442. data/go/vendor/golang.org/x/net/internal/socket/sys_posix.go +184 -0
  443. data/go/vendor/golang.org/x/net/internal/socket/sys_stub.go +52 -0
  444. data/go/vendor/golang.org/x/net/internal/socket/sys_unix.go +121 -0
  445. data/go/vendor/golang.org/x/net/internal/socket/sys_windows.go +55 -0
  446. data/go/vendor/golang.org/x/net/internal/socket/sys_zos_s390x.go +66 -0
  447. data/go/vendor/golang.org/x/net/internal/socket/sys_zos_s390x.s +11 -0
  448. data/go/vendor/golang.org/x/net/internal/socket/zsys_aix_ppc64.go +39 -0
  449. data/go/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go +32 -0
  450. data/go/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm64.go +32 -0
  451. data/go/vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go +32 -0
  452. data/go/vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go +30 -0
  453. data/go/vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go +32 -0
  454. data/go/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go +30 -0
  455. data/go/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm64.go +32 -0
  456. data/go/vendor/golang.org/x/net/internal/socket/zsys_freebsd_riscv64.go +30 -0
  457. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go +35 -0
  458. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go +38 -0
  459. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go +35 -0
  460. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go +38 -0
  461. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_loong64.go +39 -0
  462. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go +35 -0
  463. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go +38 -0
  464. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go +38 -0
  465. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go +35 -0
  466. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc.go +35 -0
  467. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go +38 -0
  468. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go +38 -0
  469. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_riscv64.go +39 -0
  470. data/go/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go +38 -0
  471. data/go/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go +35 -0
  472. data/go/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go +38 -0
  473. data/go/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go +35 -0
  474. data/go/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm64.go +38 -0
  475. data/go/vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go +30 -0
  476. data/go/vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go +32 -0
  477. data/go/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go +30 -0
  478. data/go/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm64.go +32 -0
  479. data/go/vendor/golang.org/x/net/internal/socket/zsys_openbsd_mips64.go +30 -0
  480. data/go/vendor/golang.org/x/net/internal/socket/zsys_openbsd_ppc64.go +30 -0
  481. data/go/vendor/golang.org/x/net/internal/socket/zsys_openbsd_riscv64.go +30 -0
  482. data/go/vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go +32 -0
  483. data/go/vendor/golang.org/x/net/internal/socket/zsys_zos_s390x.go +28 -0
  484. data/go/vendor/golang.org/x/net/ipv4/batch.go +194 -0
  485. data/go/vendor/golang.org/x/net/ipv4/control.go +144 -0
  486. data/go/vendor/golang.org/x/net/ipv4/control_bsd.go +43 -0
  487. data/go/vendor/golang.org/x/net/ipv4/control_pktinfo.go +41 -0
  488. data/go/vendor/golang.org/x/net/ipv4/control_stub.go +13 -0
  489. data/go/vendor/golang.org/x/net/ipv4/control_unix.go +75 -0
  490. data/go/vendor/golang.org/x/net/ipv4/control_windows.go +12 -0
  491. data/go/vendor/golang.org/x/net/ipv4/control_zos.go +88 -0
  492. data/go/vendor/golang.org/x/net/ipv4/dgramopt.go +264 -0
  493. data/go/vendor/golang.org/x/net/ipv4/doc.go +240 -0
  494. data/go/vendor/golang.org/x/net/ipv4/endpoint.go +186 -0
  495. data/go/vendor/golang.org/x/net/ipv4/genericopt.go +55 -0
  496. data/go/vendor/golang.org/x/net/ipv4/header.go +170 -0
  497. data/go/vendor/golang.org/x/net/ipv4/helper.go +77 -0
  498. data/go/vendor/golang.org/x/net/ipv4/iana.go +38 -0
  499. data/go/vendor/golang.org/x/net/ipv4/icmp.go +57 -0
  500. data/go/vendor/golang.org/x/net/ipv4/icmp_linux.go +25 -0
  501. data/go/vendor/golang.org/x/net/ipv4/icmp_stub.go +25 -0
  502. data/go/vendor/golang.org/x/net/ipv4/packet.go +117 -0
  503. data/go/vendor/golang.org/x/net/ipv4/payload.go +23 -0
  504. data/go/vendor/golang.org/x/net/ipv4/payload_cmsg.go +84 -0
  505. data/go/vendor/golang.org/x/net/ipv4/payload_nocmsg.go +39 -0
  506. data/go/vendor/golang.org/x/net/ipv4/sockopt.go +44 -0
  507. data/go/vendor/golang.org/x/net/ipv4/sockopt_posix.go +71 -0
  508. data/go/vendor/golang.org/x/net/ipv4/sockopt_stub.go +42 -0
  509. data/go/vendor/golang.org/x/net/ipv4/sys_aix.go +43 -0
  510. data/go/vendor/golang.org/x/net/ipv4/sys_asmreq.go +122 -0
  511. data/go/vendor/golang.org/x/net/ipv4/sys_asmreq_stub.go +25 -0
  512. data/go/vendor/golang.org/x/net/ipv4/sys_asmreqn.go +44 -0
  513. data/go/vendor/golang.org/x/net/ipv4/sys_asmreqn_stub.go +21 -0
  514. data/go/vendor/golang.org/x/net/ipv4/sys_bpf.go +24 -0
  515. data/go/vendor/golang.org/x/net/ipv4/sys_bpf_stub.go +16 -0
  516. data/go/vendor/golang.org/x/net/ipv4/sys_bsd.go +41 -0
  517. data/go/vendor/golang.org/x/net/ipv4/sys_darwin.go +69 -0
  518. data/go/vendor/golang.org/x/net/ipv4/sys_dragonfly.go +39 -0
  519. data/go/vendor/golang.org/x/net/ipv4/sys_freebsd.go +80 -0
  520. data/go/vendor/golang.org/x/net/ipv4/sys_linux.go +61 -0
  521. data/go/vendor/golang.org/x/net/ipv4/sys_solaris.go +61 -0
  522. data/go/vendor/golang.org/x/net/ipv4/sys_ssmreq.go +52 -0
  523. data/go/vendor/golang.org/x/net/ipv4/sys_ssmreq_stub.go +21 -0
  524. data/go/vendor/golang.org/x/net/ipv4/sys_stub.go +13 -0
  525. data/go/vendor/golang.org/x/net/ipv4/sys_windows.go +44 -0
  526. data/go/vendor/golang.org/x/net/ipv4/sys_zos.go +57 -0
  527. data/go/vendor/golang.org/x/net/ipv4/zsys_aix_ppc64.go +16 -0
  528. data/go/vendor/golang.org/x/net/ipv4/zsys_darwin.go +59 -0
  529. data/go/vendor/golang.org/x/net/ipv4/zsys_dragonfly.go +13 -0
  530. data/go/vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go +52 -0
  531. data/go/vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go +54 -0
  532. data/go/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go +54 -0
  533. data/go/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm64.go +52 -0
  534. data/go/vendor/golang.org/x/net/ipv4/zsys_freebsd_riscv64.go +52 -0
  535. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_386.go +72 -0
  536. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go +74 -0
  537. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go +72 -0
  538. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go +74 -0
  539. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_loong64.go +76 -0
  540. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go +72 -0
  541. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go +74 -0
  542. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go +74 -0
  543. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go +72 -0
  544. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go +72 -0
  545. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go +74 -0
  546. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go +74 -0
  547. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_riscv64.go +76 -0
  548. data/go/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go +74 -0
  549. data/go/vendor/golang.org/x/net/ipv4/zsys_netbsd.go +13 -0
  550. data/go/vendor/golang.org/x/net/ipv4/zsys_openbsd.go +13 -0
  551. data/go/vendor/golang.org/x/net/ipv4/zsys_solaris.go +57 -0
  552. data/go/vendor/golang.org/x/net/ipv4/zsys_zos_s390x.go +56 -0
  553. data/go/vendor/golang.org/x/net/ipv6/batch.go +116 -0
  554. data/go/vendor/golang.org/x/net/ipv6/control.go +187 -0
  555. data/go/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go +51 -0
  556. data/go/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go +97 -0
  557. data/go/vendor/golang.org/x/net/ipv6/control_stub.go +13 -0
  558. data/go/vendor/golang.org/x/net/ipv6/control_unix.go +55 -0
  559. data/go/vendor/golang.org/x/net/ipv6/control_windows.go +12 -0
  560. data/go/vendor/golang.org/x/net/ipv6/dgramopt.go +301 -0
  561. data/go/vendor/golang.org/x/net/ipv6/doc.go +239 -0
  562. data/go/vendor/golang.org/x/net/ipv6/endpoint.go +127 -0
  563. data/go/vendor/golang.org/x/net/ipv6/genericopt.go +56 -0
  564. data/go/vendor/golang.org/x/net/ipv6/header.go +55 -0
  565. data/go/vendor/golang.org/x/net/ipv6/helper.go +58 -0
  566. data/go/vendor/golang.org/x/net/ipv6/iana.go +86 -0
  567. data/go/vendor/golang.org/x/net/ipv6/icmp.go +60 -0
  568. data/go/vendor/golang.org/x/net/ipv6/icmp_bsd.go +29 -0
  569. data/go/vendor/golang.org/x/net/ipv6/icmp_linux.go +27 -0
  570. data/go/vendor/golang.org/x/net/ipv6/icmp_solaris.go +27 -0
  571. data/go/vendor/golang.org/x/net/ipv6/icmp_stub.go +23 -0
  572. data/go/vendor/golang.org/x/net/ipv6/icmp_windows.go +22 -0
  573. data/go/vendor/golang.org/x/net/ipv6/icmp_zos.go +29 -0
  574. data/go/vendor/golang.org/x/net/ipv6/payload.go +23 -0
  575. data/go/vendor/golang.org/x/net/ipv6/payload_cmsg.go +70 -0
  576. data/go/vendor/golang.org/x/net/ipv6/payload_nocmsg.go +38 -0
  577. data/go/vendor/golang.org/x/net/ipv6/sockopt.go +43 -0
  578. data/go/vendor/golang.org/x/net/ipv6/sockopt_posix.go +89 -0
  579. data/go/vendor/golang.org/x/net/ipv6/sockopt_stub.go +46 -0
  580. data/go/vendor/golang.org/x/net/ipv6/sys_aix.go +79 -0
  581. data/go/vendor/golang.org/x/net/ipv6/sys_asmreq.go +24 -0
  582. data/go/vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go +17 -0
  583. data/go/vendor/golang.org/x/net/ipv6/sys_bpf.go +24 -0
  584. data/go/vendor/golang.org/x/net/ipv6/sys_bpf_stub.go +16 -0
  585. data/go/vendor/golang.org/x/net/ipv6/sys_bsd.go +59 -0
  586. data/go/vendor/golang.org/x/net/ipv6/sys_darwin.go +80 -0
  587. data/go/vendor/golang.org/x/net/ipv6/sys_freebsd.go +94 -0
  588. data/go/vendor/golang.org/x/net/ipv6/sys_linux.go +76 -0
  589. data/go/vendor/golang.org/x/net/ipv6/sys_solaris.go +76 -0
  590. data/go/vendor/golang.org/x/net/ipv6/sys_ssmreq.go +54 -0
  591. data/go/vendor/golang.org/x/net/ipv6/sys_ssmreq_stub.go +21 -0
  592. data/go/vendor/golang.org/x/net/ipv6/sys_stub.go +13 -0
  593. data/go/vendor/golang.org/x/net/ipv6/sys_windows.go +68 -0
  594. data/go/vendor/golang.org/x/net/ipv6/sys_zos.go +72 -0
  595. data/go/vendor/golang.org/x/net/ipv6/zsys_aix_ppc64.go +68 -0
  596. data/go/vendor/golang.org/x/net/ipv6/zsys_darwin.go +64 -0
  597. data/go/vendor/golang.org/x/net/ipv6/zsys_dragonfly.go +42 -0
  598. data/go/vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go +64 -0
  599. data/go/vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go +66 -0
  600. data/go/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go +66 -0
  601. data/go/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm64.go +64 -0
  602. data/go/vendor/golang.org/x/net/ipv6/zsys_freebsd_riscv64.go +64 -0
  603. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_386.go +72 -0
  604. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go +74 -0
  605. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go +72 -0
  606. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go +74 -0
  607. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_loong64.go +76 -0
  608. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go +72 -0
  609. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go +74 -0
  610. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go +74 -0
  611. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go +72 -0
  612. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go +72 -0
  613. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go +74 -0
  614. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go +74 -0
  615. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_riscv64.go +76 -0
  616. data/go/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go +74 -0
  617. data/go/vendor/golang.org/x/net/ipv6/zsys_netbsd.go +42 -0
  618. data/go/vendor/golang.org/x/net/ipv6/zsys_openbsd.go +42 -0
  619. data/go/vendor/golang.org/x/net/ipv6/zsys_solaris.go +63 -0
  620. data/go/vendor/golang.org/x/net/ipv6/zsys_zos_s390x.go +62 -0
  621. data/go/vendor/golang.org/x/sys/LICENSE +27 -0
  622. data/go/vendor/golang.org/x/sys/PATENTS +22 -0
  623. data/go/vendor/golang.org/x/sys/cpu/asm_aix_ppc64.s +17 -0
  624. data/go/vendor/golang.org/x/sys/cpu/asm_darwin_arm64_gc.s +12 -0
  625. data/go/vendor/golang.org/x/sys/cpu/asm_darwin_x86_gc.s +17 -0
  626. data/go/vendor/golang.org/x/sys/cpu/byteorder.go +66 -0
  627. data/go/vendor/golang.org/x/sys/cpu/cpu.go +343 -0
  628. data/go/vendor/golang.org/x/sys/cpu/cpu_aix.go +33 -0
  629. data/go/vendor/golang.org/x/sys/cpu/cpu_arm.go +73 -0
  630. data/go/vendor/golang.org/x/sys/cpu/cpu_arm64.go +191 -0
  631. data/go/vendor/golang.org/x/sys/cpu/cpu_arm64.s +35 -0
  632. data/go/vendor/golang.org/x/sys/cpu/cpu_darwin_arm64.go +67 -0
  633. data/go/vendor/golang.org/x/sys/cpu/cpu_darwin_arm64_other.go +31 -0
  634. data/go/vendor/golang.org/x/sys/cpu/cpu_darwin_x86.go +61 -0
  635. data/go/vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go +12 -0
  636. data/go/vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go +21 -0
  637. data/go/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go +15 -0
  638. data/go/vendor/golang.org/x/sys/cpu/cpu_gc_x86.s +26 -0
  639. data/go/vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go +12 -0
  640. data/go/vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go +22 -0
  641. data/go/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c +37 -0
  642. data/go/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go +25 -0
  643. data/go/vendor/golang.org/x/sys/cpu/cpu_linux.go +15 -0
  644. data/go/vendor/golang.org/x/sys/cpu/cpu_linux_arm.go +39 -0
  645. data/go/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go +120 -0
  646. data/go/vendor/golang.org/x/sys/cpu/cpu_linux_loong64.go +22 -0
  647. data/go/vendor/golang.org/x/sys/cpu/cpu_linux_mips64x.go +22 -0
  648. data/go/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go +9 -0
  649. data/go/vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go +30 -0
  650. data/go/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go +162 -0
  651. data/go/vendor/golang.org/x/sys/cpu/cpu_linux_s390x.go +40 -0
  652. data/go/vendor/golang.org/x/sys/cpu/cpu_loong64.go +62 -0
  653. data/go/vendor/golang.org/x/sys/cpu/cpu_loong64.s +13 -0
  654. data/go/vendor/golang.org/x/sys/cpu/cpu_mips64x.go +15 -0
  655. data/go/vendor/golang.org/x/sys/cpu/cpu_mipsx.go +11 -0
  656. data/go/vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go +173 -0
  657. data/go/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go +65 -0
  658. data/go/vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.s +11 -0
  659. data/go/vendor/golang.org/x/sys/cpu/cpu_other_arm.go +9 -0
  660. data/go/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go +11 -0
  661. data/go/vendor/golang.org/x/sys/cpu/cpu_other_mips64x.go +11 -0
  662. data/go/vendor/golang.org/x/sys/cpu/cpu_other_ppc64x.go +12 -0
  663. data/go/vendor/golang.org/x/sys/cpu/cpu_other_riscv64.go +11 -0
  664. data/go/vendor/golang.org/x/sys/cpu/cpu_other_x86.go +11 -0
  665. data/go/vendor/golang.org/x/sys/cpu/cpu_ppc64x.go +16 -0
  666. data/go/vendor/golang.org/x/sys/cpu/cpu_riscv64.go +33 -0
  667. data/go/vendor/golang.org/x/sys/cpu/cpu_s390x.go +172 -0
  668. data/go/vendor/golang.org/x/sys/cpu/cpu_s390x.s +57 -0
  669. data/go/vendor/golang.org/x/sys/cpu/cpu_wasm.go +17 -0
  670. data/go/vendor/golang.org/x/sys/cpu/cpu_windows.go +26 -0
  671. data/go/vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go +38 -0
  672. data/go/vendor/golang.org/x/sys/cpu/cpu_x86.go +236 -0
  673. data/go/vendor/golang.org/x/sys/cpu/cpu_zos.go +10 -0
  674. data/go/vendor/golang.org/x/sys/cpu/cpu_zos_s390x.go +25 -0
  675. data/go/vendor/golang.org/x/sys/cpu/endian_big.go +10 -0
  676. data/go/vendor/golang.org/x/sys/cpu/endian_little.go +10 -0
  677. data/go/vendor/golang.org/x/sys/cpu/hwcap_linux.go +71 -0
  678. data/go/vendor/golang.org/x/sys/cpu/parse.go +55 -0
  679. data/go/vendor/golang.org/x/sys/cpu/proc_cpuinfo_linux.go +53 -0
  680. data/go/vendor/golang.org/x/sys/cpu/runtime_auxv.go +16 -0
  681. data/go/vendor/golang.org/x/sys/cpu/runtime_auxv_go121.go +18 -0
  682. data/go/vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go +26 -0
  683. data/go/vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go +35 -0
  684. data/go/vendor/golang.org/x/sys/cpu/syscall_darwin_arm64_gc.go +54 -0
  685. data/go/vendor/golang.org/x/sys/cpu/syscall_darwin_x86_gc.go +98 -0
  686. data/go/vendor/golang.org/x/sys/cpu/zcpu_windows.go +48 -0
  687. data/go/vendor/golang.org/x/sys/unix/README.md +184 -0
  688. data/go/vendor/golang.org/x/sys/unix/affinity_linux.go +189 -0
  689. data/go/vendor/golang.org/x/sys/unix/aliases.go +13 -0
  690. data/go/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s +17 -0
  691. data/go/vendor/golang.org/x/sys/unix/asm_bsd_386.s +27 -0
  692. data/go/vendor/golang.org/x/sys/unix/asm_bsd_amd64.s +27 -0
  693. data/go/vendor/golang.org/x/sys/unix/asm_bsd_arm.s +27 -0
  694. data/go/vendor/golang.org/x/sys/unix/asm_bsd_arm64.s +27 -0
  695. data/go/vendor/golang.org/x/sys/unix/asm_bsd_ppc64.s +29 -0
  696. data/go/vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s +27 -0
  697. data/go/vendor/golang.org/x/sys/unix/asm_linux_386.s +65 -0
  698. data/go/vendor/golang.org/x/sys/unix/asm_linux_amd64.s +57 -0
  699. data/go/vendor/golang.org/x/sys/unix/asm_linux_arm.s +56 -0
  700. data/go/vendor/golang.org/x/sys/unix/asm_linux_arm64.s +50 -0
  701. data/go/vendor/golang.org/x/sys/unix/asm_linux_loong64.s +51 -0
  702. data/go/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s +54 -0
  703. data/go/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s +52 -0
  704. data/go/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s +42 -0
  705. data/go/vendor/golang.org/x/sys/unix/asm_linux_riscv64.s +47 -0
  706. data/go/vendor/golang.org/x/sys/unix/asm_linux_s390x.s +54 -0
  707. data/go/vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s +29 -0
  708. data/go/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s +17 -0
  709. data/go/vendor/golang.org/x/sys/unix/asm_zos_s390x.s +382 -0
  710. data/go/vendor/golang.org/x/sys/unix/auxv.go +36 -0
  711. data/go/vendor/golang.org/x/sys/unix/auxv_unsupported.go +13 -0
  712. data/go/vendor/golang.org/x/sys/unix/bluetooth_linux.go +36 -0
  713. data/go/vendor/golang.org/x/sys/unix/bpxsvc_zos.go +657 -0
  714. data/go/vendor/golang.org/x/sys/unix/bpxsvc_zos.s +192 -0
  715. data/go/vendor/golang.org/x/sys/unix/cap_freebsd.go +195 -0
  716. data/go/vendor/golang.org/x/sys/unix/constants.go +13 -0
  717. data/go/vendor/golang.org/x/sys/unix/dev_aix_ppc.go +26 -0
  718. data/go/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go +28 -0
  719. data/go/vendor/golang.org/x/sys/unix/dev_darwin.go +24 -0
  720. data/go/vendor/golang.org/x/sys/unix/dev_dragonfly.go +30 -0
  721. data/go/vendor/golang.org/x/sys/unix/dev_freebsd.go +30 -0
  722. data/go/vendor/golang.org/x/sys/unix/dev_linux.go +42 -0
  723. data/go/vendor/golang.org/x/sys/unix/dev_netbsd.go +29 -0
  724. data/go/vendor/golang.org/x/sys/unix/dev_openbsd.go +29 -0
  725. data/go/vendor/golang.org/x/sys/unix/dev_zos.go +28 -0
  726. data/go/vendor/golang.org/x/sys/unix/dirent.go +102 -0
  727. data/go/vendor/golang.org/x/sys/unix/endian_big.go +9 -0
  728. data/go/vendor/golang.org/x/sys/unix/endian_little.go +9 -0
  729. data/go/vendor/golang.org/x/sys/unix/env_unix.go +31 -0
  730. data/go/vendor/golang.org/x/sys/unix/fcntl.go +36 -0
  731. data/go/vendor/golang.org/x/sys/unix/fcntl_darwin.go +24 -0
  732. data/go/vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go +13 -0
  733. data/go/vendor/golang.org/x/sys/unix/fdset.go +27 -0
  734. data/go/vendor/golang.org/x/sys/unix/gccgo.go +59 -0
  735. data/go/vendor/golang.org/x/sys/unix/gccgo_c.c +44 -0
  736. data/go/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go +20 -0
  737. data/go/vendor/golang.org/x/sys/unix/ifreq_linux.go +139 -0
  738. data/go/vendor/golang.org/x/sys/unix/ioctl_linux.go +334 -0
  739. data/go/vendor/golang.org/x/sys/unix/ioctl_signed.go +74 -0
  740. data/go/vendor/golang.org/x/sys/unix/ioctl_unsigned.go +74 -0
  741. data/go/vendor/golang.org/x/sys/unix/ioctl_zos.go +71 -0
  742. data/go/vendor/golang.org/x/sys/unix/mkall.sh +250 -0
  743. data/go/vendor/golang.org/x/sys/unix/mkerrors.sh +814 -0
  744. data/go/vendor/golang.org/x/sys/unix/mmap_nomremap.go +13 -0
  745. data/go/vendor/golang.org/x/sys/unix/mremap.go +57 -0
  746. data/go/vendor/golang.org/x/sys/unix/pagesize_unix.go +15 -0
  747. data/go/vendor/golang.org/x/sys/unix/pledge_openbsd.go +111 -0
  748. data/go/vendor/golang.org/x/sys/unix/ptrace_darwin.go +11 -0
  749. data/go/vendor/golang.org/x/sys/unix/ptrace_ios.go +11 -0
  750. data/go/vendor/golang.org/x/sys/unix/race.go +30 -0
  751. data/go/vendor/golang.org/x/sys/unix/race0.go +25 -0
  752. data/go/vendor/golang.org/x/sys/unix/readdirent_getdents.go +12 -0
  753. data/go/vendor/golang.org/x/sys/unix/readdirent_getdirentries.go +19 -0
  754. data/go/vendor/golang.org/x/sys/unix/readv_unix.go +103 -0
  755. data/go/vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go +16 -0
  756. data/go/vendor/golang.org/x/sys/unix/sockcmsg_linux.go +85 -0
  757. data/go/vendor/golang.org/x/sys/unix/sockcmsg_unix.go +106 -0
  758. data/go/vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go +46 -0
  759. data/go/vendor/golang.org/x/sys/unix/sockcmsg_zos.go +58 -0
  760. data/go/vendor/golang.org/x/sys/unix/symaddr_zos_s390x.s +75 -0
  761. data/go/vendor/golang.org/x/sys/unix/syscall.go +86 -0
  762. data/go/vendor/golang.org/x/sys/unix/syscall_aix.go +582 -0
  763. data/go/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go +52 -0
  764. data/go/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go +83 -0
  765. data/go/vendor/golang.org/x/sys/unix/syscall_bsd.go +609 -0
  766. data/go/vendor/golang.org/x/sys/unix/syscall_darwin.go +711 -0
  767. data/go/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go +50 -0
  768. data/go/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go +50 -0
  769. data/go/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go +26 -0
  770. data/go/vendor/golang.org/x/sys/unix/syscall_dragonfly.go +359 -0
  771. data/go/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go +56 -0
  772. data/go/vendor/golang.org/x/sys/unix/syscall_freebsd.go +455 -0
  773. data/go/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go +64 -0
  774. data/go/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go +64 -0
  775. data/go/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go +60 -0
  776. data/go/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go +60 -0
  777. data/go/vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go +60 -0
  778. data/go/vendor/golang.org/x/sys/unix/syscall_hurd.go +30 -0
  779. data/go/vendor/golang.org/x/sys/unix/syscall_hurd_386.go +28 -0
  780. data/go/vendor/golang.org/x/sys/unix/syscall_illumos.go +78 -0
  781. data/go/vendor/golang.org/x/sys/unix/syscall_linux.go +2574 -0
  782. data/go/vendor/golang.org/x/sys/unix/syscall_linux_386.go +313 -0
  783. data/go/vendor/golang.org/x/sys/unix/syscall_linux_alarm.go +12 -0
  784. data/go/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go +144 -0
  785. data/go/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go +12 -0
  786. data/go/vendor/golang.org/x/sys/unix/syscall_linux_arm.go +218 -0
  787. data/go/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go +188 -0
  788. data/go/vendor/golang.org/x/sys/unix/syscall_linux_gc.go +14 -0
  789. data/go/vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go +16 -0
  790. data/go/vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go +13 -0
  791. data/go/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go +30 -0
  792. data/go/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go +20 -0
  793. data/go/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go +220 -0
  794. data/go/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go +187 -0
  795. data/go/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go +173 -0
  796. data/go/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go +203 -0
  797. data/go/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go +114 -0
  798. data/go/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +193 -0
  799. data/go/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go +295 -0
  800. data/go/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go +111 -0
  801. data/go/vendor/golang.org/x/sys/unix/syscall_netbsd.go +388 -0
  802. data/go/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go +37 -0
  803. data/go/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go +37 -0
  804. data/go/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go +37 -0
  805. data/go/vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go +37 -0
  806. data/go/vendor/golang.org/x/sys/unix/syscall_openbsd.go +346 -0
  807. data/go/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go +41 -0
  808. data/go/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go +41 -0
  809. data/go/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go +41 -0
  810. data/go/vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go +41 -0
  811. data/go/vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go +26 -0
  812. data/go/vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go +39 -0
  813. data/go/vendor/golang.org/x/sys/unix/syscall_openbsd_ppc64.go +41 -0
  814. data/go/vendor/golang.org/x/sys/unix/syscall_openbsd_riscv64.go +41 -0
  815. data/go/vendor/golang.org/x/sys/unix/syscall_solaris.go +1183 -0
  816. data/go/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go +27 -0
  817. data/go/vendor/golang.org/x/sys/unix/syscall_unix.go +619 -0
  818. data/go/vendor/golang.org/x/sys/unix/syscall_unix_gc.go +14 -0
  819. data/go/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go +22 -0
  820. data/go/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go +3213 -0
  821. data/go/vendor/golang.org/x/sys/unix/sysvshm_linux.go +20 -0
  822. data/go/vendor/golang.org/x/sys/unix/sysvshm_unix.go +51 -0
  823. data/go/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go +13 -0
  824. data/go/vendor/golang.org/x/sys/unix/timestruct.go +76 -0
  825. data/go/vendor/golang.org/x/sys/unix/unveil_openbsd.go +51 -0
  826. data/go/vendor/golang.org/x/sys/unix/vgetrandom_linux.go +13 -0
  827. data/go/vendor/golang.org/x/sys/unix/vgetrandom_unsupported.go +11 -0
  828. data/go/vendor/golang.org/x/sys/unix/xattr_bsd.go +280 -0
  829. data/go/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go +1384 -0
  830. data/go/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go +1385 -0
  831. data/go/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +1922 -0
  832. data/go/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +1922 -0
  833. data/go/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go +1737 -0
  834. data/go/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go +2042 -0
  835. data/go/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go +2039 -0
  836. data/go/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go +2033 -0
  837. data/go/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go +2033 -0
  838. data/go/vendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go +2147 -0
  839. data/go/vendor/golang.org/x/sys/unix/zerrors_linux.go +4207 -0
  840. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +883 -0
  841. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +883 -0
  842. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +888 -0
  843. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +885 -0
  844. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +875 -0
  845. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +889 -0
  846. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +889 -0
  847. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +889 -0
  848. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +889 -0
  849. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +941 -0
  850. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +945 -0
  851. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +945 -0
  852. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +885 -0
  853. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +944 -0
  854. data/go/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +987 -0
  855. data/go/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go +1779 -0
  856. data/go/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go +1769 -0
  857. data/go/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go +1758 -0
  858. data/go/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go +1769 -0
  859. data/go/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go +1905 -0
  860. data/go/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go +1905 -0
  861. data/go/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go +1905 -0
  862. data/go/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go +1905 -0
  863. data/go/vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go +1905 -0
  864. data/go/vendor/golang.org/x/sys/unix/zerrors_openbsd_ppc64.go +1904 -0
  865. data/go/vendor/golang.org/x/sys/unix/zerrors_openbsd_riscv64.go +1903 -0
  866. data/go/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go +1556 -0
  867. data/go/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go +990 -0
  868. data/go/vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go +40 -0
  869. data/go/vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go +17 -0
  870. data/go/vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go +49 -0
  871. data/go/vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go +49 -0
  872. data/go/vendor/golang.org/x/sys/unix/zptrace_x86_linux.go +79 -0
  873. data/go/vendor/golang.org/x/sys/unix/zsymaddr_zos_s390x.s +364 -0
  874. data/go/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go +1461 -0
  875. data/go/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go +1420 -0
  876. data/go/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go +1188 -0
  877. data/go/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go +1069 -0
  878. data/go/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +2728 -0
  879. data/go/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +799 -0
  880. data/go/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +2728 -0
  881. data/go/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +799 -0
  882. data/go/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go +1666 -0
  883. data/go/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go +1886 -0
  884. data/go/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go +1886 -0
  885. data/go/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go +1886 -0
  886. data/go/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go +1886 -0
  887. data/go/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go +1886 -0
  888. data/go/vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go +101 -0
  889. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux.go +2267 -0
  890. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go +469 -0
  891. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go +636 -0
  892. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go +584 -0
  893. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go +535 -0
  894. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go +469 -0
  895. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go +636 -0
  896. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go +630 -0
  897. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go +619 -0
  898. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go +636 -0
  899. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go +641 -0
  900. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go +687 -0
  901. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go +687 -0
  902. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go +531 -0
  903. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go +478 -0
  904. data/go/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go +631 -0
  905. data/go/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go +1848 -0
  906. data/go/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go +1848 -0
  907. data/go/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go +1848 -0
  908. data/go/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go +1848 -0
  909. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +2407 -0
  910. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s +719 -0
  911. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +2407 -0
  912. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s +719 -0
  913. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +2407 -0
  914. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s +719 -0
  915. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +2407 -0
  916. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s +719 -0
  917. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go +2407 -0
  918. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s +719 -0
  919. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go +2407 -0
  920. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s +862 -0
  921. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go +2407 -0
  922. data/go/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s +719 -0
  923. data/go/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +2217 -0
  924. data/go/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go +3458 -0
  925. data/go/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go +280 -0
  926. data/go/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go +280 -0
  927. data/go/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go +280 -0
  928. data/go/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go +280 -0
  929. data/go/vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go +280 -0
  930. data/go/vendor/golang.org/x/sys/unix/zsysctl_openbsd_ppc64.go +280 -0
  931. data/go/vendor/golang.org/x/sys/unix/zsysctl_openbsd_riscv64.go +281 -0
  932. data/go/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go +439 -0
  933. data/go/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go +437 -0
  934. data/go/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go +316 -0
  935. data/go/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go +393 -0
  936. data/go/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go +393 -0
  937. data/go/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go +393 -0
  938. data/go/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go +393 -0
  939. data/go/vendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go +393 -0
  940. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +470 -0
  941. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +394 -0
  942. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +434 -0
  943. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +337 -0
  944. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +334 -0
  945. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +454 -0
  946. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +384 -0
  947. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +384 -0
  948. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +454 -0
  949. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +461 -0
  950. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +433 -0
  951. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +433 -0
  952. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +338 -0
  953. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +399 -0
  954. data/go/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +413 -0
  955. data/go/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go +274 -0
  956. data/go/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go +274 -0
  957. data/go/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go +274 -0
  958. data/go/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go +274 -0
  959. data/go/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go +219 -0
  960. data/go/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go +219 -0
  961. data/go/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go +219 -0
  962. data/go/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go +218 -0
  963. data/go/vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go +221 -0
  964. data/go/vendor/golang.org/x/sys/unix/zsysnum_openbsd_ppc64.go +217 -0
  965. data/go/vendor/golang.org/x/sys/unix/zsysnum_openbsd_riscv64.go +218 -0
  966. data/go/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go +2852 -0
  967. data/go/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go +353 -0
  968. data/go/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go +357 -0
  969. data/go/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +878 -0
  970. data/go/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +878 -0
  971. data/go/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go +473 -0
  972. data/go/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go +651 -0
  973. data/go/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go +656 -0
  974. data/go/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go +642 -0
  975. data/go/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go +636 -0
  976. data/go/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go +638 -0
  977. data/go/vendor/golang.org/x/sys/unix/ztypes_linux.go +6475 -0
  978. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +717 -0
  979. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +731 -0
  980. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +711 -0
  981. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +710 -0
  982. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +711 -0
  983. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +716 -0
  984. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +713 -0
  985. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +713 -0
  986. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +716 -0
  987. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +724 -0
  988. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +719 -0
  989. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +719 -0
  990. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +798 -0
  991. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +733 -0
  992. data/go/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +714 -0
  993. data/go/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go +585 -0
  994. data/go/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go +593 -0
  995. data/go/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go +590 -0
  996. data/go/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go +593 -0
  997. data/go/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go +568 -0
  998. data/go/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go +568 -0
  999. data/go/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go +575 -0
  1000. data/go/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go +568 -0
  1001. data/go/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go +568 -0
  1002. data/go/vendor/golang.org/x/sys/unix/ztypes_openbsd_ppc64.go +570 -0
  1003. data/go/vendor/golang.org/x/sys/unix/ztypes_openbsd_riscv64.go +570 -0
  1004. data/go/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go +516 -0
  1005. data/go/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go +552 -0
  1006. data/go/vendor/golang.org/x/sys/windows/aliases.go +13 -0
  1007. data/go/vendor/golang.org/x/sys/windows/dll_windows.go +380 -0
  1008. data/go/vendor/golang.org/x/sys/windows/env_windows.go +57 -0
  1009. data/go/vendor/golang.org/x/sys/windows/eventlog.go +20 -0
  1010. data/go/vendor/golang.org/x/sys/windows/exec_windows.go +248 -0
  1011. data/go/vendor/golang.org/x/sys/windows/memory_windows.go +48 -0
  1012. data/go/vendor/golang.org/x/sys/windows/mkerrors.bash +70 -0
  1013. data/go/vendor/golang.org/x/sys/windows/mkknownfolderids.bash +27 -0
  1014. data/go/vendor/golang.org/x/sys/windows/mksyscall.go +9 -0
  1015. data/go/vendor/golang.org/x/sys/windows/race.go +30 -0
  1016. data/go/vendor/golang.org/x/sys/windows/race0.go +25 -0
  1017. data/go/vendor/golang.org/x/sys/windows/security_windows.go +1537 -0
  1018. data/go/vendor/golang.org/x/sys/windows/service.go +257 -0
  1019. data/go/vendor/golang.org/x/sys/windows/setupapi_windows.go +1425 -0
  1020. data/go/vendor/golang.org/x/sys/windows/str.go +22 -0
  1021. data/go/vendor/golang.org/x/sys/windows/syscall.go +104 -0
  1022. data/go/vendor/golang.org/x/sys/windows/syscall_windows.go +1952 -0
  1023. data/go/vendor/golang.org/x/sys/windows/types_windows.go +4057 -0
  1024. data/go/vendor/golang.org/x/sys/windows/types_windows_386.go +35 -0
  1025. data/go/vendor/golang.org/x/sys/windows/types_windows_amd64.go +34 -0
  1026. data/go/vendor/golang.org/x/sys/windows/types_windows_arm.go +35 -0
  1027. data/go/vendor/golang.org/x/sys/windows/types_windows_arm64.go +34 -0
  1028. data/go/vendor/golang.org/x/sys/windows/zerrors_windows.go +9468 -0
  1029. data/go/vendor/golang.org/x/sys/windows/zknownfolderids_windows.go +149 -0
  1030. data/go/vendor/golang.org/x/sys/windows/zsyscall_windows.go +4828 -0
  1031. data/go/vendor/golang.org/x/text/LICENSE +27 -0
  1032. data/go/vendor/golang.org/x/text/PATENTS +22 -0
  1033. data/go/vendor/golang.org/x/text/secure/bidirule/bidirule.go +340 -0
  1034. data/go/vendor/golang.org/x/text/transform/transform.go +709 -0
  1035. data/go/vendor/golang.org/x/text/unicode/bidi/bidi.go +359 -0
  1036. data/go/vendor/golang.org/x/text/unicode/bidi/bracket.go +335 -0
  1037. data/go/vendor/golang.org/x/text/unicode/bidi/core.go +1064 -0
  1038. data/go/vendor/golang.org/x/text/unicode/bidi/prop.go +206 -0
  1039. data/go/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go +2042 -0
  1040. data/go/vendor/golang.org/x/text/unicode/bidi/tables17.0.0.go +2135 -0
  1041. data/go/vendor/golang.org/x/text/unicode/bidi/trieval.go +48 -0
  1042. data/go/vendor/golang.org/x/text/unicode/norm/composition.go +512 -0
  1043. data/go/vendor/golang.org/x/text/unicode/norm/forminfo.go +296 -0
  1044. data/go/vendor/golang.org/x/text/unicode/norm/input.go +109 -0
  1045. data/go/vendor/golang.org/x/text/unicode/norm/iter.go +454 -0
  1046. data/go/vendor/golang.org/x/text/unicode/norm/normalize.go +610 -0
  1047. data/go/vendor/golang.org/x/text/unicode/norm/readwriter.go +125 -0
  1048. data/go/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go +7907 -0
  1049. data/go/vendor/golang.org/x/text/unicode/norm/tables17.0.0.go +8104 -0
  1050. data/go/vendor/golang.org/x/text/unicode/norm/transform.go +88 -0
  1051. data/go/vendor/golang.org/x/text/unicode/norm/trie.go +54 -0
  1052. data/go/vendor/modules.txt +63 -0
  1053. data/lib/puma_plus/core/version.rb +13 -0
  1054. data/lib/puma_plus/core.rb +60 -0
  1055. metadata +1099 -0
@@ -0,0 +1,2574 @@
1
+ // Copyright 2009 The Go Authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style
3
+ // license that can be found in the LICENSE file.
4
+
5
+ // Linux system calls.
6
+ // This file is compiled as ordinary Go code,
7
+ // but it is also input to mksyscall,
8
+ // which parses the //sys lines and generates system call stubs.
9
+ // Note that sometimes we use a lowercase //sys name and
10
+ // wrap it in our own nicer implementation.
11
+
12
+ package unix
13
+
14
+ import (
15
+ "encoding/binary"
16
+ "slices"
17
+ "strconv"
18
+ "syscall"
19
+ "time"
20
+ "unsafe"
21
+ )
22
+
23
+ /*
24
+ * Wrapped
25
+ */
26
+
27
+ func Access(path string, mode uint32) (err error) {
28
+ return Faccessat(AT_FDCWD, path, mode, 0)
29
+ }
30
+
31
+ func Chmod(path string, mode uint32) (err error) {
32
+ return Fchmodat(AT_FDCWD, path, mode, 0)
33
+ }
34
+
35
+ func Chown(path string, uid int, gid int) (err error) {
36
+ return Fchownat(AT_FDCWD, path, uid, gid, 0)
37
+ }
38
+
39
+ func Creat(path string, mode uint32) (fd int, err error) {
40
+ return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode)
41
+ }
42
+
43
+ func EpollCreate(size int) (fd int, err error) {
44
+ if size <= 0 {
45
+ return -1, EINVAL
46
+ }
47
+ return EpollCreate1(0)
48
+ }
49
+
50
+ //sys FanotifyInit(flags uint, event_f_flags uint) (fd int, err error)
51
+ //sys fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error)
52
+
53
+ func FanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname string) (err error) {
54
+ if pathname == "" {
55
+ return fanotifyMark(fd, flags, mask, dirFd, nil)
56
+ }
57
+ p, err := BytePtrFromString(pathname)
58
+ if err != nil {
59
+ return err
60
+ }
61
+ return fanotifyMark(fd, flags, mask, dirFd, p)
62
+ }
63
+
64
+ //sys fchmodat(dirfd int, path string, mode uint32) (err error)
65
+ //sys fchmodat2(dirfd int, path string, mode uint32, flags int) (err error)
66
+
67
+ func Fchmodat(dirfd int, path string, mode uint32, flags int) error {
68
+ // Linux fchmodat doesn't support the flags parameter, but fchmodat2 does.
69
+ // Try fchmodat2 if flags are specified.
70
+ if flags != 0 {
71
+ err := fchmodat2(dirfd, path, mode, flags)
72
+ if err == ENOSYS {
73
+ // fchmodat2 isn't available. If the flags are known to be valid,
74
+ // return EOPNOTSUPP to indicate that fchmodat doesn't support them.
75
+ if flags&^(AT_SYMLINK_NOFOLLOW|AT_EMPTY_PATH) != 0 {
76
+ return EINVAL
77
+ } else if flags&(AT_SYMLINK_NOFOLLOW|AT_EMPTY_PATH) != 0 {
78
+ return EOPNOTSUPP
79
+ }
80
+ }
81
+ return err
82
+ }
83
+ return fchmodat(dirfd, path, mode)
84
+ }
85
+
86
+ func InotifyInit() (fd int, err error) {
87
+ return InotifyInit1(0)
88
+ }
89
+
90
+ //sys ioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL
91
+ //sys ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL
92
+
93
+ // ioctl itself should not be exposed directly, but additional get/set functions
94
+ // for specific types are permissible. These are defined in ioctl.go and
95
+ // ioctl_linux.go.
96
+ //
97
+ // The third argument to ioctl is often a pointer but sometimes an integer.
98
+ // Callers should use ioctlPtr when the third argument is a pointer and ioctl
99
+ // when the third argument is an integer.
100
+ //
101
+ // TODO: some existing code incorrectly uses ioctl when it should use ioctlPtr.
102
+
103
+ //sys Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error)
104
+
105
+ func Link(oldpath string, newpath string) (err error) {
106
+ return Linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0)
107
+ }
108
+
109
+ func Mkdir(path string, mode uint32) (err error) {
110
+ return Mkdirat(AT_FDCWD, path, mode)
111
+ }
112
+
113
+ func Mknod(path string, mode uint32, dev int) (err error) {
114
+ return Mknodat(AT_FDCWD, path, mode, dev)
115
+ }
116
+
117
+ func Open(path string, mode int, perm uint32) (fd int, err error) {
118
+ return openat(AT_FDCWD, path, mode|O_LARGEFILE, perm)
119
+ }
120
+
121
+ //sys openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
122
+
123
+ func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
124
+ return openat(dirfd, path, flags|O_LARGEFILE, mode)
125
+ }
126
+
127
+ //sys openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error)
128
+
129
+ func Openat2(dirfd int, path string, how *OpenHow) (fd int, err error) {
130
+ return openat2(dirfd, path, how, SizeofOpenHow)
131
+ }
132
+
133
+ func Pipe(p []int) error {
134
+ return Pipe2(p, 0)
135
+ }
136
+
137
+ //sysnb pipe2(p *[2]_C_int, flags int) (err error)
138
+
139
+ func Pipe2(p []int, flags int) error {
140
+ if len(p) != 2 {
141
+ return EINVAL
142
+ }
143
+ var pp [2]_C_int
144
+ err := pipe2(&pp, flags)
145
+ if err == nil {
146
+ p[0] = int(pp[0])
147
+ p[1] = int(pp[1])
148
+ }
149
+ return err
150
+ }
151
+
152
+ //sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error)
153
+
154
+ func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
155
+ if len(fds) == 0 {
156
+ return ppoll(nil, 0, timeout, sigmask)
157
+ }
158
+ return ppoll(&fds[0], len(fds), timeout, sigmask)
159
+ }
160
+
161
+ func Poll(fds []PollFd, timeout int) (n int, err error) {
162
+ var ts *Timespec
163
+ if timeout >= 0 {
164
+ ts = new(Timespec)
165
+ *ts = NsecToTimespec(int64(timeout) * 1e6)
166
+ }
167
+ return Ppoll(fds, ts, nil)
168
+ }
169
+
170
+ //sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
171
+
172
+ func Readlink(path string, buf []byte) (n int, err error) {
173
+ return Readlinkat(AT_FDCWD, path, buf)
174
+ }
175
+
176
+ func Rename(oldpath string, newpath string) (err error) {
177
+ return Renameat(AT_FDCWD, oldpath, AT_FDCWD, newpath)
178
+ }
179
+
180
+ func Rmdir(path string) error {
181
+ return Unlinkat(AT_FDCWD, path, AT_REMOVEDIR)
182
+ }
183
+
184
+ //sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
185
+
186
+ func Symlink(oldpath string, newpath string) (err error) {
187
+ return Symlinkat(oldpath, AT_FDCWD, newpath)
188
+ }
189
+
190
+ func Unlink(path string) error {
191
+ return Unlinkat(AT_FDCWD, path, 0)
192
+ }
193
+
194
+ //sys Unlinkat(dirfd int, path string, flags int) (err error)
195
+
196
+ func Utimes(path string, tv []Timeval) error {
197
+ if tv == nil {
198
+ err := utimensat(AT_FDCWD, path, nil, 0)
199
+ if err != ENOSYS {
200
+ return err
201
+ }
202
+ return utimes(path, nil)
203
+ }
204
+ if len(tv) != 2 {
205
+ return EINVAL
206
+ }
207
+ var ts [2]Timespec
208
+ ts[0] = NsecToTimespec(TimevalToNsec(tv[0]))
209
+ ts[1] = NsecToTimespec(TimevalToNsec(tv[1]))
210
+ err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
211
+ if err != ENOSYS {
212
+ return err
213
+ }
214
+ return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
215
+ }
216
+
217
+ //sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)
218
+
219
+ func UtimesNano(path string, ts []Timespec) error {
220
+ return UtimesNanoAt(AT_FDCWD, path, ts, 0)
221
+ }
222
+
223
+ func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
224
+ if ts == nil {
225
+ return utimensat(dirfd, path, nil, flags)
226
+ }
227
+ if len(ts) != 2 {
228
+ return EINVAL
229
+ }
230
+ return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)
231
+ }
232
+
233
+ func Futimesat(dirfd int, path string, tv []Timeval) error {
234
+ if tv == nil {
235
+ return futimesat(dirfd, path, nil)
236
+ }
237
+ if len(tv) != 2 {
238
+ return EINVAL
239
+ }
240
+ return futimesat(dirfd, path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
241
+ }
242
+
243
+ func Futimes(fd int, tv []Timeval) (err error) {
244
+ // Believe it or not, this is the best we can do on Linux
245
+ // (and is what glibc does).
246
+ return Utimes("/proc/self/fd/"+strconv.Itoa(fd), tv)
247
+ }
248
+
249
+ const ImplementsGetwd = true
250
+
251
+ //sys Getcwd(buf []byte) (n int, err error)
252
+
253
+ func Getwd() (wd string, err error) {
254
+ var buf [PathMax]byte
255
+ n, err := Getcwd(buf[0:])
256
+ if err != nil {
257
+ return "", err
258
+ }
259
+ // Getcwd returns the number of bytes written to buf, including the NUL.
260
+ if n < 1 || n > len(buf) || buf[n-1] != 0 {
261
+ return "", EINVAL
262
+ }
263
+ // In some cases, Linux can return a path that starts with the
264
+ // "(unreachable)" prefix, which can potentially be a valid relative
265
+ // path. To work around that, return ENOENT if path is not absolute.
266
+ if buf[0] != '/' {
267
+ return "", ENOENT
268
+ }
269
+
270
+ return string(buf[0 : n-1]), nil
271
+ }
272
+
273
+ func Getgroups() (gids []int, err error) {
274
+ n, err := getgroups(0, nil)
275
+ if err != nil {
276
+ return nil, err
277
+ }
278
+ if n == 0 {
279
+ return nil, nil
280
+ }
281
+
282
+ // Sanity check group count. Max is 1<<16 on Linux.
283
+ if n < 0 || n > 1<<20 {
284
+ return nil, EINVAL
285
+ }
286
+
287
+ a := make([]_Gid_t, n)
288
+ n, err = getgroups(n, &a[0])
289
+ if err != nil {
290
+ return nil, err
291
+ }
292
+ gids = make([]int, n)
293
+ for i, v := range a[0:n] {
294
+ gids[i] = int(v)
295
+ }
296
+ return
297
+ }
298
+
299
+ func Setgroups(gids []int) (err error) {
300
+ if len(gids) == 0 {
301
+ return setgroups(0, nil)
302
+ }
303
+
304
+ a := make([]_Gid_t, len(gids))
305
+ for i, v := range gids {
306
+ a[i] = _Gid_t(v)
307
+ }
308
+ return setgroups(len(a), &a[0])
309
+ }
310
+
311
+ type WaitStatus uint32
312
+
313
+ // Wait status is 7 bits at bottom, either 0 (exited),
314
+ // 0x7F (stopped), or a signal number that caused an exit.
315
+ // The 0x80 bit is whether there was a core dump.
316
+ // An extra number (exit code, signal causing a stop)
317
+ // is in the high bits. At least that's the idea.
318
+ // There are various irregularities. For example, the
319
+ // "continued" status is 0xFFFF, distinguishing itself
320
+ // from stopped via the core dump bit.
321
+
322
+ const (
323
+ mask = 0x7F
324
+ core = 0x80
325
+ exited = 0x00
326
+ stopped = 0x7F
327
+ shift = 8
328
+ )
329
+
330
+ func (w WaitStatus) Exited() bool { return w&mask == exited }
331
+
332
+ func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != exited }
333
+
334
+ func (w WaitStatus) Stopped() bool { return w&0xFF == stopped }
335
+
336
+ func (w WaitStatus) Continued() bool { return w == 0xFFFF }
337
+
338
+ func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }
339
+
340
+ func (w WaitStatus) ExitStatus() int {
341
+ if !w.Exited() {
342
+ return -1
343
+ }
344
+ return int(w>>shift) & 0xFF
345
+ }
346
+
347
+ func (w WaitStatus) Signal() syscall.Signal {
348
+ if !w.Signaled() {
349
+ return -1
350
+ }
351
+ return syscall.Signal(w & mask)
352
+ }
353
+
354
+ func (w WaitStatus) StopSignal() syscall.Signal {
355
+ if !w.Stopped() {
356
+ return -1
357
+ }
358
+ return syscall.Signal(w>>shift) & 0xFF
359
+ }
360
+
361
+ func (w WaitStatus) TrapCause() int {
362
+ if w.StopSignal() != SIGTRAP {
363
+ return -1
364
+ }
365
+ return int(w>>shift) >> 8
366
+ }
367
+
368
+ //sys wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error)
369
+
370
+ func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {
371
+ var status _C_int
372
+ wpid, err = wait4(pid, &status, options, rusage)
373
+ if wstatus != nil {
374
+ *wstatus = WaitStatus(status)
375
+ }
376
+ return
377
+ }
378
+
379
+ //sys Waitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error)
380
+
381
+ func Mkfifo(path string, mode uint32) error {
382
+ return Mknod(path, mode|S_IFIFO, 0)
383
+ }
384
+
385
+ func Mkfifoat(dirfd int, path string, mode uint32) error {
386
+ return Mknodat(dirfd, path, mode|S_IFIFO, 0)
387
+ }
388
+
389
+ func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
390
+ if sa.Port < 0 || sa.Port > 0xFFFF {
391
+ return nil, 0, EINVAL
392
+ }
393
+ sa.raw.Family = AF_INET
394
+ p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
395
+ p[0] = byte(sa.Port >> 8)
396
+ p[1] = byte(sa.Port)
397
+ sa.raw.Addr = sa.Addr
398
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil
399
+ }
400
+
401
+ func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {
402
+ if sa.Port < 0 || sa.Port > 0xFFFF {
403
+ return nil, 0, EINVAL
404
+ }
405
+ sa.raw.Family = AF_INET6
406
+ p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
407
+ p[0] = byte(sa.Port >> 8)
408
+ p[1] = byte(sa.Port)
409
+ sa.raw.Scope_id = sa.ZoneId
410
+ sa.raw.Addr = sa.Addr
411
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil
412
+ }
413
+
414
+ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {
415
+ name := sa.Name
416
+ n := len(name)
417
+ if n >= len(sa.raw.Path) {
418
+ return nil, 0, EINVAL
419
+ }
420
+ sa.raw.Family = AF_UNIX
421
+ for i := range n {
422
+ sa.raw.Path[i] = int8(name[i])
423
+ }
424
+ // length is family (uint16), name, NUL.
425
+ sl := _Socklen(2)
426
+ if n > 0 {
427
+ sl += _Socklen(n) + 1
428
+ }
429
+ if sa.raw.Path[0] == '@' || (sa.raw.Path[0] == 0 && sl > 3) {
430
+ // Check sl > 3 so we don't change unnamed socket behavior.
431
+ sa.raw.Path[0] = 0
432
+ // Don't count trailing NUL for abstract address.
433
+ sl--
434
+ }
435
+
436
+ return unsafe.Pointer(&sa.raw), sl, nil
437
+ }
438
+
439
+ // SockaddrLinklayer implements the Sockaddr interface for AF_PACKET type sockets.
440
+ type SockaddrLinklayer struct {
441
+ Protocol uint16
442
+ Ifindex int
443
+ Hatype uint16
444
+ Pkttype uint8
445
+ Halen uint8
446
+ Addr [8]byte
447
+ raw RawSockaddrLinklayer
448
+ }
449
+
450
+ func (sa *SockaddrLinklayer) sockaddr() (unsafe.Pointer, _Socklen, error) {
451
+ if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff {
452
+ return nil, 0, EINVAL
453
+ }
454
+ sa.raw.Family = AF_PACKET
455
+ sa.raw.Protocol = sa.Protocol
456
+ sa.raw.Ifindex = int32(sa.Ifindex)
457
+ sa.raw.Hatype = sa.Hatype
458
+ sa.raw.Pkttype = sa.Pkttype
459
+ sa.raw.Halen = sa.Halen
460
+ sa.raw.Addr = sa.Addr
461
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrLinklayer, nil
462
+ }
463
+
464
+ // SockaddrNetlink implements the Sockaddr interface for AF_NETLINK type sockets.
465
+ type SockaddrNetlink struct {
466
+ Family uint16
467
+ Pad uint16
468
+ Pid uint32
469
+ Groups uint32
470
+ raw RawSockaddrNetlink
471
+ }
472
+
473
+ func (sa *SockaddrNetlink) sockaddr() (unsafe.Pointer, _Socklen, error) {
474
+ sa.raw.Family = AF_NETLINK
475
+ sa.raw.Pad = sa.Pad
476
+ sa.raw.Pid = sa.Pid
477
+ sa.raw.Groups = sa.Groups
478
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrNetlink, nil
479
+ }
480
+
481
+ // SockaddrHCI implements the Sockaddr interface for AF_BLUETOOTH type sockets
482
+ // using the HCI protocol.
483
+ type SockaddrHCI struct {
484
+ Dev uint16
485
+ Channel uint16
486
+ raw RawSockaddrHCI
487
+ }
488
+
489
+ func (sa *SockaddrHCI) sockaddr() (unsafe.Pointer, _Socklen, error) {
490
+ sa.raw.Family = AF_BLUETOOTH
491
+ sa.raw.Dev = sa.Dev
492
+ sa.raw.Channel = sa.Channel
493
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrHCI, nil
494
+ }
495
+
496
+ // SockaddrL2 implements the Sockaddr interface for AF_BLUETOOTH type sockets
497
+ // using the L2CAP protocol.
498
+ type SockaddrL2 struct {
499
+ PSM uint16
500
+ CID uint16
501
+ Addr [6]uint8
502
+ AddrType uint8
503
+ raw RawSockaddrL2
504
+ }
505
+
506
+ func (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) {
507
+ sa.raw.Family = AF_BLUETOOTH
508
+ psm := (*[2]byte)(unsafe.Pointer(&sa.raw.Psm))
509
+ psm[0] = byte(sa.PSM)
510
+ psm[1] = byte(sa.PSM >> 8)
511
+ for i := range len(sa.Addr) {
512
+ sa.raw.Bdaddr[i] = sa.Addr[len(sa.Addr)-1-i]
513
+ }
514
+ cid := (*[2]byte)(unsafe.Pointer(&sa.raw.Cid))
515
+ cid[0] = byte(sa.CID)
516
+ cid[1] = byte(sa.CID >> 8)
517
+ sa.raw.Bdaddr_type = sa.AddrType
518
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrL2, nil
519
+ }
520
+
521
+ // SockaddrRFCOMM implements the Sockaddr interface for AF_BLUETOOTH type sockets
522
+ // using the RFCOMM protocol.
523
+ //
524
+ // Server example:
525
+ //
526
+ // fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)
527
+ // _ = unix.Bind(fd, &unix.SockaddrRFCOMM{
528
+ // Channel: 1,
529
+ // Addr: [6]uint8{0, 0, 0, 0, 0, 0}, // BDADDR_ANY or 00:00:00:00:00:00
530
+ // })
531
+ // _ = Listen(fd, 1)
532
+ // nfd, sa, _ := Accept(fd)
533
+ // fmt.Printf("conn addr=%v fd=%d", sa.(*unix.SockaddrRFCOMM).Addr, nfd)
534
+ // Read(nfd, buf)
535
+ //
536
+ // Client example:
537
+ //
538
+ // fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)
539
+ // _ = Connect(fd, &SockaddrRFCOMM{
540
+ // Channel: 1,
541
+ // Addr: [6]byte{0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc}, // CC:BB:AA:33:22:11
542
+ // })
543
+ // Write(fd, []byte(`hello`))
544
+ type SockaddrRFCOMM struct {
545
+ // Addr represents a bluetooth address, byte ordering is little-endian.
546
+ Addr [6]uint8
547
+
548
+ // Channel is a designated bluetooth channel, only 1-30 are available for use.
549
+ // Since Linux 2.6.7 and further zero value is the first available channel.
550
+ Channel uint8
551
+
552
+ raw RawSockaddrRFCOMM
553
+ }
554
+
555
+ func (sa *SockaddrRFCOMM) sockaddr() (unsafe.Pointer, _Socklen, error) {
556
+ sa.raw.Family = AF_BLUETOOTH
557
+ sa.raw.Channel = sa.Channel
558
+ sa.raw.Bdaddr = sa.Addr
559
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrRFCOMM, nil
560
+ }
561
+
562
+ // SockaddrCAN implements the Sockaddr interface for AF_CAN type sockets.
563
+ // The RxID and TxID fields are used for transport protocol addressing in
564
+ // (CAN_TP16, CAN_TP20, CAN_MCNET, and CAN_ISOTP), they can be left with
565
+ // zero values for CAN_RAW and CAN_BCM sockets as they have no meaning.
566
+ //
567
+ // The SockaddrCAN struct must be bound to the socket file descriptor
568
+ // using Bind before the CAN socket can be used.
569
+ //
570
+ // // Read one raw CAN frame
571
+ // fd, _ := Socket(AF_CAN, SOCK_RAW, CAN_RAW)
572
+ // addr := &SockaddrCAN{Ifindex: index}
573
+ // Bind(fd, addr)
574
+ // frame := make([]byte, 16)
575
+ // Read(fd, frame)
576
+ //
577
+ // The full SocketCAN documentation can be found in the linux kernel
578
+ // archives at: https://www.kernel.org/doc/Documentation/networking/can.txt
579
+ type SockaddrCAN struct {
580
+ Ifindex int
581
+ RxID uint32
582
+ TxID uint32
583
+ raw RawSockaddrCAN
584
+ }
585
+
586
+ func (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) {
587
+ if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff {
588
+ return nil, 0, EINVAL
589
+ }
590
+ sa.raw.Family = AF_CAN
591
+ sa.raw.Ifindex = int32(sa.Ifindex)
592
+ rx := (*[4]byte)(unsafe.Pointer(&sa.RxID))
593
+ for i := range 4 {
594
+ sa.raw.Addr[i] = rx[i]
595
+ }
596
+ tx := (*[4]byte)(unsafe.Pointer(&sa.TxID))
597
+ for i := range 4 {
598
+ sa.raw.Addr[i+4] = tx[i]
599
+ }
600
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil
601
+ }
602
+
603
+ // SockaddrCANJ1939 implements the Sockaddr interface for AF_CAN using J1939
604
+ // protocol (https://en.wikipedia.org/wiki/SAE_J1939). For more information
605
+ // on the purposes of the fields, check the official linux kernel documentation
606
+ // available here: https://www.kernel.org/doc/Documentation/networking/j1939.rst
607
+ type SockaddrCANJ1939 struct {
608
+ Ifindex int
609
+ Name uint64
610
+ PGN uint32
611
+ Addr uint8
612
+ raw RawSockaddrCAN
613
+ }
614
+
615
+ func (sa *SockaddrCANJ1939) sockaddr() (unsafe.Pointer, _Socklen, error) {
616
+ if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff {
617
+ return nil, 0, EINVAL
618
+ }
619
+ sa.raw.Family = AF_CAN
620
+ sa.raw.Ifindex = int32(sa.Ifindex)
621
+ n := (*[8]byte)(unsafe.Pointer(&sa.Name))
622
+ for i := range 8 {
623
+ sa.raw.Addr[i] = n[i]
624
+ }
625
+ p := (*[4]byte)(unsafe.Pointer(&sa.PGN))
626
+ for i := range 4 {
627
+ sa.raw.Addr[i+8] = p[i]
628
+ }
629
+ sa.raw.Addr[12] = sa.Addr
630
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil
631
+ }
632
+
633
+ // SockaddrALG implements the Sockaddr interface for AF_ALG type sockets.
634
+ // SockaddrALG enables userspace access to the Linux kernel's cryptography
635
+ // subsystem. The Type and Name fields specify which type of hash or cipher
636
+ // should be used with a given socket.
637
+ //
638
+ // To create a file descriptor that provides access to a hash or cipher, both
639
+ // Bind and Accept must be used. Once the setup process is complete, input
640
+ // data can be written to the socket, processed by the kernel, and then read
641
+ // back as hash output or ciphertext.
642
+ //
643
+ // Here is an example of using an AF_ALG socket with SHA1 hashing.
644
+ // The initial socket setup process is as follows:
645
+ //
646
+ // // Open a socket to perform SHA1 hashing.
647
+ // fd, _ := unix.Socket(unix.AF_ALG, unix.SOCK_SEQPACKET, 0)
648
+ // addr := &unix.SockaddrALG{Type: "hash", Name: "sha1"}
649
+ // unix.Bind(fd, addr)
650
+ // // Note: unix.Accept does not work at this time; must invoke accept()
651
+ // // manually using unix.Syscall.
652
+ // hashfd, _, _ := unix.Syscall(unix.SYS_ACCEPT, uintptr(fd), 0, 0)
653
+ //
654
+ // Once a file descriptor has been returned from Accept, it may be used to
655
+ // perform SHA1 hashing. The descriptor is not safe for concurrent use, but
656
+ // may be re-used repeatedly with subsequent Write and Read operations.
657
+ //
658
+ // When hashing a small byte slice or string, a single Write and Read may
659
+ // be used:
660
+ //
661
+ // // Assume hashfd is already configured using the setup process.
662
+ // hash := os.NewFile(hashfd, "sha1")
663
+ // // Hash an input string and read the results. Each Write discards
664
+ // // previous hash state. Read always reads the current state.
665
+ // b := make([]byte, 20)
666
+ // for i := 0; i < 2; i++ {
667
+ // io.WriteString(hash, "Hello, world.")
668
+ // hash.Read(b)
669
+ // fmt.Println(hex.EncodeToString(b))
670
+ // }
671
+ // // Output:
672
+ // // 2ae01472317d1935a84797ec1983ae243fc6aa28
673
+ // // 2ae01472317d1935a84797ec1983ae243fc6aa28
674
+ //
675
+ // For hashing larger byte slices, or byte streams such as those read from
676
+ // a file or socket, use Sendto with MSG_MORE to instruct the kernel to update
677
+ // the hash digest instead of creating a new one for a given chunk and finalizing it.
678
+ //
679
+ // // Assume hashfd and addr are already configured using the setup process.
680
+ // hash := os.NewFile(hashfd, "sha1")
681
+ // // Hash the contents of a file.
682
+ // f, _ := os.Open("/tmp/linux-4.10-rc7.tar.xz")
683
+ // b := make([]byte, 4096)
684
+ // for {
685
+ // n, err := f.Read(b)
686
+ // if err == io.EOF {
687
+ // break
688
+ // }
689
+ // unix.Sendto(hashfd, b[:n], unix.MSG_MORE, addr)
690
+ // }
691
+ // hash.Read(b)
692
+ // fmt.Println(hex.EncodeToString(b))
693
+ // // Output: 85cdcad0c06eef66f805ecce353bec9accbeecc5
694
+ //
695
+ // For more information, see: http://www.chronox.de/crypto-API/crypto/userspace-if.html.
696
+ type SockaddrALG struct {
697
+ Type string
698
+ Name string
699
+ Feature uint32
700
+ Mask uint32
701
+ raw RawSockaddrALG
702
+ }
703
+
704
+ func (sa *SockaddrALG) sockaddr() (unsafe.Pointer, _Socklen, error) {
705
+ // Leave room for NUL byte terminator.
706
+ if len(sa.Type) > len(sa.raw.Type)-1 {
707
+ return nil, 0, EINVAL
708
+ }
709
+ if len(sa.Name) > len(sa.raw.Name)-1 {
710
+ return nil, 0, EINVAL
711
+ }
712
+
713
+ sa.raw.Family = AF_ALG
714
+ sa.raw.Feat = sa.Feature
715
+ sa.raw.Mask = sa.Mask
716
+
717
+ copy(sa.raw.Type[:], sa.Type)
718
+ copy(sa.raw.Name[:], sa.Name)
719
+
720
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrALG, nil
721
+ }
722
+
723
+ // SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets.
724
+ // SockaddrVM provides access to Linux VM sockets: a mechanism that enables
725
+ // bidirectional communication between a hypervisor and its guest virtual
726
+ // machines.
727
+ type SockaddrVM struct {
728
+ // CID and Port specify a context ID and port address for a VM socket.
729
+ // Guests have a unique CID, and hosts may have a well-known CID of:
730
+ // - VMADDR_CID_HYPERVISOR: refers to the hypervisor process.
731
+ // - VMADDR_CID_LOCAL: refers to local communication (loopback).
732
+ // - VMADDR_CID_HOST: refers to other processes on the host.
733
+ CID uint32
734
+ Port uint32
735
+ Flags uint8
736
+ raw RawSockaddrVM
737
+ }
738
+
739
+ func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) {
740
+ sa.raw.Family = AF_VSOCK
741
+ sa.raw.Port = sa.Port
742
+ sa.raw.Cid = sa.CID
743
+ sa.raw.Flags = sa.Flags
744
+
745
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil
746
+ }
747
+
748
+ type SockaddrXDP struct {
749
+ Flags uint16
750
+ Ifindex uint32
751
+ QueueID uint32
752
+ SharedUmemFD uint32
753
+ raw RawSockaddrXDP
754
+ }
755
+
756
+ func (sa *SockaddrXDP) sockaddr() (unsafe.Pointer, _Socklen, error) {
757
+ sa.raw.Family = AF_XDP
758
+ sa.raw.Flags = sa.Flags
759
+ sa.raw.Ifindex = sa.Ifindex
760
+ sa.raw.Queue_id = sa.QueueID
761
+ sa.raw.Shared_umem_fd = sa.SharedUmemFD
762
+
763
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrXDP, nil
764
+ }
765
+
766
+ // This constant mirrors the #define of PX_PROTO_OE in
767
+ // linux/if_pppox.h. We're defining this by hand here instead of
768
+ // autogenerating through mkerrors.sh because including
769
+ // linux/if_pppox.h causes some declaration conflicts with other
770
+ // includes (linux/if_pppox.h includes linux/in.h, which conflicts
771
+ // with netinet/in.h). Given that we only need a single zero constant
772
+ // out of that file, it's cleaner to just define it by hand here.
773
+ const px_proto_oe = 0
774
+
775
+ type SockaddrPPPoE struct {
776
+ SID uint16
777
+ Remote []byte
778
+ Dev string
779
+ raw RawSockaddrPPPoX
780
+ }
781
+
782
+ func (sa *SockaddrPPPoE) sockaddr() (unsafe.Pointer, _Socklen, error) {
783
+ if len(sa.Remote) != 6 {
784
+ return nil, 0, EINVAL
785
+ }
786
+ if len(sa.Dev) > IFNAMSIZ-1 {
787
+ return nil, 0, EINVAL
788
+ }
789
+
790
+ *(*uint16)(unsafe.Pointer(&sa.raw[0])) = AF_PPPOX
791
+ // This next field is in host-endian byte order. We can't use the
792
+ // same unsafe pointer cast as above, because this value is not
793
+ // 32-bit aligned and some architectures don't allow unaligned
794
+ // access.
795
+ //
796
+ // However, the value of px_proto_oe is 0, so we can use
797
+ // encoding/binary helpers to write the bytes without worrying
798
+ // about the ordering.
799
+ binary.BigEndian.PutUint32(sa.raw[2:6], px_proto_oe)
800
+ // This field is deliberately big-endian, unlike the previous
801
+ // one. The kernel expects SID to be in network byte order.
802
+ binary.BigEndian.PutUint16(sa.raw[6:8], sa.SID)
803
+ copy(sa.raw[8:14], sa.Remote)
804
+ clear(sa.raw[14 : 14+IFNAMSIZ])
805
+ copy(sa.raw[14:], sa.Dev)
806
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrPPPoX, nil
807
+ }
808
+
809
+ // SockaddrTIPC implements the Sockaddr interface for AF_TIPC type sockets.
810
+ // For more information on TIPC, see: http://tipc.sourceforge.net/.
811
+ type SockaddrTIPC struct {
812
+ // Scope is the publication scopes when binding service/service range.
813
+ // Should be set to TIPC_CLUSTER_SCOPE or TIPC_NODE_SCOPE.
814
+ Scope int
815
+
816
+ // Addr is the type of address used to manipulate a socket. Addr must be
817
+ // one of:
818
+ // - *TIPCSocketAddr: "id" variant in the C addr union
819
+ // - *TIPCServiceRange: "nameseq" variant in the C addr union
820
+ // - *TIPCServiceName: "name" variant in the C addr union
821
+ //
822
+ // If nil, EINVAL will be returned when the structure is used.
823
+ Addr TIPCAddr
824
+
825
+ raw RawSockaddrTIPC
826
+ }
827
+
828
+ // TIPCAddr is implemented by types that can be used as an address for
829
+ // SockaddrTIPC. It is only implemented by *TIPCSocketAddr, *TIPCServiceRange,
830
+ // and *TIPCServiceName.
831
+ type TIPCAddr interface {
832
+ tipcAddrtype() uint8
833
+ tipcAddr() [12]byte
834
+ }
835
+
836
+ func (sa *TIPCSocketAddr) tipcAddr() [12]byte {
837
+ var out [12]byte
838
+ copy(out[:], (*(*[unsafe.Sizeof(TIPCSocketAddr{})]byte)(unsafe.Pointer(sa)))[:])
839
+ return out
840
+ }
841
+
842
+ func (sa *TIPCSocketAddr) tipcAddrtype() uint8 { return TIPC_SOCKET_ADDR }
843
+
844
+ func (sa *TIPCServiceRange) tipcAddr() [12]byte {
845
+ var out [12]byte
846
+ copy(out[:], (*(*[unsafe.Sizeof(TIPCServiceRange{})]byte)(unsafe.Pointer(sa)))[:])
847
+ return out
848
+ }
849
+
850
+ func (sa *TIPCServiceRange) tipcAddrtype() uint8 { return TIPC_SERVICE_RANGE }
851
+
852
+ func (sa *TIPCServiceName) tipcAddr() [12]byte {
853
+ var out [12]byte
854
+ copy(out[:], (*(*[unsafe.Sizeof(TIPCServiceName{})]byte)(unsafe.Pointer(sa)))[:])
855
+ return out
856
+ }
857
+
858
+ func (sa *TIPCServiceName) tipcAddrtype() uint8 { return TIPC_SERVICE_ADDR }
859
+
860
+ func (sa *SockaddrTIPC) sockaddr() (unsafe.Pointer, _Socklen, error) {
861
+ if sa.Addr == nil {
862
+ return nil, 0, EINVAL
863
+ }
864
+ sa.raw.Family = AF_TIPC
865
+ sa.raw.Scope = int8(sa.Scope)
866
+ sa.raw.Addrtype = sa.Addr.tipcAddrtype()
867
+ sa.raw.Addr = sa.Addr.tipcAddr()
868
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrTIPC, nil
869
+ }
870
+
871
+ // SockaddrL2TPIP implements the Sockaddr interface for IPPROTO_L2TP/AF_INET sockets.
872
+ type SockaddrL2TPIP struct {
873
+ Addr [4]byte
874
+ ConnId uint32
875
+ raw RawSockaddrL2TPIP
876
+ }
877
+
878
+ func (sa *SockaddrL2TPIP) sockaddr() (unsafe.Pointer, _Socklen, error) {
879
+ sa.raw.Family = AF_INET
880
+ sa.raw.Conn_id = sa.ConnId
881
+ sa.raw.Addr = sa.Addr
882
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP, nil
883
+ }
884
+
885
+ // SockaddrL2TPIP6 implements the Sockaddr interface for IPPROTO_L2TP/AF_INET6 sockets.
886
+ type SockaddrL2TPIP6 struct {
887
+ Addr [16]byte
888
+ ZoneId uint32
889
+ ConnId uint32
890
+ raw RawSockaddrL2TPIP6
891
+ }
892
+
893
+ func (sa *SockaddrL2TPIP6) sockaddr() (unsafe.Pointer, _Socklen, error) {
894
+ sa.raw.Family = AF_INET6
895
+ sa.raw.Conn_id = sa.ConnId
896
+ sa.raw.Scope_id = sa.ZoneId
897
+ sa.raw.Addr = sa.Addr
898
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP6, nil
899
+ }
900
+
901
+ // SockaddrIUCV implements the Sockaddr interface for AF_IUCV sockets.
902
+ type SockaddrIUCV struct {
903
+ UserID string
904
+ Name string
905
+ raw RawSockaddrIUCV
906
+ }
907
+
908
+ func (sa *SockaddrIUCV) sockaddr() (unsafe.Pointer, _Socklen, error) {
909
+ sa.raw.Family = AF_IUCV
910
+ // These are EBCDIC encoded by the kernel, but we still need to pad them
911
+ // with blanks. Initializing with blanks allows the caller to feed in either
912
+ // a padded or an unpadded string.
913
+ for i := range 8 {
914
+ sa.raw.Nodeid[i] = ' '
915
+ sa.raw.User_id[i] = ' '
916
+ sa.raw.Name[i] = ' '
917
+ }
918
+ if len(sa.UserID) > 8 || len(sa.Name) > 8 {
919
+ return nil, 0, EINVAL
920
+ }
921
+ for i, b := range []byte(sa.UserID[:]) {
922
+ sa.raw.User_id[i] = int8(b)
923
+ }
924
+ for i, b := range []byte(sa.Name[:]) {
925
+ sa.raw.Name[i] = int8(b)
926
+ }
927
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrIUCV, nil
928
+ }
929
+
930
+ type SockaddrNFC struct {
931
+ DeviceIdx uint32
932
+ TargetIdx uint32
933
+ NFCProtocol uint32
934
+ raw RawSockaddrNFC
935
+ }
936
+
937
+ func (sa *SockaddrNFC) sockaddr() (unsafe.Pointer, _Socklen, error) {
938
+ sa.raw.Sa_family = AF_NFC
939
+ sa.raw.Dev_idx = sa.DeviceIdx
940
+ sa.raw.Target_idx = sa.TargetIdx
941
+ sa.raw.Nfc_protocol = sa.NFCProtocol
942
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrNFC, nil
943
+ }
944
+
945
+ type SockaddrNFCLLCP struct {
946
+ DeviceIdx uint32
947
+ TargetIdx uint32
948
+ NFCProtocol uint32
949
+ DestinationSAP uint8
950
+ SourceSAP uint8
951
+ ServiceName string
952
+ raw RawSockaddrNFCLLCP
953
+ }
954
+
955
+ func (sa *SockaddrNFCLLCP) sockaddr() (unsafe.Pointer, _Socklen, error) {
956
+ sa.raw.Sa_family = AF_NFC
957
+ sa.raw.Dev_idx = sa.DeviceIdx
958
+ sa.raw.Target_idx = sa.TargetIdx
959
+ sa.raw.Nfc_protocol = sa.NFCProtocol
960
+ sa.raw.Dsap = sa.DestinationSAP
961
+ sa.raw.Ssap = sa.SourceSAP
962
+ if len(sa.ServiceName) > len(sa.raw.Service_name) {
963
+ return nil, 0, EINVAL
964
+ }
965
+ copy(sa.raw.Service_name[:], sa.ServiceName)
966
+ sa.raw.SetServiceNameLen(len(sa.ServiceName))
967
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrNFCLLCP, nil
968
+ }
969
+
970
+ var socketProtocol = func(fd int) (int, error) {
971
+ return GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL)
972
+ }
973
+
974
+ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
975
+ switch rsa.Addr.Family {
976
+ case AF_NETLINK:
977
+ pp := (*RawSockaddrNetlink)(unsafe.Pointer(rsa))
978
+ sa := new(SockaddrNetlink)
979
+ sa.Family = pp.Family
980
+ sa.Pad = pp.Pad
981
+ sa.Pid = pp.Pid
982
+ sa.Groups = pp.Groups
983
+ return sa, nil
984
+
985
+ case AF_PACKET:
986
+ pp := (*RawSockaddrLinklayer)(unsafe.Pointer(rsa))
987
+ sa := new(SockaddrLinklayer)
988
+ sa.Protocol = pp.Protocol
989
+ sa.Ifindex = int(pp.Ifindex)
990
+ sa.Hatype = pp.Hatype
991
+ sa.Pkttype = pp.Pkttype
992
+ sa.Halen = pp.Halen
993
+ sa.Addr = pp.Addr
994
+ return sa, nil
995
+
996
+ case AF_UNIX:
997
+ pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
998
+ sa := new(SockaddrUnix)
999
+ if pp.Path[0] == 0 {
1000
+ // "Abstract" Unix domain socket.
1001
+ // Rewrite leading NUL as @ for textual display.
1002
+ // (This is the standard convention.)
1003
+ // Not friendly to overwrite in place,
1004
+ // but the callers below don't care.
1005
+ pp.Path[0] = '@'
1006
+ }
1007
+
1008
+ // Assume path ends at NUL.
1009
+ // This is not technically the Linux semantics for
1010
+ // abstract Unix domain sockets--they are supposed
1011
+ // to be uninterpreted fixed-size binary blobs--but
1012
+ // everyone uses this convention.
1013
+ n := 0
1014
+ for n < len(pp.Path) && pp.Path[n] != 0 {
1015
+ n++
1016
+ }
1017
+ sa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n))
1018
+ return sa, nil
1019
+
1020
+ case AF_INET:
1021
+ proto, err := socketProtocol(fd)
1022
+ if err != nil {
1023
+ return nil, err
1024
+ }
1025
+
1026
+ switch proto {
1027
+ case IPPROTO_L2TP:
1028
+ pp := (*RawSockaddrL2TPIP)(unsafe.Pointer(rsa))
1029
+ sa := new(SockaddrL2TPIP)
1030
+ sa.ConnId = pp.Conn_id
1031
+ sa.Addr = pp.Addr
1032
+ return sa, nil
1033
+ default:
1034
+ pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
1035
+ sa := new(SockaddrInet4)
1036
+ p := (*[2]byte)(unsafe.Pointer(&pp.Port))
1037
+ sa.Port = int(p[0])<<8 + int(p[1])
1038
+ sa.Addr = pp.Addr
1039
+ return sa, nil
1040
+ }
1041
+
1042
+ case AF_INET6:
1043
+ proto, err := socketProtocol(fd)
1044
+ if err != nil {
1045
+ return nil, err
1046
+ }
1047
+
1048
+ switch proto {
1049
+ case IPPROTO_L2TP:
1050
+ pp := (*RawSockaddrL2TPIP6)(unsafe.Pointer(rsa))
1051
+ sa := new(SockaddrL2TPIP6)
1052
+ sa.ConnId = pp.Conn_id
1053
+ sa.ZoneId = pp.Scope_id
1054
+ sa.Addr = pp.Addr
1055
+ return sa, nil
1056
+ default:
1057
+ pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))
1058
+ sa := new(SockaddrInet6)
1059
+ p := (*[2]byte)(unsafe.Pointer(&pp.Port))
1060
+ sa.Port = int(p[0])<<8 + int(p[1])
1061
+ sa.ZoneId = pp.Scope_id
1062
+ sa.Addr = pp.Addr
1063
+ return sa, nil
1064
+ }
1065
+
1066
+ case AF_VSOCK:
1067
+ pp := (*RawSockaddrVM)(unsafe.Pointer(rsa))
1068
+ sa := &SockaddrVM{
1069
+ CID: pp.Cid,
1070
+ Port: pp.Port,
1071
+ Flags: pp.Flags,
1072
+ }
1073
+ return sa, nil
1074
+ case AF_BLUETOOTH:
1075
+ proto, err := socketProtocol(fd)
1076
+ if err != nil {
1077
+ return nil, err
1078
+ }
1079
+ // only BTPROTO_L2CAP and BTPROTO_RFCOMM can accept connections
1080
+ switch proto {
1081
+ case BTPROTO_L2CAP:
1082
+ pp := (*RawSockaddrL2)(unsafe.Pointer(rsa))
1083
+ sa := &SockaddrL2{
1084
+ PSM: pp.Psm,
1085
+ CID: pp.Cid,
1086
+ Addr: pp.Bdaddr,
1087
+ AddrType: pp.Bdaddr_type,
1088
+ }
1089
+ return sa, nil
1090
+ case BTPROTO_RFCOMM:
1091
+ pp := (*RawSockaddrRFCOMM)(unsafe.Pointer(rsa))
1092
+ sa := &SockaddrRFCOMM{
1093
+ Channel: pp.Channel,
1094
+ Addr: pp.Bdaddr,
1095
+ }
1096
+ return sa, nil
1097
+ }
1098
+ case AF_XDP:
1099
+ pp := (*RawSockaddrXDP)(unsafe.Pointer(rsa))
1100
+ sa := &SockaddrXDP{
1101
+ Flags: pp.Flags,
1102
+ Ifindex: pp.Ifindex,
1103
+ QueueID: pp.Queue_id,
1104
+ SharedUmemFD: pp.Shared_umem_fd,
1105
+ }
1106
+ return sa, nil
1107
+ case AF_PPPOX:
1108
+ pp := (*RawSockaddrPPPoX)(unsafe.Pointer(rsa))
1109
+ if binary.BigEndian.Uint32(pp[2:6]) != px_proto_oe {
1110
+ return nil, EINVAL
1111
+ }
1112
+ sa := &SockaddrPPPoE{
1113
+ SID: binary.BigEndian.Uint16(pp[6:8]),
1114
+ Remote: pp[8:14],
1115
+ }
1116
+ for i := 14; i < 14+IFNAMSIZ; i++ {
1117
+ if pp[i] == 0 {
1118
+ sa.Dev = string(pp[14:i])
1119
+ break
1120
+ }
1121
+ }
1122
+ return sa, nil
1123
+ case AF_TIPC:
1124
+ pp := (*RawSockaddrTIPC)(unsafe.Pointer(rsa))
1125
+
1126
+ sa := &SockaddrTIPC{
1127
+ Scope: int(pp.Scope),
1128
+ }
1129
+
1130
+ // Determine which union variant is present in pp.Addr by checking
1131
+ // pp.Addrtype.
1132
+ switch pp.Addrtype {
1133
+ case TIPC_SERVICE_RANGE:
1134
+ sa.Addr = (*TIPCServiceRange)(unsafe.Pointer(&pp.Addr))
1135
+ case TIPC_SERVICE_ADDR:
1136
+ sa.Addr = (*TIPCServiceName)(unsafe.Pointer(&pp.Addr))
1137
+ case TIPC_SOCKET_ADDR:
1138
+ sa.Addr = (*TIPCSocketAddr)(unsafe.Pointer(&pp.Addr))
1139
+ default:
1140
+ return nil, EINVAL
1141
+ }
1142
+
1143
+ return sa, nil
1144
+ case AF_IUCV:
1145
+ pp := (*RawSockaddrIUCV)(unsafe.Pointer(rsa))
1146
+
1147
+ var user [8]byte
1148
+ var name [8]byte
1149
+
1150
+ for i := range 8 {
1151
+ user[i] = byte(pp.User_id[i])
1152
+ name[i] = byte(pp.Name[i])
1153
+ }
1154
+
1155
+ sa := &SockaddrIUCV{
1156
+ UserID: string(user[:]),
1157
+ Name: string(name[:]),
1158
+ }
1159
+ return sa, nil
1160
+
1161
+ case AF_CAN:
1162
+ proto, err := socketProtocol(fd)
1163
+ if err != nil {
1164
+ return nil, err
1165
+ }
1166
+
1167
+ pp := (*RawSockaddrCAN)(unsafe.Pointer(rsa))
1168
+
1169
+ switch proto {
1170
+ case CAN_J1939:
1171
+ sa := &SockaddrCANJ1939{
1172
+ Ifindex: int(pp.Ifindex),
1173
+ }
1174
+ name := (*[8]byte)(unsafe.Pointer(&sa.Name))
1175
+ for i := range 8 {
1176
+ name[i] = pp.Addr[i]
1177
+ }
1178
+ pgn := (*[4]byte)(unsafe.Pointer(&sa.PGN))
1179
+ for i := range 4 {
1180
+ pgn[i] = pp.Addr[i+8]
1181
+ }
1182
+ addr := (*[1]byte)(unsafe.Pointer(&sa.Addr))
1183
+ addr[0] = pp.Addr[12]
1184
+ return sa, nil
1185
+ default:
1186
+ sa := &SockaddrCAN{
1187
+ Ifindex: int(pp.Ifindex),
1188
+ }
1189
+ rx := (*[4]byte)(unsafe.Pointer(&sa.RxID))
1190
+ for i := range 4 {
1191
+ rx[i] = pp.Addr[i]
1192
+ }
1193
+ tx := (*[4]byte)(unsafe.Pointer(&sa.TxID))
1194
+ for i := range 4 {
1195
+ tx[i] = pp.Addr[i+4]
1196
+ }
1197
+ return sa, nil
1198
+ }
1199
+ case AF_NFC:
1200
+ proto, err := socketProtocol(fd)
1201
+ if err != nil {
1202
+ return nil, err
1203
+ }
1204
+ switch proto {
1205
+ case NFC_SOCKPROTO_RAW:
1206
+ pp := (*RawSockaddrNFC)(unsafe.Pointer(rsa))
1207
+ sa := &SockaddrNFC{
1208
+ DeviceIdx: pp.Dev_idx,
1209
+ TargetIdx: pp.Target_idx,
1210
+ NFCProtocol: pp.Nfc_protocol,
1211
+ }
1212
+ return sa, nil
1213
+ case NFC_SOCKPROTO_LLCP:
1214
+ pp := (*RawSockaddrNFCLLCP)(unsafe.Pointer(rsa))
1215
+ if uint64(pp.Service_name_len) > uint64(len(pp.Service_name)) {
1216
+ return nil, EINVAL
1217
+ }
1218
+ sa := &SockaddrNFCLLCP{
1219
+ DeviceIdx: pp.Dev_idx,
1220
+ TargetIdx: pp.Target_idx,
1221
+ NFCProtocol: pp.Nfc_protocol,
1222
+ DestinationSAP: pp.Dsap,
1223
+ SourceSAP: pp.Ssap,
1224
+ ServiceName: string(pp.Service_name[:pp.Service_name_len]),
1225
+ }
1226
+ return sa, nil
1227
+ default:
1228
+ return nil, EINVAL
1229
+ }
1230
+ }
1231
+ return nil, EAFNOSUPPORT
1232
+ }
1233
+
1234
+ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
1235
+ var rsa RawSockaddrAny
1236
+ var len _Socklen = SizeofSockaddrAny
1237
+ nfd, err = accept4(fd, &rsa, &len, 0)
1238
+ if err != nil {
1239
+ return
1240
+ }
1241
+ sa, err = anyToSockaddr(fd, &rsa)
1242
+ if err != nil {
1243
+ Close(nfd)
1244
+ nfd = 0
1245
+ }
1246
+ return
1247
+ }
1248
+
1249
+ func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {
1250
+ var rsa RawSockaddrAny
1251
+ var len _Socklen = SizeofSockaddrAny
1252
+ nfd, err = accept4(fd, &rsa, &len, flags)
1253
+ if err != nil {
1254
+ return
1255
+ }
1256
+ if len > SizeofSockaddrAny {
1257
+ panic("RawSockaddrAny too small")
1258
+ }
1259
+ sa, err = anyToSockaddr(fd, &rsa)
1260
+ if err != nil {
1261
+ Close(nfd)
1262
+ nfd = 0
1263
+ }
1264
+ return
1265
+ }
1266
+
1267
+ func Getsockname(fd int) (sa Sockaddr, err error) {
1268
+ var rsa RawSockaddrAny
1269
+ var len _Socklen = SizeofSockaddrAny
1270
+ if err = getsockname(fd, &rsa, &len); err != nil {
1271
+ return
1272
+ }
1273
+ return anyToSockaddr(fd, &rsa)
1274
+ }
1275
+
1276
+ func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {
1277
+ var value IPMreqn
1278
+ vallen := _Socklen(SizeofIPMreqn)
1279
+ err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
1280
+ return &value, err
1281
+ }
1282
+
1283
+ func GetsockoptUcred(fd, level, opt int) (*Ucred, error) {
1284
+ var value Ucred
1285
+ vallen := _Socklen(SizeofUcred)
1286
+ err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
1287
+ return &value, err
1288
+ }
1289
+
1290
+ func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) {
1291
+ var value TCPInfo
1292
+ vallen := _Socklen(SizeofTCPInfo)
1293
+ err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
1294
+ return &value, err
1295
+ }
1296
+
1297
+ // GetsockoptTCPCCVegasInfo returns algorithm specific congestion control information for a socket using the "vegas"
1298
+ // algorithm.
1299
+ //
1300
+ // The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option:
1301
+ //
1302
+ // algo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION)
1303
+ func GetsockoptTCPCCVegasInfo(fd, level, opt int) (*TCPVegasInfo, error) {
1304
+ var value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment
1305
+ vallen := _Socklen(SizeofTCPCCInfo)
1306
+ err := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)
1307
+ out := (*TCPVegasInfo)(unsafe.Pointer(&value[0]))
1308
+ return out, err
1309
+ }
1310
+
1311
+ // GetsockoptTCPCCDCTCPInfo returns algorithm specific congestion control information for a socket using the "dctp"
1312
+ // algorithm.
1313
+ //
1314
+ // The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option:
1315
+ //
1316
+ // algo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION)
1317
+ func GetsockoptTCPCCDCTCPInfo(fd, level, opt int) (*TCPDCTCPInfo, error) {
1318
+ var value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment
1319
+ vallen := _Socklen(SizeofTCPCCInfo)
1320
+ err := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)
1321
+ out := (*TCPDCTCPInfo)(unsafe.Pointer(&value[0]))
1322
+ return out, err
1323
+ }
1324
+
1325
+ // GetsockoptTCPCCBBRInfo returns algorithm specific congestion control information for a socket using the "bbr"
1326
+ // algorithm.
1327
+ //
1328
+ // The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option:
1329
+ //
1330
+ // algo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION)
1331
+ func GetsockoptTCPCCBBRInfo(fd, level, opt int) (*TCPBBRInfo, error) {
1332
+ var value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment
1333
+ vallen := _Socklen(SizeofTCPCCInfo)
1334
+ err := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)
1335
+ out := (*TCPBBRInfo)(unsafe.Pointer(&value[0]))
1336
+ return out, err
1337
+ }
1338
+
1339
+ // GetsockoptString returns the string value of the socket option opt for the
1340
+ // socket associated with fd at the given socket level.
1341
+ func GetsockoptString(fd, level, opt int) (string, error) {
1342
+ buf := make([]byte, 256)
1343
+ vallen := _Socklen(len(buf))
1344
+ err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)
1345
+ if err != nil {
1346
+ if err == ERANGE {
1347
+ buf = make([]byte, vallen)
1348
+ err = getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)
1349
+ }
1350
+ if err != nil {
1351
+ return "", err
1352
+ }
1353
+ }
1354
+ return ByteSliceToString(buf[:vallen]), nil
1355
+ }
1356
+
1357
+ func GetsockoptTpacketStats(fd, level, opt int) (*TpacketStats, error) {
1358
+ var value TpacketStats
1359
+ vallen := _Socklen(SizeofTpacketStats)
1360
+ err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
1361
+ return &value, err
1362
+ }
1363
+
1364
+ func GetsockoptTpacketStatsV3(fd, level, opt int) (*TpacketStatsV3, error) {
1365
+ var value TpacketStatsV3
1366
+ vallen := _Socklen(SizeofTpacketStatsV3)
1367
+ err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
1368
+ return &value, err
1369
+ }
1370
+
1371
+ func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {
1372
+ return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))
1373
+ }
1374
+
1375
+ func SetsockoptPacketMreq(fd, level, opt int, mreq *PacketMreq) error {
1376
+ return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))
1377
+ }
1378
+
1379
+ // SetsockoptSockFprog attaches a classic BPF or an extended BPF program to a
1380
+ // socket to filter incoming packets. See 'man 7 socket' for usage information.
1381
+ func SetsockoptSockFprog(fd, level, opt int, fprog *SockFprog) error {
1382
+ return setsockopt(fd, level, opt, unsafe.Pointer(fprog), unsafe.Sizeof(*fprog))
1383
+ }
1384
+
1385
+ func SetsockoptCanRawFilter(fd, level, opt int, filter []CanFilter) error {
1386
+ var p unsafe.Pointer
1387
+ if len(filter) > 0 {
1388
+ p = unsafe.Pointer(&filter[0])
1389
+ }
1390
+ return setsockopt(fd, level, opt, p, uintptr(len(filter)*SizeofCanFilter))
1391
+ }
1392
+
1393
+ func SetsockoptTpacketReq(fd, level, opt int, tp *TpacketReq) error {
1394
+ return setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp))
1395
+ }
1396
+
1397
+ func SetsockoptTpacketReq3(fd, level, opt int, tp *TpacketReq3) error {
1398
+ return setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp))
1399
+ }
1400
+
1401
+ func SetsockoptTCPRepairOpt(fd, level, opt int, o []TCPRepairOpt) (err error) {
1402
+ if len(o) == 0 {
1403
+ return EINVAL
1404
+ }
1405
+ return setsockopt(fd, level, opt, unsafe.Pointer(&o[0]), uintptr(SizeofTCPRepairOpt*len(o)))
1406
+ }
1407
+
1408
+ func SetsockoptTCPMD5Sig(fd, level, opt int, s *TCPMD5Sig) error {
1409
+ return setsockopt(fd, level, opt, unsafe.Pointer(s), unsafe.Sizeof(*s))
1410
+ }
1411
+
1412
+ // Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html)
1413
+
1414
+ // KeyctlInt calls keyctl commands in which each argument is an int.
1415
+ // These commands are KEYCTL_REVOKE, KEYCTL_CHOWN, KEYCTL_CLEAR, KEYCTL_LINK,
1416
+ // KEYCTL_UNLINK, KEYCTL_NEGATE, KEYCTL_SET_REQKEY_KEYRING, KEYCTL_SET_TIMEOUT,
1417
+ // KEYCTL_ASSUME_AUTHORITY, KEYCTL_SESSION_TO_PARENT, KEYCTL_REJECT,
1418
+ // KEYCTL_INVALIDATE, and KEYCTL_GET_PERSISTENT.
1419
+ //sys KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) = SYS_KEYCTL
1420
+
1421
+ // KeyctlBuffer calls keyctl commands in which the third and fourth
1422
+ // arguments are a buffer and its length, respectively.
1423
+ // These commands are KEYCTL_UPDATE, KEYCTL_READ, and KEYCTL_INSTANTIATE.
1424
+ //sys KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) = SYS_KEYCTL
1425
+
1426
+ // KeyctlString calls keyctl commands which return a string.
1427
+ // These commands are KEYCTL_DESCRIBE and KEYCTL_GET_SECURITY.
1428
+ func KeyctlString(cmd int, id int) (string, error) {
1429
+ // We must loop as the string data may change in between the syscalls.
1430
+ // We could allocate a large buffer here to reduce the chance that the
1431
+ // syscall needs to be called twice; however, this is unnecessary as
1432
+ // the performance loss is negligible.
1433
+ var buffer []byte
1434
+ for {
1435
+ // Try to fill the buffer with data
1436
+ length, err := KeyctlBuffer(cmd, id, buffer, 0)
1437
+ if err != nil {
1438
+ return "", err
1439
+ }
1440
+
1441
+ // Check if the data was written
1442
+ if length <= len(buffer) {
1443
+ // Exclude the null terminator
1444
+ return string(buffer[:length-1]), nil
1445
+ }
1446
+
1447
+ // Make a bigger buffer if needed
1448
+ buffer = make([]byte, length)
1449
+ }
1450
+ }
1451
+
1452
+ // Keyctl commands with special signatures.
1453
+
1454
+ // KeyctlGetKeyringID implements the KEYCTL_GET_KEYRING_ID command.
1455
+ // See the full documentation at:
1456
+ // http://man7.org/linux/man-pages/man3/keyctl_get_keyring_ID.3.html
1457
+ func KeyctlGetKeyringID(id int, create bool) (ringid int, err error) {
1458
+ createInt := 0
1459
+ if create {
1460
+ createInt = 1
1461
+ }
1462
+ return KeyctlInt(KEYCTL_GET_KEYRING_ID, id, createInt, 0, 0)
1463
+ }
1464
+
1465
+ // KeyctlSetperm implements the KEYCTL_SETPERM command. The perm value is the
1466
+ // key handle permission mask as described in the "keyctl setperm" section of
1467
+ // http://man7.org/linux/man-pages/man1/keyctl.1.html.
1468
+ // See the full documentation at:
1469
+ // http://man7.org/linux/man-pages/man3/keyctl_setperm.3.html
1470
+ func KeyctlSetperm(id int, perm uint32) error {
1471
+ _, err := KeyctlInt(KEYCTL_SETPERM, id, int(perm), 0, 0)
1472
+ return err
1473
+ }
1474
+
1475
+ //sys keyctlJoin(cmd int, arg2 string) (ret int, err error) = SYS_KEYCTL
1476
+
1477
+ // KeyctlJoinSessionKeyring implements the KEYCTL_JOIN_SESSION_KEYRING command.
1478
+ // See the full documentation at:
1479
+ // http://man7.org/linux/man-pages/man3/keyctl_join_session_keyring.3.html
1480
+ func KeyctlJoinSessionKeyring(name string) (ringid int, err error) {
1481
+ return keyctlJoin(KEYCTL_JOIN_SESSION_KEYRING, name)
1482
+ }
1483
+
1484
+ //sys keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) = SYS_KEYCTL
1485
+
1486
+ // KeyctlSearch implements the KEYCTL_SEARCH command.
1487
+ // See the full documentation at:
1488
+ // http://man7.org/linux/man-pages/man3/keyctl_search.3.html
1489
+ func KeyctlSearch(ringid int, keyType, description string, destRingid int) (id int, err error) {
1490
+ return keyctlSearch(KEYCTL_SEARCH, ringid, keyType, description, destRingid)
1491
+ }
1492
+
1493
+ //sys keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) = SYS_KEYCTL
1494
+
1495
+ // KeyctlInstantiateIOV implements the KEYCTL_INSTANTIATE_IOV command. This
1496
+ // command is similar to KEYCTL_INSTANTIATE, except that the payload is a slice
1497
+ // of Iovec (each of which represents a buffer) instead of a single buffer.
1498
+ // See the full documentation at:
1499
+ // http://man7.org/linux/man-pages/man3/keyctl_instantiate_iov.3.html
1500
+ func KeyctlInstantiateIOV(id int, payload []Iovec, ringid int) error {
1501
+ return keyctlIOV(KEYCTL_INSTANTIATE_IOV, id, payload, ringid)
1502
+ }
1503
+
1504
+ //sys keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) = SYS_KEYCTL
1505
+
1506
+ // KeyctlDHCompute implements the KEYCTL_DH_COMPUTE command. This command
1507
+ // computes a Diffie-Hellman shared secret based on the provide params. The
1508
+ // secret is written to the provided buffer and the returned size is the number
1509
+ // of bytes written (returning an error if there is insufficient space in the
1510
+ // buffer). If a nil buffer is passed in, this function returns the minimum
1511
+ // buffer length needed to store the appropriate data. Note that this differs
1512
+ // from KEYCTL_READ's behavior which always returns the requested payload size.
1513
+ // See the full documentation at:
1514
+ // http://man7.org/linux/man-pages/man3/keyctl_dh_compute.3.html
1515
+ func KeyctlDHCompute(params *KeyctlDHParams, buffer []byte) (size int, err error) {
1516
+ return keyctlDH(KEYCTL_DH_COMPUTE, params, buffer)
1517
+ }
1518
+
1519
+ // KeyctlRestrictKeyring implements the KEYCTL_RESTRICT_KEYRING command. This
1520
+ // command limits the set of keys that can be linked to the keyring, regardless
1521
+ // of keyring permissions. The command requires the "setattr" permission.
1522
+ //
1523
+ // When called with an empty keyType the command locks the keyring, preventing
1524
+ // any further keys from being linked to the keyring.
1525
+ //
1526
+ // The "asymmetric" keyType defines restrictions requiring key payloads to be
1527
+ // DER encoded X.509 certificates signed by keys in another keyring. Restrictions
1528
+ // for "asymmetric" include "builtin_trusted", "builtin_and_secondary_trusted",
1529
+ // "key_or_keyring:<key>", and "key_or_keyring:<key>:chain".
1530
+ //
1531
+ // As of Linux 4.12, only the "asymmetric" keyType defines type-specific
1532
+ // restrictions.
1533
+ //
1534
+ // See the full documentation at:
1535
+ // http://man7.org/linux/man-pages/man3/keyctl_restrict_keyring.3.html
1536
+ // http://man7.org/linux/man-pages/man2/keyctl.2.html
1537
+ func KeyctlRestrictKeyring(ringid int, keyType string, restriction string) error {
1538
+ if keyType == "" {
1539
+ return keyctlRestrictKeyring(KEYCTL_RESTRICT_KEYRING, ringid)
1540
+ }
1541
+ return keyctlRestrictKeyringByType(KEYCTL_RESTRICT_KEYRING, ringid, keyType, restriction)
1542
+ }
1543
+
1544
+ //sys keyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) = SYS_KEYCTL
1545
+ //sys keyctlRestrictKeyring(cmd int, arg2 int) (err error) = SYS_KEYCTL
1546
+
1547
+ func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {
1548
+ var msg Msghdr
1549
+ msg.Name = (*byte)(unsafe.Pointer(rsa))
1550
+ msg.Namelen = uint32(SizeofSockaddrAny)
1551
+ var dummy byte
1552
+ if len(oob) > 0 {
1553
+ if emptyIovecs(iov) {
1554
+ var sockType int
1555
+ sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE)
1556
+ if err != nil {
1557
+ return
1558
+ }
1559
+ // receive at least one normal byte
1560
+ if sockType != SOCK_DGRAM {
1561
+ var iova [1]Iovec
1562
+ iova[0].Base = &dummy
1563
+ iova[0].SetLen(1)
1564
+ iov = iova[:]
1565
+ }
1566
+ }
1567
+ msg.Control = &oob[0]
1568
+ msg.SetControllen(len(oob))
1569
+ }
1570
+ if len(iov) > 0 {
1571
+ msg.Iov = &iov[0]
1572
+ msg.SetIovlen(len(iov))
1573
+ }
1574
+ if n, err = recvmsg(fd, &msg, flags); err != nil {
1575
+ return
1576
+ }
1577
+ oobn = int(msg.Controllen)
1578
+ recvflags = int(msg.Flags)
1579
+ return
1580
+ }
1581
+
1582
+ func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {
1583
+ var msg Msghdr
1584
+ msg.Name = (*byte)(ptr)
1585
+ msg.Namelen = uint32(salen)
1586
+ var dummy byte
1587
+ var empty bool
1588
+ if len(oob) > 0 {
1589
+ empty = emptyIovecs(iov)
1590
+ if empty {
1591
+ var sockType int
1592
+ sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE)
1593
+ if err != nil {
1594
+ return 0, err
1595
+ }
1596
+ // send at least one normal byte
1597
+ if sockType != SOCK_DGRAM {
1598
+ var iova [1]Iovec
1599
+ iova[0].Base = &dummy
1600
+ iova[0].SetLen(1)
1601
+ iov = iova[:]
1602
+ }
1603
+ }
1604
+ msg.Control = &oob[0]
1605
+ msg.SetControllen(len(oob))
1606
+ }
1607
+ if len(iov) > 0 {
1608
+ msg.Iov = &iov[0]
1609
+ msg.SetIovlen(len(iov))
1610
+ }
1611
+ if n, err = sendmsg(fd, &msg, flags); err != nil {
1612
+ return 0, err
1613
+ }
1614
+ if len(oob) > 0 && empty {
1615
+ n = 0
1616
+ }
1617
+ return n, nil
1618
+ }
1619
+
1620
+ // BindToDevice binds the socket associated with fd to device.
1621
+ func BindToDevice(fd int, device string) (err error) {
1622
+ return SetsockoptString(fd, SOL_SOCKET, SO_BINDTODEVICE, device)
1623
+ }
1624
+
1625
+ //sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error)
1626
+ //sys ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) = SYS_PTRACE
1627
+
1628
+ func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err error) {
1629
+ // The peek requests are machine-size oriented, so we wrap it
1630
+ // to retrieve arbitrary-length data.
1631
+
1632
+ // The ptrace syscall differs from glibc's ptrace.
1633
+ // Peeks returns the word in *data, not as the return value.
1634
+
1635
+ var buf [SizeofPtr]byte
1636
+
1637
+ // Leading edge. PEEKTEXT/PEEKDATA don't require aligned
1638
+ // access (PEEKUSER warns that it might), but if we don't
1639
+ // align our reads, we might straddle an unmapped page
1640
+ // boundary and not get the bytes leading up to the page
1641
+ // boundary.
1642
+ n := 0
1643
+ if addr%SizeofPtr != 0 {
1644
+ err = ptracePtr(req, pid, addr-addr%SizeofPtr, unsafe.Pointer(&buf[0]))
1645
+ if err != nil {
1646
+ return 0, err
1647
+ }
1648
+ n += copy(out, buf[addr%SizeofPtr:])
1649
+ out = out[n:]
1650
+ }
1651
+
1652
+ // Remainder.
1653
+ for len(out) > 0 {
1654
+ // We use an internal buffer to guarantee alignment.
1655
+ // It's not documented if this is necessary, but we're paranoid.
1656
+ err = ptracePtr(req, pid, addr+uintptr(n), unsafe.Pointer(&buf[0]))
1657
+ if err != nil {
1658
+ return n, err
1659
+ }
1660
+ copied := copy(out, buf[0:])
1661
+ n += copied
1662
+ out = out[copied:]
1663
+ }
1664
+
1665
+ return n, nil
1666
+ }
1667
+
1668
+ func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) {
1669
+ return ptracePeek(PTRACE_PEEKTEXT, pid, addr, out)
1670
+ }
1671
+
1672
+ func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) {
1673
+ return ptracePeek(PTRACE_PEEKDATA, pid, addr, out)
1674
+ }
1675
+
1676
+ func PtracePeekUser(pid int, addr uintptr, out []byte) (count int, err error) {
1677
+ return ptracePeek(PTRACE_PEEKUSR, pid, addr, out)
1678
+ }
1679
+
1680
+ func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (count int, err error) {
1681
+ // As for ptracePeek, we need to align our accesses to deal
1682
+ // with the possibility of straddling an invalid page.
1683
+
1684
+ // Leading edge.
1685
+ n := 0
1686
+ if addr%SizeofPtr != 0 {
1687
+ var buf [SizeofPtr]byte
1688
+ err = ptracePtr(peekReq, pid, addr-addr%SizeofPtr, unsafe.Pointer(&buf[0]))
1689
+ if err != nil {
1690
+ return 0, err
1691
+ }
1692
+ n += copy(buf[addr%SizeofPtr:], data)
1693
+ word := *((*uintptr)(unsafe.Pointer(&buf[0])))
1694
+ err = ptrace(pokeReq, pid, addr-addr%SizeofPtr, word)
1695
+ if err != nil {
1696
+ return 0, err
1697
+ }
1698
+ data = data[n:]
1699
+ }
1700
+
1701
+ // Interior.
1702
+ for len(data) > SizeofPtr {
1703
+ word := *((*uintptr)(unsafe.Pointer(&data[0])))
1704
+ err = ptrace(pokeReq, pid, addr+uintptr(n), word)
1705
+ if err != nil {
1706
+ return n, err
1707
+ }
1708
+ n += SizeofPtr
1709
+ data = data[SizeofPtr:]
1710
+ }
1711
+
1712
+ // Trailing edge.
1713
+ if len(data) > 0 {
1714
+ var buf [SizeofPtr]byte
1715
+ err = ptracePtr(peekReq, pid, addr+uintptr(n), unsafe.Pointer(&buf[0]))
1716
+ if err != nil {
1717
+ return n, err
1718
+ }
1719
+ copy(buf[0:], data)
1720
+ word := *((*uintptr)(unsafe.Pointer(&buf[0])))
1721
+ err = ptrace(pokeReq, pid, addr+uintptr(n), word)
1722
+ if err != nil {
1723
+ return n, err
1724
+ }
1725
+ n += len(data)
1726
+ }
1727
+
1728
+ return n, nil
1729
+ }
1730
+
1731
+ func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) {
1732
+ return ptracePoke(PTRACE_POKETEXT, PTRACE_PEEKTEXT, pid, addr, data)
1733
+ }
1734
+
1735
+ func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) {
1736
+ return ptracePoke(PTRACE_POKEDATA, PTRACE_PEEKDATA, pid, addr, data)
1737
+ }
1738
+
1739
+ func PtracePokeUser(pid int, addr uintptr, data []byte) (count int, err error) {
1740
+ return ptracePoke(PTRACE_POKEUSR, PTRACE_PEEKUSR, pid, addr, data)
1741
+ }
1742
+
1743
+ // elfNT_PRSTATUS is a copy of the debug/elf.NT_PRSTATUS constant so
1744
+ // x/sys/unix doesn't need to depend on debug/elf and thus
1745
+ // compress/zlib, debug/dwarf, and other packages.
1746
+ const elfNT_PRSTATUS = 1
1747
+
1748
+ func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) {
1749
+ var iov Iovec
1750
+ iov.Base = (*byte)(unsafe.Pointer(regsout))
1751
+ iov.SetLen(int(unsafe.Sizeof(*regsout)))
1752
+ return ptracePtr(PTRACE_GETREGSET, pid, uintptr(elfNT_PRSTATUS), unsafe.Pointer(&iov))
1753
+ }
1754
+
1755
+ func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) {
1756
+ var iov Iovec
1757
+ iov.Base = (*byte)(unsafe.Pointer(regs))
1758
+ iov.SetLen(int(unsafe.Sizeof(*regs)))
1759
+ return ptracePtr(PTRACE_SETREGSET, pid, uintptr(elfNT_PRSTATUS), unsafe.Pointer(&iov))
1760
+ }
1761
+
1762
+ func PtraceSetOptions(pid int, options int) (err error) {
1763
+ return ptrace(PTRACE_SETOPTIONS, pid, 0, uintptr(options))
1764
+ }
1765
+
1766
+ func PtraceGetEventMsg(pid int) (msg uint, err error) {
1767
+ var data _C_long
1768
+ err = ptracePtr(PTRACE_GETEVENTMSG, pid, 0, unsafe.Pointer(&data))
1769
+ msg = uint(data)
1770
+ return
1771
+ }
1772
+
1773
+ func PtraceCont(pid int, signal int) (err error) {
1774
+ return ptrace(PTRACE_CONT, pid, 0, uintptr(signal))
1775
+ }
1776
+
1777
+ func PtraceSyscall(pid int, signal int) (err error) {
1778
+ return ptrace(PTRACE_SYSCALL, pid, 0, uintptr(signal))
1779
+ }
1780
+
1781
+ func PtraceSingleStep(pid int) (err error) { return ptrace(PTRACE_SINGLESTEP, pid, 0, 0) }
1782
+
1783
+ func PtraceInterrupt(pid int) (err error) { return ptrace(PTRACE_INTERRUPT, pid, 0, 0) }
1784
+
1785
+ func PtraceAttach(pid int) (err error) { return ptrace(PTRACE_ATTACH, pid, 0, 0) }
1786
+
1787
+ func PtraceSeize(pid int) (err error) { return ptrace(PTRACE_SEIZE, pid, 0, 0) }
1788
+
1789
+ func PtraceDetach(pid int) (err error) { return ptrace(PTRACE_DETACH, pid, 0, 0) }
1790
+
1791
+ //sys reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error)
1792
+
1793
+ func Reboot(cmd int) (err error) {
1794
+ return reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, "")
1795
+ }
1796
+
1797
+ func direntIno(buf []byte) (uint64, bool) {
1798
+ return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
1799
+ }
1800
+
1801
+ func direntReclen(buf []byte) (uint64, bool) {
1802
+ return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
1803
+ }
1804
+
1805
+ func direntNamlen(buf []byte) (uint64, bool) {
1806
+ reclen, ok := direntReclen(buf)
1807
+ if !ok {
1808
+ return 0, false
1809
+ }
1810
+ return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true
1811
+ }
1812
+
1813
+ //sys mount(source string, target string, fstype string, flags uintptr, data *byte) (err error)
1814
+
1815
+ func Mount(source string, target string, fstype string, flags uintptr, data string) (err error) {
1816
+ // Certain file systems get rather angry and EINVAL if you give
1817
+ // them an empty string of data, rather than NULL.
1818
+ if data == "" {
1819
+ return mount(source, target, fstype, flags, nil)
1820
+ }
1821
+ datap, err := BytePtrFromString(data)
1822
+ if err != nil {
1823
+ return err
1824
+ }
1825
+ return mount(source, target, fstype, flags, datap)
1826
+ }
1827
+
1828
+ //sys mountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr, size uintptr) (err error) = SYS_MOUNT_SETATTR
1829
+
1830
+ // MountSetattr is a wrapper for mount_setattr(2).
1831
+ // https://man7.org/linux/man-pages/man2/mount_setattr.2.html
1832
+ //
1833
+ // Requires kernel >= 5.12.
1834
+ func MountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr) error {
1835
+ return mountSetattr(dirfd, pathname, flags, attr, unsafe.Sizeof(*attr))
1836
+ }
1837
+
1838
+ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
1839
+ if raceenabled {
1840
+ raceReleaseMerge(unsafe.Pointer(&ioSync))
1841
+ }
1842
+ return sendfile(outfd, infd, offset, count)
1843
+ }
1844
+
1845
+ // Sendto
1846
+ // Recvfrom
1847
+ // Socketpair
1848
+
1849
+ /*
1850
+ * Direct access
1851
+ */
1852
+ //sys Acct(path string) (err error)
1853
+ //sys AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error)
1854
+ //sys Adjtimex(buf *Timex) (state int, err error)
1855
+ //sysnb Capget(hdr *CapUserHeader, data *CapUserData) (err error)
1856
+ //sysnb Capset(hdr *CapUserHeader, data *CapUserData) (err error)
1857
+ //sys Chdir(path string) (err error)
1858
+ //sys Chroot(path string) (err error)
1859
+ //sys ClockAdjtime(clockid int32, buf *Timex) (state int, err error)
1860
+ //sys ClockGetres(clockid int32, res *Timespec) (err error)
1861
+ //sys ClockGettime(clockid int32, time *Timespec) (err error)
1862
+ //sys ClockSettime(clockid int32, time *Timespec) (err error)
1863
+ //sys ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error)
1864
+ //sys Close(fd int) (err error)
1865
+ //sys CloseRange(first uint, last uint, flags uint) (err error)
1866
+ //sys CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
1867
+ //sys DeleteModule(name string, flags int) (err error)
1868
+ //sys Dup(oldfd int) (fd int, err error)
1869
+
1870
+ func Dup2(oldfd, newfd int) error {
1871
+ return Dup3(oldfd, newfd, 0)
1872
+ }
1873
+
1874
+ //sys Dup3(oldfd int, newfd int, flags int) (err error)
1875
+ //sysnb EpollCreate1(flag int) (fd int, err error)
1876
+ //sysnb EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error)
1877
+ //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
1878
+ //sys Eventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD2
1879
+ //sys Exit(code int) = SYS_EXIT_GROUP
1880
+ //sys Fallocate(fd int, mode uint32, off int64, len int64) (err error)
1881
+ //sys Fchdir(fd int) (err error)
1882
+ //sys Fchmod(fd int, mode uint32) (err error)
1883
+ //sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
1884
+ //sys Fdatasync(fd int) (err error)
1885
+ //sys Fgetxattr(fd int, attr string, dest []byte) (sz int, err error)
1886
+ //sys FinitModule(fd int, params string, flags int) (err error)
1887
+ //sys Flistxattr(fd int, dest []byte) (sz int, err error)
1888
+ //sys Flock(fd int, how int) (err error)
1889
+ //sys Fremovexattr(fd int, attr string) (err error)
1890
+ //sys Fsetxattr(fd int, attr string, dest []byte, flags int) (err error)
1891
+ //sys Fsync(fd int) (err error)
1892
+ //sys Fsmount(fd int, flags int, mountAttrs int) (fsfd int, err error)
1893
+ //sys Fsopen(fsName string, flags int) (fd int, err error)
1894
+ //sys Fspick(dirfd int, pathName string, flags int) (fd int, err error)
1895
+
1896
+ //sys fsconfig(fd int, cmd uint, key *byte, value *byte, aux int) (err error)
1897
+
1898
+ func fsconfigCommon(fd int, cmd uint, key string, value *byte, aux int) (err error) {
1899
+ var keyp *byte
1900
+ if keyp, err = BytePtrFromString(key); err != nil {
1901
+ return
1902
+ }
1903
+ return fsconfig(fd, cmd, keyp, value, aux)
1904
+ }
1905
+
1906
+ // FsconfigSetFlag is equivalent to fsconfig(2) called
1907
+ // with cmd == FSCONFIG_SET_FLAG.
1908
+ //
1909
+ // fd is the filesystem context to act upon.
1910
+ // key the parameter key to set.
1911
+ func FsconfigSetFlag(fd int, key string) (err error) {
1912
+ return fsconfigCommon(fd, FSCONFIG_SET_FLAG, key, nil, 0)
1913
+ }
1914
+
1915
+ // FsconfigSetString is equivalent to fsconfig(2) called
1916
+ // with cmd == FSCONFIG_SET_STRING.
1917
+ //
1918
+ // fd is the filesystem context to act upon.
1919
+ // key the parameter key to set.
1920
+ // value is the parameter value to set.
1921
+ func FsconfigSetString(fd int, key string, value string) (err error) {
1922
+ var valuep *byte
1923
+ if valuep, err = BytePtrFromString(value); err != nil {
1924
+ return
1925
+ }
1926
+ return fsconfigCommon(fd, FSCONFIG_SET_STRING, key, valuep, 0)
1927
+ }
1928
+
1929
+ // FsconfigSetBinary is equivalent to fsconfig(2) called
1930
+ // with cmd == FSCONFIG_SET_BINARY.
1931
+ //
1932
+ // fd is the filesystem context to act upon.
1933
+ // key the parameter key to set.
1934
+ // value is the parameter value to set.
1935
+ func FsconfigSetBinary(fd int, key string, value []byte) (err error) {
1936
+ if len(value) == 0 {
1937
+ return EINVAL
1938
+ }
1939
+ return fsconfigCommon(fd, FSCONFIG_SET_BINARY, key, &value[0], len(value))
1940
+ }
1941
+
1942
+ // FsconfigSetPath is equivalent to fsconfig(2) called
1943
+ // with cmd == FSCONFIG_SET_PATH.
1944
+ //
1945
+ // fd is the filesystem context to act upon.
1946
+ // key the parameter key to set.
1947
+ // path is a non-empty path for specified key.
1948
+ // atfd is a file descriptor at which to start lookup from or AT_FDCWD.
1949
+ func FsconfigSetPath(fd int, key string, path string, atfd int) (err error) {
1950
+ var valuep *byte
1951
+ if valuep, err = BytePtrFromString(path); err != nil {
1952
+ return
1953
+ }
1954
+ return fsconfigCommon(fd, FSCONFIG_SET_PATH, key, valuep, atfd)
1955
+ }
1956
+
1957
+ // FsconfigSetPathEmpty is equivalent to fsconfig(2) called
1958
+ // with cmd == FSCONFIG_SET_PATH_EMPTY. The same as
1959
+ // FconfigSetPath but with AT_PATH_EMPTY implied.
1960
+ func FsconfigSetPathEmpty(fd int, key string, path string, atfd int) (err error) {
1961
+ var valuep *byte
1962
+ if valuep, err = BytePtrFromString(path); err != nil {
1963
+ return
1964
+ }
1965
+ return fsconfigCommon(fd, FSCONFIG_SET_PATH_EMPTY, key, valuep, atfd)
1966
+ }
1967
+
1968
+ // FsconfigSetFd is equivalent to fsconfig(2) called
1969
+ // with cmd == FSCONFIG_SET_FD.
1970
+ //
1971
+ // fd is the filesystem context to act upon.
1972
+ // key the parameter key to set.
1973
+ // value is a file descriptor to be assigned to specified key.
1974
+ func FsconfigSetFd(fd int, key string, value int) (err error) {
1975
+ return fsconfigCommon(fd, FSCONFIG_SET_FD, key, nil, value)
1976
+ }
1977
+
1978
+ // FsconfigCreate is equivalent to fsconfig(2) called
1979
+ // with cmd == FSCONFIG_CMD_CREATE.
1980
+ //
1981
+ // fd is the filesystem context to act upon.
1982
+ func FsconfigCreate(fd int) (err error) {
1983
+ return fsconfig(fd, FSCONFIG_CMD_CREATE, nil, nil, 0)
1984
+ }
1985
+
1986
+ // FsconfigReconfigure is equivalent to fsconfig(2) called
1987
+ // with cmd == FSCONFIG_CMD_RECONFIGURE.
1988
+ //
1989
+ // fd is the filesystem context to act upon.
1990
+ func FsconfigReconfigure(fd int) (err error) {
1991
+ return fsconfig(fd, FSCONFIG_CMD_RECONFIGURE, nil, nil, 0)
1992
+ }
1993
+
1994
+ //sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64
1995
+ //sysnb Getpgid(pid int) (pgid int, err error)
1996
+
1997
+ func Getpgrp() (pid int) {
1998
+ pid, _ = Getpgid(0)
1999
+ return
2000
+ }
2001
+
2002
+ //sysnb Getpid() (pid int)
2003
+ //sysnb Getppid() (ppid int)
2004
+ //sys Getpriority(which int, who int) (prio int, err error)
2005
+
2006
+ func Getrandom(buf []byte, flags int) (n int, err error) {
2007
+ vdsoRet, supported := vgetrandom(buf, uint32(flags))
2008
+ if supported {
2009
+ if vdsoRet < 0 {
2010
+ return 0, errnoErr(syscall.Errno(-vdsoRet))
2011
+ }
2012
+ return vdsoRet, nil
2013
+ }
2014
+ var p *byte
2015
+ if len(buf) > 0 {
2016
+ p = &buf[0]
2017
+ }
2018
+ r, _, e := Syscall(SYS_GETRANDOM, uintptr(unsafe.Pointer(p)), uintptr(len(buf)), uintptr(flags))
2019
+ if e != 0 {
2020
+ return 0, errnoErr(e)
2021
+ }
2022
+ return int(r), nil
2023
+ }
2024
+
2025
+ //sysnb Getrusage(who int, rusage *Rusage) (err error)
2026
+ //sysnb Getsid(pid int) (sid int, err error)
2027
+ //sysnb Gettid() (tid int)
2028
+ //sys Getxattr(path string, attr string, dest []byte) (sz int, err error)
2029
+ //sys InitModule(moduleImage []byte, params string) (err error)
2030
+ //sys InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error)
2031
+ //sysnb InotifyInit1(flags int) (fd int, err error)
2032
+ //sysnb InotifyRmWatch(fd int, watchdesc uint32) (success int, err error)
2033
+ //sysnb Kill(pid int, sig syscall.Signal) (err error)
2034
+ //sys Klogctl(typ int, buf []byte) (n int, err error) = SYS_SYSLOG
2035
+ //sys Lgetxattr(path string, attr string, dest []byte) (sz int, err error)
2036
+ //sys Listxattr(path string, dest []byte) (sz int, err error)
2037
+ //sys Llistxattr(path string, dest []byte) (sz int, err error)
2038
+ //sys Lremovexattr(path string, attr string) (err error)
2039
+ //sys Lsetxattr(path string, attr string, data []byte, flags int) (err error)
2040
+ //sys MemfdCreate(name string, flags int) (fd int, err error)
2041
+ //sys Mkdirat(dirfd int, path string, mode uint32) (err error)
2042
+ //sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
2043
+ //sys MoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error)
2044
+ //sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
2045
+ //sys OpenTree(dfd int, fileName string, flags uint) (r int, err error)
2046
+ //sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error)
2047
+ //sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT
2048
+ //sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error)
2049
+ //sys pselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error)
2050
+ //sys read(fd int, p []byte) (n int, err error)
2051
+ //sys Removexattr(path string, attr string) (err error)
2052
+ //sys Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error)
2053
+ //sys RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error)
2054
+ //sys Setdomainname(p []byte) (err error)
2055
+ //sys Sethostname(p []byte) (err error)
2056
+ //sysnb Setpgid(pid int, pgid int) (err error)
2057
+ //sysnb Setsid() (pid int, err error)
2058
+ //sysnb Settimeofday(tv *Timeval) (err error)
2059
+ //sys Setns(fd int, nstype int) (err error)
2060
+
2061
+ //go:linkname syscall_prlimit syscall.prlimit
2062
+ func syscall_prlimit(pid, resource int, newlimit, old *syscall.Rlimit) error
2063
+
2064
+ func Prlimit(pid, resource int, newlimit, old *Rlimit) error {
2065
+ // Just call the syscall version, because as of Go 1.21
2066
+ // it will affect starting a new process.
2067
+ return syscall_prlimit(pid, resource, (*syscall.Rlimit)(newlimit), (*syscall.Rlimit)(old))
2068
+ }
2069
+
2070
+ // PrctlRetInt performs a prctl operation specified by option and further
2071
+ // optional arguments arg2 through arg5 depending on option. It returns a
2072
+ // non-negative integer that is returned by the prctl syscall.
2073
+ func PrctlRetInt(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (int, error) {
2074
+ ret, _, err := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
2075
+ if err != 0 {
2076
+ return 0, err
2077
+ }
2078
+ return int(ret), nil
2079
+ }
2080
+
2081
+ func Setuid(uid int) (err error) {
2082
+ return syscall.Setuid(uid)
2083
+ }
2084
+
2085
+ func Setgid(gid int) (err error) {
2086
+ return syscall.Setgid(gid)
2087
+ }
2088
+
2089
+ func Setreuid(ruid, euid int) (err error) {
2090
+ return syscall.Setreuid(ruid, euid)
2091
+ }
2092
+
2093
+ func Setregid(rgid, egid int) (err error) {
2094
+ return syscall.Setregid(rgid, egid)
2095
+ }
2096
+
2097
+ func Setresuid(ruid, euid, suid int) (err error) {
2098
+ return syscall.Setresuid(ruid, euid, suid)
2099
+ }
2100
+
2101
+ func Setresgid(rgid, egid, sgid int) (err error) {
2102
+ return syscall.Setresgid(rgid, egid, sgid)
2103
+ }
2104
+
2105
+ // SetfsgidRetGid sets fsgid for current thread and returns previous fsgid set.
2106
+ // setfsgid(2) will return a non-nil error only if its caller lacks CAP_SETUID capability.
2107
+ // If the call fails due to other reasons, current fsgid will be returned.
2108
+ func SetfsgidRetGid(gid int) (int, error) {
2109
+ return setfsgid(gid)
2110
+ }
2111
+
2112
+ // SetfsuidRetUid sets fsuid for current thread and returns previous fsuid set.
2113
+ // setfsgid(2) will return a non-nil error only if its caller lacks CAP_SETUID capability
2114
+ // If the call fails due to other reasons, current fsuid will be returned.
2115
+ func SetfsuidRetUid(uid int) (int, error) {
2116
+ return setfsuid(uid)
2117
+ }
2118
+
2119
+ func Setfsgid(gid int) error {
2120
+ _, err := setfsgid(gid)
2121
+ return err
2122
+ }
2123
+
2124
+ func Setfsuid(uid int) error {
2125
+ _, err := setfsuid(uid)
2126
+ return err
2127
+ }
2128
+
2129
+ func Signalfd(fd int, sigmask *Sigset_t, flags int) (newfd int, err error) {
2130
+ return signalfd(fd, sigmask, _C__NSIG/8, flags)
2131
+ }
2132
+
2133
+ //sys Setpriority(which int, who int, prio int) (err error)
2134
+ //sys Setxattr(path string, attr string, data []byte, flags int) (err error)
2135
+ //sys signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) = SYS_SIGNALFD4
2136
+ //sys Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error)
2137
+ //sys Sync()
2138
+ //sys Syncfs(fd int) (err error)
2139
+ //sysnb Sysinfo(info *Sysinfo_t) (err error)
2140
+ //sys Tee(rfd int, wfd int, len int, flags int) (n int64, err error)
2141
+ //sysnb TimerfdCreate(clockid int, flags int) (fd int, err error)
2142
+ //sysnb TimerfdGettime(fd int, currValue *ItimerSpec) (err error)
2143
+ //sysnb TimerfdSettime(fd int, flags int, newValue *ItimerSpec, oldValue *ItimerSpec) (err error)
2144
+ //sysnb Tgkill(tgid int, tid int, sig syscall.Signal) (err error)
2145
+ //sysnb Times(tms *Tms) (ticks uintptr, err error)
2146
+ //sysnb Umask(mask int) (oldmask int)
2147
+ //sysnb Uname(buf *Utsname) (err error)
2148
+ //sys Unmount(target string, flags int) (err error) = SYS_UMOUNT2
2149
+ //sys Unshare(flags int) (err error)
2150
+ //sys write(fd int, p []byte) (n int, err error)
2151
+ //sys exitThread(code int) (err error) = SYS_EXIT
2152
+ //sys readv(fd int, iovs []Iovec) (n int, err error) = SYS_READV
2153
+ //sys writev(fd int, iovs []Iovec) (n int, err error) = SYS_WRITEV
2154
+ //sys preadvSyscall(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PREADV
2155
+ //sys pwritevSyscall(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PWRITEV
2156
+ //sys preadv2Syscall(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PREADV2
2157
+ //sys pwritev2Syscall(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PWRITEV2
2158
+
2159
+ // offs2lohi splits offs into its low and high order bits.
2160
+ func offs2lohi(offs int64) (lo, hi uintptr) {
2161
+ const longBits = SizeofLong * 8
2162
+ return uintptr(offs), uintptr(uint64(offs) >> (longBits - 1) >> 1) // two shifts to avoid false positive in vet
2163
+ }
2164
+
2165
+ func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) {
2166
+ lo, hi := offs2lohi(offset)
2167
+ return preadvSyscall(fd, iovecs, lo, hi)
2168
+ }
2169
+
2170
+ func Preadv2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) {
2171
+ iovecs := make([]Iovec, 0, minIovec)
2172
+ iovecs = appendBytes(iovecs, iovs)
2173
+ lo, hi := offs2lohi(offset)
2174
+ n, err = preadv2Syscall(fd, iovecs, lo, hi, flags)
2175
+ readvRaceDetect(iovecs, n, err)
2176
+ return n, err
2177
+ }
2178
+
2179
+ func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) {
2180
+ lo, hi := offs2lohi(offset)
2181
+ return pwritevSyscall(fd, iovecs, lo, hi)
2182
+ }
2183
+
2184
+ func Pwritev2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) {
2185
+ iovecs := make([]Iovec, 0, minIovec)
2186
+ iovecs = appendBytes(iovecs, iovs)
2187
+ if raceenabled {
2188
+ raceReleaseMerge(unsafe.Pointer(&ioSync))
2189
+ }
2190
+ lo, hi := offs2lohi(offset)
2191
+ n, err = pwritev2Syscall(fd, iovecs, lo, hi, flags)
2192
+ writevRaceDetect(iovecs, n)
2193
+ return n, err
2194
+ }
2195
+
2196
+ // mmap varies by architecture; see syscall_linux_*.go.
2197
+ //sys munmap(addr uintptr, length uintptr) (err error)
2198
+ //sys mremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error)
2199
+ //sys Madvise(b []byte, advice int) (err error)
2200
+ //sys Mprotect(b []byte, prot int) (err error)
2201
+ //sys Mlock(b []byte) (err error)
2202
+ //sys Mlockall(flags int) (err error)
2203
+ //sys Msync(b []byte, flags int) (err error)
2204
+ //sys Munlock(b []byte) (err error)
2205
+ //sys Munlockall() (err error)
2206
+
2207
+ const (
2208
+ mremapFixed = MREMAP_FIXED
2209
+ mremapDontunmap = MREMAP_DONTUNMAP
2210
+ mremapMaymove = MREMAP_MAYMOVE
2211
+ )
2212
+
2213
+ // Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd,
2214
+ // using the specified flags.
2215
+ func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) {
2216
+ var p unsafe.Pointer
2217
+ if len(iovs) > 0 {
2218
+ p = unsafe.Pointer(&iovs[0])
2219
+ }
2220
+
2221
+ n, _, errno := Syscall6(SYS_VMSPLICE, uintptr(fd), uintptr(p), uintptr(len(iovs)), uintptr(flags), 0, 0)
2222
+ if errno != 0 {
2223
+ return 0, syscall.Errno(errno)
2224
+ }
2225
+
2226
+ return int(n), nil
2227
+ }
2228
+
2229
+ func isGroupMember(gid int) bool {
2230
+ groups, err := Getgroups()
2231
+ if err != nil {
2232
+ return false
2233
+ }
2234
+
2235
+ return slices.Contains(groups, gid)
2236
+ }
2237
+
2238
+ func isCapDacOverrideSet() bool {
2239
+ hdr := CapUserHeader{Version: LINUX_CAPABILITY_VERSION_3}
2240
+ data := [2]CapUserData{}
2241
+ err := Capget(&hdr, &data[0])
2242
+
2243
+ return err == nil && data[0].Effective&(1<<CAP_DAC_OVERRIDE) != 0
2244
+ }
2245
+
2246
+ //sys faccessat(dirfd int, path string, mode uint32) (err error)
2247
+ //sys Faccessat2(dirfd int, path string, mode uint32, flags int) (err error)
2248
+
2249
+ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
2250
+ if flags == 0 {
2251
+ return faccessat(dirfd, path, mode)
2252
+ }
2253
+
2254
+ if err := Faccessat2(dirfd, path, mode, flags); err != ENOSYS && err != EPERM {
2255
+ return err
2256
+ }
2257
+
2258
+ // The Linux kernel faccessat system call does not take any flags.
2259
+ // The glibc faccessat implements the flags itself; see
2260
+ // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/faccessat.c;hb=HEAD
2261
+ // Because people naturally expect syscall.Faccessat to act
2262
+ // like C faccessat, we do the same.
2263
+
2264
+ if flags & ^(AT_SYMLINK_NOFOLLOW|AT_EACCESS) != 0 {
2265
+ return EINVAL
2266
+ }
2267
+
2268
+ var st Stat_t
2269
+ if err := Fstatat(dirfd, path, &st, flags&AT_SYMLINK_NOFOLLOW); err != nil {
2270
+ return err
2271
+ }
2272
+
2273
+ mode &= 7
2274
+ if mode == 0 {
2275
+ return nil
2276
+ }
2277
+
2278
+ var uid int
2279
+ if flags&AT_EACCESS != 0 {
2280
+ uid = Geteuid()
2281
+ if uid != 0 && isCapDacOverrideSet() {
2282
+ // If CAP_DAC_OVERRIDE is set, file access check is
2283
+ // done by the kernel in the same way as for root
2284
+ // (see generic_permission() in the Linux sources).
2285
+ uid = 0
2286
+ }
2287
+ } else {
2288
+ uid = Getuid()
2289
+ }
2290
+
2291
+ if uid == 0 {
2292
+ if mode&1 == 0 {
2293
+ // Root can read and write any file.
2294
+ return nil
2295
+ }
2296
+ if st.Mode&0111 != 0 {
2297
+ // Root can execute any file that anybody can execute.
2298
+ return nil
2299
+ }
2300
+ return EACCES
2301
+ }
2302
+
2303
+ var fmode uint32
2304
+ if uint32(uid) == st.Uid {
2305
+ fmode = (st.Mode >> 6) & 7
2306
+ } else {
2307
+ var gid int
2308
+ if flags&AT_EACCESS != 0 {
2309
+ gid = Getegid()
2310
+ } else {
2311
+ gid = Getgid()
2312
+ }
2313
+
2314
+ if uint32(gid) == st.Gid || isGroupMember(int(st.Gid)) {
2315
+ fmode = (st.Mode >> 3) & 7
2316
+ } else {
2317
+ fmode = st.Mode & 7
2318
+ }
2319
+ }
2320
+
2321
+ if fmode&mode == mode {
2322
+ return nil
2323
+ }
2324
+
2325
+ return EACCES
2326
+ }
2327
+
2328
+ //sys nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) = SYS_NAME_TO_HANDLE_AT
2329
+ //sys openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) = SYS_OPEN_BY_HANDLE_AT
2330
+
2331
+ // fileHandle is the argument to nameToHandleAt and openByHandleAt. We
2332
+ // originally tried to generate it via unix/linux/types.go with "type
2333
+ // fileHandle C.struct_file_handle" but that generated empty structs
2334
+ // for mips64 and mips64le. Instead, hard code it for now (it's the
2335
+ // same everywhere else) until the mips64 generator issue is fixed.
2336
+ type fileHandle struct {
2337
+ Bytes uint32
2338
+ Type int32
2339
+ }
2340
+
2341
+ // FileHandle represents the C struct file_handle used by
2342
+ // name_to_handle_at (see NameToHandleAt) and open_by_handle_at (see
2343
+ // OpenByHandleAt).
2344
+ type FileHandle struct {
2345
+ *fileHandle
2346
+ }
2347
+
2348
+ // NewFileHandle constructs a FileHandle.
2349
+ func NewFileHandle(handleType int32, handle []byte) FileHandle {
2350
+ const hdrSize = unsafe.Sizeof(fileHandle{})
2351
+ buf := make([]byte, hdrSize+uintptr(len(handle)))
2352
+ copy(buf[hdrSize:], handle)
2353
+ fh := (*fileHandle)(unsafe.Pointer(&buf[0]))
2354
+ fh.Type = handleType
2355
+ fh.Bytes = uint32(len(handle))
2356
+ return FileHandle{fh}
2357
+ }
2358
+
2359
+ func (fh *FileHandle) Size() int { return int(fh.fileHandle.Bytes) }
2360
+ func (fh *FileHandle) Type() int32 { return fh.fileHandle.Type }
2361
+ func (fh *FileHandle) Bytes() []byte {
2362
+ n := fh.Size()
2363
+ if n == 0 {
2364
+ return nil
2365
+ }
2366
+ return unsafe.Slice((*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(&fh.fileHandle.Type))+4)), n)
2367
+ }
2368
+
2369
+ // NameToHandleAt wraps the name_to_handle_at system call; it obtains
2370
+ // a handle for a path name.
2371
+ func NameToHandleAt(dirfd int, path string, flags int) (handle FileHandle, mountID int, err error) {
2372
+ var mid _C_int
2373
+ // Try first with a small buffer, assuming the handle will
2374
+ // only be 32 bytes.
2375
+ size := uint32(32 + unsafe.Sizeof(fileHandle{}))
2376
+ didResize := false
2377
+ for {
2378
+ buf := make([]byte, size)
2379
+ fh := (*fileHandle)(unsafe.Pointer(&buf[0]))
2380
+ fh.Bytes = size - uint32(unsafe.Sizeof(fileHandle{}))
2381
+ err = nameToHandleAt(dirfd, path, fh, &mid, flags)
2382
+ if err == EOVERFLOW {
2383
+ if didResize {
2384
+ // We shouldn't need to resize more than once
2385
+ return
2386
+ }
2387
+ didResize = true
2388
+ size = fh.Bytes + uint32(unsafe.Sizeof(fileHandle{}))
2389
+ continue
2390
+ }
2391
+ if err != nil {
2392
+ return
2393
+ }
2394
+ return FileHandle{fh}, int(mid), nil
2395
+ }
2396
+ }
2397
+
2398
+ // OpenByHandleAt wraps the open_by_handle_at system call; it opens a
2399
+ // file via a handle as previously returned by NameToHandleAt.
2400
+ func OpenByHandleAt(mountFD int, handle FileHandle, flags int) (fd int, err error) {
2401
+ return openByHandleAt(mountFD, handle.fileHandle, flags)
2402
+ }
2403
+
2404
+ // Klogset wraps the sys_syslog system call; it sets console_loglevel to
2405
+ // the value specified by arg and passes a dummy pointer to bufp.
2406
+ func Klogset(typ int, arg int) (err error) {
2407
+ var p unsafe.Pointer
2408
+ _, _, errno := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(p), uintptr(arg))
2409
+ if errno != 0 {
2410
+ return errnoErr(errno)
2411
+ }
2412
+ return nil
2413
+ }
2414
+
2415
+ // RemoteIovec is Iovec with the pointer replaced with an integer.
2416
+ // It is used for ProcessVMReadv and ProcessVMWritev, where the pointer
2417
+ // refers to a location in a different process' address space, which
2418
+ // would confuse the Go garbage collector.
2419
+ type RemoteIovec struct {
2420
+ Base uintptr
2421
+ Len int
2422
+ }
2423
+
2424
+ //sys ProcessVMReadv(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) = SYS_PROCESS_VM_READV
2425
+ //sys ProcessVMWritev(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) = SYS_PROCESS_VM_WRITEV
2426
+
2427
+ //sys PidfdOpen(pid int, flags int) (fd int, err error) = SYS_PIDFD_OPEN
2428
+ //sys PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) = SYS_PIDFD_GETFD
2429
+ //sys PidfdSendSignal(pidfd int, sig Signal, info *Siginfo, flags int) (err error) = SYS_PIDFD_SEND_SIGNAL
2430
+
2431
+ //sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error)
2432
+ //sys shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error)
2433
+ //sys shmdt(addr uintptr) (err error)
2434
+ //sys shmget(key int, size int, flag int) (id int, err error)
2435
+
2436
+ //sys getitimer(which int, currValue *Itimerval) (err error)
2437
+ //sys setitimer(which int, newValue *Itimerval, oldValue *Itimerval) (err error)
2438
+
2439
+ // MakeItimerval creates an Itimerval from interval and value durations.
2440
+ func MakeItimerval(interval, value time.Duration) Itimerval {
2441
+ return Itimerval{
2442
+ Interval: NsecToTimeval(interval.Nanoseconds()),
2443
+ Value: NsecToTimeval(value.Nanoseconds()),
2444
+ }
2445
+ }
2446
+
2447
+ // A value which may be passed to the which parameter for Getitimer and
2448
+ // Setitimer.
2449
+ type ItimerWhich int
2450
+
2451
+ // Possible which values for Getitimer and Setitimer.
2452
+ const (
2453
+ ItimerReal ItimerWhich = ITIMER_REAL
2454
+ ItimerVirtual ItimerWhich = ITIMER_VIRTUAL
2455
+ ItimerProf ItimerWhich = ITIMER_PROF
2456
+ )
2457
+
2458
+ // Getitimer wraps getitimer(2) to return the current value of the timer
2459
+ // specified by which.
2460
+ func Getitimer(which ItimerWhich) (Itimerval, error) {
2461
+ var it Itimerval
2462
+ if err := getitimer(int(which), &it); err != nil {
2463
+ return Itimerval{}, err
2464
+ }
2465
+
2466
+ return it, nil
2467
+ }
2468
+
2469
+ // Setitimer wraps setitimer(2) to arm or disarm the timer specified by which.
2470
+ // It returns the previous value of the timer.
2471
+ //
2472
+ // If the Itimerval argument is the zero value, the timer will be disarmed.
2473
+ func Setitimer(which ItimerWhich, it Itimerval) (Itimerval, error) {
2474
+ var prev Itimerval
2475
+ if err := setitimer(int(which), &it, &prev); err != nil {
2476
+ return Itimerval{}, err
2477
+ }
2478
+
2479
+ return prev, nil
2480
+ }
2481
+
2482
+ //sysnb rtSigprocmask(how int, set *Sigset_t, oldset *Sigset_t, sigsetsize uintptr) (err error) = SYS_RT_SIGPROCMASK
2483
+
2484
+ func PthreadSigmask(how int, set, oldset *Sigset_t) error {
2485
+ if oldset != nil {
2486
+ // Explicitly clear in case Sigset_t is larger than _C__NSIG.
2487
+ *oldset = Sigset_t{}
2488
+ }
2489
+ return rtSigprocmask(how, set, oldset, _C__NSIG/8)
2490
+ }
2491
+
2492
+ //sysnb getresuid(ruid *_C_int, euid *_C_int, suid *_C_int)
2493
+ //sysnb getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int)
2494
+
2495
+ func Getresuid() (ruid, euid, suid int) {
2496
+ var r, e, s _C_int
2497
+ getresuid(&r, &e, &s)
2498
+ return int(r), int(e), int(s)
2499
+ }
2500
+
2501
+ func Getresgid() (rgid, egid, sgid int) {
2502
+ var r, e, s _C_int
2503
+ getresgid(&r, &e, &s)
2504
+ return int(r), int(e), int(s)
2505
+ }
2506
+
2507
+ // Pselect is a wrapper around the Linux pselect6 system call.
2508
+ // This version does not modify the timeout argument.
2509
+ func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
2510
+ // Per https://man7.org/linux/man-pages/man2/select.2.html#NOTES,
2511
+ // The Linux pselect6() system call modifies its timeout argument.
2512
+ // [Not modifying the argument] is the behavior required by POSIX.1-2001.
2513
+ var mutableTimeout *Timespec
2514
+ if timeout != nil {
2515
+ mutableTimeout = new(Timespec)
2516
+ *mutableTimeout = *timeout
2517
+ }
2518
+
2519
+ // The final argument of the pselect6() system call is not a
2520
+ // sigset_t * pointer, but is instead a structure
2521
+ var kernelMask *sigset_argpack
2522
+ if sigmask != nil {
2523
+ wordBits := 32 << (^uintptr(0) >> 63) // see math.intSize
2524
+
2525
+ // A sigset stores one bit per signal,
2526
+ // offset by 1 (because signal 0 does not exist).
2527
+ // So the number of words needed is ⌈__C_NSIG - 1 / wordBits⌉.
2528
+ sigsetWords := (_C__NSIG - 1 + wordBits - 1) / (wordBits)
2529
+
2530
+ sigsetBytes := uintptr(sigsetWords * (wordBits / 8))
2531
+ kernelMask = &sigset_argpack{
2532
+ ss: sigmask,
2533
+ ssLen: sigsetBytes,
2534
+ }
2535
+ }
2536
+
2537
+ return pselect6(nfd, r, w, e, mutableTimeout, kernelMask)
2538
+ }
2539
+
2540
+ //sys schedSetattr(pid int, attr *SchedAttr, flags uint) (err error)
2541
+ //sys schedGetattr(pid int, attr *SchedAttr, size uint, flags uint) (err error)
2542
+
2543
+ // SchedSetAttr is a wrapper for sched_setattr(2) syscall.
2544
+ // https://man7.org/linux/man-pages/man2/sched_setattr.2.html
2545
+ func SchedSetAttr(pid int, attr *SchedAttr, flags uint) error {
2546
+ if attr == nil {
2547
+ return EINVAL
2548
+ }
2549
+ attr.Size = SizeofSchedAttr
2550
+ return schedSetattr(pid, attr, flags)
2551
+ }
2552
+
2553
+ // SchedGetAttr is a wrapper for sched_getattr(2) syscall.
2554
+ // https://man7.org/linux/man-pages/man2/sched_getattr.2.html
2555
+ func SchedGetAttr(pid int, flags uint) (*SchedAttr, error) {
2556
+ attr := &SchedAttr{}
2557
+ if err := schedGetattr(pid, attr, SizeofSchedAttr, flags); err != nil {
2558
+ return nil, err
2559
+ }
2560
+ return attr, nil
2561
+ }
2562
+
2563
+ //sys Cachestat(fd uint, crange *CachestatRange, cstat *Cachestat_t, flags uint) (err error)
2564
+ //sys Mseal(b []byte, flags uint) (err error)
2565
+
2566
+ //sys setMemPolicy(mode int, mask unsafe.Pointer, size uintptr) (err error) = SYS_SET_MEMPOLICY
2567
+
2568
+ func SetMemPolicy(mode int, mask *CPUSet) error {
2569
+ return setMemPolicy(mode, unsafe.Pointer(mask), _CPU_SETSIZE)
2570
+ }
2571
+
2572
+ func SetMemPolicyDynamic(mode int, mask CPUSetDynamic) error {
2573
+ return setMemPolicy(mode, mask.pointer(), mask.size())
2574
+ }