]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/ipv4/icmp.c
ipv4: Remove flowi from struct rtable.
[mv-sheeva.git] / net / ipv4 / icmp.c
index c23bd8cdeee0df14c95dceb108947f65909274ee..1771ce662548d510c0eb4a783fc75866010b2f13 100644 (file)
@@ -358,7 +358,8 @@ static void icmp_reply(struct icmp_bxm *icmp_param, struct sk_buff *skb)
                                    .fl4_tos = RT_TOS(ip_hdr(skb)->tos),
                                    .proto = IPPROTO_ICMP };
                security_skb_classify_flow(skb, &fl);
-               if (ip_route_output_key(net, &rt, &fl))
+               rt = ip_route_output_key(net, &fl);
+               if (IS_ERR(rt))
                        goto out_unlock;
        }
        if (icmpv4_xrlim_allow(net, rt, icmp_param->data.icmph.type,
@@ -388,9 +389,9 @@ static struct rtable *icmp_route_lookup(struct net *net, struct sk_buff *skb_in,
        int err;
 
        security_skb_classify_flow(skb_in, &fl);
-       err = __ip_route_output_key(net, &rt, &fl);
-       if (err)
-               return ERR_PTR(err);
+       rt = __ip_route_output_key(net, &fl);
+       if (IS_ERR(rt))
+               return rt;
 
        /* No need to clone since we're just using its address. */
        rt2 = rt;
@@ -412,15 +413,19 @@ static struct rtable *icmp_route_lookup(struct net *net, struct sk_buff *skb_in,
                goto relookup_failed;
 
        if (inet_addr_type(net, fl.fl4_src) == RTN_LOCAL) {
-               err = __ip_route_output_key(net, &rt2, &fl);
+               rt2 = __ip_route_output_key(net, &fl);
+               if (IS_ERR(rt2))
+                       err = PTR_ERR(rt2);
        } else {
                struct flowi fl2 = {};
                unsigned long orefdst;
 
                fl2.fl4_dst = fl.fl4_src;
-               err = ip_route_output_key(net, &rt2, &fl2);
-               if (err)
+               rt2 = ip_route_output_key(net, &fl2);
+               if (IS_ERR(rt2)) {
+                       err = PTR_ERR(rt2);
                        goto relookup_failed;
+               }
                /* Ugh! */
                orefdst = skb_in->_skb_refdst; /* save old refdst */
                err = ip_route_input(skb_in, fl.fl4_dst, fl.fl4_src,
@@ -558,7 +563,7 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info)
                rcu_read_lock();
                if (rt_is_input_route(rt) &&
                    net->ipv4.sysctl_icmp_errors_use_inbound_ifaddr)
-                       dev = dev_get_by_index_rcu(net, rt->fl.iif);
+                       dev = dev_get_by_index_rcu(net, rt->rt_iif);
 
                if (dev)
                        saddr = inet_select_addr(dev, 0, RT_SCOPE_LINK);