peer->rate_tokens == ip_rt_redirect_number)
                        net_warn_ratelimited("host %pI4/if%d ignores redirects for %pI4 to %pI4\n",
                                             &ip_hdr(skb)->saddr, rt->rt_iif,
-                                            &rt->rt_dst, &rt->rt_gateway);
+                                            &ip_hdr(skb)->daddr, &rt->rt_gateway);
 #endif
        }
 out_put_peer:
        mtu = dst->dev->mtu;
 
        if (unlikely(dst_metric_locked(dst, RTAX_MTU))) {
-
-               if (rt->rt_gateway != rt->rt_dst && mtu > 576)
+               if (rt->rt_gateway != 0 && mtu > 576)
                        mtu = 576;
        }
 
        rth->rt_genid   = rt_genid(dev_net(dev));
        rth->rt_flags   = RTCF_MULTICAST;
        rth->rt_type    = RTN_MULTICAST;
-       rth->rt_dst     = daddr;
        rth->rt_route_iif = dev->ifindex;
        rth->rt_iif     = dev->ifindex;
        rth->rt_oif     = 0;
        rth->rt_genid = rt_genid(dev_net(rth->dst.dev));
        rth->rt_flags = flags;
        rth->rt_type = res->type;
-       rth->rt_dst     = daddr;
        rth->rt_route_iif = in_dev->dev->ifindex;
        rth->rt_iif     = in_dev->dev->ifindex;
        rth->rt_oif     = 0;
        rth->rt_genid = rt_genid(net);
        rth->rt_flags   = flags|RTCF_LOCAL;
        rth->rt_type    = res.type;
-       rth->rt_dst     = daddr;
        rth->rt_route_iif = dev->ifindex;
        rth->rt_iif     = dev->ifindex;
        rth->rt_oif     = 0;
        rth->rt_genid = rt_genid(dev_net(dev_out));
        rth->rt_flags   = flags;
        rth->rt_type    = type;
-       rth->rt_dst     = fl4->daddr;
        rth->rt_route_iif = 0;
        rth->rt_iif     = orig_oif ? : dev_out->ifindex;
        rth->rt_oif     = orig_oif;
                rt->rt_genid = rt_genid(net);
                rt->rt_flags = ort->rt_flags;
                rt->rt_type = ort->rt_type;
-               rt->rt_dst = ort->rt_dst;
                rt->rt_gateway = ort->rt_gateway;
                rt->fi = ort->fi;
                if (rt->fi)
 }
 EXPORT_SYMBOL_GPL(ip_route_output_flow);
 
-static int rt_fill_info(struct net *net,  __be32 src, struct flowi4 *fl4,
-                       struct sk_buff *skb, u32 pid, u32 seq, int event,
-                       int nowait, unsigned int flags)
+static int rt_fill_info(struct net *net,  __be32 dst, __be32 src,
+                       struct flowi4 *fl4, struct sk_buff *skb, u32 pid,
+                       u32 seq, int event, int nowait, unsigned int flags)
 {
        struct rtable *rt = skb_rtable(skb);
        struct rtmsg *r;
        if (rt->rt_flags & RTCF_NOTIFY)
                r->rtm_flags |= RTM_F_NOTIFY;
 
-       if (nla_put_be32(skb, RTA_DST, rt->rt_dst))
+       if (nla_put_be32(skb, RTA_DST, dst))
                goto nla_put_failure;
        if (src) {
                r->rtm_src_len = 32;
        }
 
        if (rt_is_input_route(rt)) {
-#ifdef CONFIG_IP_MROUTE
-               __be32 dst = rt->rt_dst;
-
-               if (ipv4_is_multicast(dst) && !ipv4_is_local_multicast(dst) &&
-                   IPV4_DEVCONF_ALL(net, MC_FORWARDING)) {
-                       int err = ipmr_get_route(net, skb,
-                                                fl4->saddr, fl4->daddr,
-                                                r, nowait);
-                       if (err <= 0) {
-                               if (!nowait) {
-                                       if (err == 0)
-                                               return 0;
-                                       goto nla_put_failure;
-                               } else {
-                                       if (err == -EMSGSIZE)
-                                               goto nla_put_failure;
-                                       error = err;
-                               }
-                       }
-               } else
-#endif
-                       if (nla_put_u32(skb, RTA_IIF, rt->rt_iif))
-                               goto nla_put_failure;
+               if (nla_put_u32(skb, RTA_IIF, rt->rt_iif))
+                       goto nla_put_failure;
        }
 
        if (rtnl_put_cacheinfo(skb, &rt->dst, 0, expires, error) < 0)
        if (rtm->rtm_flags & RTM_F_NOTIFY)
                rt->rt_flags |= RTCF_NOTIFY;
 
-       err = rt_fill_info(net, src, &fl4, skb,
+       err = rt_fill_info(net, dst, src, &fl4, skb,
                           NETLINK_CB(in_skb).pid, nlh->nlmsg_seq,
                           RTM_NEWROUTE, 0, 0);
        if (err <= 0)