aboutsummaryrefslogtreecommitdiffstats
path: root/erts/doc/src/inet_cfg.xml
diff options
context:
space:
mode:
Diffstat (limited to 'erts/doc/src/inet_cfg.xml')
-rw-r--r--erts/doc/src/inet_cfg.xml397
1 files changed, 397 insertions, 0 deletions
diff --git a/erts/doc/src/inet_cfg.xml b/erts/doc/src/inet_cfg.xml
new file mode 100644
index 0000000000..18cf65759a
--- /dev/null
+++ b/erts/doc/src/inet_cfg.xml
@@ -0,0 +1,397 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE chapter SYSTEM "chapter.dtd">
+
+<chapter>
+ <header>
+ <copyright>
+ <year>2004</year><year>2009</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ </legalnotice>
+
+ <title>Inet configuration</title>
+ <prepared>Peter Andersson</prepared>
+ <docno></docno>
+ <date>2004-03-02</date>
+ <rev>PA1</rev>
+ <file>inet_cfg.xml</file>
+ </header>
+
+ <section>
+ <title>Introduction</title>
+ <p>This chapter tells you how the Erlang runtime system is configured
+ for IP communication. It also explains how you may configure it
+ for your own particular needs by means of a configuration file.
+ The information here is mainly intended for users with special
+ configuration needs or problems. There should normally be no need
+ for specific settings for Erlang to function properly on a correctly
+ IP configured platform. </p>
+ <p>When Erlang starts up it will read the kernel variable
+ <c><![CDATA[inetrc]]></c> which, if defined, should specify the location and
+ name of a user configuration file. Example:</p>
+ <p><c><![CDATA[% erl -kernel inetrc '"./cfg_files/erl_inetrc"']]></c></p>
+ <p>Note that the usage of a <c><![CDATA[.inetrc]]></c> file, which was
+ supported in earlier Erlang versions, is now obsolete.</p>
+ <p>A second way to specify the configuration file is to set the
+ environment variable <c><![CDATA[ERL_INETRC]]></c> to the full name of the file. Example (bash):</p>
+ <p><c><![CDATA[% export ERL_INETRC=./cfg_files/erl_inetrc]]></c></p>
+ <p>Note that the kernel variable <c><![CDATA[inetrc]]></c> overrides this environment variable.</p>
+ <p>If no user configuration file is specified and Erlang is started
+ in non-distributed or short name distributed mode, Erlang will use
+ default configuration settings and a native lookup method that should
+ work correctly under most circumstances. Erlang
+ will not read any information from system inet configuration files
+ (like /etc/host.conf, /etc/nsswitch.conf, etc) in these modes,
+ except for /etc/resolv.conf and /etc/hosts that is read and monitored
+ for changes on Unix platforms for the internal DNS client
+ <seealso marker="kernel:inet_res">inet_res</seealso>.</p>
+ <p>If Erlang is started in long name distributed mode, it needs to
+ get the domain name from somewhere and will read system inet
+ configuration files for this information. Any hosts and resolver
+ information found then is also recorded, but not
+ used as long as Erlang is configured for native lookups. (The
+ information becomes useful if the lookup method is changed to
+ <c><![CDATA['file']]></c> or <c><![CDATA['dns']]></c>, see below).</p>
+ <p>Native lookup (system calls) is always the default resolver method. This
+ is true for all platforms except VxWorks and OSE Delta where <c><![CDATA['file']]></c>
+ or <c><![CDATA['dns']]></c> is used (in that order of priority).</p>
+ <p>On Windows platforms, Erlang will search the system registry rather than
+ look for configuration files when started in long name distributed mode. </p>
+ </section>
+
+ <section>
+ <title>Configuration Data</title>
+ <p>Erlang records the following data in a local database if found in system
+ inet configuration files (or system registry):</p>
+ <list type="bulleted">
+ <item>Host names and addresses</item>
+ <item>Domain name</item>
+ <item>Nameservers</item>
+ <item>Search domains</item>
+ <item>Lookup method</item>
+ </list>
+ <p>This data may also be specified explicitly in the user
+ configuration file. The configuration file should contain lines
+ of configuration parameters (each terminated with a full
+ stop). Some parameters add data to the configuration (e.g. host
+ and nameserver), others overwrite any previous settings
+ (e.g. domain and lookup). The user configuration file is always
+ examined last in the configuration process, making it possible
+ for the user to override any default values or previously made
+ settings. Call <c><![CDATA[inet:get_rc()]]></c> to view the state of the
+ inet configuration database.</p>
+ <p>These are the valid configuration parameters:</p>
+ <p></p>
+ <taglist>
+ <tag><em><c><![CDATA[{file, Format, File}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[Format = atom()]]></c></p>
+ <p><c><![CDATA[File = string()]]></c></p>
+ <p></p>
+ <p>Specify a system file that Erlang should read configuration
+ data from. <c><![CDATA[Format]]></c> tells the parser how the file should be
+ interpreted: <c><![CDATA[resolv]]></c> (Unix resolv.conf), <c><![CDATA[host_conf_freebsd]]></c>
+ (FreeBSD host.conf), <c><![CDATA[host_conf_bsdos]]></c> (BSDOS host.conf),
+ <c><![CDATA[host_conf_linux]]></c> (Linux host.conf), <c><![CDATA[nsswitch_conf]]></c>
+ (Unix nsswitch.conf) or <c><![CDATA[hosts]]></c> (Unix hosts). <c><![CDATA[File]]></c> should
+ specify the name of the file with full path.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{resolv_conf, File}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[File = string()]]></c></p>
+ <p></p>
+ <p>Specify a system file that Erlang should read resolver
+ configuration from for the internal DNS client
+ <seealso marker="kernel:inet_res">inet_res</seealso>,
+ and monitor for changes, even if it does not exist.
+ The path must be absolute.</p>
+ <p>This may override the configuration parameters
+ <c><![CDATA[nameserver]]></c> and
+ <c><![CDATA[search]]></c> depending on the contents
+ of the specified file. They may also change any time in the future
+ reflecting the file contents.</p>
+ <p>If the file is specified as an empty string "",
+ no file is read nor monitored in the future. This emulates
+ the old behaviour of not configuring the DNS client when
+ the node is started in short name distributed mode.</p>
+ <p>If this parameter is not specified it defaults to
+ <c><![CDATA[/etc/resolv.conf]]></c> unless the environment variable
+ <c><![CDATA[ERL_INET_ETC_DIR]]></c> is set which defines
+ the directory for this file to some maybe other than
+ <c><![CDATA[/etc]]></c>.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{hosts_file, File}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[File = string()]]></c></p>
+ <p></p>
+ <p>Specify a system file that Erlang should read resolver
+ configuration from for the internal hosts file resolver
+ and monitor for changes, even if it does not exist.
+ The path must be absolute.</p>
+ <p>These host entries are searched after all added with
+ <c>{file, hosts, File}</c> above or
+ <c>{host, IP, Aliases}</c> below when the lookup option
+ <c>file</c> is used.</p>
+ <p>If the file is specified as an empty string "",
+ no file is read nor monitored in the future. This emulates
+ the old behaviour of not configuring the DNS client when
+ the node is started in short name distributed mode.</p>
+ <p>If this parameter is not specified it defaults to
+ <c><![CDATA[/etc/hosts]]></c> unless the environment variable
+ <c><![CDATA[ERL_INET_ETC_DIR]]></c> is set which defines
+ the directory for this file to some maybe other than
+ <c><![CDATA[/etc]]></c>.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{registry, Type}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[Type = atom()]]></c></p>
+ <p></p>
+ <p>Specify a system registry that Erlang should read configuration
+ data from. Currently, <c><![CDATA[win32]]></c> is the only valid option.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{host, IP, Aliases}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[IP = tuple()]]></c></p>
+ <p><c><![CDATA[Aliases = [string()]]]></c></p>
+ <p></p>
+ <p>Add host entry to the hosts table.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{domain, Domain}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[Domain = string()]]></c></p>
+ <p></p>
+ <p>Set domain name.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{nameserver, IP [,Port]}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[IP = tuple()]]></c></p>
+ <p><c><![CDATA[Port = integer()]]></c></p>
+ <p></p>
+ <p>Add address (and port, if other than default) of primary
+ nameserver to use for
+ <seealso marker="kernel:inet_res">inet_res</seealso>.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{alt_nameserver, IP [,Port]}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[IP = tuple()]]></c></p>
+ <p><c><![CDATA[Port = integer()]]></c></p>
+ <p></p>
+ <p>Add address (and port, if other than default) of secondary
+ nameserver for
+ <seealso marker="kernel:inet_res">inet_res</seealso>.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{search, Domains}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[Domains = [string()]]]></c></p>
+ <p></p>
+ <p>Add search domains for
+ <seealso marker="kernel:inet_res">inet_res</seealso>.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{lookup, Methods}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[Methods = [atom()]]]></c></p>
+ <p></p>
+ <p>Specify lookup methods and in which order to try them.
+ The valid methods are: <c><![CDATA[native]]></c> (use system calls),
+ <c><![CDATA[file]]></c> (use host data retrieved from
+ system configuration files and/or
+ the user configuration file) or <c><![CDATA[dns]]></c>
+ (use the Erlang DNS client
+ <seealso marker="kernel:inet_res">inet_res</seealso>
+ for nameserver queries).</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{cache_size, Size}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[Size = integer()]]></c></p>
+ <p></p>
+ <p>Set size of resolver cache. Default is 100 DNS records.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{cache_refresh, Time}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[Time = integer()]]></c></p>
+ <p></p>
+ <p>Set how often (in millisec)
+ the resolver cache for
+ <seealso marker="kernel:inet_res">inet_res</seealso>.
+ is refreshed (i.e. expired DNS records are deleted).
+ Default is 1 h.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{timeout, Time}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[Time = integer()]]></c></p>
+ <p></p>
+ <p>Set the time to wait until retry (in millisec) for DNS queries
+ made by
+ <seealso marker="kernel:inet_res">inet_res</seealso>.
+ Default is 2 sec.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{retry, N}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[N = integer()]]></c></p>
+ <p></p>
+ <p>Set the number of DNS queries
+ <seealso marker="kernel:inet_res">inet_res</seealso>
+ will try before giving up.
+ Default is 3.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{inet6, Bool}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[Bool = true | false]]></c></p>
+ <p></p>
+ <p>Tells the DNS client
+ <seealso marker="kernel:inet_res">inet_res</seealso>
+ to look up IPv6 addresses. Default is false.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{usevc, Bool}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[Bool = true | false]]></c></p>
+ <p></p>
+ <p>Tells the DNS client
+ <seealso marker="kernel:inet_res">inet_res</seealso>
+ to use TCP (Virtual Circuit) instead of UDP. Default is false.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{edns, Version}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[Version = false | 0]]></c></p>
+ <p></p>
+ <p>Sets the EDNS version that
+ <seealso marker="kernel:inet_res">inet_res</seealso>
+ will use. The only allowed is zero. Default is false
+ which means to not use EDNS.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{udp_payload_size, Size}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[N = integer()]]></c></p>
+ <p></p>
+ <p>Sets the allowed UDP payload size
+ <seealso marker="kernel:inet_res">inet_res</seealso>
+ will advertise in EDNS queries. Also sets the limit
+ when the DNS query will be deemed too large for UDP
+ forcing a TCP query instead, which is not entirely
+ correct since the advertised UDP payload size of the
+ individual nameserver is what should be used,
+ but this simple strategy will do until a more intelligent
+ (probing, caching) algorithm need be implemented.
+ The default is 1280 which stems from the
+ standard Ethernet MTU size.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{udp, Module}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[Module = atom()]]></c></p>
+ <p></p>
+ <p>Tell Erlang to use other primitive UDP module than inet_udp.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[{tcp, Module}.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p><c><![CDATA[Module = atom()]]></c></p>
+ <p></p>
+ <p>Tell Erlang to use other primitive TCP module than inet_tcp.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[clear_hosts.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p>Clear the hosts table.</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[clear_ns.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p>Clear the list of recorded nameservers (primary and secondary).</p>
+ <p></p>
+ </item>
+ <tag><em><c><![CDATA[clear_search.]]></c></em></tag>
+ <item>
+ <p></p>
+ <p>Clear the list of search domains.</p>
+ <p></p>
+ </item>
+ </taglist>
+ </section>
+
+ <section>
+ <title>User Configuration Example</title>
+ <p>Here follows a user configuration example.</p>
+ <p>Assume a user does not want Erlang to use the native lookup method,
+ but wants Erlang to read all information necessary from start and use
+ that for resolving names and addresses. In case lookup fails, Erlang
+ should request the data from a nameserver (using the Erlang
+ DNS client, set to use EDNS allowing larger responses).
+ The resolver configuration will be updated when
+ its configuration file changes, furthermore, DNS records
+ should never be cached. The user configuration file
+ (in this example named <c><![CDATA[erl_inetrc]]></c>, stored
+ in directory <c><![CDATA[./cfg_files]]></c>) could then look like this
+ (Unix):</p>
+ <pre>
+ %% -- ERLANG INET CONFIGURATION FILE --
+ %% read the hosts file
+ {file, hosts, "/etc/hosts"}.
+ %% add a particular host
+ {host, {134,138,177,105}, ["finwe"]}.
+ %% do not monitor the hosts file
+ {hosts_file, ""}.
+ %% read and monitor nameserver config from here
+ {resolv_conf, "/usr/local/etc/resolv.conf"}.
+ %% enable EDNS
+ {edns,0}.
+ %% disable caching
+ {cache_size, 0}.
+ %% specify lookup method
+ {lookup, [file, dns]}.</pre>
+ <p>And Erlang could, for example, be started like this:</p>
+ <p><c><![CDATA[% erl -sname my_node -kernel inetrc '"./cfg_files/erl_inetrc"']]></c></p>
+ </section>
+</chapter>
+