DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T p

⟦136e70ab0⟧ TextFile

    Length: 29261 (0x724d)
    Types: TextFile
    Names: »part.6«

Derivation

└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
    └─⟦2fafebccf⟧ »EurOpenD3/mail/smail3.1.19.tar.Z« 
        └─⟦bcd2bc73f⟧ 
            └─⟦this⟧ »design/part.6« 

TextFile

Part 6:  Routing.

	Given a <target> and a <remainder> as determined using the
	rules in section 3.2, a route must be found to the <target>.
	Several means can be used to determine this.  In the UUCP zone,
	information from a pathalias(8) database might be used.  On the
	internet, nameserver information might be used.  Many sites talk
	to multiple zones, including internal networks of various
	kinds.  Given this, we need to determine what route to use in
	delivering a message.  In the process of routing we also
	determine the transport that is to be used in delivering the
	message to a recipient.

	Often a given routing system will make use of only one
	transport, however, this is not always the case. A reasonable
	generalization is to assume that routines that do a specific
	kind of routing are also best suited in determining the type 
	transport.

	For example, it is often the case that routes found from the
	pathalias information would be associated with UUCP's uux
	transport program.  However, a local network could be organized
	around !-routes while using an SMTP-base transport.  Also, a
	batched SMTP protocol could be used on top of UUCP instead of
	using the standard uux->rmail facilities, when communicating
	with some remote hosts.

	Part 6 describes how collections of low level routines, called
	routing drivers, compute a route to the <target> for a given
	recipient address.  Further sections discuss how they are
	associated with a transport for delivery.


Section 6.1:  The router file.

	To provide a reasonable configuration interface for routing
	setup, we create a file defining the use of routing drivers.
	This file specifies order of the routers, the routing drivers
	to call, and default transports.  It also specifies data and
	flags for use by high level routing code and by routing
	drivers.  We shall refer to this file as the router file.
	This file follows the form described in Part 5.

	As a sample, the router file for site amdahl is:

	    # @(#)/usr/lib/smail/routers	2.3 1/10/88 13:12:61

	    # match INET addresses such as [192.2.12.1].  Match these
	    # first as these addresses will probably just confuse the
	    # other routers.
	    inet-addrs:
	    	# generic router attributes:
	    	driver=gethostbyaddr,
	    	transport=smtp

	    # local tweaks to the path information, within our domain:
	    amdahl-local:
	    	# generic router attributes:
	    	driver=pathalias,
	    	method=uux-table,
		always;

	    	# driver-specific attributes:
	    	file=/usr/lib/smail/paths.local, # local path info
	    	proto=lsearch,		# use the raw path file
	    	domain=uts.amdahl.com	# under our local domain

	    # match hosts on the ethernet
	    inet-hosts:
		# generic router attributes:
		driver=gethostbyname,
		transport=smtp

	    # grab output of uuname for neighbor hosts
	    uuname:
		# generic router attributes:
	    	driver=uuname,
	    	method=uux-table;

	    	# driver-specific attributes
	    	cmd = /usr/bin/uuname	# get neighboring host info

	    # for everybody else, it's either you are in the Usenet
	    # maps, and related local data, or we can't route
	    usenet-maps:
	    	# generic router attributes:
	    	driver=pathalias,
	    	method=uux-table;

	    	# driver-specific attributes:
	    	file=/usr/lib/smail/paths,	# external path info
	    	proto=bsearch,		# use a sorted path file
		domain=uucp		# names stored without trailing uucp

	The current set of generic attributes that are recognized in the
	router file are:

		always
		     type: boolean
		     Routers will not always find a  complete  match  for  a
		     particular  hostname.   For example, if a routing data-
		     base has a route to the domain amdahl.com  but  not  to
		     the  hostname  futatsu.uts.amdahl.com  then the routing
		     driver might return  the  route  to  amdahl.com.   Gen-
		     erally,  the  route for the longest match of the target
		     host is used.  However, if the always attribute is set,
		     then  any  match  found  by this router will be used in
		     preference to routes that might have been  returned  by
		     routers  later  in the router list.  This is useful for
		     hardwiring a certain number of routes  within  a  small
		     database.   For  example,  this  is useful for Internet
		     sites that gateway for a small number of UUCP sites  in
		     the UUCP zone.
		
		driver
		     type: string
		     The driver attribute names a specific set of  low-level
		     functions  which  will  do  the  work of routing remote
		     mail.  This attribute is required.
		
		method
		     type: string
		transport
		     type: string
		     The router driver has the option of  specifically  set-
		     ting  a  transport  to use for remote delivery.  If the
		     driver does not do so, then either a method or a  tran-
		     sport  attribute  must exist to specify how the mail is
		     to be delivered.  A method attribute specifies  a  file
		     which  contains  a  table  relating  hostnames to tran-
		     sports.  A transport  attribute  specifies  a  specific
		     transport.  If the method file does not contain a match
		     for all hosts, then the transport named with the  tran-
		     sport  attribute  is used.  The format of a method file
		     is given in the next section.
	

