Hi,

On Sat, 09.01.2010 at 13:09:29 -0500, Ted Unangst <ted.unan...@gmail.com> wrote:
> On Sat, Jan 9, 2010 at 11:40 AM, Toni Mueller <openbsd-m...@oeko.net> wrote:
> > # /sbin/pfctl -n -f pf.conf.test
> > pf.conf.test:23: illegal tos value (null)

> Best guess: sbin/pfctl/parse.y

thanks, Ted, this worked quite nicely. For the record, in

http://www.openbsd.org/cgi-bin/cvsweb/src/sbin/pfctl/parse.y.diff?r1=1.561;r2=1.562

there are two places where there a condition changed to allow a zero as
a value, around line 3300 and line 3320, like this:


                | NUMBER                        {
                        $$ = $1;
-                       if (!$$ || $$ > 255) {
+                       if ($$ > 255) {
                                yyerror("illegal tos value %s", $1);
                                YYERROR;
                        }


If one changes this condition and recompiles pfctl, the value '0x0' (at
least) can be used in a rule. I didn't have success using this global
rule:

match in all tos 3 scrub (set-tos 0x0)

That was ineffective for me, but I don't know why.

Instead, I had to augment a regular pass rule to make this work:

pass quick on { $ext_if0, $ext_if1, $ext_if2, $int_if } all flags any no state 
tos 3 scrub (set-tos 0x0)


The complete ruleset on this router looks like this:

# pfctl -s r
match in all tos 0x03 scrub (set-tos 0x00)
match in all scrub (no-df)
pass quick on bge1 all tos 0x03 no state scrub (set-tos 0x00)
pass quick on art0 all tos 0x03 no state scrub (set-tos 0x00)
pass quick on art1 all tos 0x03 no state scrub (set-tos 0x00)
pass quick on fxp0 all tos 0x03 no state scrub (set-tos 0x00)
pass in on bge0 all flags S/SA keep state
block drop out on bge0 all



HTH,
--Toni++

Reply via email to