From 1eb7fbc09ada511d1dcdfbe7d493068773dfd7f9 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Tue, 12 Jan 2010 16:21:50 +0100 Subject: NFCT: split event handler if hashtable is used or not This patch splits event_handler into two functions: event_handler_hashtable and event_handler_no_hashtable. Thus, we register the appropriate handler during the initialization time. This patch is a cleanup. Signed-off-by: Pablo Neira Ayuso --- input/flow/ulogd_inpflow_NFCT.c | 67 ++++++++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 28 deletions(-) (limited to 'input/flow') diff --git a/input/flow/ulogd_inpflow_NFCT.c b/input/flow/ulogd_inpflow_NFCT.c index 3963ea1..e8583d4 100644 --- a/input/flow/ulogd_inpflow_NFCT.c +++ b/input/flow/ulogd_inpflow_NFCT.c @@ -570,9 +570,9 @@ do_propagate_ct(struct ulogd_pluginstance *upi, propagate_ct(upi, ct, type, ts); } -static int event_handler(enum nf_conntrack_msg_type type, - struct nf_conntrack *ct, - void *data) +static int +event_handler_hashtable(enum nf_conntrack_msg_type type, + struct nf_conntrack *ct, void *data) { struct ulogd_pluginstance *upi = data; struct nfct_pluginstance *cpi = @@ -580,29 +580,6 @@ static int event_handler(enum nf_conntrack_msg_type type, struct ct_timestamp *ts; int ret, id; - if (!usehash_ce(upi->config_kset).u.value) { - struct ct_timestamp tmp = { - .ct = ct, - }; - switch(type) { - case NFCT_T_NEW: - gettimeofday(&tmp.time[START], NULL); - tmp.time[STOP].tv_sec = 0; - tmp.time[STOP].tv_usec = 0; - break; - case NFCT_T_DESTROY: - gettimeofday(&tmp.time[STOP], NULL); - tmp.time[START].tv_sec = 0; - tmp.time[START].tv_usec = 0; - break; - default: - ulogd_log(ULOGD_NOTICE, "unsupported message type\n"); - break; - } - do_propagate_ct(upi, ct, type, &tmp); - return NFCT_CB_CONTINUE; - } - switch(type) { case NFCT_T_NEW: ts = calloc(sizeof(struct ct_timestamp), 1); @@ -669,6 +646,34 @@ static int event_handler(enum nf_conntrack_msg_type type, return NFCT_CB_CONTINUE; } +static int +event_handler_no_hashtable(enum nf_conntrack_msg_type type, + struct nf_conntrack *ct, void *data) +{ + struct ulogd_pluginstance *upi = data; + struct ct_timestamp tmp = { + .ct = ct, + }; + + switch(type) { + case NFCT_T_NEW: + gettimeofday(&tmp.time[START], NULL); + tmp.time[STOP].tv_sec = 0; + tmp.time[STOP].tv_usec = 0; + break; + case NFCT_T_DESTROY: + gettimeofday(&tmp.time[STOP], NULL); + tmp.time[START].tv_sec = 0; + tmp.time[START].tv_usec = 0; + break; + default: + ulogd_log(ULOGD_NOTICE, "unsupported message type\n"); + return NFCT_CB_CONTINUE; + } + do_propagate_ct(upi, ct, type, &tmp); + return NFCT_CB_CONTINUE; +} + static int polling_handler(enum nf_conntrack_msg_type type, struct nf_conntrack *ct, void *data) @@ -931,7 +936,13 @@ static int constructor_nfct_events(struct ulogd_pluginstance *upi) goto err_cth; } - nfct_callback_register(cpi->cth, NFCT_T_ALL, &event_handler, upi); + if (usehash_ce(upi->config_kset).u.value != 0) { + nfct_callback_register(cpi->cth, NFCT_T_ALL, + &event_handler_hashtable, upi); + } else { + nfct_callback_register(cpi->cth, NFCT_T_ALL, + &event_handler_no_hashtable, upi); + } if (nlsockbufsize_ce(upi->config_kset).u.value) { setnlbufsiz(upi, nlsockbufsize_ce(upi->config_kset).u.value); @@ -970,7 +981,7 @@ static int constructor_nfct_events(struct ulogd_pluginstance *upi) goto err_ovh; } nfct_callback_register(cpi->cth, NFCT_T_ALL, - &event_handler, upi); + &event_handler_hashtable, upi); nfct_query(h, NFCT_Q_DUMP, &family); nfct_close(h); -- cgit v1.2.3