Section 6.1.1:  Sleep(1)

	Yet another attempt to avoid section renumbering!


Section 6.1.2:  Routing drivers.

	The routing driver is the underlying function that searches
	somewhere for an association between the <target> and a
	<next_host>, <route> pair.  This search may be as simple as
	calling a program which lists neighboring hosts, or it may be
	as complex as conversing with remote name servers over the
	internet.

	The router table given in Section 6.1 uses two common types of
	routing drivers: a command based router and a file based router
	using a database built by the pathalias command.  We examine the
	pathalias routing driver in detail in section 6.4.  Other
	routers currently exist and more will be available in the future.

	A routing driver can explicitly specify a transport to be used
	in mail delivery.  This transport will be used if a <next_host>
	is returned, indicating that the address did not route to the
	local host.  It is recommended that this feature only be used if
	the generic transport and method attributes are insufficient.
	None of the present routers make use of this.


Section 6.1.3:  Method files and default transports.

	The routines that call the routing drivers may handle some of the
	processing required in the previous section.  For example,
	associating a recipient address with a default transport or
	searching for a transport in a table are operations that may be
	done above the driver level, under the control of the transport
	and method attributes.

	If a method attribute is given, then it specifies a file that is
	consulted as a table of host/transport pairs.  An example of a
	method file is:

	    # @(#)/usr/lib/smail/methods/uux-table	1.10 1/4/88 10:11:86

	    # associate a next-host found by pathalias with a transport.

	    # we poll our major neighbor sites on demand to get mail
	    # out through them fast.  Extensive use of this is probably
	    # a questionable idea.
	    pyramid	demand
	    hplabs	demand
	    decwrl	demand
	    sun		demand

	    # we also poll internal sites on demand as well, unless it
	    # is too expensive.
	    muts	demand
	    muts12	demand

	    # go over SNA to corporate
	    ccc		sna

	    # experimentally, send mail using batched SMTP commands over
	    # UUCP to smail development machines
	    eek		uusmtp
	    namei	uusmtp

	    # for everybody else inside or outside amdahl we will
	    # poll eventually from a cron daemon, or they will call us
	    *		uux

	Specifically, the method file is a file of records which specify
	one hostname and one transport.  These two strings are separated
	in the file records by comments or whitespace.  The table is
	scanned from beginning to end until a record is found containing a
	match for the host in question.  The transport in that record is
	used for delivery to that host.  As a catch-all feature, the
	special hostname ``*'' matches any hostname, and should always be
	in the last record in the method file.

	If no method attribute exists, or no lines in the method file
	match the host in question, then the transport attribute is used
	to name a specified transport.


Section 6.1.3.1:  Intermission.

	This section intentionally has twelve words in it, not including
	the heading.


