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 README.md 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 <netinet/in.h> 24#include <netinet/tcp.h> 25#include <netpacket/packet.h> 26#include <poll.h> 27#include <signal.h> 28#include <stdio.h> 29#include <sys/epoll.h> 30#include <sys/inotify.h> 31#include <sys/ioctl.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/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/un.h> 45#include <sys/user.h> 46#include <sys/utsname.h> 47#include <sys/wait.h> 48#include <linux/filter.h> 49#include <linux/keyctl.h> 50#include <linux/netlink.h> 51#include <linux/perf_event.h> 52#include <linux/rtnetlink.h> 53#include <linux/icmpv6.h> 54#include <asm/termbits.h> 55#include <asm/ptrace.h> 56#include <time.h> 57#include <unistd.h> 58#include <ustat.h> 59#include <utime.h> 60#include <linux/can.h> 61#include <linux/if_alg.h> 62#include <linux/fs.h> 63#include <linux/vm_sockets.h> 64#include <linux/random.h> 65#include <linux/taskstats.h> 66#include <linux/genetlink.h> 67 68// On mips64, the glibc stat and kernel stat do not agree 69#if (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI64) 70 71// Use the stat defined by the kernel with a few modifications. These are: 72// * The time fields (like st_atime and st_atimensec) use the timespec 73// struct (like st_atim) for consitancy with the glibc fields. 74// * The padding fields get different names to not break compatibility. 75// * st_blocks is signed, again for compatibility. 76struct stat { 77 unsigned int st_dev; 78 unsigned int st_pad1[3]; // Reserved for st_dev expansion 79 80 unsigned long st_ino; 81 82 mode_t st_mode; 83 __u32 st_nlink; 84 85 uid_t st_uid; 86 gid_t st_gid; 87 88 unsigned int st_rdev; 89 unsigned int st_pad2[3]; // Reserved for st_rdev expansion 90 91 off_t st_size; 92 93 // These are declared as speperate fields in the kernel. Here we use 94 // the timespec struct for consistancy with the other stat structs. 95 struct timespec st_atim; 96 struct timespec st_mtim; 97 struct timespec st_ctim; 98 99 unsigned int st_blksize; 100 unsigned int st_pad4; 101 102 long st_blocks; 103}; 104 105// These are needed because we do not include fcntl.h or sys/types.h 106#include <linux/fcntl.h> 107#include <linux/fadvise.h> 108 109#else 110 111// Use the stat defined by glibc 112#include <fcntl.h> 113#include <sys/types.h> 114 115#endif 116 117#ifdef TCSETS2 118// On systems that have "struct termios2" use this as type Termios. 119typedef struct termios2 termios_t; 120#else 121typedef struct termios termios_t; 122#endif 123 124enum { 125 sizeofPtr = sizeof(void*), 126}; 127 128union sockaddr_all { 129 struct sockaddr s1; // this one gets used for fields 130 struct sockaddr_in s2; // these pad it out 131 struct sockaddr_in6 s3; 132 struct sockaddr_un s4; 133 struct sockaddr_ll s5; 134 struct sockaddr_nl s6; 135}; 136 137struct sockaddr_any { 138 struct sockaddr addr; 139 char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; 140}; 141 142// copied from /usr/include/bluetooth/hci.h 143struct sockaddr_hci { 144 sa_family_t hci_family; 145 unsigned short hci_dev; 146 unsigned short hci_channel; 147};; 148 149// copied from /usr/include/linux/un.h 150struct my_sockaddr_un { 151 sa_family_t sun_family; 152#if defined(__ARM_EABI__) || defined(__powerpc64__) 153 // on ARM char is by default unsigned 154 signed char sun_path[108]; 155#else 156 char sun_path[108]; 157#endif 158}; 159 160#ifdef __ARM_EABI__ 161typedef struct user_regs PtraceRegs; 162#elif defined(__aarch64__) 163typedef struct user_pt_regs PtraceRegs; 164#elif defined(__mips__) || defined(__powerpc64__) 165typedef struct pt_regs PtraceRegs; 166#elif defined(__s390x__) 167typedef struct _user_regs_struct PtraceRegs; 168#elif defined(__sparc__) 169#include <asm/ptrace.h> 170typedef struct pt_regs PtraceRegs; 171#else 172typedef struct user_regs_struct PtraceRegs; 173#endif 174 175#if defined(__s390x__) 176typedef struct _user_psw_struct ptracePsw; 177typedef struct _user_fpregs_struct ptraceFpregs; 178typedef struct _user_per_struct ptracePer; 179#else 180typedef struct {} ptracePsw; 181typedef struct {} ptraceFpregs; 182typedef struct {} ptracePer; 183#endif 184 185// The real epoll_event is a union, and godefs doesn't handle it well. 186struct my_epoll_event { 187 uint32_t events; 188#if defined(__ARM_EABI__) || defined(__aarch64__) || (defined(__mips__) && _MIPS_SIM == _ABIO32) 189 // padding is not specified in linux/eventpoll.h but added to conform to the 190 // alignment requirements of EABI 191 int32_t padFd; 192#elif defined(__powerpc64__) || defined(__s390x__) || defined(__sparc__) 193 int32_t _padFd; 194#endif 195 int32_t fd; 196 int32_t pad; 197}; 198 199*/ 200import "C" 201 202// Machine characteristics; for internal use. 203 204const ( 205 sizeofPtr = C.sizeofPtr 206 sizeofShort = C.sizeof_short 207 sizeofInt = C.sizeof_int 208 sizeofLong = C.sizeof_long 209 sizeofLongLong = C.sizeof_longlong 210 PathMax = C.PATH_MAX 211) 212 213// Basic types 214 215type ( 216 _C_short C.short 217 _C_int C.int 218 _C_long C.long 219 _C_long_long C.longlong 220) 221 222// Time 223 224type Timespec C.struct_timespec 225 226type Timeval C.struct_timeval 227 228type Timex C.struct_timex 229 230type Time_t C.time_t 231 232type Tms C.struct_tms 233 234type Utimbuf C.struct_utimbuf 235 236// Processes 237 238type Rusage C.struct_rusage 239 240type Rlimit C.struct_rlimit 241 242type _Gid_t C.gid_t 243 244// Files 245 246type Stat_t C.struct_stat 247 248type Statfs_t C.struct_statfs 249 250type Dirent C.struct_dirent 251 252type Fsid C.fsid_t 253 254type Flock_t C.struct_flock 255 256// Filesystem Encryption 257 258type FscryptPolicy C.struct_fscrypt_policy 259 260type FscryptKey C.struct_fscrypt_key 261 262// Structure for Keyctl 263 264type KeyctlDHParams C.struct_keyctl_dh_params 265 266// Advice to Fadvise 267 268const ( 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 275) 276 277// Sockets 278 279type RawSockaddrInet4 C.struct_sockaddr_in 280 281type RawSockaddrInet6 C.struct_sockaddr_in6 282 283type RawSockaddrUnix C.struct_my_sockaddr_un 284 285type RawSockaddrLinklayer C.struct_sockaddr_ll 286 287type RawSockaddrNetlink C.struct_sockaddr_nl 288 289type RawSockaddrHCI C.struct_sockaddr_hci 290 291type RawSockaddrCAN C.struct_sockaddr_can 292 293type RawSockaddrALG C.struct_sockaddr_alg 294 295type RawSockaddrVM C.struct_sockaddr_vm 296 297type RawSockaddr C.struct_sockaddr 298 299type RawSockaddrAny C.struct_sockaddr_any 300 301type _Socklen C.socklen_t 302 303type Linger C.struct_linger 304 305type Iovec C.struct_iovec 306 307type IPMreq C.struct_ip_mreq 308 309type IPMreqn C.struct_ip_mreqn 310 311type IPv6Mreq C.struct_ipv6_mreq 312 313type PacketMreq C.struct_packet_mreq 314 315type Msghdr C.struct_msghdr 316 317type Cmsghdr C.struct_cmsghdr 318 319type Inet4Pktinfo C.struct_in_pktinfo 320 321type Inet6Pktinfo C.struct_in6_pktinfo 322 323type IPv6MTUInfo C.struct_ip6_mtuinfo 324 325type ICMPv6Filter C.struct_icmp6_filter 326 327type Ucred C.struct_ucred 328 329type TCPInfo C.struct_tcp_info 330 331const ( 332 SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in 333 SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 334 SizeofSockaddrAny = C.sizeof_struct_sockaddr_any 335 SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un 336 SizeofSockaddrLinklayer = C.sizeof_struct_sockaddr_ll 337 SizeofSockaddrNetlink = C.sizeof_struct_sockaddr_nl 338 SizeofSockaddrHCI = C.sizeof_struct_sockaddr_hci 339 SizeofSockaddrCAN = C.sizeof_struct_sockaddr_can 340 SizeofSockaddrALG = C.sizeof_struct_sockaddr_alg 341 SizeofSockaddrVM = C.sizeof_struct_sockaddr_vm 342 SizeofLinger = C.sizeof_struct_linger 343 SizeofIovec = C.sizeof_struct_iovec 344 SizeofIPMreq = C.sizeof_struct_ip_mreq 345 SizeofIPMreqn = C.sizeof_struct_ip_mreqn 346 SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq 347 SizeofPacketMreq = C.sizeof_struct_packet_mreq 348 SizeofMsghdr = C.sizeof_struct_msghdr 349 SizeofCmsghdr = C.sizeof_struct_cmsghdr 350 SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo 351 SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo 352 SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo 353 SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter 354 SizeofUcred = C.sizeof_struct_ucred 355 SizeofTCPInfo = C.sizeof_struct_tcp_info 356) 357 358// Netlink routing and interface messages 359 360const ( 361 IFA_UNSPEC = C.IFA_UNSPEC 362 IFA_ADDRESS = C.IFA_ADDRESS 363 IFA_LOCAL = C.IFA_LOCAL 364 IFA_LABEL = C.IFA_LABEL 365 IFA_BROADCAST = C.IFA_BROADCAST 366 IFA_ANYCAST = C.IFA_ANYCAST 367 IFA_CACHEINFO = C.IFA_CACHEINFO 368 IFA_MULTICAST = C.IFA_MULTICAST 369 IFLA_UNSPEC = C.IFLA_UNSPEC 370 IFLA_ADDRESS = C.IFLA_ADDRESS 371 IFLA_BROADCAST = C.IFLA_BROADCAST 372 IFLA_IFNAME = C.IFLA_IFNAME 373 IFLA_MTU = C.IFLA_MTU 374 IFLA_LINK = C.IFLA_LINK 375 IFLA_QDISC = C.IFLA_QDISC 376 IFLA_STATS = C.IFLA_STATS 377 IFLA_COST = C.IFLA_COST 378 IFLA_PRIORITY = C.IFLA_PRIORITY 379 IFLA_MASTER = C.IFLA_MASTER 380 IFLA_WIRELESS = C.IFLA_WIRELESS 381 IFLA_PROTINFO = C.IFLA_PROTINFO 382 IFLA_TXQLEN = C.IFLA_TXQLEN 383 IFLA_MAP = C.IFLA_MAP 384 IFLA_WEIGHT = C.IFLA_WEIGHT 385 IFLA_OPERSTATE = C.IFLA_OPERSTATE 386 IFLA_LINKMODE = C.IFLA_LINKMODE 387 IFLA_LINKINFO = C.IFLA_LINKINFO 388 IFLA_NET_NS_PID = C.IFLA_NET_NS_PID 389 IFLA_IFALIAS = C.IFLA_IFALIAS 390 IFLA_MAX = C.IFLA_MAX 391 RT_SCOPE_UNIVERSE = C.RT_SCOPE_UNIVERSE 392 RT_SCOPE_SITE = C.RT_SCOPE_SITE 393 RT_SCOPE_LINK = C.RT_SCOPE_LINK 394 RT_SCOPE_HOST = C.RT_SCOPE_HOST 395 RT_SCOPE_NOWHERE = C.RT_SCOPE_NOWHERE 396 RT_TABLE_UNSPEC = C.RT_TABLE_UNSPEC 397 RT_TABLE_COMPAT = C.RT_TABLE_COMPAT 398 RT_TABLE_DEFAULT = C.RT_TABLE_DEFAULT 399 RT_TABLE_MAIN = C.RT_TABLE_MAIN 400 RT_TABLE_LOCAL = C.RT_TABLE_LOCAL 401 RT_TABLE_MAX = C.RT_TABLE_MAX 402 RTA_UNSPEC = C.RTA_UNSPEC 403 RTA_DST = C.RTA_DST 404 RTA_SRC = C.RTA_SRC 405 RTA_IIF = C.RTA_IIF 406 RTA_OIF = C.RTA_OIF 407 RTA_GATEWAY = C.RTA_GATEWAY 408 RTA_PRIORITY = C.RTA_PRIORITY 409 RTA_PREFSRC = C.RTA_PREFSRC 410 RTA_METRICS = C.RTA_METRICS 411 RTA_MULTIPATH = C.RTA_MULTIPATH 412 RTA_FLOW = C.RTA_FLOW 413 RTA_CACHEINFO = C.RTA_CACHEINFO 414 RTA_TABLE = C.RTA_TABLE 415 RTN_UNSPEC = C.RTN_UNSPEC 416 RTN_UNICAST = C.RTN_UNICAST 417 RTN_LOCAL = C.RTN_LOCAL 418 RTN_BROADCAST = C.RTN_BROADCAST 419 RTN_ANYCAST = C.RTN_ANYCAST 420 RTN_MULTICAST = C.RTN_MULTICAST 421 RTN_BLACKHOLE = C.RTN_BLACKHOLE 422 RTN_UNREACHABLE = C.RTN_UNREACHABLE 423 RTN_PROHIBIT = C.RTN_PROHIBIT 424 RTN_THROW = C.RTN_THROW 425 RTN_NAT = C.RTN_NAT 426 RTN_XRESOLVE = C.RTN_XRESOLVE 427 RTNLGRP_NONE = C.RTNLGRP_NONE 428 RTNLGRP_LINK = C.RTNLGRP_LINK 429 RTNLGRP_NOTIFY = C.RTNLGRP_NOTIFY 430 RTNLGRP_NEIGH = C.RTNLGRP_NEIGH 431 RTNLGRP_TC = C.RTNLGRP_TC 432 RTNLGRP_IPV4_IFADDR = C.RTNLGRP_IPV4_IFADDR 433 RTNLGRP_IPV4_MROUTE = C.RTNLGRP_IPV4_MROUTE 434 RTNLGRP_IPV4_ROUTE = C.RTNLGRP_IPV4_ROUTE 435 RTNLGRP_IPV4_RULE = C.RTNLGRP_IPV4_RULE 436 RTNLGRP_IPV6_IFADDR = C.RTNLGRP_IPV6_IFADDR 437 RTNLGRP_IPV6_MROUTE = C.RTNLGRP_IPV6_MROUTE 438 RTNLGRP_IPV6_ROUTE = C.RTNLGRP_IPV6_ROUTE 439 RTNLGRP_IPV6_IFINFO = C.RTNLGRP_IPV6_IFINFO 440 RTNLGRP_IPV6_PREFIX = C.RTNLGRP_IPV6_PREFIX 441 RTNLGRP_IPV6_RULE = C.RTNLGRP_IPV6_RULE 442 RTNLGRP_ND_USEROPT = C.RTNLGRP_ND_USEROPT 443 SizeofNlMsghdr = C.sizeof_struct_nlmsghdr 444 SizeofNlMsgerr = C.sizeof_struct_nlmsgerr 445 SizeofRtGenmsg = C.sizeof_struct_rtgenmsg 446 SizeofNlAttr = C.sizeof_struct_nlattr 447 SizeofRtAttr = C.sizeof_struct_rtattr 448 SizeofIfInfomsg = C.sizeof_struct_ifinfomsg 449 SizeofIfAddrmsg = C.sizeof_struct_ifaddrmsg 450 SizeofRtMsg = C.sizeof_struct_rtmsg 451 SizeofRtNexthop = C.sizeof_struct_rtnexthop 452) 453 454type NlMsghdr C.struct_nlmsghdr 455 456type NlMsgerr C.struct_nlmsgerr 457 458type RtGenmsg C.struct_rtgenmsg 459 460type NlAttr C.struct_nlattr 461 462type RtAttr C.struct_rtattr 463 464type IfInfomsg C.struct_ifinfomsg 465 466type IfAddrmsg C.struct_ifaddrmsg 467 468type RtMsg C.struct_rtmsg 469 470type RtNexthop C.struct_rtnexthop 471 472// Linux socket filter 473 474const ( 475 SizeofSockFilter = C.sizeof_struct_sock_filter 476 SizeofSockFprog = C.sizeof_struct_sock_fprog 477) 478 479type SockFilter C.struct_sock_filter 480 481type SockFprog C.struct_sock_fprog 482 483// Inotify 484 485type InotifyEvent C.struct_inotify_event 486 487const SizeofInotifyEvent = C.sizeof_struct_inotify_event 488 489// Ptrace 490 491// Register structures 492type PtraceRegs C.PtraceRegs 493 494// Structures contained in PtraceRegs on s390x (exported by mkpost.go) 495type PtracePsw C.ptracePsw 496 497type PtraceFpregs C.ptraceFpregs 498 499type PtracePer C.ptracePer 500 501// Misc 502 503type FdSet C.fd_set 504 505type Sysinfo_t C.struct_sysinfo 506 507type Utsname C.struct_utsname 508 509type Ustat_t C.struct_ustat 510 511type EpollEvent C.struct_my_epoll_event 512 513const ( 514 AT_FDCWD = C.AT_FDCWD 515 AT_REMOVEDIR = C.AT_REMOVEDIR 516 AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW 517 AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW 518) 519 520type PollFd C.struct_pollfd 521 522const ( 523 POLLIN = C.POLLIN 524 POLLPRI = C.POLLPRI 525 POLLOUT = C.POLLOUT 526 POLLRDHUP = C.POLLRDHUP 527 POLLERR = C.POLLERR 528 POLLHUP = C.POLLHUP 529 POLLNVAL = C.POLLNVAL 530) 531 532type Sigset_t C.sigset_t 533 534const RNDGETENTCNT = C.RNDGETENTCNT 535 536const PERF_IOC_FLAG_GROUP = C.PERF_IOC_FLAG_GROUP 537 538// Terminal handling 539 540type Termios C.termios_t 541 542type Winsize C.struct_winsize 543 544// Taskstats 545 546type Taskstats C.struct_taskstats 547 548const ( 549 TASKSTATS_CMD_UNSPEC = C.TASKSTATS_CMD_UNSPEC 550 TASKSTATS_CMD_GET = C.TASKSTATS_CMD_GET 551 TASKSTATS_CMD_NEW = C.TASKSTATS_CMD_NEW 552 TASKSTATS_TYPE_UNSPEC = C.TASKSTATS_TYPE_UNSPEC 553 TASKSTATS_TYPE_PID = C.TASKSTATS_TYPE_PID 554 TASKSTATS_TYPE_TGID = C.TASKSTATS_TYPE_TGID 555 TASKSTATS_TYPE_STATS = C.TASKSTATS_TYPE_STATS 556 TASKSTATS_TYPE_AGGR_PID = C.TASKSTATS_TYPE_AGGR_PID 557 TASKSTATS_TYPE_AGGR_TGID = C.TASKSTATS_TYPE_AGGR_TGID 558 TASKSTATS_TYPE_NULL = C.TASKSTATS_TYPE_NULL 559 TASKSTATS_CMD_ATTR_UNSPEC = C.TASKSTATS_CMD_ATTR_UNSPEC 560 TASKSTATS_CMD_ATTR_PID = C.TASKSTATS_CMD_ATTR_PID 561 TASKSTATS_CMD_ATTR_TGID = C.TASKSTATS_CMD_ATTR_TGID 562 TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = C.TASKSTATS_CMD_ATTR_REGISTER_CPUMASK 563 TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = C.TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK 564) 565 566// Generic netlink 567 568type Genlmsghdr C.struct_genlmsghdr 569 570const ( 571 CTRL_CMD_UNSPEC = C.CTRL_CMD_UNSPEC 572 CTRL_CMD_NEWFAMILY = C.CTRL_CMD_NEWFAMILY 573 CTRL_CMD_DELFAMILY = C.CTRL_CMD_DELFAMILY 574 CTRL_CMD_GETFAMILY = C.CTRL_CMD_GETFAMILY 575 CTRL_CMD_NEWOPS = C.CTRL_CMD_NEWOPS 576 CTRL_CMD_DELOPS = C.CTRL_CMD_DELOPS 577 CTRL_CMD_GETOPS = C.CTRL_CMD_GETOPS 578 CTRL_CMD_NEWMCAST_GRP = C.CTRL_CMD_NEWMCAST_GRP 579 CTRL_CMD_DELMCAST_GRP = C.CTRL_CMD_DELMCAST_GRP 580 CTRL_CMD_GETMCAST_GRP = C.CTRL_CMD_GETMCAST_GRP 581 CTRL_ATTR_UNSPEC = C.CTRL_ATTR_UNSPEC 582 CTRL_ATTR_FAMILY_ID = C.CTRL_ATTR_FAMILY_ID 583 CTRL_ATTR_FAMILY_NAME = C.CTRL_ATTR_FAMILY_NAME 584 CTRL_ATTR_VERSION = C.CTRL_ATTR_VERSION 585 CTRL_ATTR_HDRSIZE = C.CTRL_ATTR_HDRSIZE 586 CTRL_ATTR_MAXATTR = C.CTRL_ATTR_MAXATTR 587 CTRL_ATTR_OPS = C.CTRL_ATTR_OPS 588 CTRL_ATTR_MCAST_GROUPS = C.CTRL_ATTR_MCAST_GROUPS 589 CTRL_ATTR_OP_UNSPEC = C.CTRL_ATTR_OP_UNSPEC 590 CTRL_ATTR_OP_ID = C.CTRL_ATTR_OP_ID 591 CTRL_ATTR_OP_FLAGS = C.CTRL_ATTR_OP_FLAGS 592 CTRL_ATTR_MCAST_GRP_UNSPEC = C.CTRL_ATTR_MCAST_GRP_UNSPEC 593 CTRL_ATTR_MCAST_GRP_NAME = C.CTRL_ATTR_MCAST_GRP_NAME 594 CTRL_ATTR_MCAST_GRP_ID = C.CTRL_ATTR_MCAST_GRP_ID 595) 596