RFC: documented and actual behaviour of "ipfw tee"
Julian Elischer
julian at elischer.org
Wed Dec 30 00:45:06 UTC 2009
Luigi Rizzo wrote:
> There a difference between the documented and actual behaviour of
> "ipfw tee" which occurs when there are multiple rules with the same
> number, e.g.
>
> rule_id number body
> r1 500 tee port1 dst-ip 1.2.3.0/24
> r2 500 tee port2 dst-ip 1.2.4.0/24
> r3 500 accept ip from any to any
> r4 510 count ip from any to any
>
> + the manpage says "processing continues with the NEXT RULE"
> (so after r1 we have r2, then r3, ...);
> + the implementation behaves as "processing continues with the
> NEXT NUMBERED RULE" (ie. after 500 continues with 510).
>
TEE should go to the next RULE with the original packet, but if
you reinject the tee'd copy of the packet it should go to the
next rule NUMBER.
> The actual behaviour is an artifact of how "divert" is implemented:
> diverted packet only carry the rule number so we cannot tell, on a
> reinject, which of the rules numbered "500" matched, and we restart
> from the next one. Tee was implemented as an extension of divert.
>
> Skipping rules in my opinion is very unintuitive, but there is
> no way to fix it (unless we extend the API) as the rule_id is only
> known within the kernel.
>
> For 'tee', however, packets the situation is different because the
> copy of the packet that remains in the kernel does not lose knowledge
> of the matching rule so we can easily continue from the very next
> rule, same as it happens for dummynet packets with one_pass=0 (and
> tee'd netgraph packets, which I think already do "the right thing").
>
> Since I am doing some work in this are of the code, I'd like to ask
> opinions on how to proceed:
>
> A. preserve the current behaviour and fix the manpage;
> B. fix the code to behave as the manpage says;
> C. introduce a sysctl to choose between A and B.
> Of course this moves the problem on which default
> to choose :)
>
> Because it is a very special case that I doubt many people have hit,
> I'd be inclined to do B and consider the old behaviour a bug.
>
> cheers
> luigi
>
> _______________________________________________
> freebsd-net at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe at freebsd.org"
More information about the freebsd-net
mailing list