* Counter problem in a new nat target.
@ 2003-12-08 11:53 Emmanuel Guiton
2003-12-08 12:28 ` Henrik Nordstrom
0 siblings, 1 reply; 13+ messages in thread
From: Emmanuel Guiton @ 2003-12-08 11:53 UTC (permalink / raw)
To: netfilter-devel
Hi!
I need to include a counter in my new nat target function (basically to
know how many connections for a particular target are curently
registered in the nat table). I had first though about including a
simple integer in my targinfo, but I just noticed that it is passed to
the target function as a const. Thus it does not work.
Does someone has a good advice on where I can store my variable? Can I
use the void *userdata ? (I do not really know to what it points).
Thanks,
Emmanuel
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Counter problem in a new nat target.
2003-12-08 11:53 Counter problem in a new nat target Emmanuel Guiton
@ 2003-12-08 12:28 ` Henrik Nordstrom
2003-12-09 10:01 ` Emmanuel Guiton
0 siblings, 1 reply; 13+ messages in thread
From: Henrik Nordstrom @ 2003-12-08 12:28 UTC (permalink / raw)
To: Emmanuel Guiton; +Cc: netfilter-devel
On Mon, 8 Dec 2003, Emmanuel Guiton wrote:
> Does someone has a good advice on where I can store my variable? Can I
> use the void *userdata ? (I do not really know to what it points).
You should be able to use the userdata I think. It is a pointer to the
original targetinfo sent/seen by userspace iptables command. The kernel
operates on another copy of the table per CPU. But I would not recommend
doint this. I think it is better if you keep the needed counters
elsewhere. You can use reference counting from the check/destroy functions
to determine which counters you need to maintain.
Regards
Henrik
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Counter problem in a new nat target.
2003-12-08 12:28 ` Henrik Nordstrom
@ 2003-12-09 10:01 ` Emmanuel Guiton
2003-12-09 10:15 ` Henrik Nordstrom
0 siblings, 1 reply; 13+ messages in thread
From: Emmanuel Guiton @ 2003-12-09 10:01 UTC (permalink / raw)
To: Henrik Nordstrom; +Cc: netfilter-devel
Henrik Nordstrom wrote:
>On Mon, 8 Dec 2003, Emmanuel Guiton wrote:
>
>
>
>>Does someone has a good advice on where I can store my variable? Can I
>>use the void *userdata ? (I do not really know to what it points).
>>
>>
>
>You should be able to use the userdata I think. It is a pointer to the
>original targetinfo sent/seen by userspace iptables command. The kernel
>operates on another copy of the table per CPU. But I would not recommend
>doint this. I think it is better if you keep the needed counters
>elsewhere. You can use reference counting from the check/destroy functions
>to determine which counters you need to maintain.
>
>Regards
>Henrik
>
>
Well, things are still unclear for me... I have to admit that I am not
familiar with reference counting, so I do not really know about this
possibility.
My problem is that I do not see which data can be accessed by any of the
function involved. To be precise, I need to increment a counter each
time I get one new conntrack. Then I decrement it each time a conntrack
is destroyed or set as assured (tcp connection). The thing is
complicated by the fact that I have several counters, one for each
different IP destination address. the selection of the right counter is
done in the target function.
Thus, I can easily do the increment and decrement when assured in the
target function. But what about the decrement when a conntrack is destroyed?
Is the destroy function called when a conntrack is destroyed?
Previously, I was adviced to use a notifier to catch the "conntrack
destroyed" event. So is this equivalent (without regarding the data
which can be accessed)?
The hacking howto also states that the checkentry can be used to
dynalically allocate resources and they can be freed in the destroy
function. But here the same issue occurs: I do not see which common data
I can access from bothe the checkentry and destroy function.
Well, I feel I'm just blind and missing an important basic thing, but I
can't point it out. I hope I won't seem too stupid when the light comes :)
Emmanuel
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Counter problem in a new nat target.
2003-12-09 10:01 ` Emmanuel Guiton
@ 2003-12-09 10:15 ` Henrik Nordstrom
2003-12-09 13:48 ` Emmanuel Guiton
2003-12-10 8:35 ` Jesse Peng
0 siblings, 2 replies; 13+ messages in thread
From: Henrik Nordstrom @ 2003-12-09 10:15 UTC (permalink / raw)
To: Emmanuel Guiton; +Cc: netfilter-devel
On Tue, 9 Dec 2003, Emmanuel Guiton wrote:
> My problem is that I do not see which data can be accessed by any of the
> function involved. To be precise, I need to increment a counter each
> time I get one new conntrack. Then I decrement it each time a conntrack
> is destroyed or set as assured (tcp connection).
Then the problem is a lot more complex.
Increasing is not a big problem, but the decreasing are as it is hard to
find which counter to decrease from the conntrack and there is no good
place to store such information for later without extending the
ip_conntrack structure unless you implement this as a conntrack
application protocol helper (can be done if no other conntrack helper is
needed in the relevant traffic).
Do you really need to decrease the counters?
> Is the destroy function called when a conntrack is destroyed?
The target destroy function is called when the target as such in the
iptable is destroyed. It is not related to connection tracking.
> The hacking howto also states that the checkentry can be used to
> dynalically allocate resources and they can be freed in the destroy
> function. But here the same issue occurs: I do not see which common data
> I can access from bothe the checkentry and destroy function.
Both target functions operates on the iptable, not the traffic.
When you define your target/match you define what data the target/match
uses, and you are free to use this data as you please. This data MAY
include space for counters etc but due to SMP issues it is better to have
the counters separate as each CPU operates on his own iptable copy.
Regards
Henrik
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Counter problem in a new nat target.
2003-12-09 10:15 ` Henrik Nordstrom
@ 2003-12-09 13:48 ` Emmanuel Guiton
2003-12-09 16:16 ` Henrik Nordstrom
2003-12-10 8:35 ` Jesse Peng
1 sibling, 1 reply; 13+ messages in thread
From: Emmanuel Guiton @ 2003-12-09 13:48 UTC (permalink / raw)
To: Henrik Nordstrom; +Cc: netfilter-devel
Hi!
>Do you really need to decrease the counters?
>
Well yes. My goal is to have a precise count of the connections that are
not assured per destination host. I think I will try the helper option.
One more question: is the target function called for each new packets or
only once per conntrack? I think I read somewhere that it was the first
option but I cannot remember exactly and I cannot retrieve it.
Thanks a lot for your help,
Emmanuel
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Counter problem in a new nat target.
2003-12-09 13:48 ` Emmanuel Guiton
@ 2003-12-09 16:16 ` Henrik Nordstrom
0 siblings, 0 replies; 13+ messages in thread
From: Henrik Nordstrom @ 2003-12-09 16:16 UTC (permalink / raw)
To: Emmanuel Guiton; +Cc: netfilter-devel
On Tue, 9 Dec 2003, Emmanuel Guiton wrote:
> One more question: is the target function called for each new packets or
> only once per conntrack?
Once each time the rule is executed. How often this is depends on which
table you are in and your ruleset and ranges from once per connection to
once per packet (where retransmissions counts as unique packets)
Regards
Henrik
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Counter problem in a new nat target.
2003-12-09 10:15 ` Henrik Nordstrom
2003-12-09 13:48 ` Emmanuel Guiton
@ 2003-12-10 8:35 ` Jesse Peng
2003-12-10 11:00 ` Emmanuel Guiton
1 sibling, 1 reply; 13+ messages in thread
From: Jesse Peng @ 2003-12-10 8:35 UTC (permalink / raw)
To: Henrik Nordstrom; +Cc: Emmanuel Guiton, netfilter-devel
[-- Attachment #1: Type: text/plain, Size: 2202 bytes --]
Henrik Nordstrom wrote:
>On Tue, 9 Dec 2003, Emmanuel Guiton wrote:
>
>
>
>>My problem is that I do not see which data can be accessed by any of the
>>function involved. To be precise, I need to increment a counter each
>>time I get one new conntrack. Then I decrement it each time a conntrack
>>is destroyed or set as assured (tcp connection).
>>
>>
>
>Then the problem is a lot more complex.
>
>Increasing is not a big problem, but the decreasing are as it is hard to
>find which counter to decrease from the conntrack and there is no good
>place to store such information for later without extending the
>ip_conntrack structure unless you implement this as a conntrack
>application protocol helper (can be done if no other conntrack helper is
>needed in the relevant traffic).
>
>Do you really need to decrease the counters?
>
>
I think there will remain two alternative ways to deal with the
decrementing counter problem:
1.You maintain a hash struture which list any of your concerning
conntrack, and while a conntrack facing destroyed then looking up this
hash list if it is on the list.
2.I don't think you need any real helper no matter how simple it can
be.But just to extend your target module while matching ip_ct_new put
some flags in the help
information(conntrack->help.Your_patched_private_help_info)indecate that
this is the conntrack you care. And then while a conntrack facing
destroyed then looking up its help info if it is flaged. But if the
traffic you wanna filter overlaps with other helpers(eg.
ip_conntrack_ftp),then a somewhat dirty way regarding where you put your
flags(because help info is only for one helper)is to put them in
conntrack->nat.help.Your_patched_private_help_info(for this is
relatively a virgin place seldom touched by famous helpers except as I
know the pptp helper)
But no matter which above you choose, You can't avoid patching your
private destroying code like how ip_conntrack_destroyed(destroying code
for NATed conntrack) been called.Because so far we never see any
extending conntrack destroying machenism concerning helper's private
functionality(like helper->destroy).
Hope this can help ;)!
Regards
Jesse
[-- Attachment #2: Type: text/html, Size: 2569 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Counter problem in a new nat target.
2003-12-10 8:35 ` Jesse Peng
@ 2003-12-10 11:00 ` Emmanuel Guiton
2003-12-10 11:15 ` Henrik Nordstrom
0 siblings, 1 reply; 13+ messages in thread
From: Emmanuel Guiton @ 2003-12-10 11:00 UTC (permalink / raw)
To: netfilter-devel; +Cc: Jesse Peng, Henrik Nordstrom, KOVACS Krisztian
>
> 1.You maintain a hash struture which list any of your concerning
> conntrack, and while a conntrack facing destroyed then looking up
> this hash list if it is on the list.
> 2.I don't think you need any real helper no matter how simple it can
> be.But just to extend your target module while matching ip_ct_new put
> some flags in the help
> information(conntrack->help.Your_patched_private_help_info)indecate
> that this is the conntrack you care. And then while a conntrack facing
> destroyed then looking up its help info if it is flaged. But if the
> traffic you wanna filter overlaps with other helpers(eg.
> ip_conntrack_ftp),then a somewhat dirty way regarding where you put
> your flags(because help info is only for one helper)is to put them in
> conntrack->nat.help.Your_patched_private_help_info(for this is
> relatively a virgin place seldom touched by famous helpers except as I
> know the pptp helper)
>
> But no matter which above you choose, You can't avoid patching your
> private destroying code like how ip_conntrack_destroyed(destroying
> code for NATed conntrack) been called.Because so far we never see any
> extending conntrack destroying machenism concerning helper's private
> functionality(like helper->destroy).
> Hope this can help ;)!
>
> Regards
> Jesse
I think the conntrack->help data can be very useful to identify the
counter to which the conntack belongs. that's a good idea, thanks.
However, the counters' "storage place" is still an unsolved issue. The
main function that uses these counters is my nat target function. Only
the decrease operation cannot be performed in this function. As Jesse
and Krisztian metioned, I see so far two possibilities to decrease the
counter:
- in nat's ip_conntrack_destroyed
- in a function in a struct notifier_block called upon the receipt of
an IPCT_DESTROY notifier.
These two possibilities only offer to modify the conntrack structure,
which does not work in my case.The counters are used to count the number
of conntrack and the information in one conntrack is not related to the
information in another conntrack.
In my target function, as Henrik pointed out, I can - easily, for want
of cleanly - modify my counters in they are in the user data. In fact, I
had originally placed the counters there, so that they were initialized
when adding a new rule in the nat table.
Thus, if I could get a pointer to this user data when decreasinging my
counters, the problem would be solved. I don't think it really fits in
the ip_conntrack_destroyed function but why not in the notifier
function? What about modifying the conntrack notifier system so that it
includes also a pointer to the user data, or then make a brand new
notifier system (because at first sight I don't see how to include a
pointer to the user data in the current conntrack notifier system)?
What do you think about that?
Emmanuel
PS: thanks for your comments, it's very precious help.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Counter problem in a new nat target.
2003-12-10 11:00 ` Emmanuel Guiton
@ 2003-12-10 11:15 ` Henrik Nordstrom
2003-12-10 12:52 ` Emmanuel Guiton
0 siblings, 1 reply; 13+ messages in thread
From: Henrik Nordstrom @ 2003-12-10 11:15 UTC (permalink / raw)
To: Emmanuel Guiton; +Cc: netfilter-devel, Jesse Peng, KOVACS Krisztian
On Wed, 10 Dec 2003, Emmanuel Guiton wrote:
> Thus, if I could get a pointer to this user data when decreasinging my
> counters, the problem would be solved.
Won't work, and very dangerous.
You should maintain the storage within your module, and then add pointers
to this to conntrack and the target userinfo.
> I don't think it really fits in the ip_conntrack_destroyed function but
> why not in the notifier function?
They are the same, and both fits well (except that ip_conntrack_destroyed
is reserved for use by NAT).
> What about modifying the conntrack notifier system so that it includes
> also a pointer to the user data, or then make a brand new notifier
> system (because at first sight I don't see how to include a pointer to
> the user data in the current conntrack notifier system)?
You don't. You need to store the information you need in the conntrack if
it cannot be derived from the addressing information or other information
already present in conntrack.
I would really recommend you to extend conntrack with a custom field for
the purpose than to abuse the helper slots.
Regards
Henrik
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Counter problem in a new nat target.
2003-12-10 11:15 ` Henrik Nordstrom
@ 2003-12-10 12:52 ` Emmanuel Guiton
2003-12-10 14:19 ` Henrik Nordstrom
0 siblings, 1 reply; 13+ messages in thread
From: Emmanuel Guiton @ 2003-12-10 12:52 UTC (permalink / raw)
To: Henrik Nordstrom; +Cc: netfilter-devel, Jesse Peng, KOVACS Krisztian
>I would really recommend you to extend conntrack with a custom field for
>the purpose than to abuse the helper slots.
>
>
>
I was a bit reluctant to do this since I don't think it won't be useful
for any applications other than mine. I thought it was a waste.
Thanks again for your help,
Emmanuel
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Counter problem in a new nat target.
2003-12-10 12:52 ` Emmanuel Guiton
@ 2003-12-10 14:19 ` Henrik Nordstrom
2003-12-11 3:20 ` Jesse Peng
0 siblings, 1 reply; 13+ messages in thread
From: Henrik Nordstrom @ 2003-12-10 14:19 UTC (permalink / raw)
To: Emmanuel Guiton; +Cc: netfilter-devel, Jesse Peng, KOVACS Krisztian
On Wed, 10 Dec 2003, Emmanuel Guiton wrote:
> I was a bit reluctant to do this since I don't think it won't be useful
> for any applications other than mine. I thought it was a waste.
Well.. extending the conntrack structure with the required information is
a simple job, and can be done compile-time conditionally on if the feature
is required or not.
Making other designs relating conntrack entries with custom data either
requires abusing one of the existing fields and risk catastrophic results
if there ever is a conflict with the originally intended use of these
fields or by building an index outside of the conntrack table which is
both complex and error prone.
The amount of information you need to extend the conntrack with is very
small, just a identity of the counter used allowing your module to find
which counter was used for this conntrack entry when it is destroyed. In
the most simple implementation this is a pointer to your counter data, but
it can be just an integer or a suitable size if you prefer. It is all
dependent on how you want to identify the module specific data related to
this specific conntrack entry.
Regards
Henrik
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Counter problem in a new nat target.
2003-12-10 14:19 ` Henrik Nordstrom
@ 2003-12-11 3:20 ` Jesse Peng
2003-12-11 8:20 ` Henrik Nordstrom
0 siblings, 1 reply; 13+ messages in thread
From: Jesse Peng @ 2003-12-11 3:20 UTC (permalink / raw)
To: Henrik Nordstrom; +Cc: Emmanuel Guiton, netfilter-devel, KOVACS Krisztian
Henrik Nordstrom wrote:
>Making other designs relating conntrack entries with custom data either
>requires abusing one of the existing fields and risk catastrophic results
>if there ever is a conflict with the originally intended use of these
>fields or by building an index outside of the conntrack table which is
>both complex and error prone.
>
>
>
The conntrack->help.Private_connection_helper_info and
conntrack->nat.help.Private_nat_helper supposed not that much accused
been abused.They exist only if you need a helper put his private data,
so once not overlapsed with other helpers(You know the traffic your
helper wants is not what any other helper wants) is for sure, than You
of cource can put your helper data there. I think a helper exist not
stonely if a registered helper exist or even a conntrack->helper exist,
that depends on how you judge the "existence", by soul or by body ;)!
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Counter problem in a new nat target.
2003-12-11 3:20 ` Jesse Peng
@ 2003-12-11 8:20 ` Henrik Nordstrom
0 siblings, 0 replies; 13+ messages in thread
From: Henrik Nordstrom @ 2003-12-11 8:20 UTC (permalink / raw)
To: Jesse Peng; +Cc: Emmanuel Guiton, netfilter-devel, KOVACS Krisztian
On Thu, 11 Dec 2003, Jesse Peng wrote:
> The conntrack->help.Private_connection_helper_info and
> conntrack->nat.help.Private_nat_helper supposed not that much accused
> been abused.
There is not a problem using these from the helpers, but using these from
a target will give problems if such helper is ever used in the system for
the same traffic as the target.
By designing the solution using these fields you absolutely rule out the
possibility to combine the solution with conntrack/nat helpers.
Adding a new field is trivial and does not cause any conflicts. It is open
source after all.
Regards
Henrik
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2003-12-11 8:20 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-12-08 11:53 Counter problem in a new nat target Emmanuel Guiton
2003-12-08 12:28 ` Henrik Nordstrom
2003-12-09 10:01 ` Emmanuel Guiton
2003-12-09 10:15 ` Henrik Nordstrom
2003-12-09 13:48 ` Emmanuel Guiton
2003-12-09 16:16 ` Henrik Nordstrom
2003-12-10 8:35 ` Jesse Peng
2003-12-10 11:00 ` Emmanuel Guiton
2003-12-10 11:15 ` Henrik Nordstrom
2003-12-10 12:52 ` Emmanuel Guiton
2003-12-10 14:19 ` Henrik Nordstrom
2003-12-11 3:20 ` Jesse Peng
2003-12-11 8:20 ` Henrik Nordstrom
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.