mirror of
https://github.com/status-im/consul.git
synced 2025-01-12 14:55:02 +00:00
e9835610f3
This is in its own separate package so that it will be a separate test binary that runs thus isolating the go runtime from other tests and allowing accurate go routine leak checking. This test would ideally use goleak.VerifyTestMain but that will fail 100% of the time due to some architectural things (blocking queries and net/rpc uncancellability). This test is not comprehensive. We should enable/exercise more features and more cluster configurations. However its a start.
78 lines
1.6 KiB
Go
78 lines
1.6 KiB
Go
// Copyright 2012 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.
|
|
|
|
package ipv4
|
|
|
|
import (
|
|
"errors"
|
|
"net"
|
|
"runtime"
|
|
|
|
"golang.org/x/net/internal/socket"
|
|
)
|
|
|
|
var (
|
|
errInvalidConn = errors.New("invalid connection")
|
|
errMissingAddress = errors.New("missing address")
|
|
errNilHeader = errors.New("nil header")
|
|
errHeaderTooShort = errors.New("header too short")
|
|
errExtHeaderTooShort = errors.New("extension header too short")
|
|
errInvalidConnType = errors.New("invalid conn type")
|
|
errNotImplemented = errors.New("not implemented on " + runtime.GOOS + "/" + runtime.GOARCH)
|
|
|
|
// See https://www.freebsd.org/doc/en/books/porters-handbook/versions.html.
|
|
freebsdVersion uint32
|
|
compatFreeBSD32 bool // 386 emulation on amd64
|
|
)
|
|
|
|
// See golang.org/issue/30899.
|
|
func adjustFreeBSD32(m *socket.Message) {
|
|
// FreeBSD 12.0-RELEASE is affected by https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236737
|
|
if 1200086 <= freebsdVersion && freebsdVersion < 1201000 {
|
|
l := (m.NN + 4 - 1) &^ (4 - 1)
|
|
if m.NN < l && l <= len(m.OOB) {
|
|
m.NN = l
|
|
}
|
|
}
|
|
}
|
|
|
|
func boolint(b bool) int {
|
|
if b {
|
|
return 1
|
|
}
|
|
return 0
|
|
}
|
|
|
|
func netAddrToIP4(a net.Addr) net.IP {
|
|
switch v := a.(type) {
|
|
case *net.UDPAddr:
|
|
if ip := v.IP.To4(); ip != nil {
|
|
return ip
|
|
}
|
|
case *net.IPAddr:
|
|
if ip := v.IP.To4(); ip != nil {
|
|
return ip
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func opAddr(a net.Addr) net.Addr {
|
|
switch a.(type) {
|
|
case *net.TCPAddr:
|
|
if a == nil {
|
|
return nil
|
|
}
|
|
case *net.UDPAddr:
|
|
if a == nil {
|
|
return nil
|
|
}
|
|
case *net.IPAddr:
|
|
if a == nil {
|
|
return nil
|
|
}
|
|
}
|
|
return a
|
|
}
|