Useful in future patches. Signed-off-by: Ethan Jackson <et...@nicira.com> --- ofproto/netflow.c | 17 ++++++++++++++++- ofproto/netflow.h | 1 + 2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/ofproto/netflow.c b/ofproto/netflow.c index bf3501d..1206ae6 100644 --- a/ofproto/netflow.c +++ b/ofproto/netflow.c @@ -79,6 +79,7 @@ struct netflow_flow { }; static struct ovs_mutex mutex = OVS_MUTEX_INITIALIZER; +static atomic_uint netflow_count = ATOMIC_VAR_INIT(0); static struct netflow_flow *netflow_flow_lookup(struct netflow *, struct flow *) @@ -386,6 +387,8 @@ struct netflow * netflow_create(void) { struct netflow *nf = xzalloc(sizeof *nf); + int junk; + nf->engine_type = 0; nf->engine_id = 0; nf->boot_time = time_msec(); @@ -395,6 +398,7 @@ netflow_create(void) hmap_init(&nf->flows); atomic_init(&nf->ref_cnt, 1); ofpbuf_init(&nf->packet, 1500); + atomic_add(&netflow_count, 1, &junk); return nf; } @@ -422,11 +426,22 @@ netflow_unref(struct netflow *nf) atomic_sub(&nf->ref_cnt, 1, &orig); ovs_assert(orig > 0); if (orig == 1) { - ofpbuf_uninit(&nf->packet); + atomic_sub(&netflow_count, 1, &orig); collectors_destroy(nf->collectors); + ofpbuf_uninit(&nf->packet); free(nf); } } + +/* Returns true if there exist any netflow objects, false otherwise. */ +bool +netflow_exists(void) +{ + int n; + + atomic_read(&netflow_count, &n); + return n > 0; +} /* Helpers. */ diff --git a/ofproto/netflow.h b/ofproto/netflow.h index f37cfa7..c7f2574 100644 --- a/ofproto/netflow.h +++ b/ofproto/netflow.h @@ -43,6 +43,7 @@ struct netflow_options { struct netflow *netflow_create(void); struct netflow *netflow_ref(const struct netflow *); void netflow_unref(struct netflow *); +bool netflow_exists(void); int netflow_set_options(struct netflow *, const struct netflow_options *); void netflow_expire(struct netflow *, struct flow *); -- 1.8.1.2 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev