]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: add sockaddr_dl, sysctl with routing message support for darwin, freebsd
authorMikio Hara <mikioh.mikioh@gmail.com>
Fri, 11 Feb 2011 19:34:00 +0000 (14:34 -0500)
committerRuss Cox <rsc@golang.org>
Fri, 11 Feb 2011 19:34:00 +0000 (14:34 -0500)
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/4171043

14 files changed:
src/pkg/syscall/mkerrors.sh
src/pkg/syscall/syscall_bsd.go
src/pkg/syscall/syscall_darwin.go
src/pkg/syscall/syscall_freebsd.go
src/pkg/syscall/types_darwin.c
src/pkg/syscall/types_freebsd.c
src/pkg/syscall/zerrors_darwin_386.go
src/pkg/syscall/zerrors_darwin_amd64.go
src/pkg/syscall/zerrors_freebsd_386.go
src/pkg/syscall/zerrors_freebsd_amd64.go
src/pkg/syscall/ztypes_darwin_386.go
src/pkg/syscall/ztypes_darwin_amd64.go
src/pkg/syscall/ztypes_freebsd_386.go
src/pkg/syscall/ztypes_freebsd_amd64.go

index 41acf95eceaeeed774fefe411db664f56555b1d2..a13c0e91baec8ecf39fd9fcdbc930a48d693177f 100755 (executable)
@@ -38,23 +38,28 @@ includes_Darwin='
 #define _DARWIN_C_SOURCE
 #define KERNEL
 #define _DARWIN_USE_64_BIT_INODE
-#include <sys/cdefs.h>
-#include <sys/wait.h>
+#include <sys/types.h>
 #include <sys/event.h>
 #include <sys/socket.h>
 #include <sys/sockio.h>
+#include <sys/sysctl.h>
+#include <sys/wait.h>
 #include <net/if.h>
+#include <net/route.h>
+#include <netinet/in.h>
 #include <netinet/ip.h>
 #include <netinet/ip_mroute.h>
 '
 
 includes_FreeBSD='
-#include <sys/wait.h>
+#include <sys/types.h>
 #include <sys/event.h>
 #include <sys/socket.h>
 #include <sys/sockio.h>
-#include <net/route.h>
+#include <sys/sysctl.h>
+#include <sys/wait.h>
 #include <net/if.h>
+#include <net/route.h>
 #include <netinet/in.h>
 #include <netinet/ip.h>
 #include <netinet/ip_mroute.h>
@@ -105,16 +110,22 @@ done
                $2 ~ /^(MAP_FAILED)$/ {next}
 
                $2 !~ /^ETH_/ &&
+               $2 !~ /^EPROC_/ &&
+               $2 !~ /^EQUIV_/ &&
+               $2 !~ /^EXPR_/ &&
                $2 ~ /^E[A-Z0-9_]+$/ ||
                $2 ~ /^SIG[^_]/ ||
                $2 ~ /^IN_/ ||
-               $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|EVFILT|EV|SHUT|PROT|MAP|PACKET|MSG|SCM|IFF)_/ ||
+               $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|EVFILT|EV|SHUT|PROT|MAP|PACKET|MSG|SCM|IFF|NET_RT|RTM|RTF|RTV|RTA|RTAX)_/ ||
                $2 == "SOMAXCONN" ||
                $2 == "NAME_MAX" ||
                $2 == "IFNAMSIZ" ||
+               $2 == "CTL_NET" ||
+               $2 == "CTL_MAXNAME" ||
                $2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ ||
                $2 ~ /^(O|F|FD|NAME|S|PTRACE)_/ ||
-               $2 ~ /^SIO/ ||
+               $2 ~ /^SIOC/ ||
+               $2 !~ "WMESGLEN" &&
                $2 ~ /^W[A-Z0-9]+$/ {printf("\t$%s = %s,\n", $2, $2)}
                $2 ~ /^__WCOREFLAG$/ {next}
                $2 ~ /^__W[A-Z0-9]+$/ {printf("\t$%s = %s,\n", substr($2,3), $2)}
index bf62f4e310bfe6d2a048da3ad850c9e8d2e84ad5..1f5b2ba9a34dfc9fde917cbdf3185113e26ab7af 100644 (file)
@@ -223,8 +223,40 @@ func (sa *SockaddrUnix) sockaddr() (uintptr, _Socklen, int) {
        return uintptr(unsafe.Pointer(&sa.raw)), _Socklen(sa.raw.Len), 0
 }
 