Section 6.1.4:  Partial domain matches.

	Some routing drivers will return routes even though a complete
	match was not found.  An example is a search for the <target>
	``foo.bar.com'', where a driver found only ``.bar.com''.  The
	driver may return the <next_host> and <route> for reaching the
	gateway to .bar.com.

	When a driver returns a route, it also returns the number of
	characters in the target that were matched for the route that
	was found.  In the above example with .bar.com, the number of
	chars was 8 out of a possible complete match of 11.  Note that
	a partial match must match on the end of a <target> not the
	middle or the beginning, and that a match must not split a
	domain part.  Thus, a domain of ``foo.bar'' or ``bar'' or
	``r.com'' would not be a match for foo.bar.com.  This return
	value is used by the top level routing algorithm described in
	the next section.

	When a router returns a partial match to a target, the target is
	passed to successive routers in turn to determine if another
	router can find a better match.  The exception to this is if the
	`always' boolean attribute is set for the router.  In this case a
	partial match produced by that router is used in preference to
	more complete matches found by later routers.

	As an example, consider a site which performs a gateway service
	for a number of subdomains between the internet and the UUCP zone.
	Such a site will probably always use the internet to reach any
	sites matched by the internet domain system, with the exception of
	subdomains that it gateways to.  This can be accomplished using a
	router file such as:

	    # match domains that we gateway to from the internet
	    gateway-domains: driver=pathalias, transport=uux, always;
			file=/usr/lib/smail/gateway-paths

	    # otherwise match any sites on the internet
	    internet:	driver=gethostbyname, transport=smtp

	    # otherwise match any sites in the UUCP zone
	    uucp-zone:	driver=pathalias, transport=uux;
			file=/usr/lib/smail/paths, proto=dbm,
			domain=uucp


Section 6.2:  Top level routing.

	The top level of the routing code is used to query the drivers
	for routing information, and also to compute the possible
	routes to use.

	In general the method used in determining the route is to query
	each routing driver in turn for routes to <target> until a
	driver returns a route for a complete match, or there are no more
	entries in the router file.  The <next_host> and <route> returned
	by the router that matched the most chars is used.

	An exception to the above rules is that a driver can insist
	that his or her route be used, or a router file entry can
	contain the ``always'' attribute.  A <next_host> and <route>
	found under these conditions is used, if it matched more
	characters of <target> than any driver called previously.

	When a <route> and <next_host> are chosen from an incomplete
	match of <target>, the gateway host that the <route> leads
	will need to know what the real <target> was.  Thus when a
	route is used that did not completely match the target, when
	computing the <next_address> the <remainder> is replaced by the
	<address> from the <remainder> and the <target> that were
	computed.  In this way the <target> will be sent on to the
	gateway for rerouting. See the examples in Section 3.3 for a
	case where this feature is used.


Section 6.3:  Currently available router drivers.

	The following sections describe the currently implemented set
	of router drivers.


Section 6.3.1:  The pathalias router.

	The pathalias router computes routes from a database in the
	style produced by the pathalias program.  It has the following
	<driver_attributes>:

		domain
		     type: string
		     A list of domains to be stripped  from  the  end  of  a
		     hostname  before  it  is  searched for in the database.
		     Multiple  domains,  in  this  list,  are  separated  by
		     colons.
	
		file
		     type: string
		     This defines the name of the file containing the  data-
		     base.
	
		interval
		     type: number
		     The number of seconds to wait between open retries.
	
		optional
		     type: boolean
		     If set, then if the open fails, assume an  empty  alias
		     file.   This  is  useful  for  optional databases.  For
		     example, in a networking environment, workstations  may
		     be configured with the option of having a private alias
		     file, without the necessity of creating such a file  on
		     each host.
	
		proto
		     type: string
		     Names the protocol used in opening  and  searching  the
		     database.  Possibilities are discussed below.
	
		reopen
		     type: boolean
		     If set, the pathalias will be closed and reopened after
		     each  call  to the pathalias driver.  This is useful in
		     environments where file descriptors are scarce but many
		     databases are desired.
	
		required
		     type: string
		     A list of domains which targets are required to be  for
		     a  match.   The names are not stripped, unless they are
		     also specified by the domain attribute.
	
		retries
		     type: number
		     The maximum number of retries for opening a file.  This
		     is  useful  on  systems without an atomic rename system
		     call.  On such systems there will be a window  of  vul-
		     nerability  when  new  databases  are  moved into place
		     where no file will exist.
	
		try
		     type: string
		     A list of domains to be stripped only if the target was
		     not  found in the database without the domain stripped.
		     (This is currently not supported).
	
		tryagain
		     type: boolean
		     If set, then if the open fails, the resolution of local
		     addresses  will  be attempted at a later time.  This is
		     useful in a networking  environment  where  failure  to
		     open a database (such as a remote YP database) may be a
		     result of a server machine being  down  or  temporarily
		     inaccessible.

        The default values for the `retries' and `interval' attributes
	should generally be reasonable.

	The current list of possible values for the proto attribute is:

		 aliasyp   This is a variant of the yp protocol that is  com-
		           patible with the standard Sun mail.aliases YP ser-
		           vice.  This database has a different  format  from
		           other  databases  which must be taken into account
		           when sending requests.  Typically this is not use-
		           ful for a path database.
	
		 bsearch   Use a binary search to look through a sorted  file
		           arranged  as  lines which begin with a key and are
		           followed by the value  associated  with  the  key,
		           separated by a colon or whitespace.
	
		 dbm       Use the BSD dbm(3x) or ndbm(3x) routines to search
		           for  the  key.  The keys and data in the dbm data-
		           base must end in a nul byte.  If only the  dbm(3x)
		           library  is  available  then only one dbm database
		           can be used by smail , while the ndbm(3x) routines
		           will  allow  any number of databases.  However, it
		           is always okay for multiple routers and  directors
		           to use the same dbm database, if this is useful.
	
		 lsearch   Use a linear search using the  same  read  routine
		           used to read config files.  `#'-style comments are
		           allowed and  the  beginning  of  each  file  entry
		           should  be  the  key,  followed by whitespace or a
		           colon character.  The rest of the entry should  be
		           the value associated with the key.
	
		 yp        Use the Sun YP service to access a paths  database
		           stored  on  a  remote  machine.   In this case the
		           value for the file attribute is of the form:
	
		                       domain_name:database_name
	
		           where the domain_name: is optional and defaults to
		           the default YP domain for the local host.
	
	All database lookups are either independent of case or, when case
	independent lookups are impossible, case-folded.  Thus, all keys
	in DBM databases should be in lower case.

	As an example of the use of the `domain', `try' and `required'
	driver attributes, if domain=uucp, then any <target> that ends
	in .uucp will have the .uucp removed before being looked up.
	Alternately, if try=uucp and no domain is given, then .uucp is
	stripped only if the original <target> was not found.  If
	required=uucp then a <target> is not a candidate for a match
	unless it ends in .uucp.  The effects of `domain' and `try' are
	not cummulative and the <target> is applied to the `required'
	attribute before being applied to `domain' and `try', in that
	order.

	Note that the length of any stripped string is added to the count
	of characters matched for purposes of deciding which router had
	the most complete match.

	A sample pathalias router entry is:

	    pathalias:	transport=uux, driver=pathalias;
			file=/usr/lib/smail/paths, proto=bsearch,
			domain=uucp

	In the following sections, we will be referring to the following
	pathalias file for site nsavax:

		.amdahl.com		seismo!amdahl!%s
		.kgb.comm		seismo!mcvax!yupiter!kgbvax!%s
		.nbc.com		glotz!namei!walldrug!nbctrs80!%s
		.nsa.gov		%s
		.wall.com		glotz!namei!walldrug!%s
		amdahl			glotz!amdahl!%s
		namei			glotz!namei!%s
		glotz			glotz!%s
		kgbvax			seismo!mcvax!yupiter!kgbvax!%s
		kgbvax.kgb.comm		seismo!mcvax!yupiter!kgbvax!%s
		nbcmac			glotz!namei!walldrug!nbcmac!%s
		nsavax			%s
		nsavax.nsa.gov		%s
		seismo			seismo!%s
		walldrug		glotz!namei!walldrug!%s
		yupiter			seismo!mcvax!yupiter!%s

	This data base associates a host or domain name, on the left
	hand side, with a path, on the right hand side.  The right hand
	side should be a pure bang route ending in a %s.  The format is
	intended to be more general, with the %s shows where to put the
	<remainder>. The pathalias(8) can produce routes involving both
	right and left operators such as:

		decwrl	decwrl!%s@ucbvax

	This form is not recommended in general because the historical
	disagreement over the presidence of ``!'' and ``@''.  By
	standardizing on !-routes, as will be produced with from the
	Usenet maps, we avoid many routing ambiguities.

	A low level interface to a pathalias database returns a data
	structure containing the first element of an associated path as
	the <next_host>, and a <route> of the remaining path information
	with the trailing ``!%s'' removed.  As a special case, if the
	path is just ``%s'', it routes back to the local host.

	The <next_host> will then be associated with a transport
	using a table defining these associations.


