blob: 125f69d60e594a436de79abcf6799349a0538784 [file] [log] [blame]
Russ Coxdd2abe52011-11-10 19:08:28 -05001// 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
Russ Coxdd2abe52011-11-10 19:08:28 -05005// +build ignore
6
Russ Cox8fe75a22012-02-02 19:42:02 -05007/*
8Input to cgo -godefs. See also mkerrors.sh and mkall.sh
9*/
10
Russ Coxdd2abe52011-11-10 19:08:28 -050011// +godefs map struct_in_addr [4]byte /* in_addr */
12// +godefs map struct_in6_addr [16]byte /* in6_addr */
13
14package syscall
15
16/*
17#define _LARGEFILE_SOURCE
18#define _LARGEFILE64_SOURCE
19#define _FILE_OFFSET_BITS 64
20#define _GNU_SOURCE
21
22#include <dirent.h>
23#include <fcntl.h>
24#include <netinet/in.h>
25#include <netinet/tcp.h>
26#include <netpacket/packet.h>
27#include <signal.h>
28#include <stdio.h>
29#include <sys/epoll.h>
30#include <sys/inotify.h>
31#include <sys/mman.h>
32#include <sys/mount.h>
33#include <sys/param.h>
34#include <sys/ptrace.h>
35#include <sys/resource.h>
36#include <sys/select.h>
37#include <sys/signal.h>
38#include <sys/stat.h>
39#include <sys/statfs.h>
40#include <sys/sysinfo.h>
41#include <sys/time.h>
42#include <sys/times.h>
43#include <sys/timex.h>
44#include <sys/types.h>
45#include <sys/un.h>
46#include <sys/user.h>
47#include <sys/utsname.h>
48#include <sys/wait.h>
49#include <linux/filter.h>
50#include <linux/netlink.h>
51#include <linux/rtnetlink.h>
Mikio Haraadbe59e2013-05-23 16:22:05 +090052#include <linux/icmpv6.h>
Russ Coxdd2abe52011-11-10 19:08:28 -050053#include <termios.h>
54#include <time.h>
55#include <unistd.h>
56#include <ustat.h>
57#include <utime.h>
58
59enum {
60 sizeofPtr = sizeof(void*),
61};
62
63union sockaddr_all {
64 struct sockaddr s1; // this one gets used for fields
65 struct sockaddr_in s2; // these pad it out
66 struct sockaddr_in6 s3;
67 struct sockaddr_un s4;
68 struct sockaddr_ll s5;
69 struct sockaddr_nl s6;
70};
71
72struct sockaddr_any {
73 struct sockaddr addr;
74 char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)];
75};
76
Robert Griesemer465b9c32012-10-30 13:38:01 -070077// copied from /usr/include/linux/un.h
Russ Coxdd2abe52011-11-10 19:08:28 -050078struct my_sockaddr_un {
79 sa_family_t sun_family;
Michael Mundayaf74dca2016-03-30 23:56:49 -040080#if defined(__ARM_EABI__) || defined(__powerpc64__) || defined(__s390x__)
81 // on ARM, PPC and s390x char is by default unsigned
Russ Coxdd2abe52011-11-10 19:08:28 -050082 signed char sun_path[108];
83#else
84 char sun_path[108];
85#endif
86};
87
88#ifdef __ARM_EABI__
89typedef struct user_regs PtraceRegs;
Aram Hăvărneanud0d93102015-03-08 14:21:00 +010090#elif defined(__aarch64__)
91typedef struct user_pt_regs PtraceRegs;
Shenghou Ma7776b0a2014-08-14 12:01:21 -040092#elif defined(__powerpc64__)
93typedef struct pt_regs PtraceRegs;
Yao Zhang4f19cb72015-09-10 08:48:19 -040094#elif defined(__mips__)
95typedef struct user PtraceRegs;
Michael Mundayaf74dca2016-03-30 23:56:49 -040096#elif defined(__s390x__)
97typedef struct _user_regs_struct PtraceRegs;
Russ Coxdd2abe52011-11-10 19:08:28 -050098#else
99typedef struct user_regs_struct PtraceRegs;
100#endif
101
Michael Mundayaf74dca2016-03-30 23:56:49 -0400102#if defined(__s390x__)
103typedef struct _user_psw_struct ptracePsw;
104typedef struct _user_fpregs_struct ptraceFpregs;
105typedef struct _user_per_struct ptracePer;
106#else
107typedef struct {} ptracePsw;
108typedef struct {} ptraceFpregs;
109typedef struct {} ptracePer;
110#endif
111
Russ Coxdd2abe52011-11-10 19:08:28 -0500112// The real epoll_event is a union, and godefs doesn't handle it well.
113struct my_epoll_event {
114 uint32_t events;
Vladimir Stefanovic58e3bf12016-10-18 23:51:03 +0200115#if defined(__ARM_EABI__) || (defined(__mips__) && _MIPS_SIM == _ABIO32)
Russ Coxdd2abe52011-11-10 19:08:28 -0500116 // padding is not specified in linux/eventpoll.h but added to conform to the
117 // alignment requirements of EABI
118 int32_t padFd;
119#endif
Michael Munday5f3eb432016-06-09 12:01:43 -0400120#if defined(__powerpc64__) || defined(__s390x__)
Lynn Boger44f80f62016-04-06 11:07:12 -0500121 int32_t _padFd;
122#endif
Russ Coxdd2abe52011-11-10 19:08:28 -0500123 int32_t fd;
124 int32_t pad;
125};
126
127*/
128import "C"
129
130// Machine characteristics; for internal use.
131
132const (
133 sizeofPtr = C.sizeofPtr
134 sizeofShort = C.sizeof_short
135 sizeofInt = C.sizeof_int
136 sizeofLong = C.sizeof_long
137 sizeofLongLong = C.sizeof_longlong
138 PathMax = C.PATH_MAX
139)
140
141// Basic types
142
143type (
144 _C_short C.short
145 _C_int C.int
146 _C_long C.long
147 _C_long_long C.longlong
148)
149
150// Time
151
152type Timespec C.struct_timespec
153
154type Timeval C.struct_timeval
155
156type Timex C.struct_timex
157
158type Time_t C.time_t
159
160type Tms C.struct_tms
161
162type Utimbuf C.struct_utimbuf
163
164// Processes
165
166type Rusage C.struct_rusage
167
168type Rlimit C.struct_rlimit
169
170type _Gid_t C.gid_t
171
172// Files
173
174type Stat_t C.struct_stat
175
176type Statfs_t C.struct_statfs
177
178type Dirent C.struct_dirent
179
180type Fsid C.fsid_t
181
Brad Fitzpatrick055b5882014-01-16 14:08:32 -0800182type Flock_t C.struct_flock
183
Russ Coxdd2abe52011-11-10 19:08:28 -0500184// Sockets
185
186type RawSockaddrInet4 C.struct_sockaddr_in
187
188type RawSockaddrInet6 C.struct_sockaddr_in6
189
190type RawSockaddrUnix C.struct_my_sockaddr_un
191
192type RawSockaddrLinklayer C.struct_sockaddr_ll
193
194type RawSockaddrNetlink C.struct_sockaddr_nl
195
196type RawSockaddr C.struct_sockaddr
197
198type RawSockaddrAny C.struct_sockaddr_any
199
200type _Socklen C.socklen_t
201
202type Linger C.struct_linger
203
204type Iovec C.struct_iovec
205
206type IPMreq C.struct_ip_mreq
207
208type IPMreqn C.struct_ip_mreqn
209
210type IPv6Mreq C.struct_ipv6_mreq
211
212type Msghdr C.struct_msghdr
213
214type Cmsghdr C.struct_cmsghdr
215
216type Inet4Pktinfo C.struct_in_pktinfo
217
218type Inet6Pktinfo C.struct_in6_pktinfo
219
Mikio Haraadbe59e2013-05-23 16:22:05 +0900220type IPv6MTUInfo C.struct_ip6_mtuinfo
221
222type ICMPv6Filter C.struct_icmp6_filter
223
Russ Coxdd2abe52011-11-10 19:08:28 -0500224type Ucred C.struct_ucred
225
Brad Fitzpatrickbef036e2012-12-10 11:32:07 -0500226type TCPInfo C.struct_tcp_info
227
Russ Coxdd2abe52011-11-10 19:08:28 -0500228const (
229 SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in
230 SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
231 SizeofSockaddrAny = C.sizeof_struct_sockaddr_any
232 SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un
233 SizeofSockaddrLinklayer = C.sizeof_struct_sockaddr_ll
234 SizeofSockaddrNetlink = C.sizeof_struct_sockaddr_nl
235 SizeofLinger = C.sizeof_struct_linger
236 SizeofIPMreq = C.sizeof_struct_ip_mreq
237 SizeofIPMreqn = C.sizeof_struct_ip_mreqn
238 SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
239 SizeofMsghdr = C.sizeof_struct_msghdr
240 SizeofCmsghdr = C.sizeof_struct_cmsghdr
241 SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo
242 SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
Mikio Haraadbe59e2013-05-23 16:22:05 +0900243 SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo
244 SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
Russ Coxdd2abe52011-11-10 19:08:28 -0500245 SizeofUcred = C.sizeof_struct_ucred
Brad Fitzpatrickbef036e2012-12-10 11:32:07 -0500246 SizeofTCPInfo = C.sizeof_struct_tcp_info
Russ Coxdd2abe52011-11-10 19:08:28 -0500247)
248
249// Netlink routing and interface messages
250
251const (
Mikio Harae8228602013-02-23 08:42:04 +0900252 IFA_UNSPEC = C.IFA_UNSPEC
253 IFA_ADDRESS = C.IFA_ADDRESS
254 IFA_LOCAL = C.IFA_LOCAL
255 IFA_LABEL = C.IFA_LABEL
256 IFA_BROADCAST = C.IFA_BROADCAST
257 IFA_ANYCAST = C.IFA_ANYCAST
258 IFA_CACHEINFO = C.IFA_CACHEINFO
259 IFA_MULTICAST = C.IFA_MULTICAST
260 IFLA_UNSPEC = C.IFLA_UNSPEC
261 IFLA_ADDRESS = C.IFLA_ADDRESS
262 IFLA_BROADCAST = C.IFLA_BROADCAST
263 IFLA_IFNAME = C.IFLA_IFNAME
264 IFLA_MTU = C.IFLA_MTU
265 IFLA_LINK = C.IFLA_LINK
266 IFLA_QDISC = C.IFLA_QDISC
267 IFLA_STATS = C.IFLA_STATS
268 IFLA_COST = C.IFLA_COST
269 IFLA_PRIORITY = C.IFLA_PRIORITY
270 IFLA_MASTER = C.IFLA_MASTER
271 IFLA_WIRELESS = C.IFLA_WIRELESS
272 IFLA_PROTINFO = C.IFLA_PROTINFO
273 IFLA_TXQLEN = C.IFLA_TXQLEN
274 IFLA_MAP = C.IFLA_MAP
275 IFLA_WEIGHT = C.IFLA_WEIGHT
276 IFLA_OPERSTATE = C.IFLA_OPERSTATE
277 IFLA_LINKMODE = C.IFLA_LINKMODE
278 IFLA_LINKINFO = C.IFLA_LINKINFO
279 IFLA_NET_NS_PID = C.IFLA_NET_NS_PID
280 IFLA_IFALIAS = C.IFLA_IFALIAS
281 IFLA_MAX = C.IFLA_MAX
282 RT_SCOPE_UNIVERSE = C.RT_SCOPE_UNIVERSE
283 RT_SCOPE_SITE = C.RT_SCOPE_SITE
284 RT_SCOPE_LINK = C.RT_SCOPE_LINK
285 RT_SCOPE_HOST = C.RT_SCOPE_HOST
286 RT_SCOPE_NOWHERE = C.RT_SCOPE_NOWHERE
287 RT_TABLE_UNSPEC = C.RT_TABLE_UNSPEC
288 RT_TABLE_COMPAT = C.RT_TABLE_COMPAT
289 RT_TABLE_DEFAULT = C.RT_TABLE_DEFAULT
290 RT_TABLE_MAIN = C.RT_TABLE_MAIN
291 RT_TABLE_LOCAL = C.RT_TABLE_LOCAL
292 RT_TABLE_MAX = C.RT_TABLE_MAX
293 RTA_UNSPEC = C.RTA_UNSPEC
294 RTA_DST = C.RTA_DST
295 RTA_SRC = C.RTA_SRC
296 RTA_IIF = C.RTA_IIF
297 RTA_OIF = C.RTA_OIF
298 RTA_GATEWAY = C.RTA_GATEWAY
299 RTA_PRIORITY = C.RTA_PRIORITY
300 RTA_PREFSRC = C.RTA_PREFSRC
301 RTA_METRICS = C.RTA_METRICS
302 RTA_MULTIPATH = C.RTA_MULTIPATH
303 RTA_FLOW = C.RTA_FLOW
304 RTA_CACHEINFO = C.RTA_CACHEINFO
305 RTA_TABLE = C.RTA_TABLE
306 RTN_UNSPEC = C.RTN_UNSPEC
307 RTN_UNICAST = C.RTN_UNICAST
308 RTN_LOCAL = C.RTN_LOCAL
309 RTN_BROADCAST = C.RTN_BROADCAST
310 RTN_ANYCAST = C.RTN_ANYCAST
311 RTN_MULTICAST = C.RTN_MULTICAST
312 RTN_BLACKHOLE = C.RTN_BLACKHOLE
313 RTN_UNREACHABLE = C.RTN_UNREACHABLE
314 RTN_PROHIBIT = C.RTN_PROHIBIT
315 RTN_THROW = C.RTN_THROW
316 RTN_NAT = C.RTN_NAT
317 RTN_XRESOLVE = C.RTN_XRESOLVE
318 RTNLGRP_NONE = C.RTNLGRP_NONE
319 RTNLGRP_LINK = C.RTNLGRP_LINK
320 RTNLGRP_NOTIFY = C.RTNLGRP_NOTIFY
321 RTNLGRP_NEIGH = C.RTNLGRP_NEIGH
322 RTNLGRP_TC = C.RTNLGRP_TC
323 RTNLGRP_IPV4_IFADDR = C.RTNLGRP_IPV4_IFADDR
324 RTNLGRP_IPV4_MROUTE = C.RTNLGRP_IPV4_MROUTE
325 RTNLGRP_IPV4_ROUTE = C.RTNLGRP_IPV4_ROUTE
326 RTNLGRP_IPV4_RULE = C.RTNLGRP_IPV4_RULE
327 RTNLGRP_IPV6_IFADDR = C.RTNLGRP_IPV6_IFADDR
328 RTNLGRP_IPV6_MROUTE = C.RTNLGRP_IPV6_MROUTE
329 RTNLGRP_IPV6_ROUTE = C.RTNLGRP_IPV6_ROUTE
330 RTNLGRP_IPV6_IFINFO = C.RTNLGRP_IPV6_IFINFO
331 RTNLGRP_IPV6_PREFIX = C.RTNLGRP_IPV6_PREFIX
332 RTNLGRP_IPV6_RULE = C.RTNLGRP_IPV6_RULE
333 RTNLGRP_ND_USEROPT = C.RTNLGRP_ND_USEROPT
334 SizeofNlMsghdr = C.sizeof_struct_nlmsghdr
335 SizeofNlMsgerr = C.sizeof_struct_nlmsgerr
336 SizeofRtGenmsg = C.sizeof_struct_rtgenmsg
337 SizeofNlAttr = C.sizeof_struct_nlattr
338 SizeofRtAttr = C.sizeof_struct_rtattr
339 SizeofIfInfomsg = C.sizeof_struct_ifinfomsg
340 SizeofIfAddrmsg = C.sizeof_struct_ifaddrmsg
341 SizeofRtMsg = C.sizeof_struct_rtmsg
342 SizeofRtNexthop = C.sizeof_struct_rtnexthop
Russ Coxdd2abe52011-11-10 19:08:28 -0500343)
344
345type NlMsghdr C.struct_nlmsghdr
346
347type NlMsgerr C.struct_nlmsgerr
348
349type RtGenmsg C.struct_rtgenmsg
350
351type NlAttr C.struct_nlattr
352
353type RtAttr C.struct_rtattr
354
355type IfInfomsg C.struct_ifinfomsg
356
357type IfAddrmsg C.struct_ifaddrmsg
358
359type RtMsg C.struct_rtmsg
360
361type RtNexthop C.struct_rtnexthop
362
363// Linux socket filter
364
365const (
366 SizeofSockFilter = C.sizeof_struct_sock_filter
367 SizeofSockFprog = C.sizeof_struct_sock_fprog
368)
369
370type SockFilter C.struct_sock_filter
371
372type SockFprog C.struct_sock_fprog
373
374// Inotify
375
376type InotifyEvent C.struct_inotify_event
377
378const SizeofInotifyEvent = C.sizeof_struct_inotify_event
379
380// Ptrace
381
382// Register structures
383type PtraceRegs C.PtraceRegs
384
Michael Mundayaf74dca2016-03-30 23:56:49 -0400385// Structures contained in PtraceRegs on s390x (exported by post.go)
386type ptracePsw C.ptracePsw
387
388type ptraceFpregs C.ptraceFpregs
389
390type ptracePer C.ptracePer
391
Russ Coxdd2abe52011-11-10 19:08:28 -0500392// Misc
393
394type FdSet C.fd_set
395
396type Sysinfo_t C.struct_sysinfo
397
398type Utsname C.struct_utsname
399
400type Ustat_t C.struct_ustat
401
402type EpollEvent C.struct_my_epoll_event
403
Nick Craig-Wood473441f2012-12-13 13:02:39 -0800404const (
Dave Cheneyc123a802015-02-25 12:56:44 +1100405 _AT_FDCWD = C.AT_FDCWD
406 _AT_REMOVEDIR = C.AT_REMOVEDIR
407 _AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
Nick Craig-Wood473441f2012-12-13 13:02:39 -0800408)
409
Russ Coxdd2abe52011-11-10 19:08:28 -0500410// Terminal handling
411
412type Termios C.struct_termios
413
414const (
Shenghou Ma5cb7da72014-08-11 23:43:15 -0400415 IUCLC = C.IUCLC
416 OLCUC = C.OLCUC
417 TCGETS = C.TCGETS
418 TCSETS = C.TCSETS
419 XCASE = C.XCASE
Russ Coxdd2abe52011-11-10 19:08:28 -0500420)