NDB(2) NDB(2)
NAME
ndbopen, ndbclose, ndbreopen, ndbsearch, ndbsnext,
ndbgetval, ndbfree, ipattr, ipinfo, ndbhash, ndbparse,
csgetval - network database
SYNOPSIS
#include <u.h>
#include <libc.h>
#include <bio.h>
#include <ndb.h>
Ndb* ndbopen(char *file);
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);
Ndbtuple* ndbgetval(Ndb *db, Ndbs *s, char *attr, char
*val,
char *rattr, char *buf);
Ndbtuple* csgetval(char *attr, char *val, char *rattr, char
*buf);
void ndbfree(Ndbtuple *db);
char* ipattr(char *name);
int ipinfo(Ndb *db, char *ether, char *ip, char
*name,
Ipinfo *iip);
ulong ndbhash(char *val, int hlen);
Ndbtuple* ndbparse(Ndb *db);
DESCRIPTION
These routines are used by network administrative programs
to search the network database. They operate on the data-
base files described in ndb(6).
Ndbopen opens the database file and calls malloc(2) to allo-
cate a buffer for it. If file is zero, all network database
files are opened.
Page 1 Plan 9 (printed 10/24/25)
NDB(2) NDB(2)
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 con-
taining 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(2)
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[Ndbvlen];
Ndbtuple *entry;
Ndbtuple *line;
ulong ptr; /* for the application; starts 0 */
};
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 pro-
gram 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 suc-
cessive 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.
Ndbgetval 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 copies the value
associated with rattr into buf. Buf must point to an area at
least Ndbvlen long. Csgetval is like ndbgetval but queries
the connection server instead of looking directly at the
Page 2 Plan 9 (printed 10/24/25)
NDB(2) NDB(2)
database.
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
Ipinfo searches the database for Internet Protocol informa-
tion about a system and returns it in the structure
addressed by iip. The arguments ether (textual Ethernet
address), ip (textual IP address), and name identify the
system. At least one must be non-zero. Ipinfo returns 0 if
successful, -1 otherwise. Both bootp(8) and ipconfig(8) use
ipinfo to search the database.
The last three calls 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.
SOURCE
/sys/src/libndb
SEE ALSO
ndb(6) ndb(8)
DIAGNOSTICS
These routines set errstr.
Page 3 Plan 9 (printed 10/24/25)