Subject: Re: [RFC, PATCH 4/5]: netfilter+ipsec - policy lookup

From: Patrick McHardy <[email-masked]>
Date: Sat, 20 Mar 2004 15:01:55 +0100

Herbert Xu wrote:
> 
> Actually it was me who was confused.  ip_route_me_harder can be called
> on both incoming/outgoing packets.  That's what the if clause is trying
> to determine.  You should only call xfrm_lookup on the outgoing path.

No, ip_route_me_harder is currently (without the patches) only called
for outgoing packets. The if-clause is there because ip_route_output
doesn't handle packets with non-local source, and we don't want to set
the source to 0 (as was done before) because it prevents policy routing
from working properly. That's why we need the xfrm_lookup for both
cases.

Regards
Patrick

> 
> So this should be moved back to the if clause above:
> 
> 		fl.proto = iph->protocol;
> 		lookup = __ip_route_output_key;
> #ifdef CONFIG_XFRM
> 		if (!(IPCB(*pskb)->flags & IPSKB_XFRM_TRANSFORMED)) {
> 			lookup = ip_route_output_key;
> 			do_decode
> 		}
> #endif
> 		if (lookup(&rt, &fl) != 0)
> 			return -1;