]> git.ipfire.org Git - thirdparty/ulogd2.git/commitdiff
NFCT: split event handler if hashtable is used or not
authorPablo Neira Ayuso <pablo@netfilter.org>
Tue, 12 Jan 2010 15:21:50 +0000 (16:21 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Sun, 17 Jan 2010 21:23:17 +0000 (22:23 +0100)
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 <pablo@netfilter.org>
input/flow/ulogd_inpflow_NFCT.c

index 3963ea1c283c0941307dd584b6bf6e79ebbc8f49..e8583d4308bccf6dcfc9eb09fae3a0c19cbb4a6a 100644 (file)
@@ -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);