* [PATCH 2/3] set SEEN_REPLY before destroying conntrack on TCP RST
@ 2008-05-22 9:13 Fabian Hugelshofer
2008-05-26 18:25 ` Fabian Hugelshofer
0 siblings, 1 reply; 9+ messages in thread
From: Fabian Hugelshofer @ 2008-05-22 9:13 UTC (permalink / raw)
To: netfilter-devel
If a connection fails with a TCP reset, the conntrack is destroyed
immediately. This patch sets the SEEN_REPLY bit before destroying the
conntrack.
--- linux-2.6.25.4.orig/net/netfilter/nf_conntrack_proto_tcp.c 2008-05-20 21:05:06.000000000 +0100
+++ linux-2.6.25.4/net/netfilter/nf_conntrack_proto_tcp.c 2008-05-21 09:41:15.000000000 +0100
@@ -962,6 +962,8 @@
problem case, so we can delete the conntrack
immediately. --RR */
if (th->rst) {
+ if (ctinfo >= IP_CT_IS_REPLY)
+ set_bit(IPS_SEEN_REPLY_BIT, &ct->status);
if (del_timer(&ct->timeout))
ct->timeout.function((unsigned long)ct);
return NF_ACCEPT;
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [PATCH 2/3] set SEEN_REPLY before destroying conntrack on TCP RST 2008-05-22 9:13 [PATCH 2/3] set SEEN_REPLY before destroying conntrack on TCP RST Fabian Hugelshofer @ 2008-05-26 18:25 ` Fabian Hugelshofer 2008-05-27 4:53 ` Patrick McHardy 0 siblings, 1 reply; 9+ messages in thread From: Fabian Hugelshofer @ 2008-05-26 18:25 UTC (permalink / raw) To: netfilter-devel; +Cc: kaber On Thu, 2008-05-22 at 10:13 +0100, Fabian Hugelshofer wrote: > If a connection fails with a TCP reset, the conntrack is destroyed > immediately. This patch sets the SEEN_REPLY bit before destroying the > conntrack. This updated version also increments the accounting counters. Do I see this right, that the commits should be observable in the patch-o-matic git, if they are done? --- linux-2.6.25.4.orig/net/netfilter/nf_conntrack_proto_tcp.c 2008-05-26 17:43:01.000000000 +0100 +++ linux-2.6.25.4/net/netfilter/nf_conntrack_proto_tcp.c 2008-05-26 17:32:17.000000000 +0100 @@ -22,6 +22,7 @@ #include <linux/netfilter_ipv4.h> #include <linux/netfilter_ipv6.h> #include <net/netfilter/nf_conntrack.h> +#include <net/netfilter/nf_conntrack_core.h> #include <net/netfilter/nf_conntrack_l4proto.h> #include <net/netfilter/nf_conntrack_ecache.h> #include <net/netfilter/nf_log.h> @@ -960,8 +961,19 @@ /* If only reply is a RST, we can consider ourselves not to have an established connection: this is a fairly common problem case, so we can delete the conntrack - immediately. --RR */ + immediately. --RR + The SEEN_REPLY bit and the accounting counters are updated + here to have the correct information in the ct event. */ if (th->rst) { + if (ctinfo >= IP_CT_IS_REPLY) + set_bit(IPS_SEEN_REPLY_BIT, &ct->status); +#ifdef CONFIG_NF_CT_ACCT + spin_lock_bh(&nf_conntrack_lock); + ct->counters[CTINFO2DIR(ctinfo)].packets++; + ct->counters[CTINFO2DIR(ctinfo)].bytes += + skb->len - skb_network_offset(skb); + spin_unlock_bh(&nf_conntrack_lock); +#endif if (del_timer(&ct->timeout)) ct->timeout.function((unsigned long)ct); return NF_ACCEPT; -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] set SEEN_REPLY before destroying conntrack on TCP RST 2008-05-26 18:25 ` Fabian Hugelshofer @ 2008-05-27 4:53 ` Patrick McHardy 2008-05-27 14:33 ` Fabian Hugelshofer 0 siblings, 1 reply; 9+ messages in thread From: Patrick McHardy @ 2008-05-27 4:53 UTC (permalink / raw) To: Fabian Hugelshofer; +Cc: netfilter-devel [-- Attachment #1: Type: text/plain, Size: 2688 bytes --] Fabian Hugelshofer wrote: > On Thu, 2008-05-22 at 10:13 +0100, Fabian Hugelshofer wrote: >> If a connection fails with a TCP reset, the conntrack is destroyed >> immediately. This patch sets the SEEN_REPLY bit before destroying the >> conntrack. > > This updated version also increments the accounting counters. Thanks, but this needs to be changed slightly. > Do I see this right, that the commits should be observable in the > patch-o-matic git, if they are done? No, they go in my nf-next-2.6.git tree. I'm uploading it to (takes about 15 minutes): git://git.kernel.org/pub/scm/linux/kernel/git/kaber/nf-next-2.6.git > --- linux-2.6.25.4.orig/net/netfilter/nf_conntrack_proto_tcp.c 2008-05-26 17:43:01.000000000 +0100 > +++ linux-2.6.25.4/net/netfilter/nf_conntrack_proto_tcp.c 2008-05-26 17:32:17.000000000 +0100 > @@ -22,6 +22,7 @@ > #include <linux/netfilter_ipv4.h> > #include <linux/netfilter_ipv6.h> > #include <net/netfilter/nf_conntrack.h> > +#include <net/netfilter/nf_conntrack_core.h> > #include <net/netfilter/nf_conntrack_l4proto.h> > #include <net/netfilter/nf_conntrack_ecache.h> > #include <net/netfilter/nf_log.h> > @@ -960,8 +961,19 @@ > /* If only reply is a RST, we can consider ourselves not to > have an established connection: this is a fairly common > problem case, so we can delete the conntrack > - immediately. --RR */ > + immediately. --RR > + The SEEN_REPLY bit and the accounting counters are updated > + here to have the correct information in the ct event. */ > if (th->rst) { > + if (ctinfo >= IP_CT_IS_REPLY) > + set_bit(IPS_SEEN_REPLY_BIT, &ct->status); > +#ifdef CONFIG_NF_CT_ACCT > + spin_lock_bh(&nf_conntrack_lock); > + ct->counters[CTINFO2DIR(ctinfo)].packets++; > + ct->counters[CTINFO2DIR(ctinfo)].bytes += I'm trying to get rid of nf_conntrack_lock uses outside of the connection tracking core, so this is a move in the wrong direction. Also the same needs to be done for ICMP, DCCP, ICMPv6 and possibly more. > + skb->len - skb_network_offset(skb); > + spin_unlock_bh(&nf_conntrack_lock); > +#endif > if (del_timer(&ct->timeout)) > ct->timeout.function((unsigned long)ct); I think a better way is to encapsulate the del_timer/timeout.function calls in a nf_ct_kill() function and perform accounting there. Since all manual invocations of timeout.function are/should be performed only while handling packets (that are usually not accounted), this seems like the right way. The attached patch (also queued in the tree mentioned above) does the encapsulation. Please split your patch into two parts (SEEN_REPLY and accounting) and add a Signed-off-by: line. [-- Attachment #2: x --] [-- Type: text/plain, Size: 5291 bytes --] commit bb2d3ddb8fe46f387eeb92220050dcd76e5b6071 Author: Patrick McHardy <kaber@trash.net> Date: Tue May 27 06:46:40 2008 +0200 [NETFILTER]: nf_conntrack: add nf_ct_kill() Encapsulate the common if (del_timer(&ct->timeout)) ct->timeout.function((unsigned long)ct) sequence in a new function. Signed-off-by: Patrick McHardy <kaber@trash.net> diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h index 2dbd6c0..fc19ab2 100644 --- a/include/net/netfilter/nf_conntrack.h +++ b/include/net/netfilter/nf_conntrack.h @@ -223,6 +223,8 @@ static inline void nf_ct_refresh(struct nf_conn *ct, __nf_ct_refresh_acct(ct, 0, skb, extra_jiffies, 0); } +extern void nf_ct_kill(struct nf_conn *ct); + /* These are for NAT. Icky. */ /* Update TCP window tracking data when NAT mangles the packet */ extern void nf_conntrack_tcp_update(const struct sk_buff *skb, diff --git a/net/ipv4/netfilter/nf_conntrack_proto_icmp.c b/net/ipv4/netfilter/nf_conntrack_proto_icmp.c index 78ab19a..0e21a46 100644 --- a/net/ipv4/netfilter/nf_conntrack_proto_icmp.c +++ b/net/ipv4/netfilter/nf_conntrack_proto_icmp.c @@ -87,9 +87,8 @@ static int icmp_packet(struct nf_conn *ct, means this will only run once even if count hits zero twice (theoretically possible with SMP) */ if (CTINFO2DIR(ctinfo) == IP_CT_DIR_REPLY) { - if (atomic_dec_and_test(&ct->proto.icmp.count) - && del_timer(&ct->timeout)) - ct->timeout.function((unsigned long)ct); + if (atomic_dec_and_test(&ct->proto.icmp.count)) + nf_ct_kill(ct); } else { atomic_inc(&ct->proto.icmp.count); nf_conntrack_event_cache(IPCT_PROTOINFO_VOLATILE, skb); diff --git a/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c b/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c index ee713b0..fe081b9 100644 --- a/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c +++ b/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c @@ -89,9 +89,8 @@ static int icmpv6_packet(struct nf_conn *ct, means this will only run once even if count hits zero twice (theoretically possible with SMP) */ if (CTINFO2DIR(ctinfo) == IP_CT_DIR_REPLY) { - if (atomic_dec_and_test(&ct->proto.icmp.count) - && del_timer(&ct->timeout)) - ct->timeout.function((unsigned long)ct); + if (atomic_dec_and_test(&ct->proto.icmp.count)) + nf_ct_kill(ct); } else { atomic_inc(&ct->proto.icmp.count); nf_conntrack_event_cache(IPCT_PROTOINFO_VOLATILE, skb); diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c index c4b1799..79b07c3 100644 --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c @@ -848,6 +848,13 @@ acct: } EXPORT_SYMBOL_GPL(__nf_ct_refresh_acct); +void nf_ct_kill(struct nf_conn *ct) +{ + if (del_timer(&ct->timeout)) + ct->timeout.function((unsigned long)ct); +} +EXPORT_SYMBOL_GPL(nf_ct_kill); + #if defined(CONFIG_NF_CT_NETLINK) || defined(CONFIG_NF_CT_NETLINK_MODULE) #include <linux/netfilter/nfnetlink.h> diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c index 13918c1..ab655f6 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c @@ -812,9 +812,8 @@ ctnetlink_del_conntrack(struct sock *ctnl, struct sk_buff *skb, return -ENOENT; } } - if (del_timer(&ct->timeout)) - ct->timeout.function((unsigned long)ct); + nf_ct_kill(ct); nf_ct_put(ct); return 0; diff --git a/net/netfilter/nf_conntrack_proto_dccp.c b/net/netfilter/nf_conntrack_proto_dccp.c index afb4a18..223742f 100644 --- a/net/netfilter/nf_conntrack_proto_dccp.c +++ b/net/netfilter/nf_conntrack_proto_dccp.c @@ -475,8 +475,7 @@ static int dccp_packet(struct nf_conn *ct, const struct sk_buff *skb, if (type == DCCP_PKT_RESET && !test_bit(IPS_SEEN_REPLY_BIT, &ct->status)) { /* Tear down connection immediately if only reply is a RESET */ - if (del_timer(&ct->timeout)) - ct->timeout.function((unsigned long)ct); + nf_ct_kill(ct); return NF_ACCEPT; } diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c index ba94004..c4aa11e 100644 --- a/net/netfilter/nf_conntrack_proto_tcp.c +++ b/net/netfilter/nf_conntrack_proto_tcp.c @@ -843,8 +843,7 @@ static int tcp_packet(struct nf_conn *ct, /* Attempt to reopen a closed/aborted connection. * Delete this connection and look up again. */ write_unlock_bh(&tcp_lock); - if (del_timer(&ct->timeout)) - ct->timeout.function((unsigned long)ct); + nf_ct_kill(ct); return -NF_REPEAT; } /* Fall through */ @@ -877,8 +876,7 @@ static int tcp_packet(struct nf_conn *ct, if (LOG_INVALID(IPPROTO_TCP)) nf_log_packet(pf, 0, skb, NULL, NULL, NULL, "nf_ct_tcp: killing out of sync session "); - if (del_timer(&ct->timeout)) - ct->timeout.function((unsigned long)ct); + nf_ct_kill(ct); return -NF_DROP; } ct->proto.tcp.last_index = index; @@ -961,8 +959,7 @@ static int tcp_packet(struct nf_conn *ct, problem case, so we can delete the conntrack immediately. --RR */ if (th->rst) { - if (del_timer(&ct->timeout)) - ct->timeout.function((unsigned long)ct); + nf_ct_kill(ct); return NF_ACCEPT; } } else if (!test_bit(IPS_ASSURED_BIT, &ct->status) ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] set SEEN_REPLY before destroying conntrack on TCP RST 2008-05-27 4:53 ` Patrick McHardy @ 2008-05-27 14:33 ` Fabian Hugelshofer 2008-05-27 14:48 ` Patrick McHardy 0 siblings, 1 reply; 9+ messages in thread From: Fabian Hugelshofer @ 2008-05-27 14:33 UTC (permalink / raw) To: netfilter-devel; +Cc: Patrick McHardy Patrick McHardy wrote: > Fabian Hugelshofer wrote: >> On Thu, 2008-05-22 at 10:13 +0100, Fabian Hugelshofer wrote: >>> If a connection fails with a TCP reset, the conntrack is destroyed >>> immediately. This patch sets the SEEN_REPLY bit before destroying the >>> conntrack. >> >> This updated version also increments the accounting counters. > > Thanks, but this needs to be changed slightly. [...] > I think a better way is to encapsulate the del_timer/timeout.function > calls in a nf_ct_kill() function and perform accounting there. > Since all manual invocations of timeout.function are/should be > performed only while handling packets (that are usually not > accounted), this seems like the right way. Ok, I see. But for accounting ctinfo and skbuf are required. I'll include them in the argument list of nf_ct_kill() and update the function invocations, ok? Or should I introduce an nf_ct_kill_acct()? I just did another test where my SEEN_REPLY patch was not applied. Surprisingly the SEEN_REPLY bit was set in the destroy events. I am afraid, but I have to assume, that I did not evaluate the bahavior carefully enough. Probably I confused the accounting, no status and no related packets issues. Unless a race condition might be thinkable, we should leave the SEEN_REPLY patch. If it is possible, that the timeout function immediately triggers the destroy event to be exported over netlink, then the patch is still necessary. I don't see things detailed enough to judge this. If it is necessary, should it be included in nf_ct_kill()? -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] set SEEN_REPLY before destroying conntrack on TCP RST 2008-05-27 14:33 ` Fabian Hugelshofer @ 2008-05-27 14:48 ` Patrick McHardy 2008-05-27 22:55 ` [PATCH 2/3] accounting on ct kill (was: set SEEN_REPLY before destroying conntrack on TCP RST) Fabian Hugelshofer 0 siblings, 1 reply; 9+ messages in thread From: Patrick McHardy @ 2008-05-27 14:48 UTC (permalink / raw) To: Fabian Hugelshofer; +Cc: netfilter-devel Fabian Hugelshofer wrote: > Patrick McHardy wrote: >> Fabian Hugelshofer wrote: >>> On Thu, 2008-05-22 at 10:13 +0100, Fabian Hugelshofer wrote: >>>> If a connection fails with a TCP reset, the conntrack is destroyed >>>> immediately. This patch sets the SEEN_REPLY bit before destroying >>>> the conntrack. >>> >>> This updated version also increments the accounting counters. >> >> Thanks, but this needs to be changed slightly. > [...] >> I think a better way is to encapsulate the del_timer/timeout.function >> calls in a nf_ct_kill() function and perform accounting there. >> Since all manual invocations of timeout.function are/should be >> performed only while handling packets (that are usually not >> accounted), this seems like the right way. > > Ok, I see. But for accounting ctinfo and skbuf are required. I'll > include them in the argument list of nf_ct_kill() and update the > function invocations, ok? Or should I introduce an nf_ct_kill_acct()? All callers in my patch want the accounting, so a seperate function would make this one useless. So I'd go with adding a struct sk_buff * argument, even though its not particulary pretty :) > I just did another test where my SEEN_REPLY patch was not applied. > Surprisingly the SEEN_REPLY bit was set in the destroy events. I am > afraid, but I have to assume, that I did not evaluate the bahavior > carefully enough. Probably I confused the accounting, no status and no > related packets issues. > > Unless a race condition might be thinkable, we should leave the > SEEN_REPLY patch. If it is possible, that the timeout function > immediately triggers the destroy event to be exported over netlink, then > the patch is still necessary. I don't see things detailed enough to > judge this. If it is necessary, should it be included in nf_ct_kill()? Right, I missed this as well. The connection killing only removes the timer, but the packet will still be handled as a valid packet. So nf_conntrack_core sets the SEEN_REPLY bit, before destroying it when the final refcount (from the packet) is released. Thanks for noticing this :) -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] accounting on ct kill (was: set SEEN_REPLY before destroying conntrack on TCP RST) 2008-05-27 14:48 ` Patrick McHardy @ 2008-05-27 22:55 ` Fabian Hugelshofer 2008-05-28 4:07 ` [PATCH 2/3] accounting on ct kill Patrick McHardy 0 siblings, 1 reply; 9+ messages in thread From: Fabian Hugelshofer @ 2008-05-27 22:55 UTC (permalink / raw) To: netfilter-devel; +Cc: Patrick McHardy Introduces nf_ct_kill_acct() which increments the accounting counters on conntrack kill. The new function was necessary, because there are calls to nf_ct_kill() which don't need accounting: nf_conntrack_proto_tcp.c line ~847: Kills ct and returns NF_REPEAT. We don't want to count twice. nf_conntrack_proto_tcp.c line ~880: Kills ct and returns NF_DROP. I think we don't want to count dropped packets. nf_conntrack_netlink.c line ~824: As far as I can see ctnetlink_del_conntrack() is used to destroy a conntrack on behalf of the user. There is an sk_buff, but I don't think this is an actual packet. Incrementing counters here is therefore not desired. Signed-off-by: Fabian Hugelshofer <hugelshofer2006@gmx.ch> --- linux-2.6.25.4.orig/include/net/netfilter/nf_conntrack.h 2008-05-27 21:47:46.000000000 +0100 +++ linux-2.6.25.4/include/net/netfilter/nf_conntrack.h 2008-05-27 22:14:38.000000000 +0100 @@ -230,7 +230,24 @@ __nf_ct_refresh_acct(ct, 0, skb, extra_jiffies, 0); } -extern void nf_ct_kill(struct nf_conn *ct); +extern void __nf_ct_kill_acct(struct nf_conn *ct, + enum ip_conntrack_info ctinfo, + const struct sk_buff *skb, + int do_acct); + +/* kill conntrack and do accounting */ +static inline void nf_ct_kill_acct(struct nf_conn *ct, + enum ip_conntrack_info ctinfo, + const struct sk_buff *skb) +{ + __nf_ct_kill_acct(ct, ctinfo, skb, 1); +} + +/* kill conntrack without accounting */ +static inline void nf_ct_kill(struct nf_conn *ct) +{ + __nf_ct_kill_acct(ct, 0, NULL, 0); +} /* These are for NAT. Icky. */ /* Update TCP window tracking data when NAT mangles the packet */ --- linux-2.6.25.4.orig/net/ipv4/netfilter/nf_conntrack_proto_icmp.c 2008-05-27 21:47:08.000000000 +0100 +++ linux-2.6.25.4/net/ipv4/netfilter/nf_conntrack_proto_icmp.c 2008-05-27 22:13:28.000000000 +0100 @@ -89,7 +89,7 @@ (theoretically possible with SMP) */ if (CTINFO2DIR(ctinfo) == IP_CT_DIR_REPLY) { if (atomic_dec_and_test(&ct->proto.icmp.count)) - nf_ct_kill(ct); + nf_ct_kill_acct(ct, ctinfo, skb); } else { atomic_inc(&ct->proto.icmp.count); nf_conntrack_event_cache(IPCT_PROTOINFO_VOLATILE, skb); --- linux-2.6.25.4.orig/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c 2008-05-27 21:47:13.000000000 +0100 +++ linux-2.6.25.4/net/ipv6/netfilter/nf_conntrack_proto_icmpv6.c 2008-05-27 22:15:38.000000000 +0100 @@ -90,7 +90,7 @@ (theoretically possible with SMP) */ if (CTINFO2DIR(ctinfo) == IP_CT_DIR_REPLY) { if (atomic_dec_and_test(&ct->proto.icmp.count)) - nf_ct_kill(ct); + nf_ct_kill_acct(ct, ctinfo, skb); } else { atomic_inc(&ct->proto.icmp.count); nf_conntrack_event_cache(IPCT_PROTOINFO_VOLATILE, skb); --- linux-2.6.25.4.orig/net/netfilter/nf_conntrack_core.c 2008-05-27 21:47:15.000000000 +0100 +++ linux-2.6.25.4/net/netfilter/nf_conntrack_core.c 2008-05-27 22:43:00.000000000 +0100 @@ -855,12 +855,24 @@ } EXPORT_SYMBOL_GPL(__nf_ct_refresh_acct); -void nf_ct_kill(struct nf_conn *ct) -{ +void __nf_ct_kill_acct(struct nf_conn *ct, + enum ip_conntrack_info ctinfo, + const struct sk_buff *skb, + int do_acct) +{ +#ifdef CONFIG_NF_CT_ACCT + if (do_acct) { + spin_lock_bh(&nf_conntrack_lock); + ct->counters[CTINFO2DIR(ctinfo)].packets++; + ct->counters[CTINFO2DIR(ctinfo)].bytes += + skb->len - skb_network_offset(skb); + spin_unlock_bh(&nf_conntrack_lock); + } +#endif if (del_timer(&ct->timeout)) ct->timeout.function((unsigned long)ct); } -EXPORT_SYMBOL_GPL(nf_ct_kill); +EXPORT_SYMBOL_GPL(__nf_ct_kill_acct); #if defined(CONFIG_NF_CT_NETLINK) || defined(CONFIG_NF_CT_NETLINK_MODULE) --- linux-2.6.25.4.orig/net/netfilter/nf_conntrack_proto_dccp.c 2008-05-27 21:48:07.000000000 +0100 +++ linux-2.6.25.4/net/netfilter/nf_conntrack_proto_dccp.c 2008-05-27 22:16:12.000000000 +0100 @@ -475,7 +475,7 @@ if (type == DCCP_PKT_RESET && !test_bit(IPS_SEEN_REPLY_BIT, &ct->status)) { /* Tear down connection immediately if only reply is a RESET */ - nf_ct_kill(ct); + nf_ct_kill_acct(ct, ctinfo, skb); return NF_ACCEPT; } --- linux-2.6.25.4.orig/net/netfilter/nf_conntrack_proto_tcp.c 2008-05-27 21:47:16.000000000 +0100 +++ linux-2.6.25.4/net/netfilter/nf_conntrack_proto_tcp.c 2008-05-27 22:17:05.000000000 +0100 @@ -960,7 +960,7 @@ problem case, so we can delete the conntrack immediately. --RR */ if (th->rst) { - nf_ct_kill(ct); + nf_ct_kill_acct(ct, ctinfo, skb); return NF_ACCEPT; } } else if (!test_bit(IPS_ASSURED_BIT, &ct->status) ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] accounting on ct kill 2008-05-27 22:55 ` [PATCH 2/3] accounting on ct kill (was: set SEEN_REPLY before destroying conntrack on TCP RST) Fabian Hugelshofer @ 2008-05-28 4:07 ` Patrick McHardy 2008-05-28 8:36 ` Fabian Hugelshofer 0 siblings, 1 reply; 9+ messages in thread From: Patrick McHardy @ 2008-05-28 4:07 UTC (permalink / raw) To: Fabian Hugelshofer; +Cc: netfilter-devel Fabian Hugelshofer wrote: > Introduces nf_ct_kill_acct() which increments the accounting counters on > conntrack kill. The new function was necessary, because there are calls > to nf_ct_kill() which don't need accounting: > > nf_conntrack_proto_tcp.c line ~847: > Kills ct and returns NF_REPEAT. We don't want to count twice. > > nf_conntrack_proto_tcp.c line ~880: > Kills ct and returns NF_DROP. I think we don't want to count dropped > packets. > > nf_conntrack_netlink.c line ~824: > As far as I can see ctnetlink_del_conntrack() is used to destroy a > conntrack on behalf of the user. There is an sk_buff, but I don't think > this is an actual packet. Incrementing counters here is therefore not > desired. Good points. Applied, thanks Fabian. I've also pulled in Dave's latest net-next-2.6.git tree and will push it out now. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] accounting on ct kill 2008-05-28 4:07 ` [PATCH 2/3] accounting on ct kill Patrick McHardy @ 2008-05-28 8:36 ` Fabian Hugelshofer 2008-06-10 9:22 ` Patrick McHardy 0 siblings, 1 reply; 9+ messages in thread From: Fabian Hugelshofer @ 2008-05-28 8:36 UTC (permalink / raw) To: Patrick McHardy; +Cc: netfilter-devel Patrick McHardy wrote: > Fabian Hugelshofer wrote: >> Introduces nf_ct_kill_acct() which increments the accounting counters on >> conntrack kill. The new function was necessary, because there are calls >> to nf_ct_kill() which don't need accounting: [...] > Good points. Applied, thanks Fabian. > > I've also pulled in Dave's latest net-next-2.6.git tree and will > push it out now. Thank you as well, Patrick. What about my patch 1 (status field on ct destroy event)? I didn't see it in you git repository. Should I repost it with a signed-of-by? ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] accounting on ct kill 2008-05-28 8:36 ` Fabian Hugelshofer @ 2008-06-10 9:22 ` Patrick McHardy 0 siblings, 0 replies; 9+ messages in thread From: Patrick McHardy @ 2008-06-10 9:22 UTC (permalink / raw) To: Fabian Hugelshofer; +Cc: netfilter-devel Fabian Hugelshofer wrote: > Patrick McHardy wrote: >> Fabian Hugelshofer wrote: >>> Introduces nf_ct_kill_acct() which increments the accounting counters on >>> conntrack kill. The new function was necessary, because there are calls >>> to nf_ct_kill() which don't need accounting: > [...] >> Good points. Applied, thanks Fabian. >> >> I've also pulled in Dave's latest net-next-2.6.git tree and will >> push it out now. > > Thank you as well, Patrick. What about my patch 1 (status field on ct > destroy event)? I didn't see it in you git repository. Should I repost > it with a signed-of-by? Yes, please. ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2008-06-10 9:22 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-05-22 9:13 [PATCH 2/3] set SEEN_REPLY before destroying conntrack on TCP RST Fabian Hugelshofer 2008-05-26 18:25 ` Fabian Hugelshofer 2008-05-27 4:53 ` Patrick McHardy 2008-05-27 14:33 ` Fabian Hugelshofer 2008-05-27 14:48 ` Patrick McHardy 2008-05-27 22:55 ` [PATCH 2/3] accounting on ct kill (was: set SEEN_REPLY before destroying conntrack on TCP RST) Fabian Hugelshofer 2008-05-28 4:07 ` [PATCH 2/3] accounting on ct kill Patrick McHardy 2008-05-28 8:36 ` Fabian Hugelshofer 2008-06-10 9:22 ` Patrick McHardy
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.