Documentation ¶
Overview ¶
Package aghnet contains some utilities for networking.
Index ¶
- Constants
- func BroadcastFromIPNet(n *net.IPNet) (dc net.IP)
- func CanBindPort(port int) (can bool, err error)
- func CanBindPrivilegedPorts() (can bool, err error)
- func CheckOtherDHCP(ifaceName string) (ok4, ok6 bool, err4, err6 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 IfaceDNSIPAddrs(iface NetIface, ipv IPVersion, maxAttempts int, backoff time.Duration) (addrs []net.IP, err error)
- func IfaceHasStaticIP(ifaceName string) (has bool, err error)
- func IfaceIPAddrs(iface NetIface, ipv IPVersion) (ips []net.IP, err error)
- func IfaceSetStaticIP(ifaceName string) (err error)
- func SplitHost(hostport string) (host string, err error)
- type EtcHostsContainer
- func (ehc *EtcHostsContainer) Close()
- func (ehc *EtcHostsContainer) Init(hostsFn string)
- func (ehc *EtcHostsContainer) List() (ipToHosts *netutil.IPMap)
- 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 IPVersion
- type IpsetManager
- type NetIface
- type NetInterface
- type SubnetDetector
- type SystemResolvers
Constants ¶
const ErrNoStaticIPInfo errors.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 BroadcastFromIPNet ¶ added in v0.107.0
BroadcastFromIPNet calculates the broadcast IP address for n.
func CanBindPort ¶
CanBindPort checks if we can bind to the given port.
func CanBindPrivilegedPorts ¶ added in v0.107.0
CanBindPrivilegedPorts checks if current process can bind to privileged ports.
func CheckOtherDHCP ¶ added in v0.107.0
CheckOtherDHCP tries to discover another DHCP server in the network.
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 IfaceDNSIPAddrs ¶ added in v0.107.0
func IfaceDNSIPAddrs( iface NetIface, ipv IPVersion, maxAttempts int, backoff time.Duration, ) (addrs []net.IP, err error)
IfaceDNSIPAddrs returns IP addresses of the interface suitable to send to clients as DNS addresses. If err is nil, addrs contains either no addresses or at least two.
It makes up to maxAttempts attempts to get the addresses if there are none, each time using the provided backoff. Sometimes an interface needs a few seconds to really ititialize.
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 IfaceIPAddrs ¶ added in v0.107.0
IfaceIPAddrs returns the interface's IP addresses.
func IfaceSetStaticIP ¶
IfaceSetStaticIP sets static IP address for network interface.
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 *netutil.IPMap)
List returns an IP-to-hostnames table. The type of the values in the map is []string. 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 IPVersion ¶ added in v0.107.0
type IPVersion = int
IPVersion is a documentational alias for int. Use it when the integer means IP version.
type IpsetManager ¶ added in v0.107.0
type IpsetManager interface { Add(host string, ip4s, ip6s []net.IP) (n int, err error) Close() (err error) }
IpsetManager is the ipset manager interface.
TODO(a.garipov): Perhaps generalize this into some kind of a NetFilter type, since ipset is exclusive to Linux?
func NewIpsetManager ¶ added in v0.107.0
func NewIpsetManager(ipsetConf []string) (mgr IpsetManager, err error)
NewIpsetManager returns a new ipset. IPv4 addresses are added to an ipset with an ipv4 family; IPv6 addresses, to an ipv6 ipset. ipset must exist.
The syntax of the ipsetConf is:
DOMAIN[,DOMAIN].../IPSET_NAME[,IPSET_NAME]...
The error is of type *aghos.UnsupportedError if the OS is not supported.
type NetInterface ¶
type NetInterface struct { // Addresses are the network interface addresses. Addresses []net.IP `json:"ip_addresses,omitempty"` // Subnets are the IP networks for this network interface. Subnets []*net.IPNet `json:"-"` Name string `json:"name"` HardwareAddr net.HardwareAddr `json:"hardware_address"` Flags net.Flags `json:"flags"` MTU int `json:"mtu"` }
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.