Documentation ¶
Overview ¶
Package aghnet contains some utilities for networking.
Index ¶
- Constants
- func CanBindPort(port int) (can bool, err error)
- func CheckPacketPortAvailable(host net.IP, port int) error
- func CheckPortAvailable(host net.IP, port int) error
- func CollectAllIfacesAddrs() (addrs []string, err error)
- func ErrorIsAddrInUse(err error) bool
- func GatewayIP(ifaceName string) net.IP
- func GenerateHostname(ip net.IP) (hostname string)
- func GetInterfaceByIP(ip net.IP) string
- func GetSubnet(ifaceName string) *net.IPNet
- func IfaceHasStaticIP(ifaceName string) (has bool, err error)
- func IfaceSetStaticIP(ifaceName string) (err error)
- func IsValidHostOuterRune(r rune) (ok bool)
- func ReverseAddr(ip net.IP) (arpa string)
- func SplitHost(hostport string) (host string, err error)
- func UnreverseAddr(arpa string) (unreversed net.IP)
- func ValidateDomainName(name string) (err error)
- func ValidateDomainNameLabel(label string) (err error)
- func ValidateHardwareAddress(hwa net.HardwareAddr) (err error)
- type EtcHostsContainer
- func (ehc *EtcHostsContainer) Close()
- func (ehc *EtcHostsContainer) Init(hostsFn string)
- func (ehc *EtcHostsContainer) List() (ipToHosts map[string][]string)
- func (ehc *EtcHostsContainer) Process(host string, qtype uint16) []net.IP
- func (ehc *EtcHostsContainer) ProcessReverse(addr string, qtype uint16) (hosts []string)
- func (ehc *EtcHostsContainer) SetOnChanged(onChanged onChangedT)
- func (ehc *EtcHostsContainer) Start()
- type HostGenFunc
- type NetInterface
- type SubnetDetector
- type SystemResolvers
Constants ¶
const ErrNoStaticIPInfo agherr.Error = "no information about static ip"
ErrNoStaticIPInfo is returned by IfaceHasStaticIP when no information about the IP being static is available.
Variables ¶
This section is empty.
Functions ¶
func CanBindPort ¶
CanBindPort checks if we can bind to the given port.
func CheckPacketPortAvailable ¶
CheckPacketPortAvailable - check if UDP port is available
func CheckPortAvailable ¶
CheckPortAvailable - check if TCP port is available
func CollectAllIfacesAddrs ¶
CollectAllIfacesAddrs returns the slice of all network interfaces IP addresses without port number.
func ErrorIsAddrInUse ¶
ErrorIsAddrInUse - check if error is "address already in use"
func GenerateHostname ¶
GenerateHostname generates the hostname from ip. In case of using IPv4 the result should be like:
192-168-10-1
In case of using IPv6, the result is like:
ff80-f076-0000-0000-0000-0000-0000-0010
func GetInterfaceByIP ¶
GetInterfaceByIP returns the name of interface containing provided ip.
func GetSubnet ¶
GetSubnet returns pointer to net.IPNet for the specified interface or nil if the search fails.
func IfaceHasStaticIP ¶
IfaceHasStaticIP checks if interface is configured to have static IP address. If it can't give a definitive answer, it returns false and an error for which errors.Is(err, ErrNoStaticIPInfo) is true.
func IfaceSetStaticIP ¶
IfaceSetStaticIP sets static IP address for network interface.
func IsValidHostOuterRune ¶
IsValidHostOuterRune returns true if r is a valid initial or final rune for a hostname label.
func ReverseAddr ¶
ReverseAddr returns the ARPA hostname of the ip suitable for reverse DNS (PTR) record lookups. This is the modified version of ReverseAddr from github.com/miekg/dns package with no error among returned values.
func SplitHost ¶
SplitHost is a wrapper for net.SplitHostPort for the cases when the hostport does not necessarily contain a port.
func UnreverseAddr ¶
UnreverseAddr tries to convert reversed ARPA to a normal IP address.
func ValidateDomainName ¶
ValidateDomainName validates the domain name in accordance to RFC 952, RFC 1035, and with RFC-1123's inclusion of digits at the start of the host. It doesn't validate against two or more hyphens to allow punycode and internationalized domains.
TODO(a.garipov): After making sure that this works correctly, port this into module golibs.
func ValidateDomainNameLabel ¶
ValidateDomainNameLabel returns an error if label is not a valid label of a domain name.
func ValidateHardwareAddress ¶
func ValidateHardwareAddress(hwa net.HardwareAddr) (err error)
ValidateHardwareAddress returns an error if hwa is not a valid EUI-48, EUI-64, or 20-octet InfiniBand link-layer address.
Types ¶
type EtcHostsContainer ¶
type EtcHostsContainer struct {
// contains filtered or unexported fields
}
EtcHostsContainer - automatic DNS records
TODO(e.burkov): Move the logic under interface. Refactor. Probably remove the resolving logic.
func (*EtcHostsContainer) Init ¶
func (ehc *EtcHostsContainer) Init(hostsFn string)
Init - initialize hostsFn: Override default name for the hosts-file (optional)
func (*EtcHostsContainer) List ¶
func (ehc *EtcHostsContainer) List() (ipToHosts map[string][]string)
List returns an IP-to-hostnames table. It is safe for concurrent use.
func (*EtcHostsContainer) Process ¶
func (ehc *EtcHostsContainer) Process(host string, qtype uint16) []net.IP
Process returns the list of IP addresses for the hostname or nil if nothing found.
func (*EtcHostsContainer) ProcessReverse ¶
func (ehc *EtcHostsContainer) ProcessReverse(addr string, qtype uint16) (hosts []string)
ProcessReverse processes a PTR request. It returns nil if nothing is found.
func (*EtcHostsContainer) SetOnChanged ¶
func (ehc *EtcHostsContainer) SetOnChanged(onChanged onChangedT)
SetOnChanged - set callback function that will be called when the data is changed
type HostGenFunc ¶
type HostGenFunc func() (host string)
HostGenFunc is the signature for functions generating fake hostnames. The implementation must be safe for concurrent use.
type NetInterface ¶
type NetInterface struct { MTU int `json:"mtu"` Name string `json:"name"` HardwareAddr net.HardwareAddr `json:"hardware_address"` Flags net.Flags `json:"flags"` // Array with the network interface addresses. Addresses []net.IP `json:"ip_addresses,omitempty"` // Array with IP networks for this network interface. Subnets []*net.IPNet `json:"-"` }
NetInterface represents an entry of network interfaces map.
func GetValidNetInterfacesForWeb ¶
func GetValidNetInterfacesForWeb() ([]*NetInterface, error)
GetValidNetInterfacesForWeb returns interfaces that are eligible for DNS and WEB only we do not return link-local addresses here
func (*NetInterface) MarshalJSON ¶
func (iface *NetInterface) MarshalJSON() ([]byte, error)
MarshalJSON implements the json.Marshaler interface for *NetInterface.
type SubnetDetector ¶
type SubnetDetector struct {
// contains filtered or unexported fields
}
SubnetDetector describes IP address properties.
func NewSubnetDetector ¶
func NewSubnetDetector() (snd *SubnetDetector, err error)
NewSubnetDetector returns a new IP detector.
func (*SubnetDetector) IsLocallyServedNetwork ¶
func (snd *SubnetDetector) IsLocallyServedNetwork(ip net.IP) (is bool)
IsLocallyServedNetwork returns true if IP address is contained by any of locally-served IP address registries. It's safe for concurrent use.
func (*SubnetDetector) IsSpecialNetwork ¶
func (snd *SubnetDetector) IsSpecialNetwork(ip net.IP) (is bool)
IsSpecialNetwork returns true if IP address is contained by any of special-purpose IP address registries. It's safe for concurrent use.
type SystemResolvers ¶
type SystemResolvers interface { // Get returns the slice of local resolvers' addresses. // It should be safe for concurrent use. Get() (rs []string) // contains filtered or unexported methods }
SystemResolvers helps to work with local resolvers' addresses provided by OS.
func NewSystemResolvers ¶
func NewSystemResolvers( refreshIvl time.Duration, hostGenFunc HostGenFunc, ) (sr SystemResolvers, err error)
NewSystemResolvers returns a SystemResolvers with the cache refresh rate defined by refreshIvl. It disables auto-resfreshing if refreshIvl is 0. If nil is passed for hostGenFunc, the default generator will be used.