ipv4: Fix scope value used in route src-address caching.
authorDavid S. Miller <davem@davemloft.net>
Tue, 8 Mar 2011 19:03:21 +0000 (11:03 -0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 8 Mar 2011 19:03:21 +0000 (11:03 -0800)
We have to use cfg->fc_scope not the final nh_scope value.

Reported-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/ip_fib.h
net/ipv4/fib_semantics.c

index 0e14083..3f6c943 100644 (file)
@@ -51,6 +51,7 @@ struct fib_nh {
        struct fib_info         *nh_parent;
        unsigned                nh_flags;
        unsigned char           nh_scope;
+       unsigned char           nh_cfg_scope;
 #ifdef CONFIG_IP_ROUTE_MULTIPATH
        int                     nh_weight;
        int                     nh_power;
index 952c737..d73d758 100644 (file)
@@ -854,9 +854,10 @@ struct fib_info *fib_create_info(struct fib_config *cfg)
        }
 
        change_nexthops(fi) {
+               nexthop_nh->nh_cfg_scope = cfg->fc_scope;
                nexthop_nh->nh_saddr = inet_select_addr(nexthop_nh->nh_dev,
                                                        nexthop_nh->nh_gw,
-                                                       nexthop_nh->nh_scope);
+                                                       nexthop_nh->nh_cfg_scope);
        } endfor_nexthops(fi)
 
 link_it:
@@ -1141,7 +1142,7 @@ void fib_update_nh_saddrs(struct net_device *dev)
                        continue;
                nh->nh_saddr = inet_select_addr(nh->nh_dev,
                                                nh->nh_gw,
-                                               nh->nh_scope);
+                                               nh->nh_cfg_scope);
        }
 }