diff options
author | Bart De Schuymer <bdschuym@pandora.be> | 2007-02-11 12:47:58 +0000 |
---|---|---|
committer | Bart De Schuymer <bdschuym@pandora.be> | 2007-02-11 12:47:58 +0000 |
commit | 24816d3c530007d62f72b37ffabc35277c090cd1 (patch) | |
tree | df31904ac018a5ce86eac9e50ed6999cabff7d7d /ebtables.c | |
parent | 6c36d705db7023bb1b2595beceb714b15b5de065 (diff) | |
download | ebtables-24816d3c530007d62f72b37ffabc35277c090cd1.tar.gz |
speedup checking for loops
Diffstat (limited to 'ebtables.c')
-rw-r--r-- | ebtables.c | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -1170,9 +1170,14 @@ check_extension: rule_nr--; rule_nr_end = rule_nr; - ebt_check_for_loops(replace); - if (ebt_errormsg[0] != '\0') - goto delete_the_rule; + /* a jump to a udc requires checking for loops */ + if (!strcmp(new_entry->t->u.name, EBT_STANDARD_TARGET) && + ((struct ebt_standard_target *)(new_entry->t))->verdict >= 0) { + /* FIXME: this can be done faster */ + ebt_check_for_loops(replace); + if (ebt_errormsg[0] != '\0') + goto delete_the_rule; + } /* Do the final_check(), for all entries. * This is needed when adding a rule that has a chain target */ |