|
NAME
| |
ndbopen, ndbcat, ndbchanged, ndbclose, ndbreopen, ndbsearch, ndbsnext,
ndbgetvalue, ndbfree, ipattr, ndbgetipaddr, ndbipinfo, ndbhash,
ndbparse, ndbfindattr, ndbdiscard, ndbconcatenate, ndbreorder,
ndbsubstitute, ndbgetval, ndblookval – network database
|
SYNOPSIS
| |
#include <u.h>
#include <libc.h>
#include <bio.h>
#include <ndb.h>
Ndb* ndbopen(char *file)
Ndb* ndbcat(Ndb *db1, Ndb *db2)
Ndb* ndbchanged(Ndb *db)
int ndbreopen(Ndb *db)
void ndbclose(Ndb *db)
Ndbtuple* ndbsearch(Ndb *db, Ndbs *s, char *attr, char *val)
Ndbtuple* ndbsnext(Ndbs *s, char *attr, char *val)
char* ndbgetvalue(Ndb *db, Ndbs *s, char *attr, char *val,
| |
| |
char *rattr, Ndbtuple **tp)
|
|
char* ipattr(char *name)
Ndbtuple* ndbgetipaddr(Ndb *db, char *sys);
Ndbtuple* ndbipinfo(Ndb *db, char *attr, char *val, char **attrs,
ulong ndbhash(char *val, int hlen)
Ndbtuple* ndbparse(Ndb *db)
Ndbtuple* ndbfindattr(Ndbtuple *entry, Ndbtuple *line, char *attr)
void ndbfree(Ndbtuple *db)
Ndbtuple* ndbdiscard(Ndbtuple *t, Ndbtuple *a)
Ndbtuple* ndbconcatenate(Ndbtuple *a, Ndbtuple *b);
Ndbtuple* ndbreorder(Ndbtuple *t, Ndbtuple *a);
Ndbtuple* ndbsubstitute(Ndbtuple *t, Ndbtuple *from, Ndbtuple
*to);
|
DESCRIPTION
| |
These routines are used by network administrative programs to
search the network database. They operate on the database files
described in ndb(7).
Ndbopen opens the database file and calls malloc(3) to allocate
a buffer for it. If file is zero, all network database files are
opened.
Ndbcat concatenates two open databases. Either argument may be
nil.
Ndbreopen checks if the database files associated with db have
changed and if so throws out any cached information and reopens
the files.
Ndbclose closes any database files associated with db and frees
all storage associated with them.
Ndbsearch and ndbsnext search a database for an entry containing
the attribute/value pair, attr=val. Ndbsearch is used to find
the first match and ndbsnext is used to find each successive match.
On a successful search both return a linked list of Ndbtuple structures
acquired by malloc(3) that represent the attribute/value pairs
in the entry. On failure
they return zero.
| |
typedef struct Ndbtuple Ndbtuple;
struct Ndbtuple {
| |
char attr[Ndbalen];
char *val;
Ndbtuple *entry;
Ndbtuple *line;
ulong ptr; /* for the application; starts 0 */
char valbuf[Ndbvlen]; /* initial allocation for val */
|
};
|
The entry pointers chain together all pairs in the entry in a
null-terminated list. The line pointers chain together all pairs
on the same line in a circular list. Thus, a program can implement
2 levels of binding for pairs in an entry. In general, pairs on
the same line are bound tighter than pairs on different lines.
The argument s of ndbsearch has type Ndbs and should be pointed
to valid storage before calling ndbsearch, which will fill it
with information used by ndbsnext to link successive searches.
The structure Ndbs looks like:
| |
typedef struct Ndbs Ndbs;
struct Ndbs {
| |
Ndb *db; /* data base file being searched */
...
Ndbtuple *t; /* last attribute value pair found */
|
};
|
The t field points to the pair within the entry matched by the
ndbsearch or ndbsnext.
Ndbgetvalue searches the database for an entry containing not
only an attribute/value pair, attr=val, but also a pair with the
attribute rattr. If successful, it returns a malloced copy of
the null terminated value associated with rattr. If tp is non
nil, *tp will point to the entry. Otherwise the entry will be
freeed.
Ndbfree frees a list of tuples returned by one of the other routines.
Ipattr takes the name of an IP system and returns the attribute
it corresponds to:
| |
dom domain name
ip Internet number
sys system name
|
Ndbgetipaddr looks in db for an entry matching sys as the value
of a sys= or dom= attribute/value pair and returns all IP addresses
in the entry. If sys is already an IP address, a tuple containing
just that address is returned.
Ndbipinfo looks up Internet protocol information about a system.
This is an IP aware search. It looks first for information in
the system’s database entry and then in the database entries for
any IP subnets or networks containing the system. The system is
identified by the attribute/value pair, attr=val. Ndbipinfo returns
a list of tuples whose attributes
match the attributes in the n element array attrs. For example,
consider the following database entries describing a network,
a subnetwork, and a system.
ipnet=big ip=10.0.0.0
| |
| |
dns=dns.big.com
smtp=smtp.big.com
|
|
ipnet=dept ip=10.1.1.0 ipmask=255.255.255.0
ip=10.1.1.4 dom=x.big.com
Calling
| |
ndbipinfo(db, "dom", "x.big.com", ["bootf" "smtp" "dns"], 3)
|
will return the tuples bootf=/386/9pc, smtp=smtp1.big.com, and
dns=dns.big.com.
The next three routines are used by programs that create the hash
tables and database files. Ndbhash computes a hash offset into
a table of length hlen for the string val. Ndbparse reads and
parses the next entry from the database file. Multiple calls to
ndbparse parse sequential entries in the database file. A zero
is returned at end of file.
Ndbfindattr searches entry for the tuple with attribute attr and
returns a pointer to the tuple. If line points to a particular
line in the entry, the search starts there and then wraps around
to the beginning of the entry.
All of the routines provided to search the database provide an
always consistent view of the relevant files. However, it may
be advantageous for an application to read in the whole database
using ndbopen and ndbparse and provide its own search routines.
The ndbchanged routine can be used by the application to periodicly
check for changes. It
returns zero if none of the files comprising the database have
changes and non-zero if they have.
Finally, a number of routines are provided for manipulating tuples.
Ndbdiscard removes attr/val pair a from tuple t and frees it.
If a isn’t in t it is just freed.
Ndbconcatenate concatenates two tuples and returns the result.
Either or both tuples may be nil.
Ndbreorder reorders a tuple t to make the line containing attr/val
pair a first in the entry and making a first in its line.
Ndbsubstitute replaces a single att/val pair from in t with the
tuple to. All attr/val pairs in to end up on the same line. from
is freed.
|
FILES
SOURCE
SEE ALSO
DIAGNOSTICS
| |
Ndbgetvalue and ndblookvalue set errstr to buffer too short if
the buffer provided isn’t long enough for the returned value.
|
BUGS
| |
Ndbgetval and ndblookval are deprecated versions of ndbgetvalue
and ndblookvalue. They expect a fixed 64 byte long result buffer
and existed when the values of a Ndbtuple structure where fixed
length.
|
|
|