aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/google/gopacket/afpacket/sockopt_linux.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/google/gopacket/afpacket/sockopt_linux.go')
-rw-r--r--vendor/github.com/google/gopacket/afpacket/sockopt_linux.go58
1 files changed, 58 insertions, 0 deletions
diff --git a/vendor/github.com/google/gopacket/afpacket/sockopt_linux.go b/vendor/github.com/google/gopacket/afpacket/sockopt_linux.go
new file mode 100644
index 0000000..c53e1cc
--- /dev/null
+++ b/vendor/github.com/google/gopacket/afpacket/sockopt_linux.go
@@ -0,0 +1,58 @@
+// Copyright 2012 Google, Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file in the root of the source
+// tree.
+
+// +build linux
+
+package afpacket
+
+import (
+ "unsafe"
+
+ "golang.org/x/sys/unix"
+)
+
+// setsockopt provides access to the setsockopt syscall.
+func setsockopt(fd, level, name int, val unsafe.Pointer, vallen uintptr) error {
+ _, _, errno := unix.Syscall6(
+ unix.SYS_SETSOCKOPT,
+ uintptr(fd),
+ uintptr(level),
+ uintptr(name),
+ uintptr(val),
+ vallen,
+ 0,
+ )
+ if errno != 0 {
+ return error(errno)
+ }
+
+ return nil
+}
+
+// getsockopt provides access to the getsockopt syscall.
+func getsockopt(fd, level, name int, val unsafe.Pointer, vallen uintptr) error {
+ _, _, errno := unix.Syscall6(
+ unix.SYS_GETSOCKOPT,
+ uintptr(fd),
+ uintptr(level),
+ uintptr(name),
+ uintptr(val),
+ vallen,
+ 0,
+ )
+ if errno != 0 {
+ return error(errno)
+ }
+
+ return nil
+}
+
+// htons converts a short (uint16) from host-to-network byte order.
+// Thanks to mikioh for this neat trick:
+// https://github.com/mikioh/-stdyng/blob/master/afpacket.go
+func htons(i uint16) uint16 {
+ return (i<<8)&0xff00 | i>>8
+}