aboutsummaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2011-02-04 18:55:25 -0500
committerDavid S. Miller <davem@davemloft.net>2011-02-04 18:59:53 -0500
commit92d8682926342d2b6aa5b2ecc02221e00e1573a0 (patch)
tree7f70b9cc2975716ab60ddd632b9fecf0a51b828d /include/net
parent0131ba451e20239c5dc701027c1a2edef95e1a6e (diff)
inetpeer: Move ICMP rate limiting state into inet_peer entries.
Like metrics, the ICMP rate limiting bits are cached state about a destination. So move it into the inet_peer entries. If an inet_peer cannot be bound (the reason is memory allocation failure or similar), the policy is to allow. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net')
-rw-r--r--include/net/dst.h2
-rw-r--r--include/net/icmp.h3
-rw-r--r--include/net/inetpeer.h3
3 files changed, 3 insertions, 5 deletions
diff --git a/include/net/dst.h b/include/net/dst.h
index 484f80b69ada..e550195d4f86 100644
--- a/include/net/dst.h
+++ b/include/net/dst.h
@@ -78,8 +78,6 @@ struct dst_entry {
78 atomic_t __refcnt; /* client references */ 78 atomic_t __refcnt; /* client references */
79 int __use; 79 int __use;
80 unsigned long lastuse; 80 unsigned long lastuse;
81 unsigned long rate_last; /* rate limiting for ICMP */
82 unsigned int rate_tokens;
83 int flags; 81 int flags;
84#define DST_HOST 0x0001 82#define DST_HOST 0x0001
85#define DST_NOXFRM 0x0002 83#define DST_NOXFRM 0x0002
diff --git a/include/net/icmp.h b/include/net/icmp.h
index 6e991e0d0d6f..f0698b955b73 100644
--- a/include/net/icmp.h
+++ b/include/net/icmp.h
@@ -45,7 +45,4 @@ extern int icmp_ioctl(struct sock *sk, int cmd, unsigned long arg);
45extern int icmp_init(void); 45extern int icmp_init(void);
46extern void icmp_out_count(struct net *net, unsigned char type); 46extern void icmp_out_count(struct net *net, unsigned char type);
47 47
48/* Move into dst.h ? */
49extern int xrlim_allow(struct dst_entry *dst, int timeout);
50
51#endif /* _ICMP_H */ 48#endif /* _ICMP_H */
diff --git a/include/net/inetpeer.h b/include/net/inetpeer.h
index 61f2c66edb2a..ead2cb2de18c 100644
--- a/include/net/inetpeer.h
+++ b/include/net/inetpeer.h
@@ -44,6 +44,8 @@ struct inet_peer {
44 __u32 tcp_ts; 44 __u32 tcp_ts;
45 __u32 tcp_ts_stamp; 45 __u32 tcp_ts_stamp;
46 u32 metrics[RTAX_MAX]; 46 u32 metrics[RTAX_MAX];
47 u32 rate_tokens; /* rate limiting for ICMP */
48 unsigned long rate_last;
47 }; 49 };
48 struct rcu_head rcu; 50 struct rcu_head rcu;
49 }; 51 };
@@ -81,6 +83,7 @@ static inline struct inet_peer *inet_getpeer_v6(struct in6_addr *v6daddr, int cr
81 83
82/* can be called from BH context or outside */ 84/* can be called from BH context or outside */
83extern void inet_putpeer(struct inet_peer *p); 85extern void inet_putpeer(struct inet_peer *p);
86extern bool inet_peer_xrlim_allow(struct inet_peer *peer, int timeout);
84 87
85/* 88/*
86 * temporary check to make sure we dont access rid, ip_id_count, tcp_ts, 89 * temporary check to make sure we dont access rid, ip_id_count, tcp_ts,