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 and inet6
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

Link to this type

-type address_info() :: term().

Specs

address_info() ::
    #{family := socket:domain(),
      socktype := socket:type(),
      protocol := socket:protocol(),
      address := socket:sockaddr()}.
Link to this type

-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.

Link to this type

-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 and inet6
inet | inet6 | packet
Interfaces with only the specified address family
Link to this type

-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).
	
Link to this type

-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.

Link to this type

-type ifaddrs_flag() :: term().

Specs

ifaddrs_flag() ::
    up | broadcast | debug | loopback | pointopoint | notrailers | running | noarp | promisc |
    master | slave | multicast | portsel | automedia | dynamic.
Link to this type

-type name_info() :: term().

Specs

name_info() :: #{host := string(), service := string()}.
Link to this type

-type name_info_flag() :: term().

Specs

name_info_flag() :: namereqd | dgram | nofqdn | numerichost | numericserv.
Link to this type

-type name_info_flag_ext() :: term().

Specs

name_info_flag_ext() :: idn.
Link to this type

-type name_info_flags() :: term().

Specs

name_info_flags() :: [name_info_flag() | name_info_flag_ext()].
Link to this type

-type network_interface_index() :: term().

Specs

network_interface_index() :: non_neg_integer().
Link to this type

-type network_interface_name() :: term().

Specs

network_interface_name() :: string().

Link to this section Functions

Link to this function

getaddrinfo/1

(since OTP 22.0)

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.

Link to this function

getaddrinfo/2

(since OTP 22.0)

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().
Link to this function

gethostname/0

(since OTP 22.0)

Specs

gethostname() -> {ok, HostName} | {error, Reason} when HostName :: string(), Reason :: term().

Returns the name of the current host.

Link to this function

getifaddrs/0

(since OTP 22.3)

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.

Link to this function

getifaddrs/1

(since OTP 22.3)

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().
Link to this function

getifaddrs/2

(since OTP 22.3)

Specs

getifaddrs(Filter, Namespace) -> {ok, IfAddrs} | {error, Reason}
              when
                  Filter :: ifaddrs_filter(),
                  Namespace :: file:filename_all(),
                  IfAddrs :: [ifaddrs()],
                  Reason :: term().
Link to this function

getnameinfo/1

(since OTP 22.0)

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.

Link to this function

getnameinfo/2

(since OTP 22.0)

Specs

getnameinfo(SockAddr, Flags) -> {ok, Info} | {error, Reason}
               when
                   SockAddr :: socket:sockaddr(),
                   Flags :: name_info_flags() | undefined,
                   Info :: name_info(),
                   Reason :: term().
Link to this function

if_index2name/1

(since OTP 22.0)

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.

Link to this function

if_name2index/1

(since OTP 22.0)

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.

Link to this function

if_names/0

(since OTP 22.0)

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.