+func (sa *SockaddrDatalink) sockaddr() (uintptr, _Socklen, int) {
+       if sa.Index == 0 {
+               return 0, 0, EINVAL
+       }
+       sa.raw.Len = sa.Len
+       sa.raw.Family = AF_LINK
+       sa.raw.Index = sa.Index
+       sa.raw.Type = sa.Type
+       sa.raw.Nlen = sa.Nlen
+       sa.raw.Alen = sa.Alen
+       sa.raw.Slen = sa.Slen
+       for i := 0; i < len(sa.raw.Data); i++ {
+               sa.raw.Data[i] = sa.Data[i]
+       }
+       return uintptr(unsafe.Pointer(&sa.raw)), SizeofSockaddrDatalink, 0
+}
+
 func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, int) {
        switch rsa.Addr.Family {
+       case AF_LINK:
+               pp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa))
+               sa := new(SockaddrDatalink)
+               sa.Len = pp.Len
+               sa.Family = pp.Family
+               sa.Index = pp.Index
+               sa.Type = pp.Type
+               sa.Nlen = pp.Nlen
+               sa.Alen = pp.Alen
+               sa.Slen = pp.Slen
+               for i := 0; i < len(sa.Data); i++ {
+                       sa.Data[i] = pp.Data[i]
+               }
+               return sa, 0
+
        case AF_UNIX:
                pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
                if pp.Len < 3 || pp.Len > SizeofSockaddrUnix {
@@ -399,7 +431,6 @@ func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, errno
 
 // Translate "kern.hostname" to []_C_int{0,1,2,3}.
 func nametomib(name string) (mib []_C_int, errno int) {
-       const CTL_MAXNAME = 12
        const siz = uintptr(unsafe.Sizeof(mib[0]))
 
        // NOTE(rsc): It seems strange to set the buffer to have
@@ -471,6 +502,27 @@ func SysctlUint32(name string) (value uint32, errno int) {
        return *(*uint32)(unsafe.Pointer(&buf[0])), 0
 }
 
+func SysctlNetRoute(fourth, fifth, sixth int) (value []byte, errno int) {
+       mib := []_C_int{CTL_NET, AF_ROUTE, 0, _C_int(fourth), _C_int(fifth), _C_int(sixth)}
+
+       // Find size.
+       n := uintptr(0)
+       if errno = sysctl(mib, nil, &n, nil, 0); errno != 0 {
+               return nil, errno
+       }
+       if n == 0 {
+               return nil, 0
+       }
+
+       // Read into buffer of that size.
+       b := make([]byte, n)
+       if errno = sysctl(mib, &b[0], &n, nil, 0); errno != 0 {
+               return nil, errno
+       }
+
+       return b[0:n], 0
+}
+
 //sys  utimes(path string, timeval *[2]Timeval) (errno int)
 func Utimes(path string, tv []Timeval) (errno int) {
        if len(tv) != 2 {
index ab83af5c156e928270fdb73d3933e3ed1b3cd60f..552c9c1543c380e5c9c52a28a68b92b7f3e2f3f0 100644 (file)
@@ -14,6 +14,18 @@ package syscall
 
 const OS = "darwin"
 
+type SockaddrDatalink struct {
+       Len    uint8
+       Family uint8
+       Index  uint16
+       Type   uint8
+       Nlen   uint8
+       Alen   uint8
+       Slen   uint8
+       Data   [12]int8
+       raw    RawSockaddrDatalink
+}
+
 /*
  * Wrapped
  */
index ee947be200361ac0309cbc6761e5fc0342bf4c08..ed310663a3033e54d64b8ec4fa6af1d8fd4c7857 100644 (file)
@@ -14,6 +14,18 @@ package syscall
 
 const OS = "freebsd"
 
+type SockaddrDatalink struct {
+       Len    uint8
+       Family uint8
+       Index  uint16
+       Type   uint8
+       Nlen   uint8
+       Alen   uint8
+       Slen   uint8
+       Data   [46]int8
+       raw    RawSockaddrDatalink
+}
+
 /*
  * Exposed directly
  */
index 2e3a8cda6a6413f3a78e82db057599a43c5b43b7..4096bcfd9f91493635d2d26fc966ef0e51d09e62 100644 (file)
@@ -11,12 +11,10 @@ Input to godefs.  See also mkerrors.sh and mkall.sh
 #define _DARWIN_USE_64_BIT_INODE
 #include <dirent.h>
 #include <fcntl.h>
+#include <signal.h>
+#include <unistd.h>
 #include <mach/mach.h>
 #include <mach/message.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <signal.h>
-#include <stdio.h>
 #include <sys/event.h>
 #include <sys/mman.h>
 #include <sys/mount.h>
@@ -25,12 +23,18 @@ Input to godefs.  See also mkerrors.sh and mkall.sh
 #include <sys/resource.h>
 #include <sys/select.h>
 #include <sys/signal.h>
+#include <sys/socket.h>
 #include <sys/stat.h>
 #include <sys/time.h>
 #include <sys/types.h>
 #include <sys/un.h>
 #include <sys/wait.h>
-#include <unistd.h>
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <net/if_var.h>
+#include <net/route.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
 
 // Machine characteristics; for internal use.
 
@@ -89,6 +93,7 @@ union sockaddr_all {
        struct sockaddr_in s2;  // these pad it out
        struct sockaddr_in6 s3;
        struct sockaddr_un s4;
+       struct sockaddr_dl s5;
 };
 
 struct sockaddr_any {
@@ -99,6 +104,7 @@ struct sockaddr_any {
 typedef struct sockaddr_in $RawSockaddrInet4;
 typedef struct sockaddr_in6 $RawSockaddrInet6;
 typedef struct sockaddr_un $RawSockaddrUnix;
+typedef struct sockaddr_dl $RawSockaddrDatalink;
 typedef struct sockaddr $RawSockaddr;
 typedef struct sockaddr_any $RawSockaddrAny;
 typedef socklen_t $_Socklen;
@@ -113,6 +119,7 @@ enum {
        $SizeofSockaddrInet6 = sizeof(struct sockaddr_in6),
        $SizeofSockaddrAny = sizeof(struct sockaddr_any),
        $SizeofSockaddrUnix = sizeof(struct sockaddr_un),
+       $SizeofSockaddrDatalink = sizeof(struct sockaddr_dl),
        $SizeofLinger = sizeof(struct linger),
        $SizeofIpMreq = sizeof(struct ip_mreq),
        $SizeofMsghdr = sizeof(struct msghdr),
@@ -134,3 +141,19 @@ typedef struct kevent $Kevent_t;
 // Select
 
 typedef fd_set $FdSet;
+
+// Routing and interface messages
+
+enum {
+       $SizeofIfMsghdr = sizeof(struct if_msghdr),
+       $SizeofIfData = sizeof(struct if_data),
+       $SizeofIfaMsghdr = sizeof(struct ifa_msghdr),
+       $SizeofRtMsghdr = sizeof(struct rt_msghdr),
+       $SizeofRtMetrics = sizeof(struct rt_metrics),
+};
+
+typedef struct if_msghdr $IfMsghdr;
+typedef struct if_data $IfData;
+typedef struct ifa_msghdr $IfaMsghdr;
+typedef struct rt_msghdr $RtMsghdr;
+typedef struct rt_metrics $RtMetrics;
index a54c6ee33e481ca6193a9187070e1b9b96a1834a..6fc81413471687013cff64e5c4ea5cd20dc7bec5 100644 (file)
@@ -7,14 +7,11 @@ Input to godefs.  See also mkerrors.sh and mkall.sh
  */
 
 #define KERNEL
-#include <sys/cdefs.h>
 #include <dirent.h>
 #include <fcntl.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
 #include <signal.h>
 #include <stdio.h>
+#include <unistd.h>
 #include <sys/event.h>
 #include <sys/mman.h>
 #include <sys/mount.h>
@@ -26,9 +23,14 @@ Input to godefs.  See also mkerrors.sh and mkall.sh
 #include <sys/socket.h>
 #include <sys/stat.h>
 #include <sys/time.h>
+#include <sys/types.h>
 #include <sys/un.h>
 #include <sys/wait.h>
-#include <unistd.h>
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <net/route.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
 
 // Machine characteristics; for internal use.
 
@@ -101,6 +103,7 @@ union sockaddr_all {
        struct sockaddr_in s2;  // these pad it out
        struct sockaddr_in6 s3;
        struct sockaddr_un s4;
+       struct sockaddr_dl s5;
 };
 
 struct sockaddr_any {
@@ -111,6 +114,7 @@ struct sockaddr_any {
 typedef struct sockaddr_in $RawSockaddrInet4;
 typedef struct sockaddr_in6 $RawSockaddrInet6;
 typedef struct sockaddr_un $RawSockaddrUnix;
+typedef struct sockaddr_dl $RawSockaddrDatalink;
 typedef struct sockaddr $RawSockaddr;
 typedef struct sockaddr_any $RawSockaddrAny;
 typedef socklen_t $_Socklen;
@@ -125,6 +129,7 @@ enum {
        $SizeofSockaddrInet6 = sizeof(struct sockaddr_in6),
        $SizeofSockaddrAny = sizeof(struct sockaddr_any),
        $SizeofSockaddrUnix = sizeof(struct sockaddr_un),
+       $SizeofSockaddrDatalink = sizeof(struct sockaddr_dl),
        $SizeofLinger = sizeof(struct linger),
        $SizeofIpMreq = sizeof(struct ip_mreq),
        $SizeofMsghdr = sizeof(struct msghdr),
@@ -146,3 +151,19 @@ typedef struct kevent $Kevent_t;
 // Select
 
 typedef fd_set $FdSet;
+
+// Routing and interface messages
+
+enum {
+       $SizeofIfMsghdr = sizeof(struct if_msghdr),
+       $SizeofIfData = sizeof(struct if_data),
+       $SizeofIfaMsghdr = sizeof(struct ifa_msghdr),
+       $SizeofRtMsghdr = sizeof(struct rt_msghdr),
+       $SizeofRtMetrics = sizeof(struct rt_metrics),
+};
+
+typedef struct if_msghdr $IfMsghdr;
+typedef struct if_data $IfData;
+typedef struct ifa_msghdr $IfaMsghdr;
+typedef struct rt_msghdr $RtMsghdr;
+typedef struct rt_metrics $RtMetrics;
index 8f5f69b5b50026a3978ca48b4e1c9fdad92a4036..52b9862282768fdec29af56338eef91ca685f207 100644 (file)
@@ -45,6 +45,8 @@ const (
        AF_SYSTEM                   = 0x20
        AF_UNIX                     = 0x1
        AF_UNSPEC                   = 0
+       CTL_MAXNAME                 = 0xc
+       CTL_NET                     = 0x4
        E2BIG                       = 0x7
        EACCES                      = 0xd
        EADDRINUSE                  = 0x30
@@ -475,6 +477,15 @@ const (
        MSG_TRUNC                   = 0x10
        MSG_WAITALL                 = 0x40
        MSG_WAITSTREAM              = 0x200
+       NAME_MAX                    = 0xff
+       NET_RT_DUMP                 = 0x1
+       NET_RT_DUMP2                = 0x7
+       NET_RT_FLAGS                = 0x2
+       NET_RT_IFLIST               = 0x3
+       NET_RT_IFLIST2              = 0x6
+       NET_RT_MAXID                = 0x8
+       NET_RT_STAT                 = 0x4
+       NET_RT_TRASH                = 0x5
        O_ACCMODE                   = 0x3
        O_ALERT                     = 0x20000000
        O_APPEND                    = 0x8
@@ -498,6 +509,77 @@ const (
        O_SYNC                      = 0x80
        O_TRUNC                     = 0x400
        O_WRONLY                    = 0x1
+       RTAX_AUTHOR                 = 0x6
+       RTAX_BRD                    = 0x7
+       RTAX_DST                    = 0
+       RTAX_GATEWAY                = 0x1
+       RTAX_GENMASK                = 0x3
+       RTAX_IFA                    = 0x5
+       RTAX_IFP                    = 0x4
+       RTAX_MAX                    = 0x8
+       RTAX_NETMASK                = 0x2
+       RTA_AUTHOR                  = 0x40
+       RTA_BRD                     = 0x80
+       RTA_DST                     = 0x1
+       RTA_GATEWAY                 = 0x2
+       RTA_GENMASK                 = 0x8
+       RTA_IFA                     = 0x20
+       RTA_IFP                     = 0x10
+       RTA_NETMASK                 = 0x4
+       RTF_BLACKHOLE               = 0x1000
+       RTF_BROADCAST               = 0x400000
+       RTF_CLONING                 = 0x100
+       RTF_CONDEMNED               = 0x2000000
+       RTF_DELCLONE                = 0x80
+       RTF_DONE                    = 0x40
+       RTF_DYNAMIC                 = 0x10
+       RTF_GATEWAY                 = 0x2
+       RTF_HOST                    = 0x4
+       RTF_IFREF                   = 0x4000000
+       RTF_IFSCOPE                 = 0x1000000
+       RTF_LLINFO                  = 0x400
+       RTF_LOCAL                   = 0x200000
+       RTF_MODIFIED                = 0x20
+       RTF_MULTICAST               = 0x800000
+       RTF_PINNED                  = 0x100000
+       RTF_PRCLONING               = 0x10000
+       RTF_PROTO1                  = 0x8000
+       RTF_PROTO2                  = 0x4000
+       RTF_PROTO3                  = 0x40000
+       RTF_REJECT                  = 0x8
+       RTF_STATIC                  = 0x800
+       RTF_UP                      = 0x1
+       RTF_WASCLONED               = 0x20000
+       RTF_XRESOLVE                = 0x200
+       RTM_ADD                     = 0x1
+       RTM_CHANGE                  = 0x3
+       RTM_DELADDR                 = 0xd
+       RTM_DELETE                  = 0x2
+       RTM_DELMADDR                = 0x10
+       RTM_GET                     = 0x4
+       RTM_GET2                    = 0x14
+       RTM_IFINFO                  = 0xe
+       RTM_IFINFO2                 = 0x12
+       RTM_LOCK                    = 0x8
+       RTM_LOSING                  = 0x5
+       RTM_MISS                    = 0x7
+       RTM_NEWADDR                 = 0xc
+       RTM_NEWMADDR                = 0xf
+       RTM_NEWMADDR2               = 0x13
+       RTM_OLDADD                  = 0x9
+       RTM_OLDDEL                  = 0xa
+       RTM_REDIRECT                = 0x6
+       RTM_RESOLVE                 = 0xb
+       RTM_RTTUNIT                 = 0xf4240
+       RTM_VERSION                 = 0x5
+       RTV_EXPIRE                  = 0x4
+       RTV_HOPCOUNT                = 0x2
+       RTV_MTU                     = 0x1
+       RTV_RPIPE                   = 0x8
+       RTV_RTT                     = 0x40
+       RTV_RTTVAR                  = 0x80
+       RTV_SPIPE                   = 0x10
+       RTV_SSTHRESH                = 0x20
        SCM_CREDS                   = 0x3
        SCM_RIGHTS                  = 0x1
        SCM_TIMESTAMP               = 0x2
index 75174a0d280aae94a1f1e59c30b774e91898ed86..4e7a174eae63fe556d986de187b4f60d038b19c6 100644 (file)
@@ -45,6 +45,8 @@ const (
        AF_SYSTEM                   = 0x20
        AF_UNIX                     = 0x1
        AF_UNSPEC                   = 0
+       CTL_MAXNAME                 = 0xc
+       CTL_NET                     = 0x4
        E2BIG                       = 0x7
        EACCES                      = 0xd
        EADDRINUSE                  = 0x30
@@ -475,6 +477,15 @@ const (
        MSG_TRUNC                   = 0x10
        MSG_WAITALL                 = 0x40
        MSG_WAITSTREAM              = 0x200
+       NAME_MAX                    = 0xff
+       NET_RT_DUMP                 = 0x1
+       NET_RT_DUMP2                = 0x7
+       NET_RT_FLAGS                = 0x2
+       NET_RT_IFLIST               = 0x3
+       NET_RT_IFLIST2              = 0x6
+       NET_RT_MAXID                = 0x8
+       NET_RT_STAT                 = 0x4
+       NET_RT_TRASH                = 0x5
        O_ACCMODE                   = 0x3
        O_ALERT                     = 0x20000000
        O_APPEND                    = 0x8
@@ -498,6 +509,77 @@ const (
        O_SYNC                      = 0x80
        O_TRUNC                     = 0x400
        O_WRONLY                    = 0x1
+       RTAX_AUTHOR                 = 0x6
+       RTAX_BRD                    = 0x7
+       RTAX_DST                    = 0
+       RTAX_GATEWAY                = 0x1
+       RTAX_GENMASK                = 0x3
+       RTAX_IFA                    = 0x5
+       RTAX_IFP                    = 0x4
+       RTAX_MAX                    = 0x8
+       RTAX_NETMASK                = 0x2
+       RTA_AUTHOR                  = 0x40
+       RTA_BRD                     = 0x80
+       RTA_DST                     = 0x1
+       RTA_GATEWAY                 = 0x2
+       RTA_GENMASK                 = 0x8
+       RTA_IFA                     = 0x20
+       RTA_IFP                     = 0x10
+       RTA_NETMASK                 = 0x4
+       RTF_BLACKHOLE               = 0x1000
+       RTF_BROADCAST               = 0x400000
+       RTF_CLONING                 = 0x100
+       RTF_CONDEMNED               = 0x2000000
+       RTF_DELCLONE                = 0x80
+       RTF_DONE                    = 0x40
+       RTF_DYNAMIC                 = 0x10
+       RTF_GATEWAY                 = 0x2
+       RTF_HOST                    = 0x4
+       RTF_IFREF                   = 0x4000000
+       RTF_IFSCOPE                 = 0x1000000
+       RTF_LLINFO                  = 0x400
+       RTF_LOCAL                   = 0x200000
+       RTF_MODIFIED                = 0x20
+       RTF_MULTICAST               = 0x800000
+       RTF_PINNED                  = 0x100000
+       RTF_PRCLONING               = 0x10000
+       RTF_PROTO1                  = 0x8000
+       RTF_PROTO2                  = 0x4000
+       RTF_PROTO3                  = 0x40000
+       RTF_REJECT                  = 0x8
+       RTF_STATIC                  = 0x800
+       RTF_UP                      = 0x1
+       RTF_WASCLONED               = 0x20000
+       RTF_XRESOLVE                = 0x200
+       RTM_ADD                     = 0x1
+       RTM_CHANGE                  = 0x3
+       RTM_DELADDR                 = 0xd
+       RTM_DELETE                  = 0x2
+       RTM_DELMADDR                = 0x10
+       RTM_GET                     = 0x4
+       RTM_GET2                    = 0x14
+       RTM_IFINFO                  = 0xe
+       RTM_IFINFO2                 = 0x12
+       RTM_LOCK                    = 0x8
+       RTM_LOSING                  = 0x5
+       RTM_MISS                    = 0x7
+       RTM_NEWADDR                 = 0xc
+       RTM_NEWMADDR                = 0xf
+       RTM_NEWMADDR2               = 0x13
+       RTM_OLDADD                  = 0x9
+       RTM_OLDDEL                  = 0xa
+       RTM_REDIRECT                = 0x6
+       RTM_RESOLVE                 = 0xb
+       RTM_RTTUNIT                 = 0xf4240
+       RTM_VERSION                 = 0x5
+       RTV_EXPIRE                  = 0x4
+       RTV_HOPCOUNT                = 0x2
+       RTV_MTU                     = 0x1
+       RTV_RPIPE                   = 0x8
+       RTV_RTT                     = 0x40
+       RTV_RTTVAR                  = 0x80
+       RTV_SPIPE                   = 0x10
+       RTV_SSTHRESH                = 0x20
        SCM_CREDS                   = 0x3
        SCM_RIGHTS                  = 0x1
        SCM_TIMESTAMP               = 0x2
index 5af1d4a1acf7875f602d24d30838d995bcf4d03b..d3d46ce034ab6792078544ca08e30a340ff40c65 100644 (file)
@@ -94,6 +94,8 @@ const (
        AF_VENDOR45                 = 0x81
        AF_VENDOR46                 = 0x83
        AF_VENDOR47                 = 0x85
+       CTL_MAXNAME                 = 0x18
+       CTL_NET                     = 0x4
        E2BIG                       = 0x7
        EACCES                      = 0xd
        EADDRINUSE                  = 0x30
@@ -540,6 +542,11 @@ const (
        MSG_PEEK                    = 0x2
        MSG_TRUNC                   = 0x10
        MSG_WAITALL                 = 0x40
+       NET_RT_DUMP                 = 0x1
+       NET_RT_FLAGS                = 0x2
+       NET_RT_IFLIST               = 0x3
+       NET_RT_IFMALIST             = 0x4
+       NET_RT_MAXID                = 0x5
        O_ACCMODE                   = 0x3
        O_APPEND                    = 0x8
        O_ASYNC                     = 0x40
@@ -561,6 +568,75 @@ const (
        O_TRUNC                     = 0x400
        O_TTY_INIT                  = 0x80000
        O_WRONLY                    = 0x1
+       RTAX_AUTHOR                 = 0x6
+       RTAX_BRD                    = 0x7
+       RTAX_DST                    = 0
+       RTAX_GATEWAY                = 0x1
+       RTAX_GENMASK                = 0x3
+       RTAX_IFA                    = 0x5
+       RTAX_IFP                    = 0x4
+       RTAX_MAX                    = 0x8
+       RTAX_NETMASK                = 0x2
+       RTA_AUTHOR                  = 0x40
+       RTA_BRD                     = 0x80
+       RTA_DST                     = 0x1
+       RTA_GATEWAY                 = 0x2
+       RTA_GENMASK                 = 0x8
+       RTA_IFA                     = 0x20
+       RTA_IFP                     = 0x10
+       RTA_NETMASK                 = 0x4
+       RTF_BLACKHOLE               = 0x1000
+       RTF_BROADCAST               = 0x400000
+       RTF_DONE                    = 0x40
+       RTF_DYNAMIC                 = 0x10
+       RTF_FMASK                   = 0x1004d808
+       RTF_GATEWAY                 = 0x2
+       RTF_HOST                    = 0x4
+       RTF_LLDATA                  = 0x400
+       RTF_LLINFO                  = 0x400
+       RTF_LOCAL                   = 0x200000
+       RTF_MODIFIED                = 0x20
+       RTF_MULTICAST               = 0x800000
+       RTF_PINNED                  = 0x100000
+       RTF_PRCLONING               = 0x10000
+       RTF_PROTO1                  = 0x8000
+       RTF_PROTO2                  = 0x4000
+       RTF_PROTO3                  = 0x40000
+       RTF_REJECT                  = 0x8
+       RTF_RNH_LOCKED              = 0x40000000
+       RTF_STATIC                  = 0x800
+       RTF_STICKY                  = 0x10000000
+       RTF_UP                      = 0x1
+       RTF_XRESOLVE                = 0x200
+       RTM_ADD                     = 0x1
+       RTM_CHANGE                  = 0x3
+       RTM_DELADDR                 = 0xd
+       RTM_DELETE                  = 0x2
+       RTM_DELMADDR                = 0x10
+       RTM_GET                     = 0x4
+       RTM_IEEE80211               = 0x12
+       RTM_IFANNOUNCE              = 0x11
+       RTM_IFINFO                  = 0xe
+       RTM_LOCK                    = 0x8
+       RTM_LOSING                  = 0x5
+       RTM_MISS                    = 0x7
+       RTM_NEWADDR                 = 0xc
+       RTM_NEWMADDR                = 0xf
+       RTM_OLDADD                  = 0x9
+       RTM_OLDDEL                  = 0xa
+       RTM_REDIRECT                = 0x6
+       RTM_RESOLVE                 = 0xb
+       RTM_RTTUNIT                 = 0xf4240
+       RTM_VERSION                 = 0x5
+       RTV_EXPIRE                  = 0x4
+       RTV_HOPCOUNT                = 0x2
+       RTV_MTU                     = 0x1
+       RTV_RPIPE                   = 0x8
+       RTV_RTT                     = 0x40
+       RTV_RTTVAR                  = 0x80
+       RTV_SPIPE                   = 0x10
+       RTV_SSTHRESH                = 0x20
+       RTV_WEIGHT                  = 0x100
        SCM_BINTIME                 = 0x4
        SCM_CREDS                   = 0x3
        SCM_RIGHTS                  = 0x1
index 7e9d85754ffb5bc9ffdeb8a063267733fbaf6f66..ce3ff5402df01e0634c912422c7b62b4a370db5f 100644 (file)
@@ -94,6 +94,8 @@ const (
        AF_VENDOR45                 = 0x81
        AF_VENDOR46                 = 0x83
        AF_VENDOR47                 = 0x85
+       CTL_MAXNAME                 = 0x18
+       CTL_NET                     = 0x4
        E2BIG                       = 0x7
        EACCES                      = 0xd
        EADDRINUSE                  = 0x30
@@ -540,6 +542,11 @@ const (
        MSG_PEEK                    = 0x2
        MSG_TRUNC                   = 0x10
        MSG_WAITALL                 = 0x40
+       NET_RT_DUMP                 = 0x1
+       NET_RT_FLAGS                = 0x2
+       NET_RT_IFLIST               = 0x3
+       NET_RT_IFMALIST             = 0x4
+       NET_RT_MAXID                = 0x5
        O_ACCMODE                   = 0x3
        O_APPEND                    = 0x8
        O_ASYNC                     = 0x40
@@ -561,6 +568,75 @@ const (
        O_TRUNC                     = 0x400
        O_TTY_INIT                  = 0x80000
        O_WRONLY                    = 0x1
+       RTAX_AUTHOR                 = 0x6
+       RTAX_BRD                    = 0x7
+       RTAX_DST                    = 0
+       RTAX_GATEWAY                = 0x1
+       RTAX_GENMASK                = 0x3
+       RTAX_IFA                    = 0x5
+       RTAX_IFP                    = 0x4
+       RTAX_MAX                    = 0x8
+       RTAX_NETMASK                = 0x2
+       RTA_AUTHOR                  = 0x40
+       RTA_BRD                     = 0x80
+       RTA_DST                     = 0x1
+       RTA_GATEWAY                 = 0x2
+       RTA_GENMASK                 = 0x8
+       RTA_IFA                     = 0x20
+       RTA_IFP                     = 0x10
+       RTA_NETMASK                 = 0x4
+       RTF_BLACKHOLE               = 0x1000
+       RTF_BROADCAST               = 0x400000
+       RTF_DONE                    = 0x40
+       RTF_DYNAMIC                 = 0x10
+       RTF_FMASK                   = 0x1004d808
+       RTF_GATEWAY                 = 0x2
+       RTF_HOST                    = 0x4
+       RTF_LLDATA                  = 0x400
+       RTF_LLINFO                  = 0x400
+       RTF_LOCAL                   = 0x200000
+       RTF_MODIFIED                = 0x20
+       RTF_MULTICAST               = 0x800000
+       RTF_PINNED                  = 0x100000
+       RTF_PRCLONING               = 0x10000
+       RTF_PROTO1                  = 0x8000
+       RTF_PROTO2                  = 0x4000
+       RTF_PROTO3                  = 0x40000
+       RTF_REJECT                  = 0x8
+       RTF_RNH_LOCKED              = 0x40000000
+       RTF_STATIC                  = 0x800
+       RTF_STICKY                  = 0x10000000
+       RTF_UP                      = 0x1
+       RTF_XRESOLVE                = 0x200
+       RTM_ADD                     = 0x1
+       RTM_CHANGE                  = 0x3
+       RTM_DELADDR                 = 0xd
+       RTM_DELETE                  = 0x2
+       RTM_DELMADDR                = 0x10
+       RTM_GET                     = 0x4
+       RTM_IEEE80211               = 0x12
+       RTM_IFANNOUNCE              = 0x11
+       RTM_IFINFO                  = 0xe
+       RTM_LOCK                    = 0x8
+       RTM_LOSING                  = 0x5
+       RTM_MISS                    = 0x7
+       RTM_NEWADDR                 = 0xc
+       RTM_NEWMADDR                = 0xf
+       RTM_OLDADD                  = 0x9
+       RTM_OLDDEL                  = 0xa
+       RTM_REDIRECT                = 0x6
+       RTM_RESOLVE                 = 0xb
+       RTM_RTTUNIT                 = 0xf4240
+       RTM_VERSION                 = 0x5
+       RTV_EXPIRE                  = 0x4
+       RTV_HOPCOUNT                = 0x2
+       RTV_MTU                     = 0x1
+       RTV_RPIPE                   = 0x8
+       RTV_RTT                     = 0x40
+       RTV_RTTVAR                  = 0x80
+       RTV_SPIPE                   = 0x10
+       RTV_SSTHRESH                = 0x20
+       RTV_WEIGHT                  = 0x100
        SCM_BINTIME                 = 0x4
        SCM_CREDS                   = 0x3
        SCM_RIGHTS                  = 0x1
index 325c367d6d54e647470e575e00141523ab6a02e3..736c654ab40137d3c08dbba205b7dd37685443b6 100644 (file)
@@ -6,23 +6,29 @@ package syscall
 
 // Constants
 const (
-       sizeofPtr           = 0x4
-       sizeofShort         = 0x2
-       sizeofInt           = 0x4
-       sizeofLong          = 0x4
-       sizeofLongLong      = 0x8
-       O_CLOEXEC           = 0
-       SizeofSockaddrInet4 = 0x10
-       SizeofSockaddrInet6 = 0x1c
-       SizeofSockaddrAny   = 0x6c
-       SizeofSockaddrUnix  = 0x6a
-       SizeofLinger        = 0x8
-       SizeofIpMreq        = 0x8
-       SizeofMsghdr        = 0x1c
-       SizeofCmsghdr       = 0xc
-       PTRACE_TRACEME      = 0
-       PTRACE_CONT         = 0x7
-       PTRACE_KILL         = 0x8
+       sizeofPtr              = 0x4
+       sizeofShort            = 0x2
+       sizeofInt              = 0x4
+       sizeofLong             = 0x4
+       sizeofLongLong         = 0x8
+       O_CLOEXEC              = 0
+       SizeofSockaddrInet4    = 0x10
+       SizeofSockaddrInet6    = 0x1c
+       SizeofSockaddrAny      = 0x6c
+       SizeofSockaddrUnix     = 0x6a
+       SizeofSockaddrDatalink = 0x14
+       SizeofLinger           = 0x8
+       SizeofIpMreq           = 0x8
+       SizeofMsghdr           = 0x1c
+       SizeofCmsghdr          = 0xc
+       PTRACE_TRACEME         = 0
+       PTRACE_CONT            = 0x7
+       PTRACE_KILL            = 0x8
+       SizeofIfMsghdr         = 0x70
+       SizeofIfData           = 0x60
+       SizeofIfaMsghdr        = 0x14
+       SizeofRtMsghdr         = 0x5c
+       SizeofRtMetrics        = 0x38
 )
 
 // Types
@@ -177,6 +183,17 @@ type RawSockaddrUnix struct {
        Path   [104]int8
 }
 
+type RawSockaddrDatalink struct {
+       Len    uint8
+       Family uint8
+       Index  uint16
+       Type   uint8
+       Nlen   uint8
+       Alen   uint8
+       Slen   uint8
+       Data   [12]int8
+}
+
 type RawSockaddr struct {
        Len    uint8
        Family uint8
@@ -233,3 +250,87 @@ type Kevent_t struct {
 type FdSet struct {
        Bits [32]int32
 }
+
+type IfMsghdr struct {
+       Msglen       uint16
+       Version      uint8
+       Type         uint8
+       Addrs        int32
+       Flags        int32
+       Index        uint16
+       Pad_godefs_0 [2]byte
+       Data         IfData
+}
+
+type IfData struct {
+       Type       uint8
+       Typelen    uint8
+       Physical   uint8
+       Addrlen    uint8
+       Hdrlen     uint8
+       Recvquota  uint8
+       Xmitquota  uint8
+       Unused1    uint8
+       Mtu        uint32
+       Metric     uint32
+       Baudrate   uint32
+       Ipackets   uint32
+       Ierrors    uint32
+       Opackets   uint32
+       Oerrors    uint32
+       Collisions uint32
+       Ibytes     uint32
+       Obytes     uint32
+       Imcasts    uint32
+       Omcasts    uint32
+       Iqdrops    uint32
+       Noproto    uint32
+       Recvtiming uint32
+       Xmittiming uint32
+       Lastchange Timeval
+       Unused2    uint32
+       Hwassist   uint32
+       Reserved1  uint32
+       Reserved2  uint32
+}
+
+type IfaMsghdr struct {
+       Msglen       uint16
+       Version      uint8
+       Type         uint8
+       Addrs        int32
+       Flags        int32
+       Index        uint16
+       Pad_godefs_0 [2]byte
+       Metric       int32
+}
+
+type RtMsghdr struct {
+       Msglen       uint16
+       Version      uint8
+       Type         uint8
+       Index        uint16
+       Pad_godefs_0 [2]byte
+       Flags        int32
+       Addrs        int32
+       Pid          int32
+       Seq          int32
+       Errno        int32
+       Use          int32
+       Inits        uint32
+       Rmx          RtMetrics
+}
+
+type RtMetrics struct {
+       Locks    uint32
+       Mtu      uint32
+       Hopcount uint32
+       Expire   int32
+       Recvpipe uint32
+       Sendpipe uint32
+       Ssthresh uint32
+       Rtt      uint32
+       Rttvar   uint32
+       Pksent   uint32
+       Filler   [4]uint32
+}
index 62615825d7cd018c761e3ffebffc229935ea03c2..91ee457961c25083644ba536ae9588a03d7ce2f0 100644 (file)
@@ -6,23 +6,29 @@ package syscall
 
 // Constants
 const (
-       sizeofPtr           = 0x8
-       sizeofShort         = 0x2
-       sizeofInt           = 0x4
-       sizeofLong          = 0x8
-       sizeofLongLong      = 0x8
-       O_CLOEXEC           = 0
-       SizeofSockaddrInet4 = 0x10
-       SizeofSockaddrInet6 = 0x1c
-       SizeofSockaddrAny   = 0x6c
-       SizeofSockaddrUnix  = 0x6a
-       SizeofLinger        = 0x8
-       SizeofIpMreq        = 0x8
-       SizeofMsghdr        = 0x30
-       SizeofCmsghdr       = 0xc
-       PTRACE_TRACEME      = 0
-       PTRACE_CONT         = 0x7
-       PTRACE_KILL         = 0x8
+       sizeofPtr              = 0x8
+       sizeofShort            = 0x2
+       sizeofInt              = 0x4
+       sizeofLong             = 0x8
+       sizeofLongLong         = 0x8
+       O_CLOEXEC              = 0
+       SizeofSockaddrInet4    = 0x10
+       SizeofSockaddrInet6    = 0x1c
+       SizeofSockaddrAny      = 0x6c
+       SizeofSockaddrUnix     = 0x6a
+       SizeofSockaddrDatalink = 0x14
+       SizeofLinger           = 0x8
+       SizeofIpMreq           = 0x8
+       SizeofMsghdr           = 0x30
+       SizeofCmsghdr          = 0xc
+       PTRACE_TRACEME         = 0
+       PTRACE_CONT            = 0x7
+       PTRACE_KILL            = 0x8
+       SizeofIfMsghdr         = 0x70
+       SizeofIfData           = 0x60
+       SizeofIfaMsghdr        = 0x14
+       SizeofRtMsghdr         = 0x5c
+       SizeofRtMetrics        = 0x38
 )
 
 // Types
@@ -180,6 +186,17 @@ type RawSockaddrUnix struct {
        Path   [104]int8
 }
 
+type RawSockaddrDatalink struct {
+       Len    uint8
+       Family uint8
+       Index  uint16
+       Type   uint8
+       Nlen   uint8
+       Alen   uint8
+       Slen   uint8
+       Data   [12]int8
+}
+
 type RawSockaddr struct {
        Len    uint8
        Family uint8
@@ -238,3 +255,87 @@ type Kevent_t struct {
 type FdSet struct {
        Bits [32]int32
 }
+
+type IfMsghdr struct {
+       Msglen       uint16
+       Version      uint8
+       Type         uint8
+       Addrs        int32
+       Flags        int32
+       Index        uint16
+       Pad_godefs_0 [2]byte
+       Data         IfData
+}
+
+type IfData struct {
+       Type       uint8
+       Typelen    uint8
+       Physical   uint8
+       Addrlen    uint8
+       Hdrlen     uint8
+       Recvquota  uint8
+       Xmitquota  uint8
+       Unused1    uint8
+       Mtu        uint32
+       Metric     uint32
+       Baudrate   uint32
+       Ipackets   uint32
+       Ierrors    uint32
+       Opackets   uint32
+       Oerrors    uint32
+       Collisions uint32
+       Ibytes     uint32
+       Obytes     uint32
+       Imcasts    uint32
+       Omcasts    uint32
+       Iqdrops    uint32
+       Noproto    uint32
+       Recvtiming uint32
+       Xmittiming uint32
+       Lastchange [8]byte /* timeval32 */
+       Unused2    uint32
+       Hwassist   uint32
+       Reserved1  uint32
+       Reserved2  uint32
+}
+
+type IfaMsghdr struct {
+       Msglen       uint16
+       Version      uint8
+       Type         uint8
+       Addrs        int32
+       Flags        int32
+       Index        uint16
+       Pad_godefs_0 [2]byte
+       Metric       int32
+}
+
+type RtMsghdr struct {
+       Msglen       uint16
+       Version      uint8
+       Type         uint8
+       Index        uint16
+       Pad_godefs_0 [2]byte
+       Flags        int32
+       Addrs        int32
+       Pid          int32
+       Seq          int32
+       Errno        int32
+       Use          int32
+       Inits        uint32
+       Rmx          RtMetrics
+}
+
+type RtMetrics struct {
+       Locks    uint32
+       Mtu      uint32
+       Hopcount uint32
+       Expire   int32
+       Recvpipe uint32
+       Sendpipe uint32
+       Ssthresh uint32
+       Rtt      uint32
+       Rttvar   uint32
+       Pksent   uint32
+       Filler   [4]uint32
+}
index 8e6e88fb176f581f0ce4fd352bab0c15a9630c7d..0f8e37abb9e2a72fcfcd7a51e5972f84ac96f221 100644 (file)
@@ -6,37 +6,43 @@ package syscall
 
 // Constants
 const (
-       sizeofPtr           = 0x4
-       sizeofShort         = 0x2
-       sizeofInt           = 0x4
-       sizeofLong          = 0x4
-       sizeofLongLong      = 0x8
-       O_CLOEXEC           = 0
-       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
-       SizeofSockaddrInet4 = 0x10
-       SizeofSockaddrInet6 = 0x1c
-       SizeofSockaddrAny   = 0x6c
-       SizeofSockaddrUnix  = 0x6a
-       SizeofLinger        = 0x8
-       SizeofIpMreq        = 0x8
-       SizeofMsghdr        = 0x1c
-       SizeofCmsghdr       = 0xc
-       PTRACE_TRACEME      = 0
-       PTRACE_CONT         = 0x7
-       PTRACE_KILL         = 0x8
+       sizeofPtr              = 0x4
+       sizeofShort            = 0x2
+       sizeofInt              = 0x4
+       sizeofLong             = 0x4
+       sizeofLongLong         = 0x8
+       O_CLOEXEC              = 0
+       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
+       SizeofSockaddrInet4    = 0x10
+       SizeofSockaddrInet6    = 0x1c
+       SizeofSockaddrAny      = 0x6c
+       SizeofSockaddrUnix     = 0x6a
+       SizeofSockaddrDatalink = 0x36
+       SizeofLinger           = 0x8
+       SizeofIpMreq           = 0x8
+       SizeofMsghdr           = 0x1c
+       SizeofCmsghdr          = 0xc
+       PTRACE_TRACEME         = 0
+       PTRACE_CONT            = 0x7
+       PTRACE_KILL            = 0x8
+       SizeofIfMsghdr         = 0x60
+       SizeofIfData           = 0x50
+       SizeofIfaMsghdr        = 0x14
+       SizeofRtMsghdr         = 0x5c
+       SizeofRtMetrics        = 0x38
 )
 
 // Types
@@ -172,6 +178,17 @@ type RawSockaddrUnix struct {
        Path   [104]int8
 }
 
+type RawSockaddrDatalink struct {
+       Len    uint8
+       Family uint8
+       Index  uint16
+       Type   uint8
+       Nlen   uint8
+       Alen   uint8
+       Slen   uint8
+       Data   [46]int8
+}
+
 type RawSockaddr struct {
        Len    uint8
        Family uint8
@@ -228,3 +245,84 @@ type Kevent_t struct {
 type FdSet struct {
        X__fds_bits [32]uint32
 }
+
+type IfMsghdr struct {
+       Msglen       uint16
+       Version      uint8
+       Type         uint8
+       Addrs        int32
+       Flags        int32
+       Index        uint16
+       Pad_godefs_0 [2]byte
+       Data         IfData
+}
+
+type IfData struct {
+       Type        uint8
+       Physical    uint8
+       Addrlen     uint8
+       Hdrlen      uint8
+       Link_state  uint8
+       Spare_char1 uint8
+       Spare_char2 uint8
+       Datalen     uint8
+       Mtu         uint32
+       Metric      uint32
+       Baudrate    uint32
+       Ipackets    uint32
+       Ierrors     uint32
+       Opackets    uint32
+       Oerrors     uint32
+       Collisions  uint32
+       Ibytes      uint32
+       Obytes      uint32
+       Imcasts     uint32
+       Omcasts     uint32
+       Iqdrops     uint32
+       Noproto     uint32
+       Hwassist    uint32
+       Epoch       int32
+       Lastchange  Timeval
+}
+
+type IfaMsghdr struct {
+       Msglen       uint16
+       Version      uint8
+       Type         uint8
+       Addrs        int32
+       Flags        int32
+       Index        uint16
+       Pad_godefs_0 [2]byte
+       Metric       int32
+}
+
+type RtMsghdr struct {
+       Msglen       uint16
+       Version      uint8
+       Type         uint8
+       Index        uint16
+       Pad_godefs_0 [2]byte
+       Flags        int32
+       Addrs        int32
+       Pid          int32
+       Seq          int32
+       Errno        int32
+       Fmask        int32
+       Inits        uint32
+       Rmx          RtMetrics
+}
+
+type RtMetrics struct {
+       Locks    uint32
+       Mtu      uint32
+       Hopcount uint32
+       Expire   uint32
+       Recvpipe uint32
+       Sendpipe uint32
+       Ssthresh uint32
+       Rtt      uint32
+       Rttvar   uint32
+       Pksent   uint32
+       Weight   uint32
+       Filler   [3]uint32
+}
index 856191767665f8c42ee9c452253574524bbf97e0..83a54f66b1456822a52d20721d57a0cb19d2804d 100644 (file)
@@ -6,37 +6,43 @@ package syscall
 
 // Constants
 const (
-       sizeofPtr           = 0x8
-       sizeofShort         = 0x2
-       sizeofInt           = 0x4
-       sizeofLong          = 0x8
-       sizeofLongLong      = 0x8
-       O_CLOEXEC           = 0
-       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
-       SizeofSockaddrInet4 = 0x10
-       SizeofSockaddrInet6 = 0x1c
-       SizeofSockaddrAny   = 0x6c
-       SizeofSockaddrUnix  = 0x6a
-       SizeofLinger        = 0x8
-       SizeofIpMreq        = 0x8
-       SizeofMsghdr        = 0x30
-       SizeofCmsghdr       = 0xc
-       PTRACE_TRACEME      = 0
-       PTRACE_CONT         = 0x7
-       PTRACE_KILL         = 0x8
+       sizeofPtr              = 0x8
+       sizeofShort            = 0x2
+       sizeofInt              = 0x4
+       sizeofLong             = 0x8
+       sizeofLongLong         = 0x8
+       O_CLOEXEC              = 0
+       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
+       SizeofSockaddrInet4    = 0x10
+       SizeofSockaddrInet6    = 0x1c
+       SizeofSockaddrAny      = 0x6c
+       SizeofSockaddrUnix     = 0x6a
+       SizeofSockaddrDatalink = 0x36
+       SizeofLinger           = 0x8
+       SizeofIpMreq           = 0x8
+       SizeofMsghdr           = 0x30
+       SizeofCmsghdr          = 0xc
+       PTRACE_TRACEME         = 0
+       PTRACE_CONT            = 0x7
+       PTRACE_KILL            = 0x8
+       SizeofIfMsghdr         = 0xa8
+       SizeofIfData           = 0x98
+       SizeofIfaMsghdr        = 0x14
+       SizeofRtMsghdr         = 0x98
+       SizeofRtMetrics        = 0x70
 )
 
 // Types
@@ -173,6 +179,17 @@ type RawSockaddrUnix struct {
        Path   [104]int8
 }
 
+type RawSockaddrDatalink struct {
+       Len    uint8
+       Family uint8
+       Index  uint16
+       Type   uint8
+       Nlen   uint8
+       Alen   uint8
+       Slen   uint8
+       Data   [46]int8
+}
+
 type RawSockaddr struct {
        Len    uint8
        Family uint8
@@ -231,3 +248,84 @@ type Kevent_t struct {
 type FdSet struct {
        X__fds_bits [16]uint64
 }
+
+type IfMsghdr struct {
+       Msglen       uint16
+       Version      uint8
+       Type         uint8
+       Addrs        int32
+       Flags        int32
+       Index        uint16
+       Pad_godefs_0 [2]byte
+       Data         IfData
+}
+
+type IfData struct {
+       Type        uint8
+       Physical    uint8
+       Addrlen     uint8
+       Hdrlen      uint8
+       Link_state  uint8
+       Spare_char1 uint8
+       Spare_char2 uint8
+       Datalen     uint8
+       Mtu         uint64
+       Metric      uint64
+       Baudrate    uint64
+       Ipackets    uint64
+       Ierrors     uint64
+       Opackets    uint64
+       Oerrors     uint64
+       Collisions  uint64
+       Ibytes      uint64
+       Obytes      uint64
+       Imcasts     uint64
+       Omcasts     uint64
+       Iqdrops     uint64
+       Noproto     uint64
+       Hwassist    uint64
+       Epoch       int64
+       Lastchange  Timeval
+}
+
+type IfaMsghdr struct {
+       Msglen       uint16
+       Version      uint8
+       Type         uint8
+       Addrs        int32
+       Flags        int32
+       Index        uint16
+       Pad_godefs_0 [2]byte
+       Metric       int32
+}
+
+type RtMsghdr struct {
+       Msglen       uint16
+       Version      uint8
+       Type         uint8
+       Index        uint16
+       Pad_godefs_0 [2]byte
+       Flags        int32
+       Addrs        int32
+       Pid          int32
+       Seq          int32
+       Errno        int32
+       Fmask        int32
+       Inits        uint64
+       Rmx          RtMetrics
+}
+
+type RtMetrics struct {
+       Locks    uint64
+       Mtu      uint64
+       Hopcount uint64
+       Expire   uint64
+       Recvpipe uint64
+       Sendpipe uint64
+       Ssthresh uint64
+       Rtt      uint64
+       Rttvar   uint64
+       Pksent   uint64
+       Weight   uint64
+       Filler   [3]uint64
+}