unix: export Ifreq and add IoctlIfreq function

This CL expands upon CL 340369 by exporting the Ifreq type along with methods
for setting and getting data to/from the ifreq union in a type-safe way.
ifreqData remains unexported as we can keep adding helpers similar to the
IoctlGetEthtoolDrvinfo to expose those operations in a less error-prone way.

A test is also added to verify interface index data using IoctlIfreq against
the modern rtnetlink API used by the standard library.

Change-Id: Ic6980cbcd3792cc341cd614061cce32fa1f851e7
Reviewed-on: https://go-review.googlesource.com/c/sys/+/340370
Trust: Matt Layher <mdlayher@gmail.com>
Run-TryBot: Matt Layher <mdlayher@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Matt Layher
2021-08-17 19:03:40 +00:00
parent 7d9622a276
commit bfb29a6856
5 changed files with 271 additions and 22 deletions
-8
View File
@@ -14,14 +14,6 @@ import (
"unsafe"
)
func Test_ifreqSize(t *testing.T) {
// Ensure ifreq (generated) and ifreqData (hand-written due to
// unsafe.Pointer field) are identical in size.
if want, got := unsafe.Sizeof(ifreq{}), unsafe.Sizeof(ifreqData{}); want != got {
t.Fatalf("unexpected ifreq size: got: %d, want: %d", got, want)
}
}
func makeProto(proto int) *int {
return &proto
}