All of lore.kernel.org
 help / color / mirror / Atom feed
* 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.