===== net/ipv4/netfilter/ipt_MASQUERADE.c 1.16 vs edited ===== --- 1.16/net/ipv4/netfilter/ipt_MASQUERADE.c 2004-08-02 12:27:11 +10:00 +++ edited/net/ipv4/netfilter/ipt_MASQUERADE.c 2004-08-31 18:21:41 +10:00 @@ -97,34 +97,13 @@ mr = targinfo; - { - struct flowi fl = { .nl_u = { .ip4_u = - { .daddr = (*pskb)->nh.iph->daddr, - .tos = (RT_TOS((*pskb)->nh.iph->tos) | - RTO_CONN), -#ifdef CONFIG_IP_ROUTE_FWMARK - .fwmark = (*pskb)->nfmark -#endif - } } }; - if (ip_route_output_key(&rt, &fl) != 0) { - /* Funky routing can do this. */ - if (net_ratelimit()) - printk("MASQUERADE:" - " No route: Rusty's brain broke!\n"); - return NF_DROP; - } - if (rt->u.dst.dev != out) { - if (net_ratelimit()) - printk("MASQUERADE:" - " Route sent us somewhere else.\n"); - ip_rt_put(rt); - return NF_DROP; - } - } + rt = (struct rtable *)(*pskb)->dst; + if (rt->fl.iif) + newsrc = rt->rt_spec_dst; + else + newsrc = rt->rt_src; - newsrc = rt->rt_src; DEBUGP("newsrc = %u.%u.%u.%u\n", NIPQUAD(newsrc)); - ip_rt_put(rt); WRITE_LOCK(&masq_lock); ct->nat.masq_index = out->ifindex;