195a264b3SDavid du Colombier #include <u.h>
295a264b3SDavid du Colombier #include <libc.h>
395a264b3SDavid du Colombier #include <bio.h>
495a264b3SDavid du Colombier #include <ndb.h>
595a264b3SDavid du Colombier #include <ip.h>
695a264b3SDavid du Colombier
795a264b3SDavid du Colombier /* return list of ip addresses for a name */
895a264b3SDavid du Colombier Ndbtuple*
ndbgetipaddr(Ndb * db,char * val)995a264b3SDavid du Colombier ndbgetipaddr(Ndb *db, char *val)
1095a264b3SDavid du Colombier {
1157837e0bSDavid du Colombier char *attr, *p;
1295a264b3SDavid du Colombier Ndbtuple *it, *first, *last, *next;
1395a264b3SDavid du Colombier Ndbs s;
1495a264b3SDavid du Colombier
1595a264b3SDavid du Colombier /* already an IP address? */
1695a264b3SDavid du Colombier attr = ipattr(val);
1795a264b3SDavid du Colombier if(strcmp(attr, "ip") == 0){
1895a264b3SDavid du Colombier it = ndbnew("ip", val);
19*1a4050f5SDavid du Colombier ndbsetmalloctag(it, getcallerpc(&db));
2095a264b3SDavid du Colombier return it;
2195a264b3SDavid du Colombier }
2295a264b3SDavid du Colombier
2395a264b3SDavid du Colombier /* look it up */
2457837e0bSDavid du Colombier p = ndbgetvalue(db, &s, attr, val, "ip", &it);
2557837e0bSDavid du Colombier if(p == nil)
2695a264b3SDavid du Colombier return nil;
2757837e0bSDavid du Colombier free(p);
2895a264b3SDavid du Colombier
2995a264b3SDavid du Colombier /* remove the non-ip entries */
3095a264b3SDavid du Colombier first = last = nil;
3195a264b3SDavid du Colombier for(; it; it = next){
3295a264b3SDavid du Colombier next = it->entry;
3395a264b3SDavid du Colombier if(strcmp(it->attr, "ip") == 0){
3495a264b3SDavid du Colombier if(first == nil)
3595a264b3SDavid du Colombier first = it;
3695a264b3SDavid du Colombier else
3795a264b3SDavid du Colombier last->entry = it;
3895a264b3SDavid du Colombier it->entry = nil;
3995a264b3SDavid du Colombier it->line = first;
4095a264b3SDavid du Colombier last = it;
4195a264b3SDavid du Colombier } else {
4295a264b3SDavid du Colombier it->entry = nil;
4395a264b3SDavid du Colombier ndbfree(it);
4495a264b3SDavid du Colombier }
4595a264b3SDavid du Colombier }
4695a264b3SDavid du Colombier
47*1a4050f5SDavid du Colombier ndbsetmalloctag(first, getcallerpc(&db));
4895a264b3SDavid du Colombier return first;
4995a264b3SDavid du Colombier }
50