Section 6.3.1.1:  Rules for obtaining a route from pathalias information.

	Using a pathalias database and given a <target>, search for a
	<route> and <next_host> using the following rules for the
	<next_host>!<route> associated with the first match found:

	1.  If <target> ends in a dot, then remove that ending dot, then if
	    it does not begin with a dot insert one at the beginning.

	2.  Look for an exact match of <target>.

	3.  If <target> begins with a dot, look for a match to <target>
	    without the initial dot.  Otherwise look for a match to <target>
	    with an initial dot.

	4.  Strip the first component of <target>, leaving the initial
	    dot before the second component.  Look for a match.  A component
	    of <target> is defined as a set of characters that do not
	    include dots.  Components are separated by dots.  In the case
	    that the <route> is found in step 4, the original <target>
	    should be appended to the route.  See examples for an explanation.
	    If a match in step 4 routes to %s (the local host), routing fails.

	5.  Strip the next component of <target>, and repeat step 4 until
	    there are no components to <target> remaining.

	Examples:

	    <target>:	nsavax.nsa.gov
	    lookup:	nsavax.nsa.gov
		<next_host> is null  and  <route> is null

	    <target>:	walldrug
	    lookup:	walldrug
		<next_host> = <glotz>  and  <route> = namei!walldrug

	    <target>:	wall.com.
	    lookup:	.wall.com
		<next_host> = glotz  and  <route> = namei!walldrug

	    <target>:	amdahl.com
	    lookup:	amdahl.com
		no match
	    lookup:	.amdahl.com
		<next_host> = seismo  and  <route> = amdahl

	    <target>:	.kgbvax.kgb.comm
	    lookup:	.kremvax.kgb.comm
		no match
	    lookup:	kremvax.kgb.comm
		<next_host> = kremvax  and  <route> is null

	    <target>:	kray.rsrch.kgb.comm
	    lookup:	kray.rsrch.kgb.comm
		no match
	    lookup:	.kray.rsrch.kgb.comm
		no match
	    lookup:	.rsrch.kgb.comm
		no match
	    lookup:	.kgb.comm
		<next_host> = seismo  and  <route> = mcvax!yupiter!kgbvax
		characters matched = 9 out of a possible 19

	    <target>:	node.fido.net
	    lookup:	node.fido.net
		not found
	    lookup:	.node.fido.net
		not found
	    lookup:	.fido.net
		not found
	    lookup:	.net
		not found, routing failed

	    <target>:	 .subdom.wall.com
	    lookup:	 .wall.com
		<next_host> = glotz, <route> = namei!walldrug
		characters matched = 9

	    <target>:	 somehost.sub.nsa.gov
	    lookup:	 .sub.nsa.gov
		not found
	    lookup:	 .nsa.gov
		found the localhost but return failure because the
		local host is the gateway to .nsa.gov but it does not
		know how to route to a sub domain that it should know
		about, if it existed


