bits.odin 33 KB

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