xref: /plan9/sys/src/cmd/ndb/ipquery.c (revision 99c5542733063989ecf76031d5eb261c95490702)
17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <bio.h>
47dd7cddfSDavid du Colombier #include <ndb.h>
57dd7cddfSDavid du Colombier #include <ip.h>
67dd7cddfSDavid du Colombier 
77dd7cddfSDavid du Colombier /*
87dd7cddfSDavid du Colombier  *  search the database for matches
97dd7cddfSDavid du Colombier  */
107dd7cddfSDavid du Colombier 
117dd7cddfSDavid du Colombier void
usage(void)127dd7cddfSDavid du Colombier usage(void)
137dd7cddfSDavid du Colombier {
14*99c55427SDavid du Colombier 	fprint(2, "usage: ipquery [-f ndb-root] attr value rattribute\n");
157dd7cddfSDavid du Colombier 	exits("usage");
167dd7cddfSDavid du Colombier }
177dd7cddfSDavid du Colombier 
187dd7cddfSDavid du Colombier void
search(Ndb * db,char * attr,char * val,char ** rattr,int nrattr)197dd7cddfSDavid du Colombier search(Ndb *db, char *attr, char *val, char **rattr, int nrattr)
207dd7cddfSDavid du Colombier {
210d862726SDavid du Colombier 	Ndbtuple *t, *tt;
227dd7cddfSDavid du Colombier 
230d862726SDavid du Colombier 	tt = ndbipinfo(db, attr, val, rattr, nrattr);
240d862726SDavid du Colombier 	for(t = tt; t; t = t->entry)
257dd7cddfSDavid du Colombier 		print("%s=%s ", t->attr, t->val);
267dd7cddfSDavid du Colombier 	print("\n");
270d862726SDavid du Colombier 	ndbfree(tt);
287dd7cddfSDavid du Colombier }
297dd7cddfSDavid du Colombier 
307dd7cddfSDavid du Colombier void
main(int argc,char ** argv)317dd7cddfSDavid du Colombier main(int argc, char **argv)
327dd7cddfSDavid du Colombier {
337dd7cddfSDavid du Colombier 	Ndb *db;
347dd7cddfSDavid du Colombier 	char *dbfile = 0;
357dd7cddfSDavid du Colombier 
367dd7cddfSDavid du Colombier 	ARGBEGIN{
377dd7cddfSDavid du Colombier 	case 'f':
387dd7cddfSDavid du Colombier 		dbfile = ARGF();
397dd7cddfSDavid du Colombier 		break;
40*99c55427SDavid du Colombier 	default:
41*99c55427SDavid du Colombier 		usage();
42*99c55427SDavid du Colombier 		break;
437dd7cddfSDavid du Colombier 	}ARGEND;
447dd7cddfSDavid du Colombier 
457dd7cddfSDavid du Colombier 	if(argc < 3)
467dd7cddfSDavid du Colombier 		usage();
477dd7cddfSDavid du Colombier 
487dd7cddfSDavid du Colombier 	db = ndbopen(dbfile);
497dd7cddfSDavid du Colombier 	if(db == 0){
507dd7cddfSDavid du Colombier 		fprint(2, "no db files\n");
517dd7cddfSDavid du Colombier 		exits("no db");
527dd7cddfSDavid du Colombier 	}
537dd7cddfSDavid du Colombier 	search(db, argv[0], argv[1], argv+2, argc-2);
547dd7cddfSDavid du Colombier 	ndbclose(db);
557dd7cddfSDavid du Colombier 
567dd7cddfSDavid du Colombier 	exits(0);
577dd7cddfSDavid du Colombier }
58