pkg netstate, func AddressFromAddr(net.Addr) (Address, error)
pkg netstate, func AddressFromIP(net.IP) (Address, error)
pkg netstate, func AsIP(net.Addr) net.IP
pkg netstate, func AsIPAddr(net.Addr) *net.IPAddr
pkg netstate, func ConvertToAddresses([]net.Addr) AddrList
pkg netstate, func FindAdded(AddrList, AddrList) AddrList
pkg netstate, func FindRemoved(AddrList, AddrList) AddrList
pkg netstate, func GetAccessibleIPs() (AddrList, error)
pkg netstate, func GetAllAddresses() (AddrList, error)
pkg netstate, func GetAllInterfaces() (InterfaceList, error)
pkg netstate, func GetNetState() ([]NetworkInterface, RouteTable, error)
pkg netstate, func InvalidateCache()
pkg netstate, func IsAccessibleIP(Address) bool
pkg netstate, func IsDefaultRoute(*netconfig.IPRoute) bool
pkg netstate, func IsGloballyRoutableIP(net.IP) bool
pkg netstate, func IsIPProtocol(string) bool
pkg netstate, func IsLoopbackIP(Address) bool
pkg netstate, func IsOnDefaultRoute(Address) bool
pkg netstate, func IsPublicUnicastIP(Address) bool
pkg netstate, func IsPublicUnicastIPv4(Address) bool
pkg netstate, func IsPublicUnicastIPv6(Address) bool
pkg netstate, func IsUnicastIP(Address) bool
pkg netstate, func IsUnicastIPv4(Address) bool
pkg netstate, func IsUnicastIPv6(Address) bool
pkg netstate, func IsUnspecifiedIP(Address) bool
pkg netstate, func NewNetAddr(string, string) net.Addr
pkg netstate, func PossibleAddresses(string, string, AddressChooser) ([]net.Addr, bool, error)
pkg netstate, func SameMachine(net.Addr) (bool, error)
pkg netstate, func WithIPHost(Address) Address
pkg netstate, func WithIPHostAndPort(Address, string) Address
pkg netstate, method (AddrList) AsNetAddrs() []net.Addr
pkg netstate, method (AddrList) Filter(AddressPredicate) AddrList
pkg netstate, method (AddrList) Map(Mapper) AddrList
pkg netstate, method (AddrList) String() string
pkg netstate, method (AddressChooserFunc) ChooseAddress(string, []net.Addr) ([]net.Addr, error)
pkg netstate, method (IPRouteList) Filter(RoutePredicate) IPRouteList
pkg netstate, method (IPRouteList) String() string
pkg netstate, method (InterfaceList) String() string
pkg netstate, type AddrList []Address
pkg netstate, type Address interface { DebugString, Interface, Network, String }
pkg netstate, type Address interface, DebugString() string
pkg netstate, type Address interface, Interface() NetworkInterface
pkg netstate, type Address interface, Network() string
pkg netstate, type Address interface, String() string
pkg netstate, type AddressChooser interface { ChooseAddress }
pkg netstate, type AddressChooser interface, ChooseAddress(string, []net.Addr) ([]net.Addr, error)
pkg netstate, type AddressChooserFunc func(protocol string, candidates []net.Addr) ([]net.Addr, error)
pkg netstate, type AddressPredicate func(a Address) bool
pkg netstate, type IPNetworkInterface interface { Addrs, Flags, HardwareAddr, IPRoutes, Index, MTU, Name, Networks, String }
pkg netstate, type IPNetworkInterface interface, Addrs() []net.Addr
pkg netstate, type IPNetworkInterface interface, Flags() net.Flags
pkg netstate, type IPNetworkInterface interface, HardwareAddr() net.HardwareAddr
pkg netstate, type IPNetworkInterface interface, IPRoutes() IPRouteList
pkg netstate, type IPNetworkInterface interface, Index() int
pkg netstate, type IPNetworkInterface interface, MTU() int
pkg netstate, type IPNetworkInterface interface, Name() string
pkg netstate, type IPNetworkInterface interface, Networks() []net.Addr
pkg netstate, type IPNetworkInterface interface, String() string
pkg netstate, type IPRouteList []*netconfig.IPRoute
pkg netstate, type InterfaceList []NetworkInterface
pkg netstate, type Mapper func(a Address) Address
pkg netstate, type NetworkInterface interface { Addrs, Flags, HardwareAddr, Index, MTU, Name, Networks, String }
pkg netstate, type NetworkInterface interface, Addrs() []net.Addr
pkg netstate, type NetworkInterface interface, Flags() net.Flags
pkg netstate, type NetworkInterface interface, HardwareAddr() net.HardwareAddr
pkg netstate, type NetworkInterface interface, Index() int
pkg netstate, type NetworkInterface interface, MTU() int
pkg netstate, type NetworkInterface interface, Name() string
pkg netstate, type NetworkInterface interface, Networks() []net.Addr
pkg netstate, type NetworkInterface interface, String() string
pkg netstate, type RoutePredicate func(r *netconfig.IPRoute) bool
pkg netstate, type RouteTable map[int]IPRouteList
pkg netstate, var ErrFailedToFindInterface error
pkg netstate, var ErrFailedToParseIPAddr error
pkg netstate, var ErrNotAnIPProtocol error
pkg netstate, var ErrUnspecifiedIPAddr error
pkg netstate, var ErrUnsupportedProtocol error
pkg netstate, var LoopbackIPv4AddressChooser AddressChooserFunc
