From: Samuel Ortiz Date: Fri, 29 Oct 2010 22:26:57 +0000 (+0200) Subject: iptables: Update entries offsets X-Git-Tag: 0.63~10 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9eb6c68275de12a2c3a030c969b8ad594d7050d2;p=platform%2Fupstream%2Fconnman.git iptables: Update entries offsets --- diff --git a/src/iptables.c b/src/iptables.c index 04f3970..936accc 100644 --- a/src/iptables.c +++ b/src/iptables.c @@ -88,7 +88,7 @@ struct ipt_error_target { }; struct connman_iptables_entry { - int jump_offset; + int offset; struct ipt_entry *entry; }; @@ -226,6 +226,29 @@ 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 iptables_add_entry(struct connman_iptables *table, struct ipt_entry *entry, GList *before) { @@ -244,6 +267,8 @@ static int iptables_add_entry(struct connman_iptables *table, table->num_entries++; table->size += entry->next_offset; + update_offsets(table); + return 0; }