summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
author/C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=pablo/emailAddress=pablo@netfilter.org </C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=pablo/emailAddress=pablo@netfilter.org>2005-10-23 22:14:05 +0000
committer/C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=pablo/emailAddress=pablo@netfilter.org </C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=pablo/emailAddress=pablo@netfilter.org>2005-10-23 22:14:05 +0000
commitf23f45f0f09656c0ef960febf6e07442c9053e6d (patch)
treedea24d9ad3e1a93b44406e927d8e1be15c1f8af3 /src
parentfd5957445131fa3855d40db40e421e78e9c9246a (diff)
o Add conntrack event notification test
o Define NFCT_ANY_GROUP flag o Now callback can return a value to stop receiving events o implement nfct_unset_callback()
Diffstat (limited to 'src')
-rw-r--r--src/libnetfilter_conntrack.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/libnetfilter_conntrack.c b/src/libnetfilter_conntrack.c
index 7900574..2dfdca1 100644
--- a/src/libnetfilter_conntrack.c
+++ b/src/libnetfilter_conntrack.c
@@ -104,6 +104,11 @@ void nfct_set_callback(struct nfct_handle *cth, nfct_callback callback)
cth->callback = callback;
}
+void nfct_unset_callback(struct nfct_handle *cth)
+{
+ cth->callback = NULL;
+}
+
static void nfct_set_handler(struct nfct_handle *cth, nfct_handler hndlr)
{
cth->handler = hndlr;
@@ -419,7 +424,7 @@ static int nfct_conntrack_netlink_handler(struct sockaddr_nl *sock,
struct nfct_conntrack ct;
unsigned int flags = 0;
struct nfct_handle *cth = arg;
- int type = NFNL_MSG_TYPE(nlh->nlmsg_type);
+ int type = NFNL_MSG_TYPE(nlh->nlmsg_type), ret = 0;
memset(&ct, 0, sizeof(struct nfct_conntrack));
@@ -473,13 +478,13 @@ static int nfct_conntrack_netlink_handler(struct sockaddr_nl *sock,
attr = NFA_NEXT(attr, attrlen);
}
if (cth->callback)
- cth->callback((void *) &ct, flags,
- typemsg2enum(type, nlh->nlmsg_flags));
+ ret = cth->callback((void *) &ct, flags,
+ typemsg2enum(type, nlh->nlmsg_flags));
- return 0;
+ return ret;
}
-void nfct_default_conntrack_display(void *arg, unsigned int flags, int type)
+int nfct_default_conntrack_display(void *arg, unsigned int flags, int type)
{
struct nfct_conntrack *ct = arg;
struct nfct_proto *h = NULL;
@@ -535,9 +540,11 @@ void nfct_default_conntrack_display(void *arg, unsigned int flags, int type)
sprintf(buf+size, "\n");
fprintf(stdout, buf);
+
+ return 0;
}
-void nfct_default_expect_display(void *arg, unsigned int flags, int type)
+int nfct_default_expect_display(void *arg, unsigned int flags, int type)
{
struct nfct_expect *exp = arg;
char buf[256];
@@ -553,6 +560,8 @@ void nfct_default_expect_display(void *arg, unsigned int flags, int type)
size += sprintf(buf+size, "id=%u ", exp->id);
size += sprintf(buf, "\n");
fprintf(stdout, buf);
+
+ return 0;
}
static int nfct_event_netlink_handler(struct sockaddr_nl *sock,