Hello Harald,
On Friday 05 July 2002 07:58, Harald Welte wrote:
> [...]
> yes. But then, how do we distinguish between terminating targets [where
> we can have only one per rule] and non-terminating targets AKA actions,
> where we can have multiple.
You could just add a boolean field 'terminating' to the iptables_target.
Then, make sure iptables abort and complains if it sees more than one terminating
target being requested in a single rule.
Iptables could even give a warning (and reorder on the fly if necessary) if a
terminating target is found before a non-terminating target.
For example, the iptables_target struct of the TTL target would become :
static
struct iptables_target TTL = { NULL,
"TTL",
IPTABLES_VERSION,
IPT_ALIGN(sizeof(struct ipt_TTL_info)),
IPT_ALIGN(sizeof(struct ipt_TTL_info)),
&help,
&init,
&parse,
&final_check,
&print,
&save,
- opts
+ opts,
+ 0 /* target is NOT terminating*/
};
and the iptables_target struct of the REJECT target would become :
static
struct iptables_target reject
= { NULL,
"REJECT",
IPTABLES_VERSION,
IPT_ALIGN(sizeof(struct ipt_reject_info)),
IPT_ALIGN(sizeof(struct ipt_reject_info)),
&help,
&init,
&parse,
&final_check,
&print,
&save,
- opts
+ opts,
+ 1 /* target is terminating */
};
But now, if you don't want to use the match piggybacking trick that Jozsef & Henrik
mentionned, then we can't implement that right now.
Do you think multiple targets is worth including in the design of the next
netfilter framework ?
I bielieve we should do that, multiple actions for one condition is very natural,
and I believe the usage of a custom chain for each of theses rules is a bit overkill..
Any thoughts ?
Fabrice.
--
Fabrice MARIE
Senior R&D Engineer
Celestix Networks
http://www.celestix.com/
"Silly hacker, root is for administrators"
-Unknown