Section 6.3.2:  The uuname driver.

	Some sites in the UUCP zone might wish to always use a direct
	path to all their neighbors, instead of relying on a pathalias
	database that uses time-optimal routes (supposedly) instead of
	least-hop-count routes.  As another possibility, they may wish
	to use the pathalias routes to their neighbors only in the case
	that a domain address is given (i.e., neighbor.uucp).

	A simple and portable driver for these requirements is the
	uuname driver, that reads a list of hostnames from the output
	of an executable program (normally /usr/bin/uuname) and will
	return these hostnames as <next_host> values, along with null
	<route> values, for any <target> that matches a name in this
	list.  Optionally, the <target> will also match if it ends in a
	specific <domain_part> (normally uucp) with the base
	<domain_part> matching an entry in the list.

	An example entry for a site that wishes to route to their
	neighbors for <target> values that may end in .uucp is:

	    uuname:  transport=uux, driver=uuname;
		     cmd=/usr/bin/uuname, domain=uucp

	The alternate is a site that wishes to bypass the pathalias
	router only for explicit target matches, so that neighbor.UUCP
	will be routed through pathalias.  This can be done by not
	specifying a domain, as in:

	    uuname:  transport=uux, driver=uuname; cmd=/usr/bin/uuname

	The `uuname' driver also supports the `domain', `required' and
	`try' attributes, and all three domain-style attributes can be
	colon separated lists.  See the pathalias driver for more
	details.


Section 6.3.4:  The gethostbyname driver.

	In a network on top of a BSD-style network, hostnames on the
	network can be matched using this driver, which merely calls
	the gethostbyname(3N) library routine.  This routine is only
	available on systems that supply a BSD networking library.
	The only driver attributes for this driver are the `domain',
	`required' and `try' attributes, which are compatible with the
	pathalias and uuname drivers.

	The gethostbyname will only match a target host completely.
	The <next_host> value returned will be the proper name for the
	host as given by the h_name field of the hostname structure.

	NOTE:  The hostname given to gethostbyname(3N) will be downcased,
	       so that upper-case or mixed-case names can be matched
	       correctly.


