From: Thomas Mader <thezema@gmail.com>
To: Pablo Neira Ayuso <pablo@netfilter.org>
Cc: netfilter-devel@lists.netfilter.org
Subject: Re: remove connections notification by conntrack?
Date: Sat, 23 Sep 2006 11:23:04 +0200 [thread overview]
Message-ID: <200609231123.09148.thezema@gmail.com> (raw)
In-Reply-To: <4513FA76.1010304@netfilter.org>
[-- Attachment #1: Type: text/plain, Size: 3111 bytes --]
> Use the event API, do not forget to enable it (it's still marked as
> experimental): have a look at ctnetlink_conntrack_event inside
> ip_conntrack_netlink.c, that will help I think.
>
> Use the unsigned long parameter of your notify function above and wait
> for the event IPCT_DESTROY.
Now it looks like this:
int ipaddr_conntrack_event(struct notifier_block *this, unsigned long events,
void *ptr) {
struct ip_conntrack *ct = (struct ip_conntrack *)ptr;
if (events == IPCT_DESTROY) {
printk("We have been notified that connection %d was deleted!\n", ct->id);
}
return 0;
}
static struct notifier_block ctnl_notifier = {
.notifier_call = ipaddr_conntrack_event,
};
static int __init init(void)
{
int ret;
need_conntrack();
ret = ip_conntrack_register_notifier(&ctnl_notifier);
if (ret < 0) {
printk("ipaddr_init: cannot register notifier.\n");
goto err_unreg_notifier;
}
//ip_conntrack_destroyed = destroyed_connect;
printk(KERN_CRIT "init!\n");
return ipt_register_match(&ipaddr_match);
err_unreg_notifier:
ip_conntrack_unregister_notifier(&ctnl_notifier);
return 1;
}
But the problem remains the same. It works for TCP and I get properly notified
about those but not about UDP.
> BTW, some tips about the code that I hope that you can find useful:
>
> Don't nest the code like that, it is hard to read and really ugly, I
> always tell that to my students: invert the logic, check for errors not
> for sucess, I don't blame I used to do that time ago.
>
> Don't forget that a foo_get(...) operation usually requires a
> foo_put(...) afterwards.
Thanks for your comments we are hacking kernel stuff for the first time.
> There is no floating point in kernel (double) because of portability issues
We need to save the arriving time of the packets and we need a bit of
precision.
It would work also when we would save sec and usec separately but this would
make everything more complicated and for now we are just trying things out.
> And, out of curiosity, what do you want to do? Can't you do it with
> ctnetlink and in userspace?
We thought about that when we started but than it happend that we started
implementing as kernel space only. ;)
Our main focus was performance but maybe we need to go into userspace fully
because we need to save a lot of data.
We try to write a module which detects bursts and if a burst was detected a
package will be injected at the end of the burst.
We will make a kernel space module first which saves just one time stamp and
id per connection. (The list I posted earlier makes somthing different but I
get the idea mentioned right now some time later)
Then we implement a second algorithm for detecting bursts which is much more
complicated than that and relies on a special container structer which could
be implemented with lists afair.
The thing is that we will need much memory for this and therefore should be
placed in userspace maybe.
Is there a general rule when to write something for user/kernel space?
[-- Attachment #2: Type: application/pgp-signature, Size: 827 bytes --]
next prev parent reply other threads:[~2006-09-23 9:23 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-09-22 11:59 remove connections notification by conntrack? Thomas Mader
2006-09-22 12:58 ` Pablo Neira Ayuso
2006-09-22 13:19 ` Thomas Mader
2006-09-22 15:00 ` Pablo Neira Ayuso
2006-09-23 9:23 ` Thomas Mader [this message]
2006-09-24 3:10 ` Pablo Neira Ayuso
2006-09-24 9:51 ` Thomas Mader
2006-09-24 15:34 ` Pablo Neira Ayuso
2006-10-15 13:01 ` Thomas Mader
2006-10-15 16:11 ` Pablo Neira Ayuso
2006-10-15 17:03 ` Thomas Mader
2006-09-25 17:12 ` Alan Ezust
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200609231123.09148.thezema@gmail.com \
--to=thezema@gmail.com \
--cc=netfilter-devel@lists.netfilter.org \
--cc=pablo@netfilter.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.