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