// godefs -gsyscall -f-m32 types_linux.c

// MACHINE GENERATED - DO NOT EDIT.

package syscall

// Constants
const (
	sizeofPtr		= 0x4;
	sizeofShort		= 0x2;
	sizeofInt		= 0x4;
	sizeofLong		= 0x4;
	sizeofLongLong		= 0x8;
	PathMax			= 0x1000;
	O_RDONLY		= 0;
	O_WRONLY		= 0x1;
	O_RDWR			= 0x2;
	O_APPEND		= 0x400;
	O_ASYNC			= 0x2000;
	O_CREAT			= 0x40;
	O_NOCTTY		= 0x100;
	O_NONBLOCK		= 0x800;
	O_SYNC			= 0x1000;
	O_TRUNC			= 0x200;
	O_CLOEXEC		= 0;
	F_GETFD			= 0x1;
	F_SETFD			= 0x2;
	F_GETFL			= 0x3;
	F_SETFL			= 0x4;
	FD_CLOEXEC		= 0x1;
	NAME_MAX		= 0xff;
	S_IFMT			= 0xf000;
	S_IFIFO			= 0x1000;
	S_IFCHR			= 0x2000;
	S_IFDIR			= 0x4000;
	S_IFBLK			= 0x6000;
	S_IFREG			= 0x8000;
	S_IFLNK			= 0xa000;
	S_IFSOCK		= 0xc000;
	S_ISUID			= 0x800;
	S_ISGID			= 0x400;
	S_ISVTX			= 0x200;
	S_IRUSR			= 0x100;
	S_IWUSR			= 0x80;
	S_IXUSR			= 0x40;
	WNOHANG			= 0x1;
	WUNTRACED		= 0x2;
	WEXITED			= 0x4;
	WSTOPPED		= 0x2;
	WCONTINUED		= 0x8;
	WNOWAIT			= 0x1000000;
	WCLONE			= 0x80000000;
	WALL			= 0x40000000;
	WNOTHREAD		= 0x20000000;
	AF_UNIX			= 0x1;
	AF_INET			= 0x2;
	AF_INET6		= 0xa;
	SOCK_STREAM		= 0x1;
	SOCK_DGRAM		= 0x2;
	SOCK_RAW		= 0x3;
	SOCK_SEQPACKET		= 0x5;
	SOL_SOCKET		= 0x1;
	SO_REUSEADDR		= 0x2;
	SO_KEEPALIVE		= 0x9;
	SO_DONTROUTE		= 0x5;
	SO_BROADCAST		= 0x6;
	SO_LINGER		= 0xd;
	SO_SNDBUF		= 0x7;
	SO_RCVBUF		= 0x8;
	SO_SNDTIMEO		= 0x15;
	SO_RCVTIMEO		= 0x14;
	IPPROTO_TCP		= 0x6;
	IPPROTO_UDP		= 0x11;
	TCP_NODELAY		= 0x1;
	SOMAXCONN		= 0x80;
	SizeofSockaddrInet4	= 0x10;
	SizeofSockaddrInet6	= 0x1c;
	SizeofSockaddrAny	= 0x1c;
	SizeofSockaddrUnix	= 0x6e;
	PTRACE_TRACEME		= 0;
	PTRACE_PEEKTEXT		= 0x1;
	PTRACE_PEEKDATA		= 0x2;
	PTRACE_PEEKUSER		= 0x3;
	PTRACE_POKETEXT		= 0x4;
	PTRACE_POKEDATA		= 0x5;
	PTRACE_POKEUSER		= 0x6;
	PTRACE_CONT		= 0x7;
	PTRACE_KILL		= 0x8;
	PTRACE_SINGLESTEP	= 0x9;
	PTRACE_GETREGS		= 0xc;
	PTRACE_SETREGS		= 0xd;
	PTRACE_GETFPREGS	= 0xe;
	PTRACE_SETFPREGS	= 0xf;
	PTRACE_ATTACH		= 0x10;
	PTRACE_DETACH		= 0x11;
	PTRACE_GETFPXREGS	= 0x12;
	PTRACE_SETFPXREGS	= 0x13;
	PTRACE_SYSCALL		= 0x18;
	PTRACE_SETOPTIONS	= 0x4200;
	PTRACE_GETEVENTMSG	= 0x4201;
	PTRACE_GETSIGINFO	= 0x4202;
	PTRACE_SETSIGINFO	= 0x4203;
	PTRACE_O_TRACESYSGOOD	= 0x1;
	PTRACE_O_TRACEFORK	= 0x2;
	PTRACE_O_TRACEVFORK	= 0x4;
	PTRACE_O_TRACECLONE	= 0x8;
	PTRACE_O_TRACEEXEC	= 0x10;
	PTRACE_O_TRACEVFORKDONE	= 0x20;
	PTRACE_O_TRACEEXIT	= 0x40;
	PTRACE_O_MASK		= 0x7f;
	PTRACE_EVENT_FORK	= 0x1;
	PTRACE_EVENT_VFORK	= 0x2;
	PTRACE_EVENT_CLONE	= 0x3;
	PTRACE_EVENT_EXEC	= 0x4;
	PTRACE_EVENT_VFORK_DONE	= 0x5;
	PTRACE_EVENT_EXIT	= 0x6;
	EPOLLIN			= 0x1;
	EPOLLRDHUP		= 0x2000;
	EPOLLOUT		= 0x4;
	EPOLLONESHOT		= 0x40000000;
	EPOLL_CTL_MOD		= 0x3;
	EPOLL_CTL_ADD		= 0x1;
	EPOLL_CTL_DEL		= 0x2;
)

