types_linux.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  1. // Copyright 2009 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. // +build ignore
  5. /*
  6. Input to cgo -godefs. See also mkerrors.sh and mkall.sh
  7. */
  8. // +godefs map struct_in_addr [4]byte /* in_addr */
  9. // +godefs map struct_in6_addr [16]byte /* in6_addr */
  10. package unix
  11. /*
  12. #define _LARGEFILE_SOURCE
  13. #define _LARGEFILE64_SOURCE
  14. #define _FILE_OFFSET_BITS 64
  15. #define _GNU_SOURCE
  16. #include <dirent.h>
  17. #include <fcntl.h>
  18. #include <netinet/in.h>
  19. #include <netinet/tcp.h>
  20. #include <netpacket/packet.h>
  21. #include <poll.h>
  22. #include <signal.h>
  23. #include <stdio.h>
  24. #include <sys/epoll.h>
  25. #include <sys/inotify.h>
  26. #include <sys/mman.h>
  27. #include <sys/mount.h>
  28. #include <sys/param.h>
  29. #include <sys/ptrace.h>
  30. #include <sys/resource.h>
  31. #include <sys/select.h>
  32. #include <sys/signal.h>
  33. #include <sys/stat.h>
  34. #include <sys/statfs.h>
  35. #include <sys/sysinfo.h>
  36. #include <sys/time.h>
  37. #include <sys/times.h>
  38. #include <sys/timex.h>
  39. #include <sys/types.h>
  40. #include <sys/un.h>
  41. #include <sys/user.h>
  42. #include <sys/utsname.h>
  43. #include <sys/wait.h>
  44. #include <linux/filter.h>
  45. #include <linux/netlink.h>
  46. #include <linux/rtnetlink.h>
  47. #include <linux/icmpv6.h>
  48. #include <asm/termbits.h>
  49. #include <time.h>
  50. #include <unistd.h>
  51. #include <ustat.h>
  52. #include <utime.h>
  53. #include <bluetooth/bluetooth.h>
  54. #include <bluetooth/hci.h>
  55. #ifdef TCSETS2
  56. // On systems that have "struct termios2" use this as type Termios.
  57. typedef struct termios2 termios_t;
  58. #else
  59. typedef struct termios termios_t;
  60. #endif
  61. enum {
  62. sizeofPtr = sizeof(void*),
  63. };
  64. union sockaddr_all {
  65. struct sockaddr s1; // this one gets used for fields
  66. struct sockaddr_in s2; // these pad it out
  67. struct sockaddr_in6 s3;
  68. struct sockaddr_un s4;
  69. struct sockaddr_ll s5;
  70. struct sockaddr_nl s6;
  71. };
  72. struct sockaddr_any {
  73. struct sockaddr addr;
  74. char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)];
  75. };
  76. // copied from /usr/include/linux/un.h
  77. struct my_sockaddr_un {
  78. sa_family_t sun_family;
  79. #if defined(__ARM_EABI__) || defined(__powerpc64__)
  80. // on ARM char is by default unsigned
  81. signed char sun_path[108];
  82. #else
  83. char sun_path[108];
  84. #endif
  85. };
  86. #ifdef __ARM_EABI__
  87. typedef struct user_regs PtraceRegs;
  88. #elif defined(__aarch64__)
  89. typedef struct user_pt_regs PtraceRegs;
  90. #elif defined(__powerpc64__)
  91. typedef struct pt_regs PtraceRegs;
  92. #elif defined(__mips__)
  93. typedef struct user PtraceRegs;
  94. #elif defined(__s390x__)
  95. typedef struct _user_regs_struct PtraceRegs;
  96. #elif defined(__sparc__)
  97. #include <asm/ptrace.h>
  98. typedef struct pt_regs PtraceRegs;
  99. #else
  100. typedef struct user_regs_struct PtraceRegs;
  101. #endif
  102. #if defined(__s390x__)
  103. typedef struct _user_psw_struct ptracePsw;
  104. typedef struct _user_fpregs_struct ptraceFpregs;
  105. typedef struct _user_per_struct ptracePer;
  106. #else
  107. typedef struct {} ptracePsw;
  108. typedef struct {} ptraceFpregs;
  109. typedef struct {} ptracePer;
  110. #endif
  111. // The real epoll_event is a union, and godefs doesn't handle it well.
  112. struct my_epoll_event {
  113. uint32_t events;
  114. #if defined(__ARM_EABI__) || defined(__aarch64__)
  115. // padding is not specified in linux/eventpoll.h but added to conform to the
  116. // alignment requirements of EABI
  117. int32_t padFd;
  118. #elif defined(__powerpc64__) || defined(__s390x__) || defined(__sparc__)
  119. int32_t _padFd;
  120. #endif
  121. int32_t fd;
  122. int32_t pad;
  123. };
  124. */
  125. import "C"
  126. // Machine characteristics; for internal use.
  127. const (
  128. sizeofPtr = C.sizeofPtr
  129. sizeofShort = C.sizeof_short
  130. sizeofInt = C.sizeof_int
  131. sizeofLong = C.sizeof_long
  132. sizeofLongLong = C.sizeof_longlong
  133. PathMax = C.PATH_MAX
  134. )
  135. // Basic types
  136. type (
  137. _C_short C.short
  138. _C_int C.int
  139. _C_long C.long
  140. _C_long_long C.longlong
  141. )
  142. // Time
  143. type Timespec C.struct_timespec
  144. type Timeval C.struct_timeval
  145. type Timex C.struct_timex
  146. type Time_t C.time_t
  147. type Tms C.struct_tms
  148. type Utimbuf C.struct_utimbuf
  149. // Processes
  150. type Rusage C.struct_rusage
  151. type Rlimit C.struct_rlimit
  152. type _Gid_t C.gid_t
  153. // Files
  154. type Stat_t C.struct_stat
  155. type Statfs_t C.struct_statfs
  156. type Dirent C.struct_dirent
  157. type Fsid C.fsid_t
  158. type Flock_t C.struct_flock
  159. // Advice to Fadvise
  160. const (
  161. FADV_NORMAL = C.POSIX_FADV_NORMAL
  162. FADV_RANDOM = C.POSIX_FADV_RANDOM
  163. FADV_SEQUENTIAL = C.POSIX_FADV_SEQUENTIAL
  164. FADV_WILLNEED = C.POSIX_FADV_WILLNEED
  165. FADV_DONTNEED = C.POSIX_FADV_DONTNEED
  166. FADV_NOREUSE = C.POSIX_FADV_NOREUSE
  167. )
  168. // Sockets
  169. type RawSockaddrInet4 C.struct_sockaddr_in
  170. type RawSockaddrInet6 C.struct_sockaddr_in6
  171. type RawSockaddrUnix C.struct_my_sockaddr_un
  172. type RawSockaddrLinklayer C.struct_sockaddr_ll
  173. type RawSockaddrNetlink C.struct_sockaddr_nl
  174. type RawSockaddrHCI C.struct_sockaddr_hci
  175. type RawSockaddr C.struct_sockaddr
  176. type RawSockaddrAny C.struct_sockaddr_any
  177. type _Socklen C.socklen_t
  178. type Linger C.struct_linger
  179. type Iovec C.struct_iovec
  180. type IPMreq C.struct_ip_mreq
  181. type IPMreqn C.struct_ip_mreqn
  182. type IPv6Mreq C.struct_ipv6_mreq
  183. type Msghdr C.struct_msghdr
  184. type Cmsghdr C.struct_cmsghdr
  185. type Inet4Pktinfo C.struct_in_pktinfo
  186. type Inet6Pktinfo C.struct_in6_pktinfo
  187. type IPv6MTUInfo C.struct_ip6_mtuinfo
  188. type ICMPv6Filter C.struct_icmp6_filter
  189. type Ucred C.struct_ucred
  190. type TCPInfo C.struct_tcp_info
  191. const (
  192. SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in
  193. SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
  194. SizeofSockaddrAny = C.sizeof_struct_sockaddr_any
  195. SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un
  196. SizeofSockaddrLinklayer = C.sizeof_struct_sockaddr_ll
  197. SizeofSockaddrNetlink = C.sizeof_struct_sockaddr_nl
  198. SizeofSockaddrHCI = C.sizeof_struct_sockaddr_hci
  199. SizeofLinger = C.sizeof_struct_linger
  200. SizeofIPMreq = C.sizeof_struct_ip_mreq
  201. SizeofIPMreqn = C.sizeof_struct_ip_mreqn
  202. SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
  203. SizeofMsghdr = C.sizeof_struct_msghdr
  204. SizeofCmsghdr = C.sizeof_struct_cmsghdr
  205. SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo
  206. SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
  207. SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo
  208. SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
  209. SizeofUcred = C.sizeof_struct_ucred
  210. SizeofTCPInfo = C.sizeof_struct_tcp_info
  211. )
  212. // Netlink routing and interface messages
  213. const (
  214. IFA_UNSPEC = C.IFA_UNSPEC
  215. IFA_ADDRESS = C.IFA_ADDRESS
  216. IFA_LOCAL = C.IFA_LOCAL
  217. IFA_LABEL = C.IFA_LABEL
  218. IFA_BROADCAST = C.IFA_BROADCAST
  219. IFA_ANYCAST = C.IFA_ANYCAST
  220. IFA_CACHEINFO = C.IFA_CACHEINFO
  221. IFA_MULTICAST = C.IFA_MULTICAST
  222. IFLA_UNSPEC = C.IFLA_UNSPEC
  223. IFLA_ADDRESS = C.IFLA_ADDRESS
  224. IFLA_BROADCAST = C.IFLA_BROADCAST
  225. IFLA_IFNAME = C.IFLA_IFNAME
  226. IFLA_MTU = C.IFLA_MTU
  227. IFLA_LINK = C.IFLA_LINK
  228. IFLA_QDISC = C.IFLA_QDISC
  229. IFLA_STATS = C.IFLA_STATS
  230. IFLA_COST = C.IFLA_COST
  231. IFLA_PRIORITY = C.IFLA_PRIORITY
  232. IFLA_MASTER = C.IFLA_MASTER
  233. IFLA_WIRELESS = C.IFLA_WIRELESS
  234. IFLA_PROTINFO = C.IFLA_PROTINFO
  235. IFLA_TXQLEN = C.IFLA_TXQLEN
  236. IFLA_MAP = C.IFLA_MAP
  237. IFLA_WEIGHT = C.IFLA_WEIGHT
  238. IFLA_OPERSTATE = C.IFLA_OPERSTATE
  239. IFLA_LINKMODE = C.IFLA_LINKMODE
  240. IFLA_LINKINFO = C.IFLA_LINKINFO
  241. IFLA_NET_NS_PID = C.IFLA_NET_NS_PID
  242. IFLA_IFALIAS = C.IFLA_IFALIAS
  243. IFLA_MAX = C.IFLA_MAX
  244. RT_SCOPE_UNIVERSE = C.RT_SCOPE_UNIVERSE
  245. RT_SCOPE_SITE = C.RT_SCOPE_SITE
  246. RT_SCOPE_LINK = C.RT_SCOPE_LINK
  247. RT_SCOPE_HOST = C.RT_SCOPE_HOST
  248. RT_SCOPE_NOWHERE = C.RT_SCOPE_NOWHERE
  249. RT_TABLE_UNSPEC = C.RT_TABLE_UNSPEC
  250. RT_TABLE_COMPAT = C.RT_TABLE_COMPAT
  251. RT_TABLE_DEFAULT = C.RT_TABLE_DEFAULT
  252. RT_TABLE_MAIN = C.RT_TABLE_MAIN
  253. RT_TABLE_LOCAL = C.RT_TABLE_LOCAL
  254. RT_TABLE_MAX = C.RT_TABLE_MAX
  255. RTA_UNSPEC = C.RTA_UNSPEC
  256. RTA_DST = C.RTA_DST
  257. RTA_SRC = C.RTA_SRC
  258. RTA_IIF = C.RTA_IIF
  259. RTA_OIF = C.RTA_OIF
  260. RTA_GATEWAY = C.RTA_GATEWAY
  261. RTA_PRIORITY = C.RTA_PRIORITY
  262. RTA_PREFSRC = C.RTA_PREFSRC
  263. RTA_METRICS = C.RTA_METRICS
  264. RTA_MULTIPATH = C.RTA_MULTIPATH
  265. RTA_FLOW = C.RTA_FLOW
  266. RTA_CACHEINFO = C.RTA_CACHEINFO
  267. RTA_TABLE = C.RTA_TABLE
  268. RTN_UNSPEC = C.RTN_UNSPEC
  269. RTN_UNICAST = C.RTN_UNICAST
  270. RTN_LOCAL = C.RTN_LOCAL
  271. RTN_BROADCAST = C.RTN_BROADCAST
  272. RTN_ANYCAST = C.RTN_ANYCAST
  273. RTN_MULTICAST = C.RTN_MULTICAST
  274. RTN_BLACKHOLE = C.RTN_BLACKHOLE
  275. RTN_UNREACHABLE = C.RTN_UNREACHABLE
  276. RTN_PROHIBIT = C.RTN_PROHIBIT
  277. RTN_THROW = C.RTN_THROW
  278. RTN_NAT = C.RTN_NAT
  279. RTN_XRESOLVE = C.RTN_XRESOLVE
  280. RTNLGRP_NONE = C.RTNLGRP_NONE
  281. RTNLGRP_LINK = C.RTNLGRP_LINK
  282. RTNLGRP_NOTIFY = C.RTNLGRP_NOTIFY
  283. RTNLGRP_NEIGH = C.RTNLGRP_NEIGH
  284. RTNLGRP_TC = C.RTNLGRP_TC
  285. RTNLGRP_IPV4_IFADDR = C.RTNLGRP_IPV4_IFADDR
  286. RTNLGRP_IPV4_MROUTE = C.RTNLGRP_IPV4_MROUTE
  287. RTNLGRP_IPV4_ROUTE = C.RTNLGRP_IPV4_ROUTE
  288. RTNLGRP_IPV4_RULE = C.RTNLGRP_IPV4_RULE
  289. RTNLGRP_IPV6_IFADDR = C.RTNLGRP_IPV6_IFADDR
  290. RTNLGRP_IPV6_MROUTE = C.RTNLGRP_IPV6_MROUTE
  291. RTNLGRP_IPV6_ROUTE = C.RTNLGRP_IPV6_ROUTE
  292. RTNLGRP_IPV6_IFINFO = C.RTNLGRP_IPV6_IFINFO
  293. RTNLGRP_IPV6_PREFIX = C.RTNLGRP_IPV6_PREFIX
  294. RTNLGRP_IPV6_RULE = C.RTNLGRP_IPV6_RULE
  295. RTNLGRP_ND_USEROPT = C.RTNLGRP_ND_USEROPT
  296. SizeofNlMsghdr = C.sizeof_struct_nlmsghdr
  297. SizeofNlMsgerr = C.sizeof_struct_nlmsgerr
  298. SizeofRtGenmsg = C.sizeof_struct_rtgenmsg
  299. SizeofNlAttr = C.sizeof_struct_nlattr
  300. SizeofRtAttr = C.sizeof_struct_rtattr
  301. SizeofIfInfomsg = C.sizeof_struct_ifinfomsg
  302. SizeofIfAddrmsg = C.sizeof_struct_ifaddrmsg
  303. SizeofRtMsg = C.sizeof_struct_rtmsg
  304. SizeofRtNexthop = C.sizeof_struct_rtnexthop
  305. )
  306. type NlMsghdr C.struct_nlmsghdr
  307. type NlMsgerr C.struct_nlmsgerr
  308. type RtGenmsg C.struct_rtgenmsg
  309. type NlAttr C.struct_nlattr
  310. type RtAttr C.struct_rtattr
  311. type IfInfomsg C.struct_ifinfomsg
  312. type IfAddrmsg C.struct_ifaddrmsg
  313. type RtMsg C.struct_rtmsg
  314. type RtNexthop C.struct_rtnexthop
  315. // Linux socket filter
  316. const (
  317. SizeofSockFilter = C.sizeof_struct_sock_filter
  318. SizeofSockFprog = C.sizeof_struct_sock_fprog
  319. )
  320. type SockFilter C.struct_sock_filter
  321. type SockFprog C.struct_sock_fprog
  322. // Inotify
  323. type InotifyEvent C.struct_inotify_event
  324. const SizeofInotifyEvent = C.sizeof_struct_inotify_event
  325. // Ptrace
  326. // Register structures
  327. type PtraceRegs C.PtraceRegs
  328. // Structures contained in PtraceRegs on s390x (exported by mkpost.go)
  329. type ptracePsw C.ptracePsw
  330. type ptraceFpregs C.ptraceFpregs
  331. type ptracePer C.ptracePer
  332. // Misc
  333. type FdSet C.fd_set
  334. type Sysinfo_t C.struct_sysinfo
  335. type Utsname C.struct_utsname
  336. type Ustat_t C.struct_ustat
  337. type EpollEvent C.struct_my_epoll_event
  338. const (
  339. AT_FDCWD = C.AT_FDCWD
  340. AT_REMOVEDIR = C.AT_REMOVEDIR
  341. AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW
  342. AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
  343. )
  344. type PollFd C.struct_pollfd
  345. const (
  346. POLLIN = C.POLLIN
  347. POLLPRI = C.POLLPRI
  348. POLLOUT = C.POLLOUT
  349. POLLRDHUP = C.POLLRDHUP
  350. POLLERR = C.POLLERR
  351. POLLHUP = C.POLLHUP
  352. POLLNVAL = C.POLLNVAL
  353. )
  354. type Sigset_t C.sigset_t
  355. // sysconf information
  356. const _SC_PAGESIZE = C._SC_PAGESIZE
  357. // Terminal handling
  358. type Termios C.termios_t