From 19f7a884997f3ce8001a3967d9c9d4e39be2ce1e Mon Sep 17 00:00:00 2001 From: Samuel Ortiz Date: Fri, 29 Oct 2010 17:28:47 +0200 Subject: [PATCH] iptables-test: Update entries offsets properly This is needed to set the jump targets. --- tools/iptables-test.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/tools/iptables-test.c b/tools/iptables-test.c index a3de513..c4d2cb0 100644 --- a/tools/iptables-test.c +++ b/tools/iptables-test.c @@ -82,9 +82,7 @@ struct ipt_error_target { }; struct connman_iptables_entry { - int builtin; - int std_target; - int jump_offset; + int offset; struct ipt_entry *entry; }; @@ -221,6 +219,28 @@ static GList *find_chain_tail(struct connman_iptables *table, return g_list_last(table->entries); } +static void update_offsets(struct connman_iptables *table) +{ + GList *list, *prev; + struct connman_iptables_entry *entry, *prev_entry; + + for (list = table->entries; list; list = list->next) { + entry = list->data; + + if (list == table->entries) { + entry->offset = 0; + + continue; + } + + prev = list->prev; + prev_entry = prev->data; + + entry->offset = prev_entry->offset + + prev_entry->entry->next_offset; + } +} + static int connman_add_entry(struct connman_iptables *table, struct ipt_entry *entry, GList *before) { @@ -239,6 +259,8 @@ static int connman_add_entry(struct connman_iptables *table, table->num_entries++; table->size += entry->next_offset; + update_offsets(table); + return 0; } -- 2.7.4