bits.odin 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758
  1. package linux
  2. /*
  3. Represents an error returned by most of syscalls
  4. */
  5. Errno :: enum i32 {
  6. NONE = 0,
  7. // Errno-base
  8. EPERM = 1,
  9. ENOENT = 2,
  10. ESRCH = 3,
  11. EINTR = 4,
  12. EIO = 5,
  13. ENXIO = 6,
  14. E2BIG = 7,
  15. ENOEXEC = 8,
  16. EBADF = 9,
  17. ECHILD = 10,
  18. EAGAIN = 11,
  19. ENOMEM = 12,
  20. EACCES = 13,
  21. EFAULT = 14,
  22. ENOTBLK = 15,
  23. EBUSY = 16,
  24. EEXIST = 17,
  25. EXDEV = 18,
  26. ENODEV = 19,
  27. ENOTDIR = 20,
  28. EISDIR = 21,
  29. EINVAL = 22,
  30. ENFILE = 23,
  31. EMFILE = 24,
  32. ENOTTY = 25,
  33. ETXTBSY = 26,
  34. EFBIG = 27,
  35. ENOSPC = 28,
  36. ESPIPE = 29,
  37. EROFS = 30,
  38. EMLINK = 31,
  39. EPIPE = 32,
  40. EDOM = 33,
  41. ERANGE = 34,
  42. // Linux
  43. EDEADLK = 35,
  44. ENAMETOOLONG = 36,
  45. ENOLCK = 37,
  46. ENOSYS = 38,
  47. ENOTEMPTY = 39,
  48. ELOOP = 40,
  49. ENOMSG = 42,
  50. EIDRM = 43,
  51. ECHRNG = 44,
  52. EL2NSYNC = 45,
  53. EL3HLT = 46,
  54. EL3RST = 47,
  55. ELNRNG = 48,
  56. EUNATCH = 49,
  57. ENOCSI = 50,
  58. EL2HLT = 51,
  59. EBADE = 52,
  60. EBADR = 53,
  61. EXFULL = 54,
  62. ENOANO = 55,
  63. EBADRQC = 56,
  64. EBADSLT = 57,
  65. EBFONT = 59,
  66. ENOSTR = 60,
  67. ENODATA = 61,
  68. ETIME = 62,
  69. ENOSR = 63,
  70. ENONET = 64,
  71. ENOPKG = 65,
  72. EREMOTE = 66,
  73. ENOLINK = 67,
  74. EADV = 68,
  75. ESRMNT = 69,
  76. ECOMM = 70,
  77. EPROTO = 71,
  78. EMULTIHOP = 72,
  79. EDOTDOT = 73,
  80. EBADMSG = 74,
  81. EOVERFLOW = 75,
  82. ENOTUNIQ = 76,
  83. EBADFD = 77,
  84. EREMCHG = 78,
  85. ELIBACC = 79,
  86. ELIBBAD = 80,
  87. ELIBSCN = 81,
  88. ELIBMAX = 82,
  89. ELIBEXEC = 83,
  90. EILSEQ = 84,
  91. ERESTART = 85,
  92. ESTRPIPE = 86,
  93. EUSERS = 87,
  94. ENOTSOCK = 88,
  95. EDESTADDRREQ = 89,
  96. EMSGSIZE = 90,
  97. EPROTOTYPE = 91,
  98. ENOPROTOOPT = 92,
  99. EPROTONOSUPPORT = 93,
  100. ESOCKTNOSUPPORT = 94,
  101. EOPNOTSUPP = 95,
  102. EPFNOSUPPORT = 96,
  103. EAFNOSUPPORT = 97,
  104. EADDRINUSE = 98,
  105. EADDRNOTAVAIL = 99,
  106. ENETDOWN = 100,
  107. ENETUNREACH = 101,
  108. ENETRESET = 102,
  109. ECONNABORTED = 103,
  110. ECONNRESET = 104,
  111. ENOBUFS = 105,
  112. EISCONN = 106,
  113. ENOTCONN = 107,
  114. ESHUTDOWN = 108,
  115. ETOOMANYREFS = 109,
  116. ETIMEDOUT = 110,
  117. ECONNREFUSED = 111,
  118. EHOSTDOWN = 112,
  119. EHOSTUNREACH = 113,
  120. EALREADY = 114,
  121. EINPROGRESS = 115,
  122. ESTALE = 116,
  123. EUCLEAN = 117,
  124. ENOTNAM = 118,
  125. ENAVAIL = 119,
  126. EISNAM = 120,
  127. EREMOTEIO = 121,
  128. EDQUOT = 122,
  129. ENOMEDIUM = 123,
  130. EMEDIUMTYPE = 124,
  131. ECANCELED = 125,
  132. ENOKEY = 126,
  133. EKEYEXPIRED = 127,
  134. EKEYREVOKED = 128,
  135. EKEYREJECTED = 129,
  136. EOWNERDEAD = 130,
  137. ENOTRECOVERABLE = 131,
  138. ERFKILL = 132,
  139. EHWPOISON = 133,
  140. // Errno aliases
  141. EWOULDBLOCK = EAGAIN,
  142. EDEADLOCK = EDEADLK,
  143. }
  144. /*
  145. Bits for Open_Flags
  146. */
  147. Open_Flags_Bits :: enum {
  148. RDONLY = 0,
  149. WRONLY = 1,
  150. RDWR = 2,
  151. CREAT = 6,
  152. EXCL = 7,
  153. NOCTTY = 8,
  154. TRUNC = 9,
  155. APPEND = 10,
  156. NONBLOCK = 11,
  157. DSYNC = 12,
  158. ASYNC = 13,
  159. DIRECT = 14,
  160. DIRECTORY = 16,
  161. NOFOLLOW = 17,
  162. NOATIME = 18,
  163. CLOEXEC = 19,
  164. PATH = 21,
  165. }
  166. /*
  167. Bits for FD_Flags bitset
  168. */
  169. FD_Flags_Bits :: enum {
  170. SYMLINK_NOFOLLOW = 8,
  171. REMOVEDIR = 9,
  172. EACCESS = 9,
  173. SYMLINK_FOLLOW = 10,
  174. NO_AUTOMOUNT = 11,
  175. EMPTY_PATH = 12,
  176. STATX_FORCE_SYNC = 13,
  177. STATX_DONT_SYNC = 14,
  178. RECURSIVE = 15,
  179. }
  180. /*
  181. The bits for the Mode bitset.
  182. */
  183. Mode_Bits :: enum {
  184. IXOTH = 0, // 0o0000001
  185. IWOTH = 1, // 0o0000002
  186. IROTH = 2, // 0o0000004
  187. IXGRP = 3, // 0o0000010
  188. IWGRP = 4, // 0o0000020
  189. IRGRP = 5, // 0o0000040
  190. IXUSR = 6, // 0o0000100
  191. IWUSR = 7, // 0o0000200
  192. IRUSR = 8, // 0o0000400
  193. ISVTX = 9, // 0o0001000
  194. ISGID = 10, // 0o0002000
  195. ISUID = 11, // 0o0004000
  196. IFFIFO = 12, // 0o0010000
  197. IFCHR = 13, // 0o0020000
  198. IFDIR = 14, // 0o0040000
  199. IFREG = 15, // 0o0100000
  200. }
  201. /*
  202. The bits used by the Statx_Mask bitset
  203. */
  204. Statx_Mask_Bits :: enum {
  205. TYPE = 0,
  206. MODE = 1,
  207. NLINK = 2,
  208. UID = 3,
  209. GID = 4,
  210. ATIME = 5,
  211. MTIME = 6,
  212. CTIME = 7,
  213. INO = 8,
  214. SIZE = 9,
  215. BLOCKS = 10,
  216. BTIME = 11,
  217. MNT_ID = 12,
  218. DIOALIGN = 13,
  219. }
  220. /*
  221. Bits found in Statx_Attr bitset
  222. You should not use these directly
  223. */
  224. Statx_Attr_Bits :: enum {
  225. COMPRESSED = 2, // 0x00000004
  226. IMMUTABLE = 4, // 0x00000010
  227. APPEND = 5, // 0x00000020
  228. NODUMP = 6, // 0x00000040
  229. ENCRYPTED = 11, // 0x00000800
  230. AUTOMOUNT = 12, // 0x00001000
  231. MOUNT_ROOT = 13, // 0x00002000
  232. VERITY = 20, // 0x00100000
  233. DAX = 21, // 0x00200000
  234. }
  235. /*
  236. Magic bits for filesystems returned by Stat_FS
  237. */
  238. FS_Magic :: enum u32 {
  239. ADFS_SUPER_MAGIC = 0xadf5,
  240. AFFS_SUPER_MAGIC = 0xadff,
  241. AFS_SUPER_MAGIC = 0x5346414f,
  242. ANON_INODE_FS_MAGIC = 0x09041934,
  243. AUTOFS_SUPER_MAGIC = 0x0187,
  244. BDEVFS_MAGIC = 0x62646576,
  245. BEFS_SUPER_MAGIC = 0x42465331,
  246. BFS_MAGIC = 0x1badface,
  247. BINFMTFS_MAGIC = 0x42494e4d,
  248. BPF_FS_MAGIC = 0xcafe4a11,
  249. BTRFS_SUPER_MAGIC = 0x9123683e,
  250. BTRFS_TEST_MAGIC = 0x73727279,
  251. CGROUP_SUPER_MAGIC = 0x27e0eb,
  252. CGROUP2_SUPER_MAGIC = 0x63677270,
  253. CIFS_MAGIC_NUMBER = 0xff534d42,
  254. CODA_SUPER_MAGIC = 0x73757245,
  255. COH_SUPER_MAGIC = 0x012ff7b7,
  256. CRAMFS_MAGIC = 0x28cd3d45,
  257. DEBUGFS_MAGIC = 0x64626720,
  258. DEVFS_SUPER_MAGIC = 0x1373,
  259. DEVPTS_SUPER_MAGIC = 0x1cd1,
  260. ECRYPTFS_SUPER_MAGIC = 0xf15f,
  261. EFIVARFS_MAGIC = 0xde5e81e4,
  262. EFS_SUPER_MAGIC = 0x00414a53,
  263. EXT_SUPER_MAGIC = 0x137d,
  264. EXT2_OLD_SUPER_MAGIC = 0xef51,
  265. EXT2_SUPER_MAGIC = 0xef53,
  266. EXT3_SUPER_MAGIC = 0xef53,
  267. EXT4_SUPER_MAGIC = 0xef53,
  268. F2FS_SUPER_MAGIC = 0xf2f52010,
  269. FUSE_SUPER_MAGIC = 0x65735546,
  270. FUTEXFS_SUPER_MAGIC = 0xbad1dea,
  271. HFS_SUPER_MAGIC = 0x4244,
  272. HOSTFS_SUPER_MAGIC = 0x00c0ffee,
  273. HPFS_SUPER_MAGIC = 0xf995e849,
  274. HUGETLBFS_MAGIC = 0x958458f6,
  275. ISOFS_SUPER_MAGIC = 0x9660,
  276. JFFS2_SUPER_MAGIC = 0x72b6,
  277. JFS_SUPER_MAGIC = 0x3153464a,
  278. MINIX_SUPER_MAGIC = 0x137f,
  279. MINIX_SUPER_MAGIC2 = 0x138f,
  280. MINIX2_SUPER_MAGIC = 0x2468,
  281. MINIX2_SUPER_MAGIC2 = 0x2478,
  282. MINIX3_SUPER_MAGIC = 0x4d5a,
  283. MQUEUE_MAGIC = 0x19800202,
  284. MSDOS_SUPER_MAGIC = 0x4d44,
  285. MTD_INODE_FS_MAGIC = 0x11307854,
  286. NCP_SUPER_MAGIC = 0x564c,
  287. NFS_SUPER_MAGIC = 0x6969,
  288. NILFS_SUPER_MAGIC = 0x3434,
  289. NSFS_MAGIC = 0x6e736673,
  290. NTFS_SB_MAGIC = 0x5346544e,
  291. OCFS2_SUPER_MAGIC = 0x7461636f,
  292. OPENPROM_SUPER_MAGIC = 0x9fa1,
  293. OVERLAYFS_SUPER_MAGIC = 0x794c7630,
  294. PIPEFS_MAGIC = 0x50495045,
  295. PROC_SUPER_MAGIC = 0x9fa0,
  296. PSTOREFS_MAGIC = 0x6165676c,
  297. QNX4_SUPER_MAGIC = 0x002f,
  298. QNX6_SUPER_MAGIC = 0x68191122,
  299. RAMFS_MAGIC = 0x858458f6,
  300. REISERFS_SUPER_MAGIC = 0x52654973,
  301. ROMFS_MAGIC = 0x7275,
  302. SECURITYFS_MAGIC = 0x73636673,
  303. SELINUX_MAGIC = 0xf97cff8c,
  304. SMACK_MAGIC = 0x43415d53,
  305. SMB_SUPER_MAGIC = 0x517b,
  306. SMB2_MAGIC_NUMBER = 0xfe534d42,
  307. SOCKFS_MAGIC = 0x534f434b,
  308. SQUASHFS_MAGIC = 0x73717368,
  309. SYSFS_MAGIC = 0x62656572,
  310. SYSV2_SUPER_MAGIC = 0x012ff7b6,
  311. SYSV4_SUPER_MAGIC = 0x012ff7b5,
  312. TMPFS_MAGIC = 0x01021994,
  313. TRACEFS_MAGIC = 0x74726163,
  314. UDF_SUPER_MAGIC = 0x15013346,
  315. UFS_MAGIC = 0x00011954,
  316. USBDEVICE_SUPER_MAGIC = 0x9fa2,
  317. V9FS_MAGIC = 0x01021997,
  318. VXFS_SUPER_MAGIC = 0xa501fcf5,
  319. XENFS_SUPER_MAGIC = 0xabba1974,
  320. XENIX_SUPER_MAGIC = 0x012ff7b4,
  321. XFS_SUPER_MAGIC = 0x58465342,
  322. _XIAFS_SUPER_MAGIC = 0x012fd16d,
  323. }
  324. /*
  325. Bits for FS_Flags bitset
  326. */
  327. FS_Flags_Bits :: enum {
  328. RDONLY = 0,
  329. NOSUID = 1,
  330. NODEV = 2,
  331. NOEXEC = 3,
  332. SYNCHRONOUS = 4,
  333. VALID = 5,
  334. MANDLOCK = 6,
  335. NOATIME = 10,
  336. NODIRATIME = 11,
  337. RELATIME = 12,
  338. NOSYMFOLLOW = 13,
  339. }
  340. Seek_Whence :: enum i16 {
  341. SET = 0,
  342. CUR = 1,
  343. END = 2,
  344. DATA = 3,
  345. HOLE = 4,
  346. }
  347. /*
  348. Bits for Close_Range_Flags
  349. */
  350. Close_Range_Flags_Bits :: enum {
  351. CLOEXEC = 2,
  352. UNSHARE = 1,
  353. }
  354. /*
  355. Bits for Rename_Flags
  356. */
  357. Rename_Flags_Bits :: enum {
  358. EXCHANGE = 1,
  359. NOREPLACE = 0,
  360. WHITEOUT = 2,
  361. }
  362. /*
  363. Type of the file in a directory entry
  364. */
  365. Dirent_Type :: enum u8 {
  366. UNKNOWN = 0,
  367. FIFO = 1,
  368. CHR = 2,
  369. DIR = 4,
  370. BLK = 6,
  371. REG = 8,
  372. LNK = 10,
  373. SOCK = 12,
  374. WHT = 14,
  375. }
  376. /*
  377. Type of a lock for fcntl(2)
  378. */
  379. FLock_Type :: enum i16 {
  380. RDLCK = 0,
  381. WRLCK = 1,
  382. UNLCK = 2,
  383. }
  384. /*
  385. Bits for FD_Notifications
  386. */
  387. FD_Notifications_Bits :: enum {
  388. ACCESS = 0,
  389. MODIFY = 1,
  390. CREATE = 2,
  391. DELETE = 3,
  392. RENAME = 4,
  393. ATTRIB = 5,
  394. MULTISHOT = 31,
  395. }
  396. /*
  397. Bits for seal
  398. */
  399. Seal_Bits :: enum {
  400. SEAL = 0,
  401. SHRINK = 1,
  402. GROW = 2,
  403. WRITE = 3,
  404. FUTURE_WRITE = 4,
  405. }
  406. RW_Hint :: enum u64 {
  407. WRITE_LIFE_NOT_SET = 0,
  408. WRITE_LIFE_NONE = 1,
  409. WRITE_LIFE_SHORT = 2,
  410. WRITE_LIFE_MEDIUM = 3,
  411. WRITE_LIFE_LONG = 4,
  412. WRITE_LIFE_EXTREME = 5,
  413. }
  414. FD_Lease :: enum {
  415. RDLCK = 0,
  416. WRLCK = 1,
  417. UNLCK = 2,
  418. }
  419. /*
  420. Kind of owner for FD_Owner
  421. */
  422. F_Owner_Type :: enum i32 {
  423. OWNER_TID = 0,
  424. OWNER_PID = 1,
  425. OWNER_PGRP = 2,
  426. }
  427. /*
  428. Command for fcntl(2)
  429. */
  430. FCntl_Command :: enum {
  431. DUPFD = 0,
  432. GETFD = 1,
  433. SETFD = 2,
  434. GETFL = 3,
  435. SETFL = 4,
  436. GETLK = 5,
  437. SETLK = 6,
  438. SETLKW = 7,
  439. SETOWN = 8,
  440. GETOWN = 9,
  441. SETSIG = 10,
  442. GETSIG = 11,
  443. SETOWN_EX = 15,
  444. GETOWN_EX = 16,
  445. // OFD_GETLK = 36,
  446. // OFD_SETLK = 37,
  447. // OFD_SETLKW = 38,
  448. SETLEASE = 1024,
  449. GETLEASE = 1025,
  450. NOTIFY = 1026,
  451. DUPFD_CLOEXEC = 1030,
  452. SETPIPE_SZ = 1031,
  453. GETPIPE_SZ = 1032,
  454. ADD_SEALS = 1033,
  455. GET_SEALS = 1034,
  456. GET_RW_HINT = 1035,
  457. SET_RW_HINT = 1036,
  458. GET_FILE_RW_HINT = 1037,
  459. SET_FILE_RW_HINT = 1038,
  460. // F_OK = 0,
  461. }
  462. Fd_Poll_Events_Bits :: enum {
  463. IN = 0,
  464. PRI = 1,
  465. OUT = 2,
  466. ERR = 3,
  467. HUP = 4,
  468. NVAL = 5,
  469. RDNORM = 6,
  470. RDBAND = 7,
  471. WRNORM = 8,
  472. WRBAND = 9,
  473. MSG = 10,
  474. REMOVE = 12,
  475. RDHUP = 13,
  476. }
  477. /*
  478. Bits for Mem_Protection bitfield
  479. */
  480. Mem_Protection_Bits :: enum{
  481. READ = 0,
  482. WRITE = 1,
  483. EXEC = 2,
  484. SEM = 3,
  485. // platform-specific section start
  486. ARM64_BTI = 4,
  487. ARM64_MTE = 5,
  488. // platform-specific section end
  489. GROWSDOWN = 24,
  490. GROWSUP = 25,
  491. }
  492. /*
  493. Bits for Map_Flags
  494. */
  495. Map_Flags_Bits :: enum {
  496. SHARED = 0,
  497. PRIVATE = 1,
  498. SHARED_VALIDATE = 2,
  499. FIXED = 4,
  500. ANONYMOUS = 5,
  501. // platform-dependent section start
  502. X86_32BIT = 6,
  503. X86_ABOVE4G = 7,
  504. // platform-dependent section end
  505. GROWSDOWN = 8,
  506. DENYWRITE = 11,
  507. EXECUTABLE = 12,
  508. LOCKED = 13,
  509. NORESERVE = 14,
  510. POPULATE = 15,
  511. NONBLOCK = 16,
  512. STACK = 17,
  513. HUGETLB = 18,
  514. SYNC = 19,
  515. FIXED_NOREPLACE = 20,
  516. UNINITIALIZED = 26,
  517. }
  518. /*
  519. Bits for MLock_Flags
  520. */
  521. MLock_Flags_Bits :: enum {
  522. ONFAULT = 0,
  523. }
  524. /*
  525. Bits for MSync_Flags
  526. */
  527. MSync_Flags_Bits :: enum {
  528. ASYNC = 0,
  529. INVALIDATE = 1,
  530. SYNC = 2,
  531. }
  532. /*
  533. Argument for madvice(2)
  534. */
  535. MAdvice :: enum {
  536. NORMAL = 0,
  537. RANDOM = 1,
  538. SEQUENTIAL = 2,
  539. WILLNEED = 3,
  540. DONTNEED = 4,
  541. FREE = 8,
  542. REMOVE = 9,
  543. DONTFORK = 10,
  544. DOFORK = 11,
  545. MERGEABLE = 12,
  546. UNMERGEABLE = 13,
  547. HUGEPAGE = 14,
  548. NOHUGEPAGE = 15,
  549. DONTDUMP = 16,
  550. DODUMP = 17,
  551. WIPEONFORK = 18,
  552. KEEPONFORK = 19,
  553. COLD = 20,
  554. PAGEOUT = 21,
  555. POPULATE_READ = 22,
  556. POPULATE_WRITE = 23,
  557. DONTNEED_LOCKED = 24,
  558. COLLAPSE = 25,
  559. HWPOISON = 100,
  560. SOFT_OFFLINE = 101,
  561. }
  562. /*
  563. Bits for PKey_Access_Rights
  564. */
  565. PKey_Access_Bits :: enum {
  566. DISABLE_ACCESS = 0,
  567. DISABLE_WRITE = 2,
  568. }
  569. /*
  570. Bits for MRemap_Flags
  571. */
  572. MRemap_Flags_Bits :: enum {
  573. MAYMOVE = 0,
  574. FIXED = 1,
  575. DONTUNMAP = 2,
  576. }
  577. /*
  578. Bits for Get_Random_Flags
  579. */
  580. Get_Random_Flags_Bits :: enum {
  581. RANDOM = 0,
  582. NONBLOCK = 1,
  583. INSECURE = 2,
  584. }
  585. /*
  586. Bits for Perf_Flags
  587. */
  588. Perf_Flags_Bits :: enum {
  589. FD_NO_GROUP = 0,
  590. FD_OUTPUT = 1,
  591. PID_CGROUP = 2,
  592. FD_CLOEXEC = 3,
  593. }
  594. /*
  595. Union tag for Perf_Event_Attr struct
  596. */
  597. Perf_Event_Type :: enum u32 {
  598. HARDWARE = 0,
  599. SOFTWARE = 1,
  600. TRACEPOINT = 2,
  601. HW_CACHE = 3,
  602. RAW = 4,
  603. BREAKPOINT = 5,
  604. }
  605. Perf_Event_Flags_Bits :: enum u64 {
  606. Disabled = 0,
  607. Inherit = 1,
  608. Pinned = 2,
  609. Exclusive = 3,
  610. Exclude_User = 4,
  611. Exclude_Kernel = 5,
  612. Exclude_HV = 6,
  613. Exclude_Idle = 7,
  614. Mmap = 8,
  615. Comm = 9,
  616. Freq = 10,
  617. Inherit_Stat = 11,
  618. Enable_On_Exec = 12,
  619. Task = 13,
  620. Watermark = 14,
  621. Precise_IP_0 = 15,
  622. Precise_IP_1 = 16,
  623. Mmap_Data = 17,
  624. Sample_Id_All = 18,
  625. Exclude_Host = 19,
  626. Exclude_Guest = 20,
  627. Exclude_Callchain_Kernel = 21,
  628. Exclude_Callchain_User = 22,
  629. Mmap2 = 23,
  630. Comm_Exec = 24,
  631. Use_Clockid = 25,
  632. Context_Switch = 26,
  633. Write_Backward = 27,
  634. Namespaces = 28,
  635. KSymbol = 29,
  636. BPF_Event = 30,
  637. Aux_Output = 31,
  638. CGroup = 32,
  639. Text_Poke = 33,
  640. Build_Id = 34,
  641. Inherit_Thread = 35,
  642. Remove_On_Exec = 36,
  643. Sigtrap = 37,
  644. }
  645. Perf_Cap_Flags_Bits :: enum u64 {
  646. Bit0 = 0,
  647. Bit0_Is_Deprecated = 1,
  648. User_Rdpmc = 2,
  649. User_Time = 3,
  650. User_Time_Zero = 4,
  651. User_Time_Short = 5,
  652. }
  653. /*
  654. Specifies the type of the hardware event that you want to get info about
  655. */
  656. Perf_Hardware_Id :: enum u64 {
  657. CPU_CYCLES = 0,
  658. INSTRUCTIONS = 1,
  659. CACHE_REFERENCES = 2,
  660. CACHE_MISSES = 3,
  661. BRANCH_INSTRUCTIONS = 4,
  662. BRANCH_MISSES = 5,
  663. BUS_CYCLES = 6,
  664. STALLED_CYCLES_FRONTEND = 7,
  665. STALLED_CYCLES_BACKEND = 8,
  666. REF_CPU_CYCLES = 9,
  667. }
  668. /*
  669. Specifies the cache for the particular cache event that you want to get info about
  670. */
  671. Perf_Hardware_Cache_Id :: enum u64 {
  672. L1D = 0,
  673. L1I = 1,
  674. LL = 2,
  675. DTLB = 3,
  676. ITLB = 4,
  677. BPU = 5,
  678. NODE = 6,
  679. }
  680. /*
  681. Specifies the cache op that you want to get info about
  682. */
  683. Perf_Hardware_Cache_Op_Id :: enum u64 {
  684. READ = 0,
  685. WRITE = 1,
  686. PREFETCH = 2,
  687. }
  688. /*
  689. Specifies the cache operation result that you want to get info about
  690. */
  691. Perf_Hardware_Cache_Result_Id :: enum u64 {
  692. ACCESS = 0,
  693. MISS = 1,
  694. }
  695. /*
  696. Specifies the particular software event that you want to get info about
  697. */
  698. Perf_Software_Id :: enum u64 {
  699. CPU_CLOCK = 0,
  700. TASK_CLOCK = 1,
  701. PAGE_FAULTS = 2,
  702. CONTEXT_SWITCHES = 3,
  703. CPU_MIGRATIONS = 4,
  704. PAGE_FAULTS_MIN = 5,
  705. PAGE_FAULTS_MAJ = 6,
  706. ALIGNMENT_FAULTS = 7,
  707. EMULATION_FAULTS = 8,
  708. DUMMY = 9,
  709. BPF_OUTPUT = 10,
  710. CGROUP_SWITCHES = 11,
  711. }
  712. /*
  713. Specifies which values to include in the sample
  714. */
  715. Perf_Event_Sample_Type_Bits :: enum {
  716. IP = 0,
  717. TID = 1,
  718. TIME = 2,
  719. ADDR = 3,
  720. READ = 4,
  721. CALLCHAIN = 5,
  722. ID = 6,
  723. CPU = 7,
  724. PERIOD = 8,
  725. STREAM_ID = 9,
  726. RAW = 10,
  727. BRANCH_STACK = 11,
  728. REGS_USER = 12,
  729. STACK_USER = 13,
  730. WEIGHT = 14,
  731. DATA_SRC = 15,
  732. IDENTIFIER = 16,
  733. TRANSACTION = 17,
  734. REGS_INTR = 18,
  735. PHYS_ADDR = 19,
  736. AUX = 20,
  737. CGROUP = 21,
  738. DATA_PAGE_SIZE = 22,
  739. CODE_PAGE_SIZE = 23,
  740. WEIGHT_STRUCT = 24,
  741. }
  742. /// Describes field sets to include in mmaped page
  743. Perf_Read_Format_Bits :: enum {
  744. TOTAL_TIME_ENABLED = 0,
  745. TOTAL_TIME_RUNNING = 1,
  746. ID = 2,
  747. GROUP = 3,
  748. LOST = 4,
  749. }
  750. /*
  751. Chooses the breakpoint type
  752. */
  753. Hardware_Breakpoint_Type :: enum u32 {
  754. EMPTY = 0,
  755. R = 1,
  756. W = 2,
  757. X = 4,
  758. RW = R | W,
  759. INVALID = RW | X,
  760. }
  761. /*
  762. Bits for Branch_Sample_Type
  763. */
  764. Branch_Sample_Type_Bits :: enum {
  765. USER = 0,
  766. KERNEL = 1,
  767. HV = 2,
  768. ANY = 3,
  769. ANY_CALL = 4,
  770. ANY_RETURN = 5,
  771. IND_CALL = 6,
  772. ABORT_TX = 7,
  773. IN_TX = 8,
  774. NO_TX = 9,
  775. COND = 10,
  776. CALL_STACK = 11,
  777. IND_JUMP = 12,
  778. CALL = 13,
  779. NO_FLAGS = 14,
  780. NO_CYCLES = 15,
  781. TYPE_SAVE = 16,
  782. HW_INDEX = 17,
  783. PRIV_SAVE = 18,
  784. }
  785. /*
  786. Represent the type of Id
  787. */
  788. Id_Type :: enum uint {
  789. ALL = 0,
  790. PID = 1,
  791. PGID = 2,
  792. PIDFD = 3,
  793. }
  794. /*
  795. Options for wait syscalls
  796. */
  797. Wait_Option :: enum {
  798. WNOHANG = 0,
  799. WUNTRACED = 1,
  800. WSTOPPED = 1,
  801. WEXITED = 2,
  802. WCONTINUED = 3,
  803. WNOWAIT = 24,
  804. // // For processes created using clone
  805. __WNOTHREAD = 29,
  806. __WALL = 30,
  807. __WCLONE = 31,
  808. }
  809. /*
  810. Bits for flags for pidfd
  811. */
  812. Pid_FD_Flags_Bits :: enum {
  813. NONBLOCK = 11,
  814. }
  815. /*
  816. Priority for process, process group, user
  817. */
  818. Priority_Which :: enum i32 {
  819. PROCESS = 0,
  820. PGRP = 1,
  821. USER = 2,
  822. }
  823. Signal :: enum i32 {
  824. // POSIX-defined signals
  825. SIGINT = 2, // Interactive attention signal.
  826. SIGILL = 4, // Illegal instruction.
  827. SIGABRT = 6, // Abnormal termination.
  828. SIGFPE = 8, // Erroneous arithmetic operation.
  829. SIGSEGV = 11, // Invalid access to storage.
  830. SIGTERM = 15, // Termination request.
  831. // Other POSIX signals
  832. SIGHUP = 1, // Hangup.
  833. SIGQUIT = 3, // Quit.
  834. SIGTRAP = 5, // Trace/breakpoint trap.
  835. SIGKILL = 9, // Killed.
  836. SIGPIPE = 13, // Broken pipe.
  837. SIGALRM = 14, // Alarm clock.
  838. // Adjustments needed for most linux systems
  839. SIGSTKFLT = 16, // Stack fault (obsolete).
  840. SIGPWR = 30, // Power failure imminent.
  841. // Historical signals specified by POSIX.
  842. SIGBUS = 7, // Bus error.
  843. SIGSYS = 31, // Bad system call.
  844. // New(er) POSIX signals (1003.1-2008, 1003.1-2013).
  845. SIGURG = 23, // Urgent data is available at a socket.
  846. SIGSTOP = 19, // Stop, unblockable.
  847. SIGTSTP = 20, // Keyboard stop.
  848. SIGCONT = 18, // Continue.
  849. SIGCHLD = 17, // Child terminated or stopped.
  850. SIGTTIN = 21, // Background read from control terminal.
  851. SIGTTOU = 22, // Background write to control terminal.
  852. SIGPOLL = 29, // Pollable event occurred (System V).
  853. SIGXFSZ = 25, // File size limit exceeded.
  854. SIGXCPU = 24, // CPU time limit exceeded.
  855. SIGVTALRM = 26, // Virtual timer expired.
  856. SIGPROF = 27, // Profiling timer expired.
  857. SIGUSR1 = 10, // User-defined signal 1.
  858. SIGUSR2 = 12, // User-defined signal 2.
  859. // Nonstandard signals found in all modern POSIX systems (including both BSD and Linux).
  860. SIGWINCH = 28, // Window size change (4.3 BSD, Sun).
  861. // Archaic names for compatibility.
  862. SIGIO = SIGPOLL, // I/O now possible (4.2 BSD).
  863. SIGIOT = SIGABRT, // IOT instruction, abort() on a PDP-11.
  864. SIGCLD = SIGCHLD, // Old System V name
  865. }
  866. Sig_Mask_Kind :: enum i32 {
  867. SIG_BLOCK = 0,
  868. SIG_UNBLOCK = 1,
  869. SIG_SETMASK = 2,
  870. }
  871. Sig_Stack_Flag :: enum i32 {
  872. DISABLE = 0,
  873. ONSTACK = 1,
  874. AUTODISARM = 31,
  875. }
  876. /*
  877. Type of socket to create
  878. - For TCP you want to use SOCK_STREAM
  879. - For UDP you want to use SOCK_DGRAM
  880. Also see `Protocol`
  881. */
  882. Socket_Type :: enum {
  883. STREAM = 1,
  884. DGRAM = 2,
  885. RAW = 3,
  886. RDM = 4,
  887. SEQPACKET = 5,
  888. DCCP = 6,
  889. PACKET = 10,
  890. }
  891. /*
  892. Bits for Socket_FD_Flags
  893. */
  894. Socket_FD_Flags_Bits :: enum {
  895. NONBLOCK = 11,
  896. CLOEXEC = 19,
  897. }
  898. /*
  899. Protocol family
  900. */
  901. Protocol_Family :: enum u16 {
  902. UNSPEC = 0,
  903. LOCAL = 1,
  904. UNIX = LOCAL,
  905. FILE = LOCAL,
  906. INET = 2,
  907. AX25 = 3,
  908. IPX = 4,
  909. APPLETALK = 5,
  910. NETROM = 6,
  911. BRIDGE = 7,
  912. ATMPVC = 8,
  913. X25 = 9,
  914. INET6 = 10,
  915. ROSE = 11,
  916. DECnet = 12,
  917. NETBEUI = 13,
  918. SECURITY = 14,
  919. KEY = 15,
  920. NETLINK = 16,
  921. ROUTE = NETLINK,
  922. PACKET = 17,
  923. ASH = 18,
  924. ECONET = 19,
  925. ATMSVC = 20,
  926. RDS = 21,
  927. SNA = 22,
  928. IRDA = 23,
  929. PPPOX = 24,
  930. WANPIPE = 25,
  931. LLC = 26,
  932. IB = 27,
  933. MPLS = 28,
  934. CAN = 29,
  935. TIPC = 30,
  936. BLUETOOTH = 31,
  937. IUCV = 32,
  938. RXRPC = 33,
  939. ISDN = 34,
  940. PHONET = 35,
  941. IEEE802154 = 36,
  942. CAIF = 37,
  943. ALG = 38,
  944. NFC = 39,
  945. VSOCK = 40,
  946. KCM = 41,
  947. QIPCRTR = 42,
  948. SMC = 43,
  949. XDP = 44,
  950. MCTP = 45,
  951. }
  952. /*
  953. The protocol number according to IANA protocol number list
  954. Full list of protocol numbers:
  955. https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
  956. Supported by the OS protocols can be queried by reading:
  957. /etc/protocols
  958. */
  959. Protocol :: enum {
  960. HOPOPT = 0,
  961. ICMP = 1,
  962. IGMP = 2,
  963. GGP = 3,
  964. IPv4 = 4,
  965. ST = 5,
  966. TCP = 6,
  967. CBT = 7,
  968. EGP = 8,
  969. IGP = 9,
  970. BBN_RCC_MON = 10,
  971. NVP_II = 11,
  972. PUP = 12,
  973. EMCON = 14,
  974. XNET = 15,
  975. CHAOS = 16,
  976. UDP = 17,
  977. MUX = 18,
  978. DCN_MEAS = 19,
  979. HMP = 20,
  980. PRM = 21,
  981. XNS_IDP = 22,
  982. TRUNK_1 = 23,
  983. TRUNK_2 = 24,
  984. LEAF_1 = 25,
  985. LEAF_2 = 26,
  986. RDP = 27,
  987. IRTP = 28,
  988. ISO_TP4 = 29,
  989. NETBLT = 30,
  990. MFE_NSP = 31,
  991. MERIT_INP = 32,
  992. DCCP = 33,
  993. THREE_PC = 34,
  994. IDPR = 35,
  995. XTP = 36,
  996. DDP = 37,
  997. IDPR_CMTP = 38,
  998. TP_PlusPlus = 39,
  999. IL = 40,
  1000. IPv6 = 41,
  1001. SDRP = 42,
  1002. IPv6_Route = 43,
  1003. IPv6_Frag = 44,
  1004. IDRP = 45,
  1005. RSVP = 46,
  1006. GRE = 47,
  1007. DSR = 48,
  1008. BNA = 49,
  1009. ESP = 50,
  1010. AH = 51,
  1011. I_NLSP = 52,
  1012. NARP = 54,
  1013. MOBILE = 55,
  1014. TLSP = 56,
  1015. SKIP = 57,
  1016. IPv6_ICMP = 58,
  1017. IPv6_NoNxt = 59,
  1018. IPv6_Opts = 60,
  1019. CFTP = 62,
  1020. SAT_EXPAK = 64,
  1021. KRYPTOLAN = 65,
  1022. RVD = 66,
  1023. IPPC = 67,
  1024. SAT_MON = 69,
  1025. VISA = 70,
  1026. IPCV = 71,
  1027. CPNX = 72,
  1028. CPHB = 73,
  1029. WSN = 74,
  1030. PVP = 75,
  1031. BR_SAT_MON = 76,
  1032. SUN_ND = 77,
  1033. WB_MON = 78,
  1034. WB_EXPAK = 79,
  1035. ISO_IP = 80,
  1036. VMTP = 81,
  1037. SECURE_VMTP = 82,
  1038. VINES = 83,
  1039. IPTM = 84,
  1040. NSFNET_IGP = 85,
  1041. DGP = 86,
  1042. TCF = 87,
  1043. EIGRP = 88,
  1044. OSPFIGP = 89,
  1045. Sprite_RPC = 90,
  1046. LARP = 91,
  1047. MTP = 92,
  1048. AX_25 = 93,
  1049. IPIP = 94,
  1050. SCC_SP = 96,
  1051. ETHERIP = 97,
  1052. ENCAP = 98,
  1053. GMTP = 100,
  1054. IFMP = 101,
  1055. PNNI = 102,
  1056. PIM = 103,
  1057. ARIS = 104,
  1058. SCPS = 105,
  1059. QNX = 106,
  1060. A_N = 107,
  1061. IPComp = 108,
  1062. SNP = 109,
  1063. Compaq_Peer = 110,
  1064. IPX_in_IP = 111,
  1065. VRRP = 112,
  1066. PGM = 113,
  1067. L2TP = 115,
  1068. DDX = 116,
  1069. IATP = 117,
  1070. STP = 118,
  1071. SRP = 119,
  1072. UTI = 120,
  1073. SMP = 121,
  1074. PTP = 123,
  1075. FIRE = 125,
  1076. CRTP = 126,
  1077. CRUDP = 127,
  1078. SSCOPMCE = 128,
  1079. IPLT = 129,
  1080. SPS = 130,
  1081. PIPE = 131,
  1082. SCTP = 132,
  1083. FC = 133,
  1084. RSVP_E2E_IGNORE = 134,
  1085. UDPLite = 136,
  1086. MPLS_in_IP = 137,
  1087. manet = 138,
  1088. HIP = 139,
  1089. Shim6 = 140,
  1090. WESP = 141,
  1091. ROHC = 142,
  1092. Ethernet = 143,
  1093. AGGFRAG = 144,
  1094. NSH = 145,
  1095. Reserved = 255,
  1096. }
  1097. /*
  1098. API Level for getsockopt(2)/setsockopt(2)
  1099. */
  1100. Socket_API_Level :: enum {
  1101. // Comes from <bits/socket-constants.h>
  1102. SOCKET = 1,
  1103. // Copy-pasted from protocol numbers
  1104. TCP = 6,
  1105. UDP = 17,
  1106. // Comes from <bits/socket.h>
  1107. RAW = 255,
  1108. DECNET = 261,
  1109. X25 = 262,
  1110. PACKET = 263,
  1111. ATM = 264,
  1112. AAL = 265,
  1113. IRDA = 266,
  1114. NETBEUI = 267,
  1115. LLC = 268,
  1116. DCCP = 269,
  1117. NETLINK = 270,
  1118. TIPC = 271,
  1119. RXRPC = 272,
  1120. PPPOL2TP = 273,
  1121. BLUETOOTH = 274,
  1122. PNPIPE = 275,
  1123. RDS = 276,
  1124. IUCV = 277,
  1125. CAIF = 278,
  1126. ALG = 279,
  1127. NFC = 280,
  1128. KCM = 281,
  1129. TLS = 282,
  1130. XDP = 283,
  1131. MPTCP = 284,
  1132. MCTP = 285,
  1133. SMC = 286,
  1134. }
  1135. /*
  1136. If Socket_API_Level == .SOCKET, these are the options
  1137. you can specify in getsockopt(2)/setsockopt(2)
  1138. */
  1139. Socket_Option :: enum {
  1140. DEBUG = 1,
  1141. REUSEADDR = 2,
  1142. TYPE = 3,
  1143. ERROR = 4,
  1144. DONTROUTE = 5,
  1145. BROADCAST = 6,
  1146. SNDBUF = 7,
  1147. RCVBUF = 8,
  1148. SNDBUFFORCE = 32,
  1149. RCVBUFFORCE = 33,
  1150. KEEPALIVE = 9,
  1151. OOBINLINE = 10,
  1152. NO_CHECK = 11,
  1153. PRIORITY = 12,
  1154. LINGER = 13,
  1155. BSDCOMPAT = 14,
  1156. REUSEPORT = 15,
  1157. PASSCRED = 16,
  1158. PEERCRED = 17,
  1159. RCVLOWAT = 18,
  1160. SNDLOWAT = 19,
  1161. RCVTIMEO_OLD = 20,
  1162. SNDTIMEO_OLD = 21,
  1163. SECURITY_AUTHENTICATION = 22,
  1164. SECURITY_ENCRYPTION_TRANSPORT = 23,
  1165. SECURITY_ENCRYPTION_NETWORK = 24,
  1166. BINDTODEVICE = 25,
  1167. ATTACH_FILTER = 26,
  1168. DETACH_FILTER = 27,
  1169. GET_FILTER = ATTACH_FILTER,
  1170. PEERNAME = 28,
  1171. ACCEPTCONN = 30,
  1172. PEERSEC = 31,
  1173. PASSSEC = 34,
  1174. MARK = 36,
  1175. PROTOCOL = 38,
  1176. DOMAIN = 39,
  1177. RXQ_OVFL = 40,
  1178. WIFI_STATUS = 41,
  1179. PEEK_OFF = 42,
  1180. NOFCS = 43,
  1181. LOCK_FILTER = 44,
  1182. SELECT_ERR_QUEUE = 45,
  1183. BUSY_POLL = 46,
  1184. MAX_PACING_RATE = 47,
  1185. BPF_EXTENSIONS = 48,
  1186. INCOMING_CPU = 49,
  1187. ATTACH_BPF = 50,
  1188. DETACH_BPF = DETACH_FILTER,
  1189. ATTACH_REUSEPORT_CBPF = 51,
  1190. ATTACH_REUSEPORT_EBPF = 52,
  1191. CNX_ADVICE = 53,
  1192. TIMESTAMPING_OPT_STATS = 54,
  1193. MEMINFO = 55,
  1194. INCOMING_NAPI_ID = 56,
  1195. COOKIE = 57,
  1196. TIMESTAMPING_PKTINFO = 58,
  1197. PEERGROUPS = 59,
  1198. ZEROCOPY = 60,
  1199. TXTIME = 61,
  1200. BINDTOIFINDEX = 62,
  1201. TIMESTAMP_OLD = 29,
  1202. TIMESTAMPNS_OLD = 35,
  1203. TIMESTAMPING_OLD = 37,
  1204. TIMESTAMP_NEW = 63,
  1205. TIMESTAMPNS_NEW = 64,
  1206. TIMESTAMPING_NEW = 65,
  1207. RCVTIMEO_NEW = 66,
  1208. SNDTIMEO_NEW = 67,
  1209. DETACH_REUSEPORT_BPF = 68,
  1210. PREFER_BUSY_POLL = 69,
  1211. BUSY_POLL_BUDGET = 70,
  1212. NETNS_COOKIE = 71,
  1213. BUF_LOCK = 72,
  1214. RESERVE_MEM = 73,
  1215. TXREHASH = 74,
  1216. RCVMARK = 75,
  1217. // Hardcoded 64-bit Time. It's time to move on.
  1218. TIMESTAMP = TIMESTAMP_NEW,
  1219. TIMESTAMPNS = TIMESTAMPNS_NEW,
  1220. TIMESTAMPING = TIMESTAMPING_NEW,
  1221. RCVTIMEO = RCVTIMEO_NEW,
  1222. SNDTIMEO = SNDTIMEO_NEW,
  1223. }
  1224. Socket_UDP_Option :: enum {
  1225. CORK = 1,
  1226. ENCAP = 100,
  1227. NO_CHECK6_TX = 101,
  1228. NO_CHECK6_RX = 102,
  1229. SEGMENT = 103,
  1230. GRO = 104,
  1231. }
  1232. UPD_Encapsulation :: enum {
  1233. ENCAP_ESPINUDP_NON_IKE = 1,
  1234. ENCAP_ESPINUDP = 2,
  1235. ENCAP_L2TPINUDP = 3,
  1236. ENCAP_GTP0 = 4,
  1237. ENCAP_GTP1U = 5,
  1238. }
  1239. Socket_TCP_Option :: enum {
  1240. NODELAY = 1,
  1241. MAXSEG = 2,
  1242. CORK = 3,
  1243. KEEPIDLE = 4,
  1244. KEEPINTVL = 5,
  1245. KEEPCNT = 6,
  1246. SYNCNT = 7,
  1247. LINGER2 = 8,
  1248. DEFER_ACCEPT = 9,
  1249. WINDOW_CLAMP = 10,
  1250. INFO = 11,
  1251. QUICKACK = 12,
  1252. CONGESTION = 13,
  1253. MD5SIG = 14,
  1254. COOKIE_TRANSACTIONS = 15,
  1255. THIN_LINEAR_TIMEOUTS = 16,
  1256. THIN_DUPACK = 17,
  1257. USER_TIMEOUT = 18,
  1258. REPAIR = 19,
  1259. REPAIR_QUEUE = 20,
  1260. QUEUE_SEQ = 21,
  1261. REPAIR_OPTIONS = 22,
  1262. FASTOPEN = 23,
  1263. TIMESTAMP = 24,
  1264. NOTSENT_LOWAT = 25,
  1265. CC_INFO = 26,
  1266. SAVE_SYN = 27,
  1267. SAVED_SYN = 28,
  1268. REPAIR_WINDOW = 29,
  1269. FASTOPEN_CONNECT = 30,
  1270. ULP = 31,
  1271. MD5SIG_EXT = 32,
  1272. FASTOPEN_KEY = 33,
  1273. FASTOPEN_NO_COOKIE = 34,
  1274. ZEROCOPY_RECEIVE = 35,
  1275. INQ = 36,
  1276. CM_INQ = INQ,
  1277. TX_DELAY = 37,
  1278. }
  1279. /*
  1280. Bits for Socket_Msg
  1281. */
  1282. Socket_Msg_Bits :: enum {
  1283. OOB = 0,
  1284. PEEK = 1,
  1285. DONTROUTE = 2,
  1286. TRYHARD = DONTROUTE,
  1287. CTRUNC = 3,
  1288. PROXY = 4,
  1289. TRUNC = 5,
  1290. DONTWAIT = 6,
  1291. EOR = 7,
  1292. WAITALL = 8,
  1293. FIN = 9,
  1294. SYN = 10,
  1295. CONFIRM = 11,
  1296. RST = 12,
  1297. ERRQUEUE = 13,
  1298. NOSIGNAL = 14,
  1299. MORE = 15,
  1300. WAITFORONE = 16,
  1301. BATCH = 18,
  1302. ZEROCOPY = 22,
  1303. FASTOPEN = 29,
  1304. CMSG_CLOEXEC = 30,
  1305. }
  1306. /*
  1307. Argument to shutdown(2)
  1308. */
  1309. Shutdown_How :: enum i32 {
  1310. RD = 0,
  1311. WR = 1,
  1312. RDWR = 2,
  1313. }
  1314. /*
  1315. Second argument to futex(2) syscall
  1316. */
  1317. Futex_Op :: enum u32 {
  1318. WAIT = 0,
  1319. WAKE = 1,
  1320. FD = 2,
  1321. REQUEUE = 3,
  1322. CMP_REQUEUE = 4,
  1323. WAKE_OP = 5,
  1324. LOCK_PI = 6,
  1325. UNLOCK_PI = 7,
  1326. TRYLOCK_PI = 8,
  1327. WAIT_BITSET = 9,
  1328. WAKE_BITSET = 10,
  1329. WAIT_REQUEUE_PI = 11,
  1330. CMP_REQUEUE_PI = 12,
  1331. LOCK_PI2 = 13,
  1332. }
  1333. /*
  1334. Bits for Futex_Flags
  1335. */
  1336. Futex_Flags_Bits :: enum {
  1337. PRIVATE = 7,
  1338. REALTIME = 8,
  1339. }
  1340. /*
  1341. Kind of operation on futex, see FUTEX_WAKE_OP
  1342. */
  1343. Futex_Arg_Op :: enum {
  1344. SET = 0, /* uaddr2 = oparg; */
  1345. ADD = 1, /* uaddr2 += oparg; */
  1346. OR = 2, /* uaddr2 |= oparg; */
  1347. ANDN = 3, /* uaddr2 &= ~oparg; */
  1348. XOR = 4, /* uaddr2 ^= oparg; */
  1349. PO2_SET = 0, /* uaddr2 = 1<<oparg; */
  1350. PO2_ADD = 1, /* uaddr2 += 1<<oparg; */
  1351. PO2_OR = 2, /* uaddr2 |= 1<<oparg; */
  1352. PO2_ANDN = 3, /* uaddr2 &= ~(1<<oparg); */
  1353. PO2_XOR = 4, /* uaddr2 ^= 1<<oparg; */
  1354. }
  1355. /*
  1356. Kind of comparison operation on futex, see FUTEX_WAKE_OP
  1357. */
  1358. Futex_Cmp_Op :: enum {
  1359. EQ = 0, /* if (oldval == cmparg) wake */
  1360. NE = 1, /* if (oldval != cmparg) wake */
  1361. LT = 2, /* if (oldval < cmparg) wake */
  1362. LE = 3, /* if (oldval <= cmparg) wake */
  1363. GT = 4, /* if (oldval > cmparg) wake */
  1364. GE = 5, /* if (oldval >= cmparg) wake */
  1365. }
  1366. /*
  1367. The kind of resource limits
  1368. */
  1369. RLimit_Kind :: enum i32 {
  1370. CPU = 0,
  1371. FSIZE = 1,
  1372. DATA = 2,
  1373. STACK = 3,
  1374. CORE = 4,
  1375. RSS = 5,
  1376. NOFILE = 7,
  1377. AS = 9,
  1378. NPROC = 6,
  1379. MEMLOCK = 8,
  1380. LOCKS = 10,
  1381. SIGPENDING = 11,
  1382. MSGQUEUE = 12,
  1383. NICE = 13,
  1384. RTPRIO = 14,
  1385. RTTIME = 15,
  1386. NLIMITS = 16,
  1387. }
  1388. /*
  1389. Represents the user of resources
  1390. */
  1391. RUsage_Who :: enum i32 {
  1392. CHILDREN = -1,
  1393. SELF = 0,
  1394. THREAD = 1,
  1395. LWP = THREAD,
  1396. }
  1397. /*
  1398. Bits for Personality_Flags
  1399. */
  1400. UNAME26 :: 17
  1401. ADDR_NO_RANDOMIZE :: 18
  1402. FDPIC_FUNCPTRS :: 19
  1403. MMAP_PAGE_ZERO :: 20
  1404. ADDR_COMPAT_LAYOUT :: 21
  1405. READ_IMPLIES_EXEC :: 22
  1406. ADDR_LIMIT_32BIT :: 23
  1407. SHORT_INODE :: 24
  1408. WHOLE_SECONDS :: 25
  1409. STICKY_TIMEOUTS :: 26
  1410. ADDR_LIMIT_3GB :: 27
  1411. /*
  1412. Personality type
  1413. These go into the bottom 8 bits of the personality value
  1414. */
  1415. PER_LINUX :: 0x0000
  1416. PER_LINUX_32BIT :: 0x0000 | ADDR_LIMIT_32BIT
  1417. PER_LINUX_FDPIC :: 0x0000 | FDPIC_FUNCPTRS
  1418. PER_SVR4 :: 0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO
  1419. PER_SVR3 :: 0x0002 | STICKY_TIMEOUTS | SHORT_INODE
  1420. PER_SCOSVR3 :: 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS | SHORT_INODE
  1421. PER_OSR5 :: 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS
  1422. PER_WYSEV386 :: 0x0004 | STICKY_TIMEOUTS | SHORT_INODE
  1423. PER_ISCR4 :: 0x0005 | STICKY_TIMEOUTS
  1424. PER_BSD :: 0x0006
  1425. PER_SUNOS :: 0x0006 | STICKY_TIMEOUTS
  1426. PER_XENIX :: 0x0007 | STICKY_TIMEOUTS | SHORT_INODE
  1427. PER_LINUX32 :: 0x0008
  1428. PER_LINUX32_3GB :: 0x0008 | ADDR_LIMIT_3GB
  1429. PER_IRIX32 :: 0x0009 | STICKY_TIMEOUTS
  1430. PER_IRIXN32 :: 0x000a | STICKY_TIMEOUTS
  1431. PER_IRIX64 :: 0x000b | STICKY_TIMEOUTS
  1432. PER_RISCOS :: 0x000c
  1433. PER_SOLARIS :: 0x000d | STICKY_TIMEOUTS
  1434. PER_UW7 :: 0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO
  1435. PER_OSF4 :: 0x000f
  1436. PER_HPUX :: 0x0010
  1437. PER_MASK :: 0x00ff
  1438. /*
  1439. Bits for access modes for shared memory
  1440. */
  1441. IPC_Mode_Bits :: enum {
  1442. WROTH = 1,
  1443. RDOTH = 2,
  1444. WRGRP = 4,
  1445. RDGRP = 5,
  1446. WRUSR = 7,
  1447. RDUSR = 8,
  1448. DEST = 9,
  1449. LOCKED = 10,
  1450. }
  1451. /*
  1452. Shared memory flags bits
  1453. */
  1454. IPC_Flags_Bits :: enum {
  1455. IPC_CREAT = 9,
  1456. IPC_EXCL = 10,
  1457. IPC_NOWAIT = 11,
  1458. // Semaphore
  1459. SEM_UNDO = 9,
  1460. // Shared memory
  1461. SHM_HUGETLB = 11,
  1462. SHM_NORESERVE = 12,
  1463. SHM_RDONLY = 12,
  1464. SHM_RND = 13,
  1465. SHM_REMAP = 14,
  1466. SHM_EXEC = 15,
  1467. // Message queue
  1468. MSG_NOERROR = 12,
  1469. MSG_EXCEPT = 13,
  1470. MSG_COPY = 14,
  1471. }
  1472. /*
  1473. IPC memory commands
  1474. */
  1475. IPC_Cmd :: enum i16 {
  1476. // IPC common
  1477. IPC_RMID = 0,
  1478. IPC_SET = 1,
  1479. IPC_STAT = 2,
  1480. // Shared memory
  1481. SHM_LOCK = 11,
  1482. SHM_UNLOCK = 12,
  1483. SHM_STAT = 13,
  1484. SHM_INFO = 14,
  1485. SHM_STAT_ANY = 15,
  1486. // Semaphore
  1487. GETPID = 11,
  1488. GETVAL = 12,
  1489. GETALL = 13,
  1490. GETNCNT = 14,
  1491. GETZCNT = 15,
  1492. SETVAL = 16,
  1493. SETALL = 17,
  1494. SEM_STAT = 18,
  1495. SEM_INFO = 19,
  1496. SEM_STAT_ANY = 20,
  1497. // Message queue
  1498. MSG_STAT = 11,
  1499. MSG_INFO = 12,
  1500. MSG_STAT_ANY = 13,
  1501. }
  1502. /*
  1503. File locking operation bits
  1504. */
  1505. FLock_Op_Bits :: enum {
  1506. SH = 1,
  1507. EX = 2,
  1508. NB = 4,
  1509. UN = 8,
  1510. }
  1511. /*
  1512. ptrace requests
  1513. */
  1514. PTrace_Request :: enum {
  1515. TRACEME = 0,
  1516. PEEKTEXT = 1,
  1517. PEEKDATA = 2,
  1518. PEEKUSER = 3,
  1519. POKETEXT = 4,
  1520. POKEDATA = 5,
  1521. POKEUSER = 6,
  1522. CONT = 7,
  1523. KILL = 8,
  1524. SINGLESTEP = 9,
  1525. GETREGS = 12,
  1526. SETREGS = 13,
  1527. GETFPREGS = 14,
  1528. SETFPREGS = 15,
  1529. ATTACH = 16,
  1530. DETACH = 17,
  1531. GETFPXREGS = 18,
  1532. SETFPXREGS = 19,
  1533. SYSCALL = 24,
  1534. GET_THREAD_AREA = 25,
  1535. SET_THREAD_AREA = 26,
  1536. ARCH_PRCTL = 30,
  1537. SYSEMU = 31,
  1538. SYSEMU_SINGLESTEP = 32,
  1539. SINGLEBLOCK = 33,
  1540. SETOPTIONS = 0x4200,
  1541. GETEVENTMSG = 0x4201,
  1542. GETSIGINFO = 0x4202,
  1543. SETSIGINFO = 0x4203,
  1544. GETREGSET = 0x4204,
  1545. SETREGSET = 0x4205,
  1546. SEIZE = 0x4206,
  1547. INTERRUPT = 0x4207,
  1548. LISTEN = 0x4208,
  1549. PEEKSIGINFO = 0x4209,
  1550. GETSIGMASK = 0x420a,
  1551. SETSIGMASK = 0x420b,
  1552. SECCOMP_GET_FILTER = 0x420c,
  1553. SECCOMP_GET_METADATA = 0x420d,
  1554. GET_SYSCALL_INFO = 0x420e,
  1555. GET_RSEQ_CONFIGURATION = 0x420f,
  1556. }
  1557. /*
  1558. ptrace options
  1559. */
  1560. PTrace_Options_Bits :: enum {
  1561. TRACESYSGOOD = 0,
  1562. TRACEFORK = 1,
  1563. TRACEVFORK = 2,
  1564. TRACECLONE = 3,
  1565. TRACEEXEC = 4,
  1566. TRACEVFORKDONE = 5,
  1567. TRACEEXIT = 6,
  1568. TRACESECCOMP = 7,
  1569. EXITKILL = 20,
  1570. SUSPEND_SECCOMP = 21,
  1571. }
  1572. /*
  1573. ptrace event codes.
  1574. */
  1575. PTrace_Event_Code :: enum {
  1576. EVENT_FORK = 1,
  1577. EVENT_VFORK = 2,
  1578. EVENT_CLONE = 3,
  1579. EVENT_EXEC = 4,
  1580. EVENT_VFORK_DONE = 5,
  1581. EVENT_EXIT = 6,
  1582. EVENT_SECCOMP = 7,
  1583. EVENT_STOP = 128,
  1584. }
  1585. /*
  1586. ptrace's get syscall info operation.
  1587. */
  1588. PTrace_Get_Syscall_Info_Op :: enum u8 {
  1589. NONE = 0,
  1590. ENTRY = 1,
  1591. EXIT = 2,
  1592. SECCOMP = 3,
  1593. }
  1594. /*
  1595. ptrace's PEEKSIGINFO flags bits
  1596. */
  1597. PTrace_Peek_Sig_Info_Flags_Bits :: enum {
  1598. SHARED = 0,
  1599. }
  1600. /*
  1601. Syslog actions.
  1602. */
  1603. Syslog_Action :: enum i32 {
  1604. CLOSE = 0,
  1605. OPEN = 1,
  1606. READ = 2,
  1607. READ_ALL = 3,
  1608. READ_CLEAR = 4,
  1609. CLEAR = 5,
  1610. CONSOLE_OFF = 6,
  1611. CONSOLE_ON = 7,
  1612. CONSOLE_LEVEL = 8,
  1613. SIZE_UNREAD = 9,
  1614. SIZE_BUFFER = 10,
  1615. }
  1616. /*
  1617. Bits for splice flags.
  1618. */
  1619. Splice_Flags_Bits :: enum {
  1620. MOVE = 0x01,
  1621. NONBLOCK = 0x02,
  1622. MORE = 0x04,
  1623. GIFT = 0x08,
  1624. }
  1625. /*
  1626. Clock IDs for various system clocks.
  1627. */
  1628. Clock_Id :: enum {
  1629. REALTIME = 0,
  1630. MONOTONIC = 1,
  1631. PROCESS_CPUTIME_ID = 2,
  1632. THREAD_CPUTIME_ID = 3,
  1633. MONOTONIC_RAW = 4,
  1634. REALTIME_COARSE = 5,
  1635. MONOTONIC_COARSE = 6,
  1636. BOOTTIME = 7,
  1637. REALTIME_ALARM = 8,
  1638. BOOTTIME_ALARM = 9,
  1639. }
  1640. /*
  1641. Bits for POSIX interval timer flags.
  1642. */
  1643. ITimer_Flags_Bits :: enum {
  1644. ABSTIME = 1,
  1645. }
  1646. /*
  1647. Bits for epoll_create(2) flags.
  1648. */
  1649. EPoll_Flags_Bits :: enum {
  1650. FDCLOEXEC = 19,
  1651. }
  1652. EPoll_Event_Kind :: enum u32 {
  1653. IN = 0x001,
  1654. PRI = 0x002,
  1655. OUT = 0x004,
  1656. RDNORM = 0x040,
  1657. RDBAND = 0x080,
  1658. WRNORM = 0x100,
  1659. WRBAND = 0x200,
  1660. MSG = 0x400,
  1661. ERR = 0x008,
  1662. HUP = 0x010,
  1663. RDHUP = 0x2000,
  1664. EXCLUSIVE = 1<<28,
  1665. WAKEUP = 1<<29,
  1666. ONESHOT = 1<<30,
  1667. ET = 1<<31,
  1668. }
  1669. EPoll_Ctl_Opcode :: enum i32 {
  1670. ADD = 1,
  1671. DEL = 2,
  1672. MOD = 3,
  1673. }