aboutsummaryrefslogtreecommitdiffstats
path: root/libglouglou/libggnet.c
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 /libglouglou/libggnet.c
parentadapt to use libggnet group parenting (diff)
downloadglouglou-9e0139c4343d7032de3a3bbb4408914fa943ec45.tar.xz
glouglou-9e0139c4343d7032de3a3bbb4408914fa943ec45.zip
keep track of group connection usage
Diffstat (limited to 'libglouglou/libggnet.c')
-rw-r--r--libglouglou/libggnet.c12
1 files changed, 12 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--;