Hi,
For local src packets, it is better to update sk_route_caps in
ip_route_me_harder.
Signed-off-by: Lepton Wu <[email protected]>
diff -pru -X linux-2.6.22.6/Documentation/dontdiff linux-2.6.22.6/net/ipv4/netfilter.c linux-2.6.22.6-lepton/net/ipv4/netfilter.c
--- linux-2.6.22.6/net/ipv4/netfilter.c 2007-09-19 13:19:13.000000000 +0800
+++ linux-2.6.22.6-lepton/net/ipv4/netfilter.c 2007-09-19 17:10:36.000000000 +0800
@@ -37,6 +37,10 @@ int ip_route_me_harder(struct sk_buff **
/* Drop old route. */
dst_release((*pskb)->dst);
(*pskb)->dst = &rt->u.dst;
+ if((*pskb)->sk){
+ dst_hold((*pskb)->dst);
+ sk_setup_caps((*pskb)->sk, (*pskb)->dst);
+ }
} else {
/* non-local src, find valid iif to satisfy
* rp-filter when calling ip_route_input. */
lepton wrote:
> Hi,
> For local src packets, it is better to update sk_route_caps in
> ip_route_me_harder.
This seems like a good idea to me. But why only for local src
(address) packets? This function can also be used for locally
generated packet that have been (f.i.) NATed to a foreign
address ...
> Signed-off-by: Lepton Wu <[email protected]>
>
> diff -pru -X linux-2.6.22.6/Documentation/dontdiff linux-2.6.22.6/net/ipv4/netfilter.c linux-2.6.22.6-lepton/net/ipv4/netfilter.c
> --- linux-2.6.22.6/net/ipv4/netfilter.c 2007-09-19 13:19:13.000000000 +0800
> +++ linux-2.6.22.6-lepton/net/ipv4/netfilter.c 2007-09-19 17:10:36.000000000 +0800
> @@ -37,6 +37,10 @@ int ip_route_me_harder(struct sk_buff **
> /* Drop old route. */
> dst_release((*pskb)->dst);
> (*pskb)->dst = &rt->u.dst;
> + if((*pskb)->sk){
> + dst_hold((*pskb)->dst);
> + sk_setup_caps((*pskb)->sk, (*pskb)->dst);
> + }
> } else {
> /* non-local src, find valid iif to satisfy
> * rp-filter when calling ip_route_input. */
>