bits.odin 40 KB

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