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.
8 Input to cgo -godefs. See README.md
11 // +godefs map struct_in_addr [4]byte /* in_addr */
12 // +godefs map struct_in6_addr [16]byte /* in6_addr */
17 #define _LARGEFILE_SOURCE
18 #define _LARGEFILE64_SOURCE
19 #define _FILE_OFFSET_BITS 64
23 #include <netinet/in.h>
24 #include <netinet/tcp.h>
25 #include <netpacket/packet.h>
29 #include <sys/epoll.h>
30 #include <sys/inotify.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/statfs.h>
39 #include <sys/sysinfo.h>
41 #include <sys/times.h>
42 #include <sys/timex.h>
45 #include <sys/utsname.h>
47 #include <linux/filter.h>
48 #include <linux/netlink.h>
49 #include <linux/rtnetlink.h>
50 #include <linux/icmpv6.h>
51 #include <asm/termbits.h>
52 #include <asm/ptrace.h>
57 #include <linux/can.h>
58 #include <linux/if_alg.h>
60 #include <linux/vm_sockets.h>
62 // On mips64, the glibc stat and kernel stat do not agree
63 #if (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI64)
65 // Use the stat defined by the kernel with a few modifications. These are:
66 // * The time fields (like st_atime and st_atimensec) use the timespec
67 // struct (like st_atim) for consitancy with the glibc fields.
68 // * The padding fields get different names to not break compatibility.
69 // * st_blocks is signed, again for compatibility.
72 unsigned int st_pad1[3]; // Reserved for st_dev expansion
83 unsigned int st_pad2[3]; // Reserved for st_rdev expansion
87 // These are declared as speperate fields in the kernel. Here we use
88 // the timespec struct for consistancy with the other stat structs.
89 struct timespec st_atim;
90 struct timespec st_mtim;
91 struct timespec st_ctim;
93 unsigned int st_blksize;
99 // These are needed because we do not include fcntl.h or sys/types.h
100 #include <linux/fcntl.h>
101 #include <linux/fadvise.h>
105 // Use the stat defined by glibc
107 #include <sys/types.h>
111 // Certain constants and structs are missing from the fs/crypto UAPI
112 #define FS_MAX_KEY_SIZE 64
115 __u8 raw[FS_MAX_KEY_SIZE];
120 // On systems that have "struct termios2" use this as type Termios.
121 typedef struct termios2 termios_t;
123 typedef struct termios termios_t;
127 sizeofPtr = sizeof(void*),
131 struct sockaddr s1; // this one gets used for fields
132 struct sockaddr_in s2; // these pad it out
133 struct sockaddr_in6 s3;
134 struct sockaddr_un s4;
135 struct sockaddr_ll s5;
136 struct sockaddr_nl s6;
139 struct sockaddr_any {
140 struct sockaddr addr;
141 char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)];
144 // copied from /usr/include/bluetooth/hci.h
145 struct sockaddr_hci {
146 sa_family_t hci_family;
147 unsigned short hci_dev;
148 unsigned short hci_channel;
151 // copied from /usr/include/linux/un.h
152 struct my_sockaddr_un {
153 sa_family_t sun_family;
154 #if defined(__ARM_EABI__) || defined(__powerpc64__)
155 // on ARM char is by default unsigned
156 signed char sun_path[108];
163 typedef struct user_regs PtraceRegs;
164 #elif defined(__aarch64__)
165 typedef struct user_pt_regs PtraceRegs;
166 #elif defined(__powerpc64__)
167 typedef struct pt_regs PtraceRegs;
168 #elif defined(__mips__)
169 typedef struct user PtraceRegs;
170 #elif defined(__s390x__)
171 typedef struct _user_regs_struct PtraceRegs;
172 #elif defined(__sparc__)
173 #include <asm/ptrace.h>
174 typedef struct pt_regs PtraceRegs;
176 typedef struct user_regs_struct PtraceRegs;
179 #if defined(__s390x__)
180 typedef struct _user_psw_struct ptracePsw;
181 typedef struct _user_fpregs_struct ptraceFpregs;
182 typedef struct _user_per_struct ptracePer;
184 typedef struct {} ptracePsw;
185 typedef struct {} ptraceFpregs;
186 typedef struct {} ptracePer;
189 // The real epoll_event is a union, and godefs doesn't handle it well.
190 struct my_epoll_event {
192 #if defined(__ARM_EABI__) || defined(__aarch64__) || (defined(__mips__) && _MIPS_SIM == _ABIO32)
193 // padding is not specified in linux/eventpoll.h but added to conform to the
194 // alignment requirements of EABI
196 #elif defined(__powerpc64__) || defined(__s390x__) || defined(__sparc__)
206 // Machine characteristics; for internal use.
209 sizeofPtr = C.sizeofPtr
210 sizeofShort = C.sizeof_short
211 sizeofInt = C.sizeof_int
212 sizeofLong = C.sizeof_long
213 sizeofLongLong = C.sizeof_longlong
223 _C_long_long C.longlong
228 type Timespec C.struct_timespec
230 type Timeval C.struct_timeval
232 type Timex C.struct_timex
236 type Tms C.struct_tms
238 type Utimbuf C.struct_utimbuf
242 type Rusage C.struct_rusage
244 type Rlimit C.struct_rlimit
250 type Stat_t C.struct_stat
252 type Statfs_t C.struct_statfs
254 type Dirent C.struct_dirent
258 type Flock_t C.struct_flock
260 // Filesystem Encryption
262 type FscryptPolicy C.struct_fscrypt_policy
264 type FscryptKey C.struct_fscrypt_key
269 FADV_NORMAL = C.POSIX_FADV_NORMAL
270 FADV_RANDOM = C.POSIX_FADV_RANDOM
271 FADV_SEQUENTIAL = C.POSIX_FADV_SEQUENTIAL
272 FADV_WILLNEED = C.POSIX_FADV_WILLNEED
273 FADV_DONTNEED = C.POSIX_FADV_DONTNEED
274 FADV_NOREUSE = C.POSIX_FADV_NOREUSE
279 type RawSockaddrInet4 C.struct_sockaddr_in
281 type RawSockaddrInet6 C.struct_sockaddr_in6
283 type RawSockaddrUnix C.struct_my_sockaddr_un
285 type RawSockaddrLinklayer C.struct_sockaddr_ll
287 type RawSockaddrNetlink C.struct_sockaddr_nl
289 type RawSockaddrHCI C.struct_sockaddr_hci
291 type RawSockaddrCAN C.struct_sockaddr_can
293 type RawSockaddrALG C.struct_sockaddr_alg
295 type RawSockaddrVM C.struct_sockaddr_vm
297 type RawSockaddr C.struct_sockaddr
299 type RawSockaddrAny C.struct_sockaddr_any
301 type _Socklen C.socklen_t
303 type Linger C.struct_linger
305 type Iovec C.struct_iovec
307 type IPMreq C.struct_ip_mreq
309 type IPMreqn C.struct_ip_mreqn
311 type IPv6Mreq C.struct_ipv6_mreq
313 type Msghdr C.struct_msghdr
315 type Cmsghdr C.struct_cmsghdr
317 type Inet4Pktinfo C.struct_in_pktinfo
319 type Inet6Pktinfo C.struct_in6_pktinfo
321 type IPv6MTUInfo C.struct_ip6_mtuinfo
323 type ICMPv6Filter C.struct_icmp6_filter
325 type Ucred C.struct_ucred
327 type TCPInfo C.struct_tcp_info
330 SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in
331 SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
332 SizeofSockaddrAny = C.sizeof_struct_sockaddr_any
333 SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un
334 SizeofSockaddrLinklayer = C.sizeof_struct_sockaddr_ll
335 SizeofSockaddrNetlink = C.sizeof_struct_sockaddr_nl
336 SizeofSockaddrHCI = C.sizeof_struct_sockaddr_hci
337 SizeofSockaddrCAN = C.sizeof_struct_sockaddr_can
338 SizeofSockaddrALG = C.sizeof_struct_sockaddr_alg
339 SizeofSockaddrVM = C.sizeof_struct_sockaddr_vm
340 SizeofLinger = C.sizeof_struct_linger
341 SizeofIPMreq = C.sizeof_struct_ip_mreq
342 SizeofIPMreqn = C.sizeof_struct_ip_mreqn
343 SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
344 SizeofMsghdr = C.sizeof_struct_msghdr
345 SizeofCmsghdr = C.sizeof_struct_cmsghdr
346 SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo
347 SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
348 SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo
349 SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
350 SizeofUcred = C.sizeof_struct_ucred
351 SizeofTCPInfo = C.sizeof_struct_tcp_info
354 // Netlink routing and interface messages
357 IFA_UNSPEC = C.IFA_UNSPEC
358 IFA_ADDRESS = C.IFA_ADDRESS
359 IFA_LOCAL = C.IFA_LOCAL
360 IFA_LABEL = C.IFA_LABEL
361 IFA_BROADCAST = C.IFA_BROADCAST
362 IFA_ANYCAST = C.IFA_ANYCAST
363 IFA_CACHEINFO = C.IFA_CACHEINFO
364 IFA_MULTICAST = C.IFA_MULTICAST
365 IFLA_UNSPEC = C.IFLA_UNSPEC
366 IFLA_ADDRESS = C.IFLA_ADDRESS
367 IFLA_BROADCAST = C.IFLA_BROADCAST
368 IFLA_IFNAME = C.IFLA_IFNAME
369 IFLA_MTU = C.IFLA_MTU
370 IFLA_LINK = C.IFLA_LINK
371 IFLA_QDISC = C.IFLA_QDISC
372 IFLA_STATS = C.IFLA_STATS
373 IFLA_COST = C.IFLA_COST
374 IFLA_PRIORITY = C.IFLA_PRIORITY
375 IFLA_MASTER = C.IFLA_MASTER
376 IFLA_WIRELESS = C.IFLA_WIRELESS
377 IFLA_PROTINFO = C.IFLA_PROTINFO
378 IFLA_TXQLEN = C.IFLA_TXQLEN
379 IFLA_MAP = C.IFLA_MAP
380 IFLA_WEIGHT = C.IFLA_WEIGHT
381 IFLA_OPERSTATE = C.IFLA_OPERSTATE
382 IFLA_LINKMODE = C.IFLA_LINKMODE
383 IFLA_LINKINFO = C.IFLA_LINKINFO
384 IFLA_NET_NS_PID = C.IFLA_NET_NS_PID
385 IFLA_IFALIAS = C.IFLA_IFALIAS
386 IFLA_MAX = C.IFLA_MAX
387 RT_SCOPE_UNIVERSE = C.RT_SCOPE_UNIVERSE
388 RT_SCOPE_SITE = C.RT_SCOPE_SITE
389 RT_SCOPE_LINK = C.RT_SCOPE_LINK
390 RT_SCOPE_HOST = C.RT_SCOPE_HOST
391 RT_SCOPE_NOWHERE = C.RT_SCOPE_NOWHERE
392 RT_TABLE_UNSPEC = C.RT_TABLE_UNSPEC
393 RT_TABLE_COMPAT = C.RT_TABLE_COMPAT
394 RT_TABLE_DEFAULT = C.RT_TABLE_DEFAULT
395 RT_TABLE_MAIN = C.RT_TABLE_MAIN
396 RT_TABLE_LOCAL = C.RT_TABLE_LOCAL
397 RT_TABLE_MAX = C.RT_TABLE_MAX
398 RTA_UNSPEC = C.RTA_UNSPEC
403 RTA_GATEWAY = C.RTA_GATEWAY
404 RTA_PRIORITY = C.RTA_PRIORITY
405 RTA_PREFSRC = C.RTA_PREFSRC
406 RTA_METRICS = C.RTA_METRICS
407 RTA_MULTIPATH = C.RTA_MULTIPATH
408 RTA_FLOW = C.RTA_FLOW
409 RTA_CACHEINFO = C.RTA_CACHEINFO
410 RTA_TABLE = C.RTA_TABLE
411 RTN_UNSPEC = C.RTN_UNSPEC
412 RTN_UNICAST = C.RTN_UNICAST
413 RTN_LOCAL = C.RTN_LOCAL
414 RTN_BROADCAST = C.RTN_BROADCAST
415 RTN_ANYCAST = C.RTN_ANYCAST
416 RTN_MULTICAST = C.RTN_MULTICAST
417 RTN_BLACKHOLE = C.RTN_BLACKHOLE
418 RTN_UNREACHABLE = C.RTN_UNREACHABLE
419 RTN_PROHIBIT = C.RTN_PROHIBIT
420 RTN_THROW = C.RTN_THROW
422 RTN_XRESOLVE = C.RTN_XRESOLVE
423 RTNLGRP_NONE = C.RTNLGRP_NONE
424 RTNLGRP_LINK = C.RTNLGRP_LINK
425 RTNLGRP_NOTIFY = C.RTNLGRP_NOTIFY
426 RTNLGRP_NEIGH = C.RTNLGRP_NEIGH
427 RTNLGRP_TC = C.RTNLGRP_TC
428 RTNLGRP_IPV4_IFADDR = C.RTNLGRP_IPV4_IFADDR
429 RTNLGRP_IPV4_MROUTE = C.RTNLGRP_IPV4_MROUTE
430 RTNLGRP_IPV4_ROUTE = C.RTNLGRP_IPV4_ROUTE
431 RTNLGRP_IPV4_RULE = C.RTNLGRP_IPV4_RULE
432 RTNLGRP_IPV6_IFADDR = C.RTNLGRP_IPV6_IFADDR
433 RTNLGRP_IPV6_MROUTE = C.RTNLGRP_IPV6_MROUTE
434 RTNLGRP_IPV6_ROUTE = C.RTNLGRP_IPV6_ROUTE
435 RTNLGRP_IPV6_IFINFO = C.RTNLGRP_IPV6_IFINFO
436 RTNLGRP_IPV6_PREFIX = C.RTNLGRP_IPV6_PREFIX
437 RTNLGRP_IPV6_RULE = C.RTNLGRP_IPV6_RULE
438 RTNLGRP_ND_USEROPT = C.RTNLGRP_ND_USEROPT
439 SizeofNlMsghdr = C.sizeof_struct_nlmsghdr
440 SizeofNlMsgerr = C.sizeof_struct_nlmsgerr
441 SizeofRtGenmsg = C.sizeof_struct_rtgenmsg
442 SizeofNlAttr = C.sizeof_struct_nlattr
443 SizeofRtAttr = C.sizeof_struct_rtattr
444 SizeofIfInfomsg = C.sizeof_struct_ifinfomsg
445 SizeofIfAddrmsg = C.sizeof_struct_ifaddrmsg
446 SizeofRtMsg = C.sizeof_struct_rtmsg
447 SizeofRtNexthop = C.sizeof_struct_rtnexthop
450 type NlMsghdr C.struct_nlmsghdr
452 type NlMsgerr C.struct_nlmsgerr
454 type RtGenmsg C.struct_rtgenmsg
456 type NlAttr C.struct_nlattr
458 type RtAttr C.struct_rtattr
460 type IfInfomsg C.struct_ifinfomsg
462 type IfAddrmsg C.struct_ifaddrmsg
464 type RtMsg C.struct_rtmsg
466 type RtNexthop C.struct_rtnexthop
468 // Linux socket filter
471 SizeofSockFilter = C.sizeof_struct_sock_filter
472 SizeofSockFprog = C.sizeof_struct_sock_fprog
475 type SockFilter C.struct_sock_filter
477 type SockFprog C.struct_sock_fprog
481 type InotifyEvent C.struct_inotify_event
483 const SizeofInotifyEvent = C.sizeof_struct_inotify_event
487 // Register structures
488 type PtraceRegs C.PtraceRegs
490 // Structures contained in PtraceRegs on s390x (exported by mkpost.go)
491 type PtracePsw C.ptracePsw
493 type PtraceFpregs C.ptraceFpregs
495 type PtracePer C.ptracePer
501 type Sysinfo_t C.struct_sysinfo
503 type Utsname C.struct_utsname
505 type Ustat_t C.struct_ustat
507 type EpollEvent C.struct_my_epoll_event
510 AT_FDCWD = C.AT_FDCWD
511 AT_REMOVEDIR = C.AT_REMOVEDIR
512 AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW
513 AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
516 type PollFd C.struct_pollfd
522 POLLRDHUP = C.POLLRDHUP
525 POLLNVAL = C.POLLNVAL
528 type Sigset_t C.sigset_t
530 // sysconf information
532 const _SC_PAGESIZE = C._SC_PAGESIZE
536 type Termios C.termios_t