luet/vendor/golang.org/x/sys/unix/ifreq_linux.go
Itxaka 4adc0dc9b9
Use goreleaser to build and release (#244)
Instead of using gox on one side and an action to release, we can merge
them together with goreleaser which will build for extra targets (arm,
mips if needed in the future) and it also takes care of creating
checksums, a source archive, and a changelog and creating a release with
all the artifacts.

All binaries should respect the old naming convention, so any scripts
out there should still work.

Signed-off-by: Itxaka <igarcia@suse.com>
2021-08-11 08:30:55 +02:00

49 lines
1.3 KiB
Go

// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//go:build linux
// +build linux
package unix
import "unsafe"
// Helpers for dealing with ifreq since it contains a union and thus requires a
// lot of unsafe.Pointer casts to use properly.
// newIfreq creates an ifreq with the input network interface name after
// validating the name does not exceed IFNAMSIZ-1 (trailing NULL required)
// bytes.
func newIfreq(name string) (*ifreq, error) {
// Leave room for terminating NULL byte.
if len(name) >= IFNAMSIZ {
return nil, EINVAL
}
var ifr ifreq
copy(ifr.Ifrn[:], name)
return &ifr, nil
}
// An ifreqData is an ifreq but with a typed unsafe.Pointer field for data in
// the union. This is required in order to comply with the unsafe.Pointer rules
// since the "pointer-ness" of data would not be preserved if it were cast into
// the byte array of a raw ifreq.
type ifreqData struct {
name [IFNAMSIZ]byte
data unsafe.Pointer
// Pad to the same size as ifreq.
_ [len(ifreq{}.Ifru) - SizeofPtr]byte
}
// SetData produces an ifreqData with the pointer p set for ioctls which require
// arbitrary pointer data.
func (ifr ifreq) SetData(p unsafe.Pointer) ifreqData {
return ifreqData{
name: ifr.Ifrn,
data: p,
}
}