On Mon, Nov 21, 2016 at 07:11:23PM +0100, Mike Belopuhov wrote:
> On Mon, Nov 14, 2016 at 16:38 +0100, Alexander Bluhm wrote:
> > Hi,
> >
> > The !r->rt case is only used by af-to. pf_route6() calls ip6_output()
> > to do the work while pf_route() has some custom implementation for
> > that. It is simpler to call ip_output() or ip6_output() from
> > pf_test() directly.
> >
> > ok?
> >
> > bluhm
> >
> > Index: net/pf.c
> > ===================================================================
> > RCS file: /data/mirror/openbsd/cvs/src/sys/net/pf.c,v
> > retrieving revision 1.998
> > diff -u -p -r1.998 pf.c
> > --- net/pf.c 14 Nov 2016 13:25:00 -0000 1.998
> > +++ net/pf.c 14 Nov 2016 14:08:57 -0000
> > @@ -6908,10 +6884,28 @@ done:
> > action = PF_DROP;
> > break;
> > }
> > - if (pd.naf == AF_INET)
> > - pf_route(&pd, r, s);
> > - if (pd.naf == AF_INET6)
> > - pf_route6(&pd, r, s);
> > + if (r->rt) {
> > + switch (pd.naf) {
> > + case AF_INET:
> > + pf_route(&pd, r, s);
> > + break;
> > + case AF_INET6:
> > + pf_route6(&pd, r, s);
> > + break;
> > + }
> > + }
>
> Is the r->rt check there to catch additional dup-to/route-to actions
> hooked on to the af-to rule? Does it actually work?
I don't have my test bed ready to play with NAT-64 + PBR. The only think
I've
tried is the parser and it seems to me NAT-64 + PBR is problematic:
echo 'pass in on net1 inet af-to inet6 from 2001:db8::1 to
2001:db8::/96 route-to 2001:db8::1@net0' | pfctl -n -f -
stdin:1: af mismatch in routing spec
stdin:1: skipping rule due to errors
stdin:1: rule expands to no valid combination
parser does not allow me to use IPv6 address as a next hop. As soon as I
remove
next-hop, the parser accepts the rule:
echo 'pass in on net1 inet af-to inet6 from 2001:db8::1 to
2001:db8::/96 route-to net0' | pfctl -n -f -
The bluhm's change should not alter behavior of older code.
regards
sasha