aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Ghigonis <laurent@p1sec.com>2012-12-13 17:22:21 +0100
committerLaurent Ghigonis <laurent@p1sec.com>2012-12-13 17:22:21 +0100
commit9e0139c4343d7032de3a3bbb4408914fa943ec45 (patch)
tree4c9d095eaaa4fb1e23391a7134a6cd77688f8812
parentadapt to use libggnet group parenting (diff)
downloadglouglou-9e0139c4343d7032de3a3bbb4408914fa943ec45.tar.xz
glouglou-9e0139c4343d7032de3a3bbb4408914fa943ec45.zip
keep track of group connection usage
-rw-r--r--libglouglou/libggnet.c12
-rw-r--r--libglouglou/libggnet.h1
2 files changed, 13 insertions, 0 deletions
diff --git a/libglouglou/libggnet.c b/libglouglou/libggnet.c
index cfed99e..71a21cc 100644
--- a/libglouglou/libggnet.c
+++ b/libglouglou/libggnet.c
@@ -166,10 +166,14 @@ ggnet_conn_add(struct ggnet *net, struct in_addr *src, int src_port,
if (!srcnode)
srcnode = ggnet_node_add(net, src);
srcnode->used++;
+ if (srcnode->group)
+ srcnode->group->conn_count++;
dstnode = ggnet_node_find(net, dst);
if (!dstnode)
dstnode = ggnet_node_add(net, dst);
dstnode->used++;
+ if (dstnode->group)
+ dstnode->group->conn_count++;
c = xmalloc(sizeof(struct ggnet_conn));
c->id = id;
@@ -230,7 +234,11 @@ ggnet_conn_del(struct ggnet *net, struct ggnet_conn *c)
}
c->src->used--;
+ if (c->src->group)
+ c->src->group->conn_count--;
c->dst->used--;
+ if (c->dst->group)
+ c->dst->group->conn_count--;
LIST_REMOVE(c, entry);
free(c);
@@ -362,6 +370,10 @@ nodegroup_add(struct ggnet *net, enum ggnet_grouptype type, void *param,
static void
nodegroup_del(struct ggnet *net, struct ggnet_nodegroup *group)
{
+ if (group->node_count || group->conn_count)
+ gg_log_fatal("ggnet_nodegroup_del: trying to remove a used group !");
+ gg_log_debug("ggnet_nodegroup_del");
+
net->cb_delgroup(net, group);
if (group->parent) {
group->parent->child_groups_count--;
diff --git a/libglouglou/libggnet.h b/libglouglou/libggnet.h
index c705cc5..7eb14a8 100644
--- a/libglouglou/libggnet.h
+++ b/libglouglou/libggnet.h
@@ -32,6 +32,7 @@ struct ggnet_nodegroup {
struct in_addr addr;
char name[GGNET_DNSNAME_MAX];
int node_count;
+ int conn_count;
int child_groups_count;
void *usrdata;
};