You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

types_linux.go 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  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. #else
  97. typedef struct user_regs_struct PtraceRegs;
  98. #endif
  99. #if defined(__s390x__)
  100. typedef struct _user_psw_struct ptracePsw;
  101. typedef struct _user_fpregs_struct ptraceFpregs;
  102. typedef struct _user_per_struct ptracePer;
  103. #else
  104. typedef struct {} ptracePsw;
  105. typedef struct {} ptraceFpregs;
  106. typedef struct {} ptracePer;
  107. #endif
  108. // The real epoll_event is a union, and godefs doesn't handle it well.
  109. struct my_epoll_event {
  110. uint32_t events;
  111. #if defined(__ARM_EABI__) || defined(__aarch64__)
  112. // padding is not specified in linux/eventpoll.h but added to conform to the
  113. // alignment requirements of EABI
  114. int32_t padFd;
  115. #elif defined(__powerpc64__) || defined(__s390x__)
  116. int32_t _padFd;
  117. #endif
  118. int32_t fd;
  119. int32_t pad;
  120. };
  121. */
  122. import "C"
  123. // Machine characteristics; for internal use.
  124. const (
  125. sizeofPtr = C.sizeofPtr
  126. sizeofShort = C.sizeof_short
  127. sizeofInt = C.sizeof_int
  128. sizeofLong = C.sizeof_long
  129. sizeofLongLong = C.sizeof_longlong
  130. PathMax = C.PATH_MAX
  131. )
  132. // Basic types
  133. type (
  134. _C_short C.short
  135. _C_int C.int
  136. _C_long C.long
  137. _C_long_long C.longlong
  138. )
  139. // Time
  140. type Timespec C.struct_timespec
  141. type Timeval C.struct_timeval
  142. type Timex C.struct_timex
  143. type Time_t C.time_t
  144. type Tms C.struct_tms
  145. type Utimbuf C.struct_utimbuf
  146. // Processes
  147. type Rusage C.struct_rusage
  148. type Rlimit C.struct_rlimit
  149. type _Gid_t C.gid_t
  150. // Files
  151. type Stat_t C.struct_stat
  152. type Statfs_t C.struct_statfs
  153. type Dirent C.struct_dirent
  154. type Fsid C.fsid_t
  155. type Flock_t C.struct_flock
  156. // Advice to Fadvise
  157. const (
  158. FADV_NORMAL = C.POSIX_FADV_NORMAL
  159. FADV_RANDOM = C.POSIX_FADV_RANDOM
  160. FADV_SEQUENTIAL = C.POSIX_FADV_SEQUENTIAL
  161. FADV_WILLNEED = C.POSIX_FADV_WILLNEED
  162. FADV_DONTNEED = C.POSIX_FADV_DONTNEED
  163. FADV_NOREUSE = C.POSIX_FADV_NOREUSE
  164. )
  165. // Sockets
  166. type RawSockaddrInet4 C.struct_sockaddr_in
  167. type RawSockaddrInet6 C.struct_sockaddr_in6
  168. type RawSockaddrUnix C.struct_my_sockaddr_un
  169. type RawSockaddrLinklayer C.struct_sockaddr_ll
  170. type RawSockaddrNetlink C.struct_sockaddr_nl
  171. type RawSockaddrHCI C.struct_sockaddr_hci
  172. type RawSockaddr C.struct_sockaddr
  173. type RawSockaddrAny C.struct_sockaddr_any
  174. type _Socklen C.socklen_t
  175. type Linger C.struct_linger
  176. type Iovec C.struct_iovec
  177. type IPMreq C.struct_ip_mreq
  178. type IPMreqn C.struct_ip_mreqn
  179. type IPv6Mreq C.struct_ipv6_mreq
  180. type Msghdr C.struct_msghdr
  181. type Cmsghdr C.struct_cmsghdr
  182. type Inet4Pktinfo C.struct_in_pktinfo
  183. type Inet6Pktinfo C.struct_in6_pktinfo
  184. type IPv6MTUInfo C.struct_ip6_mtuinfo
  185. type ICMPv6Filter C.struct_icmp6_filter
  186. type Ucred C.struct_ucred
  187. type TCPInfo C.struct_tcp_info
  188. const (
  189. SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in
  190. SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
  191. SizeofSockaddrAny = C.sizeof_struct_sockaddr_any
  192. SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un
  193. SizeofSockaddrLinklayer = C.sizeof_struct_sockaddr_ll
  194. SizeofSockaddrNetlink = C.sizeof_struct_sockaddr_nl
  195. SizeofSockaddrHCI = C.sizeof_struct_sockaddr_hci
  196. SizeofLinger = C.sizeof_struct_linger
  197. SizeofIPMreq = C.sizeof_struct_ip_mreq
  198. SizeofIPMreqn = C.sizeof_struct_ip_mreqn
  199. SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
  200. SizeofMsghdr = C.sizeof_struct_msghdr
  201. SizeofCmsghdr = C.sizeof_struct_cmsghdr
  202. SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo
  203. SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
  204. SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo
  205. SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
  206. SizeofUcred = C.sizeof_struct_ucred
  207. SizeofTCPInfo = C.sizeof_struct_tcp_info
  208. )
  209. // Netlink routing and interface messages
  210. const (
  211. IFA_UNSPEC = C.IFA_UNSPEC
  212. IFA_ADDRESS = C.IFA_ADDRESS
  213. IFA_LOCAL = C.IFA_LOCAL
  214. IFA_LABEL = C.IFA_LABEL
  215. IFA_BROADCAST = C.IFA_BROADCAST
  216. IFA_ANYCAST = C.IFA_ANYCAST
  217. IFA_CACHEINFO = C.IFA_CACHEINFO
  218. IFA_MULTICAST = C.IFA_MULTICAST
  219. IFLA_UNSPEC = C.IFLA_UNSPEC
  220. IFLA_ADDRESS = C.IFLA_ADDRESS
  221. IFLA_BROADCAST = C.IFLA_BROADCAST
  222. IFLA_IFNAME = C.IFLA_IFNAME
  223. IFLA_MTU = C.IFLA_MTU
  224. IFLA_LINK = C.IFLA_LINK
  225. IFLA_QDISC = C.IFLA_QDISC
  226. IFLA_STATS = C.IFLA_STATS
  227. IFLA_COST = C.IFLA_COST
  228. IFLA_PRIORITY = C.IFLA_PRIORITY
  229. IFLA_MASTER = C.IFLA_MASTER
  230. IFLA_WIRELESS = C.IFLA_WIRELESS
  231. IFLA_PROTINFO = C.IFLA_PROTINFO
  232. IFLA_TXQLEN = C.IFLA_TXQLEN
  233. IFLA_MAP = C.IFLA_MAP
  234. IFLA_WEIGHT = C.IFLA_WEIGHT
  235. IFLA_OPERSTATE = C.IFLA_OPERSTATE
  236. IFLA_LINKMODE = C.IFLA_LINKMODE
  237. IFLA_LINKINFO = C.IFLA_LINKINFO
  238. IFLA_NET_NS_PID = C.IFLA_NET_NS_PID
  239. IFLA_IFALIAS = C.IFLA_IFALIAS
  240. IFLA_MAX = C.IFLA_MAX
  241. RT_SCOPE_UNIVERSE = C.RT_SCOPE_UNIVERSE
  242. RT_SCOPE_SITE = C.RT_SCOPE_SITE
  243. RT_SCOPE_LINK = C.RT_SCOPE_LINK
  244. RT_SCOPE_HOST = C.RT_SCOPE_HOST
  245. RT_SCOPE_NOWHERE = C.RT_SCOPE_NOWHERE
  246. RT_TABLE_UNSPEC = C.RT_TABLE_UNSPEC
  247. RT_TABLE_COMPAT = C.RT_TABLE_COMPAT
  248. RT_TABLE_DEFAULT = C.RT_TABLE_DEFAULT
  249. RT_TABLE_MAIN = C.RT_TABLE_MAIN
  250. RT_TABLE_LOCAL = C.RT_TABLE_LOCAL
  251. RT_TABLE_MAX = C.RT_TABLE_MAX
  252. RTA_UNSPEC = C.RTA_UNSPEC
  253. RTA_DST = C.RTA_DST
  254. RTA_SRC = C.RTA_SRC
  255. RTA_IIF = C.RTA_IIF
  256. RTA_OIF = C.RTA_OIF
  257. RTA_GATEWAY = C.RTA_GATEWAY
  258. RTA_PRIORITY = C.RTA_PRIORITY
  259. RTA_PREFSRC = C.RTA_PREFSRC
  260. RTA_METRICS = C.RTA_METRICS
  261. RTA_MULTIPATH = C.RTA_MULTIPATH
  262. RTA_FLOW = C.RTA_FLOW
  263. RTA_CACHEINFO = C.RTA_CACHEINFO
  264. RTA_TABLE = C.RTA_TABLE
  265. RTN_UNSPEC = C.RTN_UNSPEC
  266. RTN_UNICAST = C.RTN_UNICAST
  267. RTN_LOCAL = C.RTN_LOCAL
  268. RTN_BROADCAST = C.RTN_BROADCAST
  269. RTN_ANYCAST = C.RTN_ANYCAST
  270. RTN_MULTICAST = C.RTN_MULTICAST
  271. RTN_BLACKHOLE = C.RTN_BLACKHOLE
  272. RTN_UNREACHABLE = C.RTN_UNREACHABLE
  273. RTN_PROHIBIT = C.RTN_PROHIBIT
  274. RTN_THROW = C.RTN_THROW
  275. RTN_NAT = C.RTN_NAT
  276. RTN_XRESOLVE = C.RTN_XRESOLVE
  277. RTNLGRP_NONE = C.RTNLGRP_NONE
  278. RTNLGRP_LINK = C.RTNLGRP_LINK
  279. RTNLGRP_NOTIFY = C.RTNLGRP_NOTIFY
  280. RTNLGRP_NEIGH = C.RTNLGRP_NEIGH
  281. RTNLGRP_TC = C.RTNLGRP_TC
  282. RTNLGRP_IPV4_IFADDR = C.RTNLGRP_IPV4_IFADDR
  283. RTNLGRP_IPV4_MROUTE = C.RTNLGRP_IPV4_MROUTE
  284. RTNLGRP_IPV4_ROUTE = C.RTNLGRP_IPV4_ROUTE
  285. RTNLGRP_IPV4_RULE = C.RTNLGRP_IPV4_RULE
  286. RTNLGRP_IPV6_IFADDR = C.RTNLGRP_IPV6_IFADDR
  287. RTNLGRP_IPV6_MROUTE = C.RTNLGRP_IPV6_MROUTE
  288. RTNLGRP_IPV6_ROUTE = C.RTNLGRP_IPV6_ROUTE
  289. RTNLGRP_IPV6_IFINFO = C.RTNLGRP_IPV6_IFINFO
  290. RTNLGRP_IPV6_PREFIX = C.RTNLGRP_IPV6_PREFIX
  291. RTNLGRP_IPV6_RULE = C.RTNLGRP_IPV6_RULE
  292. RTNLGRP_ND_USEROPT = C.RTNLGRP_ND_USEROPT
  293. SizeofNlMsghdr = C.sizeof_struct_nlmsghdr
  294. SizeofNlMsgerr = C.sizeof_struct_nlmsgerr
  295. SizeofRtGenmsg = C.sizeof_struct_rtgenmsg
  296. SizeofNlAttr = C.sizeof_struct_nlattr
  297. SizeofRtAttr = C.sizeof_struct_rtattr
  298. SizeofIfInfomsg = C.sizeof_struct_ifinfomsg
  299. SizeofIfAddrmsg = C.sizeof_struct_ifaddrmsg
  300. SizeofRtMsg = C.sizeof_struct_rtmsg
  301. SizeofRtNexthop = C.sizeof_struct_rtnexthop
  302. )
  303. type NlMsghdr C.struct_nlmsghdr
  304. type NlMsgerr C.struct_nlmsgerr
  305. type RtGenmsg C.struct_rtgenmsg
  306. type NlAttr C.struct_nlattr
  307. type RtAttr C.struct_rtattr
  308. type IfInfomsg C.struct_ifinfomsg
  309. type IfAddrmsg C.struct_ifaddrmsg
  310. type RtMsg C.struct_rtmsg
  311. type RtNexthop C.struct_rtnexthop
  312. // Linux socket filter
  313. const (
  314. SizeofSockFilter = C.sizeof_struct_sock_filter
  315. SizeofSockFprog = C.sizeof_struct_sock_fprog
  316. )
  317. type SockFilter C.struct_sock_filter
  318. type SockFprog C.struct_sock_fprog
  319. // Inotify
  320. type InotifyEvent C.struct_inotify_event
  321. const SizeofInotifyEvent = C.sizeof_struct_inotify_event
  322. // Ptrace
  323. // Register structures
  324. type PtraceRegs C.PtraceRegs
  325. // Structures contained in PtraceRegs on s390x (exported by mkpost.go)
  326. type ptracePsw C.ptracePsw
  327. type ptraceFpregs C.ptraceFpregs
  328. type ptracePer C.ptracePer
  329. // Misc
  330. type FdSet C.fd_set
  331. type Sysinfo_t C.struct_sysinfo
  332. type Utsname C.struct_utsname
  333. type Ustat_t C.struct_ustat
  334. type EpollEvent C.struct_my_epoll_event
  335. const (
  336. AT_FDCWD = C.AT_FDCWD
  337. AT_REMOVEDIR = C.AT_REMOVEDIR
  338. AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW
  339. AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
  340. )
  341. type PollFd C.struct_pollfd
  342. const (
  343. POLLIN = C.POLLIN
  344. POLLPRI = C.POLLPRI
  345. POLLOUT = C.POLLOUT
  346. POLLRDHUP = C.POLLRDHUP
  347. POLLERR = C.POLLERR
  348. POLLHUP = C.POLLHUP
  349. POLLNVAL = C.POLLNVAL
  350. )
  351. type Sigset_t C.sigset_t
  352. // Terminal handling
  353. type Termios C.termios_t