diff options
author | David S. Miller <davem@davemloft.net> | 2011-02-04 18:55:25 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-02-04 18:59:53 -0500 |
commit | 92d8682926342d2b6aa5b2ecc02221e00e1573a0 (patch) | |
tree | 7f70b9cc2975716ab60ddd632b9fecf0a51b828d /include/net | |
parent | 0131ba451e20239c5dc701027c1a2edef95e1a6e (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.h | 2 | ||||
-rw-r--r-- | include/net/icmp.h | 3 | ||||
-rw-r--r-- | include/net/inetpeer.h | 3 |
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); | |||
45 | extern int icmp_init(void); | 45 | extern int icmp_init(void); |
46 | extern void icmp_out_count(struct net *net, unsigned char type); | 46 | extern void icmp_out_count(struct net *net, unsigned char type); |
47 | 47 | ||
48 | /* Move into dst.h ? */ | ||
49 | extern 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 */ |
83 | extern void inet_putpeer(struct inet_peer *p); | 85 | extern void inet_putpeer(struct inet_peer *p); |
86 | extern 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, |