.TH NDB 8
.SH NAME
query, mkhash, mkdb, cs, csquery, dns, dnsquery, ipquery, dnsdebug, mkhosts \- network database
.SH SYNOPSIS
.B ndb/query
[
.B -f
.I dbfile
]
.I "attr value"
[
.I rattr
]
.br
.B ndb/ipquery
.I "attr value"
.I rattr...
.br
.B ndb/mkhash
.I "file attr"
.br
.B ndb/cs
[
.B -n
] [
.B -f
.I dbfile
] [
.B -x
.I netmtpt
]
.br
.B ndb/csquery
.br
.B ndb/dns
[
.B -rs
] [
.B -f
.I dbfile
] [
.B -x
.I netmtpt
]
.br
.B ndb/dnsquery
.br
.B ndb/dnsdebug
[
.B -rx
]
[ [
.BI @ server
]
.I domain-name
[
.I type
] ]
.br
.B ndb/mkdb
.SH DESCRIPTION
The network database holds administrative information used by
network programs such as
.IR dhcpd (8),
.IR ipconfig (8),
.IR con (1),
etc.
.PP
.I Ndb/query 
searches the database for an attribute of type
.I attr
and value
.IR value .
If
.I rattr
is not specified, all entries matched by the search are returned.
If 
.I rattr
is specified, the value of the first pair with attribute
.I rattr
of all the matched entries is returned.
.PP
.I Ndb/ipquery
uses
.I ndbipinfo
(see
.IR ndb (2))
to search for the values of the attributes
.I rattr
corresponding to the system
with entries of attribute type
.I attr
and
value
.IR value .
.PP
.I Ndb/mkhash
creates a hash file for all entries with attribute
.I attr
in database file
.IR file .
The hash files are used by 
.I ndb/query
and by the ndb library routines.
.PP
.I Ndb/cs
is a server used by
.IR dial (2)
to translate network names.
It is started at boot time.
It finds out what networks are configured
by looking for
.B /net/*/clone
when it starts.
It can also be told about networks by writing
to
.B /net/cs
a message of the form:
.IP
.B "add net1 net2 ..."
.PP
.I Ndb/cs
also sets the system name in
.B /dev/sysname
if it can figure it out.
The options are:
.TP
.B -f
supplies the name of the data base file to use,
default
.BR /lib/ndb/local .
.TP
.B -x
specifies the mount point of the
network.
.TP
.B -n
causes cs to do nothing but set the system name.
.PP
.I Ndb/csquery
can be used to query
.I ndb/cs
to see how it resolves addresses.
.I Ndb/csquery
prompts for addresses and prints out what
.I ndb/cs
returns.
.PP
.I Ndb/dns
is a server used by
.I ndb/cs
and by remote systems to translate Internet domain names.
.I Ndb/dns
is started at boot time.
By default
.I dns
serves only requests written to
.BR /net/dns .
The options are:
.TP
.B -f
supplies the name of the data base file to use,
default
.BR /lib/ndb/local .
.TP
.B -x
specifies the mount point of the
network.
.TP
.B -s
also answer domain requests sent to UDP port 53.
.TP
.B -r
defer to other servers to resolve queries.
.PP
When the
.B -r
option is specified, the servers used come from the
.I dns
attribute in the database.  For example, to specify a set of dns servers that
systems on the network
.IR mh-net :
.EX

ipnet=mh-net ip=135.104.0.0 ipmask=255.255.0.0
	dns=ns1.cs.bell-labs.com
	dns=ns2.cs.bell-labs.com
dom=ns1.cs.bell-labs.com ip=135.104.1.11
dom=ns2.cs.bell-labs.com ip=135.104.1.12

.EE
.PP
The server for a domain is indicated by a database entry containing
both a
.I dom
and a
.I ns
attribute.
For example, the entry for the Internet root is:
.EX

dom=
	ns=A.ROOT-SERVERS.NET
	ns=B.ROOT-SERVERS.NET
	ns=C.ROOT-SERVERS.NET
dom=A.ROOT-SERVERS.NET ip=198.41.0.4
dom=B.ROOT-SERVERS.NET ip=128.9.0.107
dom=C.ROOT-SERVERS.NET ip=192.33.4.12

.EE
The last three lines provide a mapping for the
server names to their ip addresses.  This is only
a hint and will be superceded from whatever is learned
from servers owning the domain.
.PP
The root of a domain subtree served by the local database is indicated
by an entry with an
.B soa
attribute.
For example, the Bell Labs CS research domain is:
.EX

dom=cs.bell-labs.com soa=
	refresh=3600 ttl=3600
	ns=plan9.bell-labs.com
	ns=ns1.cs.bell-labs.com
	ns=ns2.cs.bell-labs.com
	mb=presotto@plan9.bell-labs.com
	mx=mail.research.bell-labs.com pref=20
	mx=plan9.bell-labs.com pref=10

.EE
Here, the
.B mb
entry is the mail address of the person responsible for the
domain (default
.BR postmaster ).
The
.B mx
entries list mail exchangers for the domain name and
.B refresh
and
.B ttl
define the area refresh interval and the minimum TTL for
records in this domain.
.PP
Delegation of a further subtree to another set of nameservers
is indicated by an
.B soa=delegated
attribute.
.EX

dom=bignose.cs.research.bell-labs.com
	soa=delegated
	ns=anna.cs.research.bell-labs.com
	ns=dj.cs.research.bell-labs.com

.EE
Nameservers within the delegated domain (as in this example)
must have their IP addresses listed elsewhere in
.I ndb
files.
.PP
Wild-carded domain names can also be used.
For example, to specify a mail forwarder for all Bell Labs research systems:
.EX

dom=*.research.bell-labs.com
	mx=research.bell-labs.com

.EE
`Cname' aliases may be established by adding a
.B cname
attribute giving the real domain name;
the name attached to the
.B dom
attribute is the alias.
`Cname' aliases are severely restricted;
the aliases may have no other attributes than
.B dom
and are daily further restricted in their use by new RFCs.
.EX

cname=anna.cs.research.bell-labs.com dom=www.cs.research.bell-labs.com

.EE
.I Ndb/dnsquery
can be used to query
.I ndb/dns
to see how it resolves requests.
.I Ndb/dnsquery
prompts for commands of the form
.IP
.I "domain-name request-type"
.LP
where
.I request-type
can be
.BR ip ,
.BR mx ,
.BR ns ,
.BR cname ,
.BR ptr ....
In the case of the inverse query type,
.BR ptr ,
.I dnsquery
will reverse the ip address and tack on the
.B .in-addr.arpa
for you.
.PP
.I Ndb/dnsdebug
is like
.I ndb/dnsquery
but bypasses the local server.
It communicates via UDP with the domain name servers
in the same way that the local resolver would and displays
all packets received.
The query can be specified on the command line or
can be prompted for.
The queries look like those of
.I ndb/dnsquery
with one addition.
.I Ndb/dnsdebug
can be directed to query a particular name server by
the command
.BI @ name-server\f1.
From that point on, all queries go to that name server
rather than being resolved by
.IR dnsdebug .
The
.B @
command returns query resolution to
.IR dnsdebug .
Finally, any command preceded by a
.BI @ name-server
sets the nameserver only for that command.
.PP
Normally
.I dnsdebug
uses the
.B /net
interface and the database file
.BR /lib/ndb/local.
The
.B -x
option directs
.I dnsdebug
to use the
.B /net.alt
interface and
.B /lib/ndb/external
file.
The
.B -r
option is the same as for
.IR ndb/dns .
.PP
.I Ndb/mkdb
is used in concert with
.IR awk (1)
scripts to convert
uucp systems files and IP host files
into database files.
It is very specific to the situation at Murray Hill.
.PP
When the database files change underfoot,
.I ndb/cs
and
.I ndb/dns
track them properly.  Nonetheless, to keep the database searches efficient
it is necessary to run
.I ndb/mkhash
whenever the files are modified.
It may be profitable to control this by a frequent
.IR cron (8)
job.
.PP
.I Ndb/mkhosts
generates a BSD style 
.BR hosts ,
.BR hosts.txt ,
and
.B hosts.equiv
files from an ndb data base file specified on the
command line (default
.BR /lib/ndb/local ).
For local reasons the files are called
.BR hosts.1127 ,
.BR astro.txt ,
and
.BR hosts.equiv .
.SH EXAMPLES
.EX
% ndb/query sys helix
sys=helix dom=helix.research.bell-labs.com bootf=/mips/9powerboot
	ip=135.104.117.31 ether=080069020427
	proto=il 
% ndb/dnsquery
> plan9.bell-labs.com ip
plan9.bell-labs.com ip	204.178.31.2
> 204.178.31.2 ptr
2.31.178.204.in-addr.arpa ptr	plan9.bell-labs.com
2.31.178.204.in-addr.arpa ptr	ampl.com
> 
.EE
.SH FILES
.TF /lib/ndb/local.*xxx
.TP
.B /lib/ndb/local
first database file searched
.TP
.B /lib/ndb/local.*
hash files for
.B /lib/ndb/local
.TP
.B /srv/cs
service file for
.I ndb/cs
.TP
.B /net/cs
where
.B /srv/cs
gets mounted
.TP
.B /srv/dns
service file for
.I ndb/dns
.TP
.B /net/dns
where
.B /srv/dns
gets mounted
.SH SOURCE
.B /sys/src/cmd/ndb
.SH SEE ALSO
.IR ndb (2)
.IR ndb (6)
