Mikio Hara | d3003be | 2013-11-05 10:09:42 +0900 | [diff] [blame] | 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 | |
Mikio Hara | d3003be | 2013-11-05 10:09:42 +0900 | [diff] [blame] | 5 | package ipv6 |
| 6 | |
| 7 | import ( |
| 8 | "syscall" |
| 9 | "unsafe" |
| 10 | ) |
| 11 | |
Mikio Hara | d3003be | 2013-11-05 10:09:42 +0900 | [diff] [blame] | 12 | const ( |
Mikio Hara | fa893e0 | 2014-10-31 09:53:30 +0900 | [diff] [blame] | 13 | sysGETSOCKOPT = 0xf |
| 14 | sysSETSOCKOPT = 0xe |
Mikio Hara | d3003be | 2013-11-05 10:09:42 +0900 | [diff] [blame] | 15 | ) |
| 16 | |
Mikio Hara | fa893e0 | 2014-10-31 09:53:30 +0900 | [diff] [blame] | 17 | func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) |
Mikio Hara | d3003be | 2013-11-05 10:09:42 +0900 | [diff] [blame] | 18 | |
Mikio Hara | c4bb2f7 | 2016-03-30 09:22:35 +0900 | [diff] [blame] | 19 | func getsockopt(fd, level, name int, v unsafe.Pointer, l *uint32) error { |
Mikio Hara | fa893e0 | 2014-10-31 09:53:30 +0900 | [diff] [blame] | 20 | if _, errno := socketcall(sysGETSOCKOPT, uintptr(fd), uintptr(level), uintptr(name), uintptr(v), uintptr(unsafe.Pointer(l)), 0); errno != 0 { |
Mikio Hara | d3003be | 2013-11-05 10:09:42 +0900 | [diff] [blame] | 21 | return error(errno) |
| 22 | } |
| 23 | return nil |
| 24 | } |
| 25 | |
Mikio Hara | c4bb2f7 | 2016-03-30 09:22:35 +0900 | [diff] [blame] | 26 | func setsockopt(fd, level, name int, v unsafe.Pointer, l uint32) error { |
Mikio Hara | fa893e0 | 2014-10-31 09:53:30 +0900 | [diff] [blame] | 27 | if _, errno := socketcall(sysSETSOCKOPT, uintptr(fd), uintptr(level), uintptr(name), uintptr(v), uintptr(l), 0); errno != 0 { |
Mikio Hara | d3003be | 2013-11-05 10:09:42 +0900 | [diff] [blame] | 28 | return error(errno) |
| 29 | } |
| 30 | return nil |
| 31 | } |