PATHALIAS(1) UNIX Programmer's Manual PATHALIAS(1) NAME pathalias, makedb, arpatxt - mail routing tools SYNOPSIS pathalias [ -ivcDf ] [ -t _l_i_n_k ] [ -l _h_o_s_t ] [ -a _h_o_s_t ] [ -d _l_i_n_k ] [ _f_i_l_e_s ... ] makedb [ -a ] [ -o _d_b_m_f_i_l_e ] [ _f_i_l_e_s ... ] arpatxt [ -@fi ] [ -g _g_a_t_e_w_a_y ] [ -p _p_r_i_v_a_t_e_f_i_l_e ] [ -d _d_i_r_e_c_t_o_r_y ] [ _f_i_l_e_s ... ] DESCRIPTION _P_a_t_h_a_l_i_a_s computes the shortest paths and corresponding routes from one host (computer system) to all other known, reachable hosts. _P_a_t_h_a_l_i_a_s reads host-to-host connectivity information on standard input or in the named _f_i_l_e_s, and writes a list of host-route pairs on the standard output. Here are the _p_a_t_h_a_l_i_a_s options: -i Ignore case: map all host names to lower case. By default, case is significant. -c Print costs: print the path cost before each host- route pair. -v Verbose: report some statistics on the standard error output. -D Terminal domains: domain members are terminal. -f First hop cost: the printed cost is the cost to the first relay in a path, instead of the cost of the path itself; implies (and overrides) the -c option. -l _h_o_s_t Set local host name to _h_o_s_t. By default, _p_a_t_h_a_l_i_a_s discovers the local host name in a system-dependent way. -a _h_o_s_t Avoid _h_o_s_t; penalize all links out of _h_o_s_t by a small amount. The -a option is cumulative. -d _a_r_g Declare a dead link, host, or network. If _a_r_g is of the form ``host-1!host-2,'' the link from host-1 to host-2 is treated as an extremely high cost (_i._e., DEAD) link. If _a_r_g is a single host name, that host is treated as dead and is used as a relay host of last resort on any path. If _a_r_g is a network name, the Printed 11/24/99 10/4/87 1 PATHALIAS(1) UNIX Programmer's Manual PATHALIAS(1) network requires a gateway. -t _a_r_g Trace input for link, host or network on the standard error output. The form of _a_r_g is as above. _M_a_k_e_d_b takes _p_a_t_h_a_l_i_a_s output and creates or appends to a _d_b_m(3) database. Here are the _m_a_k_e_d_b options: -a Append to an existing database; by default, _m_a_k_e_d_b truncates the database. -o _d_b_m_f_i_l_e Identify the output file base name. _A_r_p_a_t_x_t converts the Internet hosts table _h_o_s_t_s._t_x_t into _p_a_t_h_a_l_i_a_s input. Here are the _a_r_p_a_t_x_t options: -@ Generate _p_a_t_h_a_l_i_a_s input that specifies `@' style addressing. The default is to produce _p_a_t_h_a_l_i_a_s input that specifies `!' style addressing. -f ``Filter mode'' - write output on stdout. Normally, _a_r_p_a_t_x_t writes the description of each domain into a separate file. -i Map output to lower case. -g _a_r_g Declare a gateway to the Internet or one of its sub- domains. If _a_r_g contains one or more dots, the left- hand side component that contains no dots is declared a gateway to the domain to the right of the dot. Oth- erwise, _a_r_g is declared a gateway to the Internet as a whole. -p _p_r_i_v_a_t_e_f_i_l_e _P_r_i_v_a_t_e_f_i_l_e contains a list of host names that con- flict with other names. -d _d_i_r_e_c_t_o_r_y Write output files in _d_i_r_e_c_t_o_r_y. _P_a_t_h_a_l_i_a_s Input Format A line beginning with white space continues the preceding line. Anything following `#' on an input line is ignored. Printed 11/24/99 10/4/87 2 PATHALIAS(1) UNIX Programmer's Manual PATHALIAS(1) A list of host-to-host connections consists of a ``from'' host in column 1, followed by white space, followed by a comma-separated list of ``to' hosts, called _l_i_n_k_s. A link may be preceded or followed by a network character to use in the route. Valid network characters are `!' (default), `@', `:', and `%'. A link (and network character, if present) may be followed by a ``cost'' enclosed in parentheses. Costs may be arbitrary arithmetic expressions involving numbers, parentheses, `+', `-', `*', and `/'. The following symbolic costs are recognized: LOCAL 25 (local-area network connection) DEDICATED 95 (high speed dedicated link) DIRECT 200 (toll-free call) DEMAND 300 (long-distance call) HOURLY 500 (hourly poll) EVENING 1800 (time restricted call) DAILY 5000 (daily poll, also called POLLED) WEEKLY 30000 (irregular poll) In addition, DEAD is a very large number (effectively infin- ite), HIGH and LOW are -5 and +5 respectively, for baud-rate or quality bonuses/penalties, and FAST is -80, for adjusting costs of links that use high-speed (9.6 Kbaud or more) modems. These symbolic costs represent an imperfect measure of bandwidth, monetary cost, and frequency of connections. For most mail traffic, it is important to minimize the number of hosts in a route, thus, _e._g., HOURLY * 24 is much larger than DAILY. If no cost is given, a default of 4000 is used. For the most part, arithmetic expressions that mix symbolic constants other than HIGH, LOW, and FAST make no sense. _E._g., if a host calls a local neighbor whenever there is work, and additionally polls every evening, the cost is DIRECT, not DIRECT+EVENING. Some examples: down princeton!(DEDICATED), tilt, %thrash(LOCAL) princeton topaz!(DEMAND+LOW) topaz @rutgers(LOCAL+1) If a link is encountered more than once, the least-cost occurrence dictates the cost and network character. Links are treated as bidirectional but asymmetric: for each link declared in the input, a DEAD reverse link is assumed. If the ``to'' host in a link is surrounded by angle brack- ets, the link is considered _t_e_r_m_i_n_a_l, and further links beyond this one are heavily penalized. _E._g., with input Printed 11/24/99 10/4/87 3 PATHALIAS(1) UNIX Programmer's Manual PATHALIAS(1) seismo (10), research(100), ihnp4(10) research allegra(10) ihnp4 allegra(50) the path from seismo to research is direct, but the path from seismo to allegra uses ihnp4 as a relay, not research. The way to think of this is to imagine two copies of research, one that's cheap to get to, but has no neighbors, and one that's expensive to get to, but has neighbors. (This is an exception to the ``least-cost link'' rule above.) The set of names by which a host is known to its neighbors is called its _a_l_i_a_s_e_s. Aliases are declared as follows: name = alias, alias ... The name used in the route to or through aliased hosts is the name by which the host is known to its predecessor in the route. Fully connected networks, such as the ARPANET or a local- area network, are declared as follows: net = {host, host, ...} The host-list may be preceded or followed by a routing char- acter, and may be followed by a cost: princeton-ethernet = {down, up, princeton}!(LOCAL) ARPA = @{sri-unix, mit-ai, su-score}(DEDICATED) The routing character used in a route to a network member is the one encountered when ``entering'' the network. See also the sections on _g_a_t_e_w_a_y_s and _d_o_m_a_i_n_s . Connection data may be given while hiding host names by declaring private {host, host, ...} _P_a_t_h_a_l_i_a_s will not generate routes for private hosts, but may produce routes through them. The scope of a private declaration extends from the declaration to the end of the input file in which it appears, or to a private declaration with an empty host list, whichever comes first. The latter scope rule offers a way to retain the semantics of private declarations when reading from the standard input. Dead hosts, links, or networks may be presented in the input stream by declaring Printed 11/24/99 10/4/87 4 PATHALIAS(1) UNIX Programmer's Manual PATHALIAS(1) dead {arg, ...} where _a_r_g has the same form as the argument to the -d option. Output Format A list of host-route pairs is written to the standard out- put, where route is a string appropriate for use with _p_r_i_n_t_f(3), _e._g., rutgers princeton!topaz!%s@rutgers The ``%s'' in the route string should be replaced by the user name at the destination host. (This task is normally performed by a mailer.) Except for _d_o_m_a_i_n_s, the name of a network is never used in routes. Thus, in the earlier example, the path from down to up would be ``up!%s,'' not ``princeton-ethernet!up!%s.'' Gateways A network is represented by a pseudo-host and a set of net- work members. Links from the members to the network have the weight given in the input, while the cost from the net- work to the members is zero. If a network is declared dead, the member-to-network links are marked dead, which effec- tively prohibits access to the network from its members. However, if the input also shows an explicit link from any host to the network, then that host can be used as a gate- way. (In particular, the gateway need not be a network member.) _E._g., if CSNET is declared dead and the input contains CSNET = {...} csnet-relay CSNET then routes to CSNET hosts will use csnet-relay as a gate- way. Domains A network whose name begins with `.' is called a domain. Domains are presumed to require gateways, _i._e., they are DEAD. The route given by a path through a domain is similar to that for a network, but here the domain name is tacked onto the end of the next host. Subdomains are permitted. _E._g., harvard .EDU # harvard is gateway to .EDU domain .EDU = {.BERKELEY, .UMICH} Printed 11/24/99 10/4/87 5 PATHALIAS(1) UNIX Programmer's Manual PATHALIAS(1) .BERKELEY = {ernie} yields ernie ...!harvard!ernie.BERKELEY.EDU!%s Output is given for the nearest gateway to a domain, _e._g., the example above gives .EDU ...!harvard!%s Output is given for a subdomain if it has a different route than its parent domain, or if all its ancestor domains are private. If the -D option is given on the command line, _p_a_t_h_a_l_i_a_s treats a link from a domain to a host member of that domain as terminal. This discourages the use of routes that use a domain member as a relay. Databases _M_a_k_e_d_b builds a _d_b_m(3) database from the standard input or from the named _f_i_l_e_s. Input is expected to be sequence of ASCII records, each consisting of a key field and a data field separated by a single tab. If the tab is missing, the data field is assumed to be empty. FILES ET AL. /usr/local/lib/palias.{dir,pag} default dbm output newsgroup comp.mail.maps likely location of some input files _g_e_t_o_p_t(3), available from comp.sources.unix archives (if not in the C library). BUGS Terminal nets are not implemented. The -i option should be the default. The order of arguments is significant. In particular, -i and -t should appear early. _P_a_t_h_a_l_i_a_s can generate hybrid (_i._e. ambiguous) routes, which are abhorrent and most certainly should not be given as examples in the manual entry. Experienced mappers largely shun `@' when preparing input; this is historical, but also reflects UUCP's facile syntax for source routes. Multiple `@'s in routes are loathsome, so _p_a_t_h_a_l_i_a_s resorts to the ``magic %'' rule when necessary. This convention is not documented anywhere, including here. Printed 11/24/99 10/4/87 6 PATHALIAS(1) UNIX Programmer's Manual PATHALIAS(1) The -D option elides insignificant routes to domain members. This is benign, perhaps even beneficial, but confusing, since the behavior is undocumented and somewhat unpredict- able. SEE ALSO P. Honeyman and S.M. Bellovin, ``PATHALIAS _o_r The Care and Feeding of Relative Addresses,'' in _P_r_o_c. _S_u_m_m_e_r _U_S_E_N_I_X _C_o_n_f., Atlanta, 1986. Printed 11/24/99 10/4/87 7