// Types

type _C_short int16

type _C_int int32

type _C_long int32

type _C_long_long int64

type Timespec struct {
	Sec	int32;
	Nsec	int32;
}

type Timeval struct {
	Sec	int32;
	Usec	int32;
}

type Timex struct {
	Modes		uint32;
	Offset		int32;
	Freq		int32;
	Maxerror	int32;
	Esterror	int32;
	Status		int32;
	Constant	int32;
	Precision	int32;
	Tolerance	int32;
	Time		Timeval;
	Tick		int32;
	Ppsfreq		int32;
	Jitter		int32;
	Shift		int32;
	Stabil		int32;
	Jitcnt		int32;
	Calcnt		int32;
	Errcnt		int32;
	Stbcnt		int32;
	Pad0		int32;
	Pad1		int32;
	Pad2		int32;
	Pad3		int32;
	Pad4		int32;
	Pad5		int32;
	Pad6		int32;
	Pad7		int32;
	Pad8		int32;
	Pad9		int32;
	Pad10		int32;
	Pad11		int32;
}

type Time_t int32

type Tms struct {
	Utime	int32;
	Stime	int32;
	Cutime	int32;
	Cstime	int32;
}

type Utimbuf struct {
	Actime	int32;
	Modtime	int32;
}

type Rusage struct {
	Utime		Timeval;
	Stime		Timeval;
	Maxrss		int32;
	Ixrss		int32;
	Idrss		int32;
	Isrss		int32;
	Minflt		int32;
	Majflt		int32;
	Nswap		int32;
	Inblock		int32;
	Oublock		int32;
	Msgsnd		int32;
	Msgrcv		int32;
	Nsignals	int32;
	Nvcsw		int32;
	Nivcsw		int32;
}

type Rlimit struct {
	Cur	uint64;
	Max	uint64;
}

type _Gid_t uint32

type Stat_t struct {
	Dev		uint64;
	__pad1		uint16;
	Pad0		[2]byte;
	__st_ino	uint32;
	Mode		uint32;
	Nlink		uint32;
	Uid		uint32;
	Gid		uint32;
	Rdev		uint64;
	__pad2		uint16;
	Pad1		[2]byte;
	Size		int64;
	Blksize		int32;
	Blocks		int64;
	Atim		Timespec;
	Mtim		Timespec;
	Ctim		Timespec;
	Ino		uint64;
}

type Statfs_t struct {
	Type	int32;
	Bsize	int32;
	Blocks	uint64;
	Bfree	uint64;
	Bavail	uint64;
	Files	uint64;
	Ffree	uint64;
	Fsid	[8]byte;	/* __fsid_t */
	Namelen	int32;
	Frsize	int32;
	Spare	[5]int32;
}

type Dirent struct {
	Ino	uint64;
	Off	int64;
	Reclen	uint16;
	Type	uint8;
	Name	[256]int8;
	Pad0	[1]byte;
}

type RawSockaddrInet4 struct {
	Family	uint16;
	Port	uint16;
	Addr	[4]byte;	/* in_addr */
	Zero	[8]uint8;
}

type RawSockaddrInet6 struct {
	Family		uint16;
	Port		uint16;
	Flowinfo	uint32;
	Addr		[16]byte;	/* in6_addr */
	Scope_id	uint32;
}

type RawSockaddrUnix struct {
	Family	uint16;
	Path	[108]int8;
}

type RawSockaddr struct {
	Family	uint16;
	Data	[14]int8;
}

type RawSockaddrAny struct {
	Addr	RawSockaddr;
	Pad	[12]int8;
}

type _Socklen uint32

type Linger struct {
	Onoff	int32;
	Linger	int32;
}

type PtraceRegs struct {
	Ebx		int32;
	Ecx		int32;
	Edx		int32;
	Esi		int32;
	Edi		int32;
	Ebp		int32;
	Eax		int32;
	Ds		uint16;
	__ds		uint16;
	Es		uint16;
	__es		uint16;
	Fs		uint16;
	__fs		uint16;
	Gs		uint16;
	__gs		uint16;
	Orig_eax	int32;
	Eip		int32;
	Cs		uint16;
	__cs		uint16;
	Eflags		int32;
	Esp		int32;
	Ss		uint16;
	__ss		uint16;
}

type FdSet struct {
	Bits [32]int32;
}

type Sysinfo_t struct {
	Uptime		int32;
	Loads		[3]uint32;
	Totalram	uint32;
	Freeram		uint32;
	Sharedram	uint32;
	Bufferram	uint32;
	Totalswap	uint32;
	Freeswap	uint32;
	Procs		uint16;
	Pad		uint16;
	Totalhigh	uint32;
	Freehigh	uint32;
	Unit		uint32;
	_f		[8]int8;
}

type Utsname struct {
	Sysname		[65]int8;
	Nodename	[65]int8;
	Release		[65]int8;
	Version		[65]int8;
	Machine		[65]int8;
	Domainname	[65]int8;
}

type Ustat_t struct {
	Tfree	int32;
	Tinode	uint32;
	Fname	[6]int8;
	Fpack	[6]int8;
}

type EpollEvent struct {
	Events	uint32;
	Fd	int32;
	Pad	int32;
}
