]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/ipv4/route.c
[NETFILTER]: nf_nat: remove obsolete check for ICMP redirects
[mv-sheeva.git] / net / ipv4 / route.c
index 230716c2dfe0ae4db22a93c34e87c1424113f792..139799f8a8a125f9113e7fed020c87ac0947f4e8 100644 (file)
@@ -259,16 +259,14 @@ static DEFINE_PER_CPU(struct rt_cache_stat, rt_cache_stat);
 #define RT_CACHE_STAT_INC(field) \
        (__raw_get_cpu_var(rt_cache_stat).field++)
 
-static unsigned int rt_hash_code(u32 daddr, u32 saddr)
+static inline unsigned int rt_hash(__be32 daddr, __be32 saddr, int idx)
 {
-       return jhash_2words(daddr, saddr, atomic_read(&rt_genid))
+       return jhash_3words((__force u32)(__be32)(daddr),
+                           (__force u32)(__be32)(saddr),
+                           idx, atomic_read(&rt_genid))
                & rt_hash_mask;
 }
 
-#define rt_hash(daddr, saddr, idx) \
-       rt_hash_code((__force u32)(__be32)(daddr),\
-                    (__force u32)(__be32)(saddr) ^ ((idx) << 5))
-
 #ifdef CONFIG_PROC_FS
 struct rt_cache_iter_state {
        struct seq_net_private p;
@@ -600,18 +598,18 @@ static inline int ip_rt_proc_init(void)
 }
 #endif /* CONFIG_PROC_FS */
 
-static __inline__ void rt_free(struct rtable *rt)
+static inline void rt_free(struct rtable *rt)
 {
        call_rcu_bh(&rt->u.dst.rcu_head, dst_rcu_free);
 }
 
-static __inline__ void rt_drop(struct rtable *rt)
+static inline void rt_drop(struct rtable *rt)
 {
        ip_rt_put(rt);
        call_rcu_bh(&rt->u.dst.rcu_head, dst_rcu_free);
 }
 
-static __inline__ int rt_fast_clean(struct rtable *rth)
+static inline int rt_fast_clean(struct rtable *rth)
 {
        /* Kill broadcast/multicast entries very aggresively, if they
           collide in hash table with more useful entries */
@@ -619,7 +617,7 @@ static __inline__ int rt_fast_clean(struct rtable *rth)
                rth->fl.iif && rth->u.dst.rt_next;
 }
 
-static __inline__ int rt_valuable(struct rtable *rth)
+static inline int rt_valuable(struct rtable *rth)
 {
        return (rth->rt_flags & (RTCF_REDIRECTED | RTCF_NOTIFY)) ||
                rth->u.dst.expires;
@@ -1420,7 +1418,7 @@ out:      kfree_skb(skb);
 static const unsigned short mtu_plateau[] =
 {32000, 17914, 8166, 4352, 2002, 1492, 576, 296, 216, 128 };
 
-static __inline__ unsigned short guess_mtu(unsigned short old_mtu)
+static inline unsigned short guess_mtu(unsigned short old_mtu)
 {
        int i;
 
@@ -1750,11 +1748,11 @@ static void ip_handle_martian_source(struct net_device *dev,
 #endif
 }
 
-static inline int __mkroute_input(struct sk_buff *skb,
-                                 struct fib_result* res,
-                                 struct in_device *in_dev,
-                                 __be32 daddr, __be32 saddr, u32 tos,
-                                 struct rtable **result)
+static int __mkroute_input(struct sk_buff *skb,
+                          struct fib_result *res,
+                          struct in_device *in_dev,
+                          __be32 daddr, __be32 saddr, u32 tos,
+                          struct rtable **result)
 {
 
        struct rtable *rth;
@@ -1846,11 +1844,11 @@ static inline int __mkroute_input(struct sk_buff *skb,
        return err;
 }
 
-static inline int ip_mkroute_input(struct sk_buff *skb,
-                                  struct fib_result* res,
-                                  const struct flowi *fl,
-                                  struct in_device *in_dev,
-                                  __be32 daddr, __be32 saddr, u32 tos)
+static int ip_mkroute_input(struct sk_buff *skb,
+                           struct fib_result *res,
+                           const struct flowi *fl,
+                           struct in_device *in_dev,
+                           __be32 daddr, __be32 saddr, u32 tos)
 {
        struct rtable* rth = NULL;
        int err;
@@ -2079,12 +2077,12 @@ int ip_route_input(struct sk_buff *skb, __be32 daddr, __be32 saddr,
        rcu_read_lock();
        for (rth = rcu_dereference(rt_hash_table[hash].chain); rth;
             rth = rcu_dereference(rth->u.dst.rt_next)) {
-               if (rth->fl.fl4_dst == daddr &&
-                   rth->fl.fl4_src == saddr &&
-                   rth->fl.iif == iif &&
-                   rth->fl.oif == 0 &&
+               if (((rth->fl.fl4_dst ^ daddr) |
+                    (rth->fl.fl4_src ^ saddr) |
+                    (rth->fl.iif ^ iif) |
+                    rth->fl.oif |
+                    (rth->fl.fl4_tos ^ tos)) == 0 &&
                    rth->fl.mark == skb->mark &&
-                   rth->fl.fl4_tos == tos &&
                    net_eq(dev_net(rth->u.dst.dev), net) &&
                    rth->rt_genid == atomic_read(&rt_genid)) {
                        dst_use(&rth->u.dst, jiffies);
@@ -2132,12 +2130,12 @@ int ip_route_input(struct sk_buff *skb, __be32 daddr, __be32 saddr,
        return ip_route_input_slow(skb, daddr, saddr, tos, dev);
 }
 
-static inline int __mkroute_output(struct rtable **result,
-                                  struct fib_result* res,
-                                  const struct flowi *fl,
-                                  const struct flowi *oldflp,
-                                  struct net_device *dev_out,
-                                  unsigned flags)
+static int __mkroute_output(struct rtable **result,
+                           struct fib_result *res,
+                           const struct flowi *fl,
+                           const struct flowi *oldflp,
+                           struct net_device *dev_out,
+                           unsigned flags)
 {
        struct rtable *rth;
        struct in_device *in_dev;
@@ -2252,12 +2250,12 @@ static inline int __mkroute_output(struct rtable **result,
        return err;
 }
 
-static inline int ip_mkroute_output(struct rtable **rp,
-                                   struct fib_result* res,
-                                   const struct flowi *fl,
-                                   const struct flowi *oldflp,
-                                   struct net_device *dev_out,
-                                   unsigned flags)
+static int ip_mkroute_output(struct rtable **rp,
+                            struct fib_result *res,
+                            const struct flowi *fl,
+                            const struct flowi *oldflp,
+                            struct net_device *dev_out,
+                            unsigned flags)
 {
        struct rtable *rth = NULL;
        int err = __mkroute_output(&rth, res, fl, oldflp, dev_out, flags);
@@ -3060,7 +3058,9 @@ int __init ip_rt_init(void)
        devinet_init();
        ip_fib_init();
 
-       setup_timer(&rt_secret_timer, rt_secret_rebuild, 0);
+       rt_secret_timer.function = rt_secret_rebuild;
+       rt_secret_timer.data = 0;
+       init_timer_deferrable(&rt_secret_timer);
 
        /* All the timers, started at system startup tend
           to synchronize. Perturb it a bit.