ipv4: Remove 'rt_mark' from 'struct rtable'
[platform/adaptation/renesas_rcar/renesas_kernel.git] / net / ipv4 / xfrm4_policy.c
index 0d3426c..f73ba82 100644 (file)
@@ -79,30 +79,21 @@ static int xfrm4_fill_dst(struct xfrm_dst *xdst, struct net_device *dev,
        struct rtable *rt = (struct rtable *)xdst->route;
        const struct flowi4 *fl4 = &fl->u.ip4;
 
-       xdst->u.rt.rt_key_dst = fl4->daddr;
-       xdst->u.rt.rt_key_src = fl4->saddr;
-       xdst->u.rt.rt_key_tos = fl4->flowi4_tos;
        xdst->u.rt.rt_route_iif = fl4->flowi4_iif;
        xdst->u.rt.rt_iif = fl4->flowi4_iif;
        xdst->u.rt.rt_oif = fl4->flowi4_oif;
-       xdst->u.rt.rt_mark = fl4->flowi4_mark;
 
        xdst->u.dst.dev = dev;
        dev_hold(dev);
 
-       xdst->u.rt.peer = rt->peer;
-       if (rt->peer)
-               atomic_inc(&rt->peer->refcnt);
-
        /* Sheit... I remember I did this right. Apparently,
         * it was magically lost, so this code needs audit */
        xdst->u.rt.rt_flags = rt->rt_flags & (RTCF_BROADCAST | RTCF_MULTICAST |
                                              RTCF_LOCAL);
        xdst->u.rt.rt_type = rt->rt_type;
-       xdst->u.rt.rt_src = rt->rt_src;
        xdst->u.rt.rt_dst = rt->rt_dst;
        xdst->u.rt.rt_gateway = rt->rt_gateway;
-       xdst->u.rt.rt_spec_dst = rt->rt_spec_dst;
+       xdst->u.rt.rt_pmtu = rt->rt_pmtu;
 
        return 0;
 }
@@ -198,12 +189,22 @@ static inline int xfrm4_garbage_collect(struct dst_ops *ops)
        return (dst_entries_get_slow(ops) > ops->gc_thresh * 2);
 }
 
-static void xfrm4_update_pmtu(struct dst_entry *dst, u32 mtu)
+static void xfrm4_update_pmtu(struct dst_entry *dst, struct sock *sk,
+                             struct sk_buff *skb, u32 mtu)
+{
+       struct xfrm_dst *xdst = (struct xfrm_dst *)dst;
+       struct dst_entry *path = xdst->route;
+
+       path->ops->update_pmtu(path, sk, skb, mtu);
+}
+
+static void xfrm4_redirect(struct dst_entry *dst, struct sock *sk,
+                          struct sk_buff *skb)
 {
        struct xfrm_dst *xdst = (struct xfrm_dst *)dst;
        struct dst_entry *path = xdst->route;
 
-       path->ops->update_pmtu(path, mtu);
+       path->ops->redirect(path, sk, skb);
 }
 
 static void xfrm4_dst_destroy(struct dst_entry *dst)
@@ -212,9 +213,6 @@ static void xfrm4_dst_destroy(struct dst_entry *dst)
 
        dst_destroy_metrics_generic(dst);
 
-       if (likely(xdst->u.rt.peer))
-               inet_putpeer(xdst->u.rt.peer);
-
        xfrm_dst_destroy(xdst);
 }
 
@@ -232,6 +230,7 @@ static struct dst_ops xfrm4_dst_ops = {
        .protocol =             cpu_to_be16(ETH_P_IP),
        .gc =                   xfrm4_garbage_collect,
        .update_pmtu =          xfrm4_update_pmtu,
+       .redirect =             xfrm4_redirect,
        .cow_metrics =          dst_cow_metrics_generic,
        .destroy =              xfrm4_dst_destroy,
        .ifdown =               xfrm4_dst_ifdown,