net (kernel v8.0.2)
This module provides an API for the network interface.
There is currently no support for Windows.
The content of this file is only valid if the system has been built with 'socket' (esock) support, which is the default.
Link to this section Summary
Types
This type defines all addresses (and flags) associated with the interface.
- all
- All interfaces
- default
- Interfaces with address family
inet
andinet6
- inet | inet6 | packet
- Interfaces with only the specified address family
For each ifaddrs
entry, return either true
to keep the entry or false
to discard the entry.
The family
field can only have the (above) specified values (and not all the values of socket:domain()).
Functions
Network address and service translation.
Returns the name of the current host.
Get interface addresses.
Address-to-name translation in a protocol-independant manner.
Mappings between network interface index and names.
Mappings between network interface names and indexes.
Get network interface names and indexes.
Link to this section Types
-type address_info() :: term().
Specs
address_info() :: #{family := socket:domain(), socktype := socket:type(), protocol := socket:protocol(), address := socket:sockaddr()}.
-type ifaddrs() :: term().
Specs
ifaddrs() :: #{name := string(), flags := [ifaddrs_flag()], addr := socket:sockaddr(), netmask := socket:sockaddr(), broadaddr := socket:sockaddr(), dstaddr := socket:sockaddr()}.
This type defines all addresses (and flags) associated with the interface.
Not all fields of this map has to be present. The flags field can be used to test for some of the fields. For example broadaddr
will only be present if the broadcast
flag is present in flags.
-type ifaddrs_filter() :: term().
Specs
ifaddrs_filter() :: all | default | inet | inet6 | packet | ifaddrs_filter_map() | ifaddrs_filter_fun().
- all
- All interfaces
- default
- Interfaces with address family
inet
andinet6
- inet | inet6 | packet
- Interfaces with only the specified address family
-type ifaddrs_filter_fun() :: term().
Specs
ifaddrs_filter_fun() :: fun((ifaddrs()) -> boolean()).
For each ifaddrs
entry, return either true
to keep the entry or false
to discard the entry.
For example, to get an interface list which only contains non-loopback
inet
interfaces:
net:getifaddrs(fun(#{addr := #{family := inet},
flags := Flags}) ->
not lists:member(loopback, Flags);
(_) ->
false
end).
-type ifaddrs_filter_map() :: term().
Specs
ifaddrs_filter_map() :: #{family := default | inet | inet6 | packet | all, flags := any | [ifaddrs_flag()]}.
The family
field can only have the (above) specified values (and not all the values of socket:domain()).
The use of the flags
field is that any flag provided must exist for the interface.
For example, if family
is set to inet
and flags
to [broadcast, multicast]
only interfaces with address family inet
and the flags broadcast
and multicast
will be listed.
-type ifaddrs_flag() :: term().
Specs
ifaddrs_flag() :: up | broadcast | debug | loopback | pointopoint | notrailers | running | noarp | promisc | master | slave | multicast | portsel | automedia | dynamic.
-type name_info() :: term().
Specs
name_info() :: #{host := string(), service := string()}.
-type name_info_flag() :: term().
Specs
name_info_flag() :: namereqd | dgram | nofqdn | numerichost | numericserv.
-type name_info_flag_ext() :: term().
Specs
name_info_flag_ext() :: idn.
-type name_info_flags() :: term().
Specs
name_info_flags() :: [name_info_flag() | name_info_flag_ext()].
-type network_interface_index() :: term().
Specs
network_interface_index() :: non_neg_integer().
-type network_interface_name() :: term().
Specs
network_interface_name() :: string().
Link to this section Functions
Specs
getaddrinfo(Host) -> {ok, Info} | {error, Reason} when Host :: string(), Info :: [address_info()], Reason :: term().
Network address and service translation.
This function is the inverse of getnameinfo
. It converts host and service to a corresponding socket address.
One of the Host
and Service
may be undefined
but not both.
Specs
getaddrinfo(Host, undefined) -> {ok, Info} | {error, Reason} when Host :: string(), Info :: [address_info()], Reason :: term(); (undefined, Service) -> {ok, Info} | {error, Reason} when Service :: string(), Info :: [address_info()], Reason :: term(); (Host, Service) -> {ok, Info} | {error, Reason} when Host :: string(), Service :: string(), Info :: [address_info()], Reason :: term().
Specs
gethostname() -> {ok, HostName} | {error, Reason} when HostName :: string(), Reason :: term().
Returns the name of the current host.
Specs
getifaddrs() -> {ok, IfAddrs} | {error, Reason} when IfAddrs :: [ifaddrs()], Reason :: term().
Get interface addresses.
This function is used to get the machines interface addresses, possibly filtered according to Filter
.
By default, a filter with the content: #{family => default, flags => any}
is used. This will return all interfaces with adresses in the inet
and inet6
families.
Specs
getifaddrs(Filter) -> {ok, IfAddrs} | {error, Reason} when Filter :: ifaddrs_filter(), IfAddrs :: [ifaddrs()], Reason :: term(); (Namespace) -> {ok, IfAddrs} | {error, Reason} when Namespace :: file:filename_all(), IfAddrs :: [ifaddrs()], Reason :: term().
Specs
getifaddrs(Filter, Namespace) -> {ok, IfAddrs} | {error, Reason} when Filter :: ifaddrs_filter(), Namespace :: file:filename_all(), IfAddrs :: [ifaddrs()], Reason :: term().
Specs
getnameinfo(SockAddr) -> {ok, Info} | {error, Reason} when SockAddr :: socket:sockaddr(), Info :: name_info(), Reason :: term().
Address-to-name translation in a protocol-independant manner.
This function is the inverse of getaddrinfo
. It converts a socket address to a corresponding host and service.
Specs
getnameinfo(SockAddr, Flags) -> {ok, Info} | {error, Reason} when SockAddr :: socket:sockaddr(), Flags :: name_info_flags() | undefined, Info :: name_info(), Reason :: term().
Specs
if_index2name(Idx) -> {ok, Name} | {error, Reason} when Idx :: network_interface_index(), Name :: network_interface_name(), Reason :: term().
Mappings between network interface index and names.
Specs
if_name2index(Name) -> {ok, Idx} | {error, Reason} when Name :: network_interface_name(), Idx :: network_interface_index(), Reason :: term().
Mappings between network interface names and indexes.
Specs
if_names() -> Names | {error, Reason} when Names :: [{Idx, If}], Idx :: network_interface_index(), If :: network_interface_name(), Reason :: term().
Get network interface names and indexes.