aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/google/gopacket/afpacket/sockopt_linux.go
diff options
context:
space:
mode:
authorMilan Lenco <milan.lenco@pantheon.tech>2017-10-11 16:40:58 +0200
committerMilan Lenco <milan.lenco@pantheon.tech>2017-10-13 08:40:37 +0200
commit3f1edad4e6ba0a7876750aea55507fae14d8badf (patch)
treea473997249d9ba7deb70b1076d14e4c4ed029a43 /vendor/github.com/google/gopacket/afpacket/sockopt_linux.go
parent8b66677c2382a8e739d437621de4473d5ec0b9f1 (diff)
ODPM 266: Go-libmemif + 2 examples.
Change-Id: Icdb9b9eb2314eff6c96afe7996fcf2728291de4a Signed-off-by: Milan Lenco <milan.lenco@pantheon.tech>
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
+}