Section 6.3.5:  The gethostbyaddr driver.

	Also in a network environment, it is useful to be able to
	specify explicit INET addresses using a target such as:

		[192.2.12.3]

	The gethostbyaddr driver matches targets of this form, defined
	by square brackets surrounding only digits and dot characters.
	The driver then converts this number into a hostname by
	calling gethostbyaddr() to determine the proper name for the
	host.  If gethostbyaddr(3N) fails, then the input target is
	returned as the <next_host> value, which is useful for
	incomplete host tables.

	The gethostbyaddr driver has the following attributes:

	    name		type	 description
	    ----		----	 -----------
	    check_for_local	boolean	 if set, see if the hostname
					 returned by gethostbyaddr() matches
					 one of the known names for the
					 local host.  The name "localhost"
					 is counted here as a potential nane
					 for the local host.

					 NOTE:  This attribute is set by
					 	default.

	    fail_if_error	boolean	 if set, then any domain-literal
					 target which does not fit the form
					 of an internet address is
					 considered an error.  If not set,
					 then such addresses are merely not
					 matched by the gethostbyaddr
					 driver.


Section 6.3.6:  The smarthost driver.

	Sometimes it is handy to be able to redirect mail destined for
	a host that you don't know about to some other host that has
	more routing information than you do.  This other host is
	called a ``smart-host'', and can be named in the smarthost
	driver.

	The smarthost driver has the following driver attribute:

	    path	- define a host or !-route path that defines
			  the smart host.

	If no `transport' or `method' attribute is given for the
	router file entry, this address will be re-sent through all
	the routing drivers.  An exception is that an address cannot
	be sent to the smarthost driver twice, as this would mean that
	the path to the smarthost was not known.

	For example, if site namei wanted to use amdahl's routing
	database for mail delivery to non-neighbor sites they could use
	a router file entry of:

	    smart_host: driver=smarthost;  path=amdahl

	or  smart_host: transport=uusmtp, driver=smarthost;
			path=amdahl

	NOTE:  at the present time, a `transport' or `method' attribute
	       is required, as the software is not yet in place that
	       can rescan the routers in the required ways.

	Then, a recipient address of frank.human@cyborg will be
	rewritten so that the target is amdahl and the remainder is
	frank.human@cyborg.  Alternately, in the second form for the
	entry, the <next_host> would become ``amdahl'' immediately,
	and the <next_address> would be frank.human@cyborg, with the
	transport being set to ``uux''.

	By specifying a !-route it is possible to route mail to a
	smart-host that you would not otherwise be able to route to.
	For example, if the machine ``glotz'' wished to use amdahl
	as its smart host, through its neighboring site ``namei'',
	it could use: 

	    smart_host: driver=smarthost; path=namei!amdahl

	or  smart_host: transport=demand, driver=smarthost;
			path=namei!amdahl

	It is possible to set the path and/or the transport in the config
	file (described in Section 9.3).  This is done by setting the
	config file attributes smart_path and smart_transport.  For
	example, the config file could contain the following:

	    smart_path = amdahl
	    smart_transport = uusmtp

	Then, if the entry in the router file was:

	    smart_host: driver=smarthost

	the configuration would be essentially the same as in the second
	smart_host example above.  This makes it possible to share copies
	of the router file among several machines, with the smart host
	configuration specific to one machine being set in its private
	configuration file.

	These config file attributes are used only if the path driver
	attribute is not given in the smart_host entry.  If used, the
	`smart_transport' will override a `transport' or `method'
	attribute.


Section 6.4:  Complete router file examples.

	The following router file will work with the current set of
	available drivers, and is set up for the site `namei', that
	uses a small pathalias database to route downstream, and
	makes use of amdahl as a smarthost:

	    # try pathalias for our downstream sites, these sites
	    # are by default under the domain UUCP
	    pathalias:	transport=localnet, driver=pathalias;
			file=/usr/lib/smail/paths, proto=lsearch,
			domain=uucp

	    # if not one of them, send to amdahl over demand uux as
	    # our gateway to the world
	    the-world: transport=demand, driver=smarthost; path=amdahl

	Meanwhile, amdahl might use uuname for explicit references to
	neighboring hosts, not in the .uucp domain, and pathalias
	otherwise, using both an amdahl-internal database for
	within the company, and a pathalias database constructed
	from Usenet map data otherwise.  This example can be seen in
	Section 6.1.

\f