mirror of
https://github.com/golang/go
synced 2024-11-18 03:04:45 -07:00
vendor: update golang_org/x/net/lif package
Update the lif package to rev 7bf7a75. Introduce the following changes: - 7bf7a75 lif: use of nativeEndian to make API endian agnostic - adc6ba9 lif: drop support for go1.5 Updates #19967 Change-Id: Iaba893b5ee9af4c54bf5ba4244ce5752ce9f6ad3 Reviewed-on: https://go-review.googlesource.com/40831 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
619e37bdcc
commit
157a230413
4
src/vendor/golang_org/x/net/lif/address.go
vendored
4
src/vendor/golang_org/x/net/lif/address.go
vendored
@ -67,7 +67,7 @@ func Addrs(af int, name string) ([]Addr, error) {
|
||||
continue
|
||||
}
|
||||
sa := (*sockaddrStorage)(unsafe.Pointer(&lifr.Lifru[0]))
|
||||
l := int(littleEndian.Uint32(lifr.Lifru1[:4]))
|
||||
l := int(nativeEndian.Uint32(lifr.Lifru1[:4]))
|
||||
if l == 0 {
|
||||
continue
|
||||
}
|
||||
@ -77,7 +77,7 @@ func Addrs(af int, name string) ([]Addr, error) {
|
||||
copy(a.IP[:], lifr.Lifru[4:8])
|
||||
as = append(as, a)
|
||||
case sysAF_INET6:
|
||||
a := &Inet6Addr{PrefixLen: l, ZoneID: int(littleEndian.Uint32(lifr.Lifru[24:28]))}
|
||||
a := &Inet6Addr{PrefixLen: l, ZoneID: int(nativeEndian.Uint32(lifr.Lifru[24:28]))}
|
||||
copy(a.IP[:], lifr.Lifru[8:24])
|
||||
as = append(as, a)
|
||||
}
|
||||
|
49
src/vendor/golang_org/x/net/lif/binary.go
vendored
49
src/vendor/golang_org/x/net/lif/binary.go
vendored
@ -12,7 +12,10 @@ package lif
|
||||
// library. Therefore the package set used in the package must be the
|
||||
// same as net package.
|
||||
|
||||
var littleEndian binaryLittleEndian
|
||||
var (
|
||||
littleEndian binaryLittleEndian
|
||||
bigEndian binaryBigEndian
|
||||
)
|
||||
|
||||
type binaryByteOrder interface {
|
||||
Uint16([]byte) uint16
|
||||
@ -66,3 +69,47 @@ func (binaryLittleEndian) PutUint64(b []byte, v uint64) {
|
||||
b[6] = byte(v >> 48)
|
||||
b[7] = byte(v >> 56)
|
||||
}
|
||||
|
||||
type binaryBigEndian struct{}
|
||||
|
||||
func (binaryBigEndian) Uint16(b []byte) uint16 {
|
||||
_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
|
||||
return uint16(b[1]) | uint16(b[0])<<8
|
||||
}
|
||||
|
||||
func (binaryBigEndian) PutUint16(b []byte, v uint16) {
|
||||
_ = b[1] // early bounds check to guarantee safety of writes below
|
||||
b[0] = byte(v >> 8)
|
||||
b[1] = byte(v)
|
||||
}
|
||||
|
||||
func (binaryBigEndian) Uint32(b []byte) uint32 {
|
||||
_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808
|
||||
return uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24
|
||||
}
|
||||
|
||||
func (binaryBigEndian) PutUint32(b []byte, v uint32) {
|
||||
_ = b[3] // early bounds check to guarantee safety of writes below
|
||||
b[0] = byte(v >> 24)
|
||||
b[1] = byte(v >> 16)
|
||||
b[2] = byte(v >> 8)
|
||||
b[3] = byte(v)
|
||||
}
|
||||
|
||||
func (binaryBigEndian) Uint64(b []byte) uint64 {
|
||||
_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
|
||||
return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |
|
||||
uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56
|
||||
}
|
||||
|
||||
func (binaryBigEndian) PutUint64(b []byte, v uint64) {
|
||||
_ = b[7] // early bounds check to guarantee safety of writes below
|
||||
b[0] = byte(v >> 56)
|
||||
b[1] = byte(v >> 48)
|
||||
b[2] = byte(v >> 40)
|
||||
b[3] = byte(v >> 32)
|
||||
b[4] = byte(v >> 24)
|
||||
b[5] = byte(v >> 16)
|
||||
b[6] = byte(v >> 8)
|
||||
b[7] = byte(v)
|
||||
}
|
||||
|
12
src/vendor/golang_org/x/net/lif/link.go
vendored
12
src/vendor/golang_org/x/net/lif/link.go
vendored
@ -31,15 +31,15 @@ func (ll *Link) fetch(s uintptr) {
|
||||
}
|
||||
ioc := int64(sysSIOCGLIFINDEX)
|
||||
if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil {
|
||||
ll.Index = int(littleEndian.Uint32(lifr.Lifru[:4]))
|
||||
ll.Index = int(nativeEndian.Uint32(lifr.Lifru[:4]))
|
||||
}
|
||||
ioc = int64(sysSIOCGLIFFLAGS)
|
||||
if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil {
|
||||
ll.Flags = int(littleEndian.Uint64(lifr.Lifru[:8]))
|
||||
ll.Flags = int(nativeEndian.Uint64(lifr.Lifru[:8]))
|
||||
}
|
||||
ioc = int64(sysSIOCGLIFMTU)
|
||||
if err := ioctl(s, uintptr(ioc), unsafe.Pointer(&lifr)); err == nil {
|
||||
ll.MTU = int(littleEndian.Uint32(lifr.Lifru[:4]))
|
||||
ll.MTU = int(nativeEndian.Uint32(lifr.Lifru[:4]))
|
||||
}
|
||||
switch ll.Type {
|
||||
case sysIFT_IPV4, sysIFT_IPV6, sysIFT_6TO4:
|
||||
@ -84,7 +84,11 @@ func links(eps []endpoint, name string) ([]Link, error) {
|
||||
b := make([]byte, lifn.Count*sizeofLifreq)
|
||||
lifc.Family = uint16(ep.af)
|
||||
lifc.Len = lifn.Count * sizeofLifreq
|
||||
littleEndian.PutUint64(lifc.Lifcu[:], uint64(uintptr(unsafe.Pointer(&b[0]))))
|
||||
if len(lifc.Lifcu) == 8 {
|
||||
nativeEndian.PutUint64(lifc.Lifcu[:], uint64(uintptr(unsafe.Pointer(&b[0]))))
|
||||
} else {
|
||||
nativeEndian.PutUint32(lifc.Lifcu[:], uint32(uintptr(unsafe.Pointer(&b[0]))))
|
||||
}
|
||||
ioc = int64(sysSIOCGLIFCONF)
|
||||
if err := ioctl(ep.s, uintptr(ioc), unsafe.Pointer(&lifc)); err != nil {
|
||||
continue
|
||||
|
21
src/vendor/golang_org/x/net/lif/sys.go
vendored
Normal file
21
src/vendor/golang_org/x/net/lif/sys.go
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright 2017 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.
|
||||
|
||||
// +build solaris
|
||||
|
||||
package lif
|
||||
|
||||
import "unsafe"
|
||||
|
||||
var nativeEndian binaryByteOrder
|
||||
|
||||
func init() {
|
||||
i := uint32(1)
|
||||
b := (*[4]byte)(unsafe.Pointer(&i))
|
||||
if b[0] == 1 {
|
||||
nativeEndian = littleEndian
|
||||
} else {
|
||||
nativeEndian = bigEndian
|
||||
}
|
||||
}
|
@ -6,6 +6,3 @@
|
||||
|
||||
TEXT ·sysvicall6(SB),NOSPLIT,$0-88
|
||||
JMP syscall·sysvicall6(SB)
|
||||
|
||||
TEXT ·keepAlive(SB),NOSPLIT,$0
|
||||
RET
|
||||
|
5
src/vendor/golang_org/x/net/lif/syscall.go
vendored
5
src/vendor/golang_org/x/net/lif/syscall.go
vendored
@ -19,13 +19,8 @@ var procIoctl uintptr
|
||||
|
||||
func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno)
|
||||
|
||||
// TODO: replace with runtime.KeepAlive when available
|
||||
//go:noescape
|
||||
func keepAlive(p unsafe.Pointer)
|
||||
|
||||
func ioctl(s, ioc uintptr, arg unsafe.Pointer) error {
|
||||
_, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procIoctl)), 3, s, ioc, uintptr(arg), 0, 0, 0)
|
||||
keepAlive(arg)
|
||||
if errno != 0 {
|
||||
return error(errno)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user