From: Florian Westphal <fw@strlen.de>
To: <netfilter-devel@vger.kernel.org>
Subject: [PATCH 07/11] xt_psd: move table cleanup into helper
Date: Sun, 16 Sep 2012 23:29:51 +0200 [thread overview]
Message-ID: <1347830995-19226-8-git-send-email-fw@strlen.de> (raw)
In-Reply-To: <1347830995-19226-1-git-send-email-fw@strlen.de>
---
extensions/xt_psd.c | 42 ++++++++++++++++++++----------------------
1 files changed, 20 insertions(+), 22 deletions(-)
diff --git a/extensions/xt_psd.c b/extensions/xt_psd.c
index 2baec8e..a3f1168 100644
--- a/extensions/xt_psd.c
+++ b/extensions/xt_psd.c
@@ -182,6 +182,25 @@ entry_is_recent(const struct host *h, unsigned long delay_threshold,
time_after_eq(now, h->timestamp);
}
+static void remove_oldest(struct host **head, struct host *curr)
+{
+ struct host *h, *last = NULL;
+
+ /* We're going to re-use the oldest list entry, so remove it from the hash
+ * table first if it is really already in use */
+ h = *head;
+ while (h != NULL) {
+ if (curr == h)
+ break;
+ last = h;
+ h = h->next;
+ }
+
+ /* Then, remove it */
+ if (h != NULL)
+ ht_unlink(head, last);
+}
+
static bool
xt_psd_match(const struct sk_buff *pskb, struct xt_action_param *match)
{
@@ -282,36 +301,15 @@ xt_psd_match(const struct sk_buff *pskb, struct xt_action_param *match)
if (count >= HASH_MAX && last != NULL)
last->next = NULL;
- /* We're going to re-use the oldest list entry, so remove it from the hash
- * table first (if it is really already in use, and isn't removed from the
- * hash table already because of the HASH_MAX check above). */
-
- /* First, find it */
if (state.list[state.index].saddr != 0)
head = &state.hash[hashfunc(state.list[state.index].saddr)];
else
head = &last;
- last = NULL;
- curr = *head;
- while (curr != NULL) {
- curr4 = host_to_host4(curr);
- if (curr4 == &state.list[state.index])
- break;
- last = curr;
- curr = curr->next;
- }
-
- /* Then, remove it */
- if (curr != NULL) {
- if (last != NULL)
- last->next = last->next->next;
- else if (*head != NULL)
- *head = (*head)->next;
- }
/* Get our list entry */
curr4 = &state.list[state.index++];
curr = &curr4->host;
+ remove_oldest(head, curr);
if (state.index >= LIST_SIZE)
state.index = 0;
--
1.7.8.6
next prev parent reply other threads:[~2012-09-16 21:32 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-16 21:29 [PATCH 00/11][xt-addons] xt_psd: ipv6 support Florian Westphal
2012-09-16 21:29 ` [PATCH 01/11] xt_psd: consider protocol when searching port list Florian Westphal
2012-09-16 21:29 ` [PATCH 02/11] xt_psd: move parts of main match function to helpers Florian Westphal
2012-09-16 21:29 ` [PATCH 03/11] xt_psd: avoid if (c=h) do {..} while (c = c->next) Florian Westphal
2012-09-16 21:29 ` [PATCH 04/11] xt_psd: move match functionality to helpers Florian Westphal
2012-09-16 21:29 ` [PATCH 05/11] xt_psd: remove unneeded variables Florian Westphal
2012-09-17 2:57 ` Jan Engelhardt
2012-09-17 7:35 ` Florian Westphal
2012-09-16 21:29 ` [PATCH 06/11] xt_psd: split struct host into generic and af-dependent structure Florian Westphal
2012-09-16 21:29 ` Florian Westphal [this message]
2012-09-16 21:29 ` [PATCH 08/11] xt_psd: use tcph->dest directly Florian Westphal
2012-09-16 21:29 ` [PATCH 09/11] xt_psd: move l4 header fetching into helper Florian Westphal
2012-09-16 21:29 ` [PATCH 10/11] xt_psd: move ipv4 state locking responsibility to caller Florian Westphal
2012-09-16 21:29 ` [PATCH 11/11] psd: add ipv6 support Florian Westphal
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=1347830995-19226-8-git-send-email-fw@strlen.de \
--to=fw@strlen.de \
--cc=netfilter-devel@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).