From c14bac8c8fd73e708430336dc8e4bcfc13e9b310 Mon Sep 17 00:00:00 2001 From: "/C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org" Date: Fri, 4 Nov 2005 14:32:50 +0000 Subject: add extra 'data' argument to callback functions --- .../libnetfilter_conntrack.h | 12 +++++----- src/libnetfilter_conntrack.c | 28 +++++++++++++++------- utils/ctnl_test.c | 6 ++--- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/include/libnetfilter_conntrack/libnetfilter_conntrack.h b/include/libnetfilter_conntrack/libnetfilter_conntrack.h index c0636b3..a51c55b 100644 --- a/include/libnetfilter_conntrack/libnetfilter_conntrack.h +++ b/include/libnetfilter_conntrack/libnetfilter_conntrack.h @@ -197,7 +197,7 @@ enum { }; struct nfct_handle; -typedef int (*nfct_callback)(void *arg, unsigned int flags, int); +typedef int (*nfct_callback)(void *arg, unsigned int flags, int, void *data); typedef int (*nfct_handler)(struct nfct_handle *cth, struct nlmsghdr *nlh, void *arg); @@ -230,16 +230,16 @@ extern int nfct_close(struct nfct_handle *cth); * [Register|unregister] callbacks */ extern void nfct_register_callback(struct nfct_handle *cth, - nfct_callback callback); + nfct_callback callback, void *data); extern void nfct_unregister_callback(struct nfct_handle *cth); /* * callback displayers */ -extern int nfct_default_conntrack_display(void *arg, unsigned int, int); -extern int nfct_default_conntrack_display_id(void *arg, unsigned int, int); -extern int nfct_default_expect_display(void *arg, unsigned int, int); -extern int nfct_default_expect_display_id(void *arg, unsigned int, int); +extern int nfct_default_conntrack_display(void *arg, unsigned int, int, void *); +extern int nfct_default_conntrack_display_id(void *arg, unsigned int, int, void *); +extern int nfct_default_expect_display(void *arg, unsigned int, int, void *); +extern int nfct_default_expect_display_id(void *arg, unsigned int, int, void *); /* * [Create|update|get|destroy] conntracks diff --git a/src/libnetfilter_conntrack.c b/src/libnetfilter_conntrack.c index 5b125cc..872a3df 100644 --- a/src/libnetfilter_conntrack.c +++ b/src/libnetfilter_conntrack.c @@ -26,6 +26,7 @@ struct nfct_handle { struct nfnl_handle nfnlh; nfct_callback callback; /* user callback */ + void *callback_data; /* user data for callback */ nfct_handler handler; /* netlink handler */ }; @@ -106,14 +107,17 @@ int nfct_close(struct nfct_handle *cth) return err; } -void nfct_register_callback(struct nfct_handle *cth, nfct_callback callback) +void nfct_register_callback(struct nfct_handle *cth, nfct_callback callback, + void *data) { cth->callback = callback; + cth->callback_data = data; } void nfct_unregister_callback(struct nfct_handle *cth) { cth->callback = NULL; + cth->callback_data = NULL; } static void nfct_build_tuple_ip(struct nfnlhdr *req, int size, @@ -484,7 +488,8 @@ static int nfct_conntrack_netlink_handler(struct nfct_handle *cth, if (cth->callback) ret = cth->callback((void *) &ct, flags, - typemsg2enum(type, nlh->nlmsg_flags)); + typemsg2enum(type, nlh->nlmsg_flags), + cth->callback_data); return ret; } @@ -541,8 +546,8 @@ int nfct_sprintf_proto(char *buf, struct nfct_tuple *t) int nfct_sprintf_counters(char *buf, struct nfct_conntrack *ct, int dir) { return (sprintf(buf, "packets=%llu bytes=%llu ", - ct->counters[dir].packets, - ct->counters[dir].bytes)); + (unsigned long long) ct->counters[dir].packets, + (unsigned long long) ct->counters[dir].bytes)); } int nfct_sprintf_mark(char *buf, struct nfct_conntrack *ct) @@ -617,7 +622,8 @@ int nfct_sprintf_conntrack_id(char *buf, struct nfct_conntrack *ct, return --size; } -int nfct_default_conntrack_display(void *arg, unsigned int flags, int type) +int nfct_default_conntrack_display(void *arg, unsigned int flags, int type, + void *data) { char buf[512]; int size; @@ -630,7 +636,8 @@ int nfct_default_conntrack_display(void *arg, unsigned int flags, int type) return 0; } -int nfct_default_conntrack_display_id(void *arg, unsigned int flags, int type) +int nfct_default_conntrack_display_id(void *arg, unsigned int flags, int type, + void *data) { char buf[512]; int size; @@ -673,7 +680,8 @@ int nfct_sprintf_expect_id(char *buf, struct nfct_expect *exp) return --size; } -int nfct_default_expect_display(void *arg, unsigned int flags, int type) +int nfct_default_expect_display(void *arg, unsigned int flags, int type, + void *data) { char buf[256]; int size = 0; @@ -686,7 +694,8 @@ int nfct_default_expect_display(void *arg, unsigned int flags, int type) return 0; } -int nfct_default_expect_display_id(void *arg, unsigned int flags, int type) +int nfct_default_expect_display_id(void *arg, unsigned int flags, int type, + void *data) { char buf[256]; int size = 0; @@ -739,7 +748,8 @@ static int nfct_expect_netlink_handler(struct nfct_handle *cth, if (cth->callback) ret = cth->callback((void *)&exp, 0, - typemsg2enum(type, nlh->nlmsg_flags)); + typemsg2enum(type, nlh->nlmsg_flags), + cth->callback_data); return 0; } diff --git a/utils/ctnl_test.c b/utils/ctnl_test.c index 3c8f6d8..f1361d3 100644 --- a/utils/ctnl_test.c +++ b/utils/ctnl_test.c @@ -15,7 +15,7 @@ #include #include -static int event_counter(void *arg, unsigned int flags, int type) +static int event_counter(void *arg, unsigned int flags, int type, void *data) { static int counter = 0; @@ -90,7 +90,7 @@ int main(int argc, char **argv) if (ret < 0 && ret != -EEXIST) errors++; - nfct_register_callback(cth, nfct_default_conntrack_display); + nfct_register_callback(cth, nfct_default_conntrack_display, NULL); ret = nfct_dump_conntrack_table_reset_counters(cth); fprintf(stdout, "TEST 2: dump conntrack table and reset (%d)\n", ret); if (ret < 0) @@ -132,7 +132,7 @@ int main(int argc, char **argv) fprintf(stdout, "TEST 7: Waiting for 10 conntrack events\n"); signal(SIGINT, event_sighandler); - nfct_register_callback(cth, event_counter); + nfct_register_callback(cth, event_counter, NULL); ret = nfct_event_conntrack(cth); fprintf(stdout, "TEST 7: Received 10 conntrack events (%d)\n", ret); -- cgit v1.2.3