Skip to content

Commit b60007c

Browse files
committed
unix: add Uvmexp and SysctlUvmexp for NetBSD
NetBSD has both struct uvmexp (used internally) and struct uvmexp_sysctl (preferred for interfacing from user code). Expose the latter as type Uvmexp with the same interface as on OpenBSD. I am not sure if it makes sense to even have a name parameter for SysctlUvmexp, since the only valid value can be "vm.uvmext2". Change-Id: I40a743536c28e3fb7a54253768db35b1629fabfe Reviewed-on: https://go-review.googlesource.com/c/sys/+/460156 Reviewed-by: Dmitri Shuralyov <[email protected]> Reviewed-by: Dmitri Shuralyov <[email protected]> Reviewed-by: Ian Lance Taylor <[email protected]> Reviewed-by: Tobias Klauser <[email protected]> Run-TryBot: Benny Siegert <[email protected]> TryBot-Result: Gopher Robot <[email protected]>
1 parent b751db5 commit b60007c

File tree

7 files changed

+372
-0
lines changed

7 files changed

+372
-0
lines changed

unix/syscall_netbsd.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,20 @@ func direntNamlen(buf []byte) (uint64, bool) {
110110
return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
111111
}
112112

113+
func SysctlUvmexp(name string) (*Uvmexp, error) {
114+
mib, err := sysctlmib(name)
115+
if err != nil {
116+
return nil, err
117+
}
118+
119+
n := uintptr(SizeofUvmexp)
120+
var u Uvmexp
121+
if err := sysctl(mib, (*byte)(unsafe.Pointer(&u)), &n, nil, 0); err != nil {
122+
return nil, err
123+
}
124+
return &u, nil
125+
}
126+
113127
func Pipe(p []int) (err error) {
114128
return Pipe2(p, 0)
115129
}

unix/sysctl_netbsd_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Copyright 2023 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+
5+
package unix
6+
7+
import "testing"
8+
9+
func TestSysctlUvmexp(t *testing.T) {
10+
uvm, err := SysctlUvmexp("vm.uvmexp2")
11+
if err != nil {
12+
t.Fatal(err)
13+
}
14+
t.Logf("%#v", uvm)
15+
}

unix/types_netbsd.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ package unix
4141
#include <sys/un.h>
4242
#include <sys/utsname.h>
4343
#include <sys/wait.h>
44+
#include <uvm/uvm_extern.h>
4445
#include <net/bpf.h>
4546
#include <net/if.h>
4647
#include <net/if_dl.h>
@@ -297,6 +298,12 @@ type Sysctlnode C.struct_sysctlnode
297298

298299
type Utsname C.struct_utsname
299300

301+
// Uvmexp
302+
303+
const SizeofUvmexp = C.sizeof_struct_uvmexp_sysctl
304+
305+
type Uvmexp C.struct_uvmexp_sysctl
306+
300307
// Clockinfo
301308

302309
const SizeofClockinfo = C.sizeof_struct_clockinfo

unix/ztypes_netbsd_386.go

Lines changed: 84 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

unix/ztypes_netbsd_amd64.go

Lines changed: 84 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

unix/ztypes_netbsd_arm.go

Lines changed: 84 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)