--- zzzz-none-000/linux-2.6.32.61/net/ipv4/fib_frontend.c 2013-06-10 09:43:48.000000000 +0000 +++ ar10-7272-687/linux-2.6.32.61/net/ipv4/fib_frontend.c 2012-05-07 14:16:41.000000000 +0000 @@ -448,6 +448,14 @@ cfg->fc_mx_len = len; } +#ifdef CONFIG_MAPPING + if(rt->rt_flags & RTF_MAPPING) + { + cfg->fib_config_rtm_mapping = 1; + cfg->fib_config_rtm_src_prefix = rt->src_prefix; + cfg->fib_config_rtm_dst_prefix = rt->dst_prefix; + } +#endif return 0; } @@ -534,6 +542,12 @@ cfg->fc_flags = rtm->rtm_flags; cfg->fc_nlflags = nlh->nlmsg_flags; +#ifdef CONFIG_MAPPING + cfg->fib_config_rtm_mapping = rtm->rtm_mapping; + cfg->fib_config_rtm_dst_prefix = rtm->rtm_dst_prefix; + cfg->fib_config_rtm_src_prefix = rtm->rtm_src_prefix; +#endif + cfg->fc_nlinfo.pid = NETLINK_CB(skb).pid; cfg->fc_nlinfo.nlh = nlh; cfg->fc_nlinfo.nl_net = net; @@ -689,11 +703,13 @@ .nl_net = net, }, }; + u32 n; if (type == RTN_UNICAST) - tb = fib_new_table(net, RT_TABLE_MAIN); + n = IN_DEV_CONF_GET(ifa->ifa_dev, IFADDR_RTABLE); else - tb = fib_new_table(net, RT_TABLE_LOCAL); + n = RT_TABLE_LOCAL; + tb = fib_new_table(net, n); if (tb == NULL) return;