ref: 59402bf42b8b199218f1f0d111aaf273a3c1806a
dir: /ipnet.c/
#include <u.h>
#include <libc.h>
#include <bio.h>
#include <ndb.h>
#include <String.h>
#include "dat.h"
#include "fns.h"
/* user request: these tuples are ipnets */
static char *netargs[] = {
"ipnet",
};
int
isnetarg(char *key)
{
int n = sizeof(netargs) / sizeof(*netargs);
for (int i = 0; i < n; i++)
if (strcmp(netargs[i], key) == 0)
return 1;
return 0;
}
static Ipnet ipnets[50];
static int nipnets = 0;
int
numipnets()
{
return nipnets;
}
Color
getipnetcolor(char *k, char *v)
{
Ipnet *n;
Color c = { 0., 0., 0. };
n = findipnet(k, v);
if (!n) {
fprint(2, "ipnet %s=%s not found\n", k, v);
return c;
}
return n->color;
}
static Ipnet*
gennet(void)
{
Ipnet *n;
n = &ipnets[nipnets];
nipnets++;
memset(n, 0, sizeof(Ipnet));
return n;
}
Ipnet*
findipnet(char *key, char *value)
{
Ipnet *n;
Tuple *t;
for (int i = 0; i < nipnets; i++) {
n = &ipnets[i];
t = findtuple(n, key);
if (t && strcmp(t->value, value) == 0)
return n;
}
return nil;
}
int
genipnet(char *key, char *value)
{
Ipnet *n;
char *valid;
valid = csgetvalue(netdir, key, value, key, nil);
if (!valid)
return 0;
n = findipnet(key, value);
if (n)
return 1;
n = gennet();
for (int i = 0; i < nipnettuples; i++) {
if (strcmp(ipnettuples[i], key) == 0) {
addtuple(n, ipnettuples[i], strdup(value), 0);
continue;
}
fillblockvalue(n, ipnettuples[i], key, value);
}
return 1;
}
void
fornet(void (*f)(Ipnet*,void*), void *aux)
{
for (int i = 0; i < nipnets; i++)
f(&ipnets[i], aux);
}