inetpeer: Abstract address representation further.
Future changes will add caching information, and some of these new elements will be addresses. Since the family is implicit via the ->daddr.family member, replicating the family in ever address we store is entirely redundant. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b6644cb706
commit
7a71ed899e
@ -15,12 +15,16 @@
|
|||||||
#include <net/ipv6.h>
|
#include <net/ipv6.h>
|
||||||
#include <asm/atomic.h>
|
#include <asm/atomic.h>
|
||||||
|
|
||||||
struct inetpeer_addr {
|
struct inetpeer_addr_base {
|
||||||
union {
|
union {
|
||||||
__be32 a4;
|
__be32 a4;
|
||||||
__be32 a6[4];
|
__be32 a6[4];
|
||||||
};
|
};
|
||||||
__u16 family;
|
};
|
||||||
|
|
||||||
|
struct inetpeer_addr {
|
||||||
|
struct inetpeer_addr_base addr;
|
||||||
|
__u16 family;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct inet_peer {
|
struct inet_peer {
|
||||||
@ -67,7 +71,7 @@ static inline struct inet_peer *inet_getpeer_v4(__be32 v4daddr, int create)
|
|||||||
{
|
{
|
||||||
struct inetpeer_addr daddr;
|
struct inetpeer_addr daddr;
|
||||||
|
|
||||||
daddr.a4 = v4daddr;
|
daddr.addr.a4 = v4daddr;
|
||||||
daddr.family = AF_INET;
|
daddr.family = AF_INET;
|
||||||
return inet_getpeer(&daddr, create);
|
return inet_getpeer(&daddr, create);
|
||||||
}
|
}
|
||||||
@ -76,7 +80,7 @@ static inline struct inet_peer *inet_getpeer_v6(struct in6_addr *v6daddr, int cr
|
|||||||
{
|
{
|
||||||
struct inetpeer_addr daddr;
|
struct inetpeer_addr daddr;
|
||||||
|
|
||||||
ipv6_addr_copy((struct in6_addr *)daddr.a6, v6daddr);
|
ipv6_addr_copy((struct in6_addr *)daddr.addr.a6, v6daddr);
|
||||||
daddr.family = AF_INET6;
|
daddr.family = AF_INET6;
|
||||||
return inet_getpeer(&daddr, create);
|
return inet_getpeer(&daddr, create);
|
||||||
}
|
}
|
||||||
|
@ -167,9 +167,9 @@ static int addr_compare(const struct inetpeer_addr *a,
|
|||||||
int i, n = (a->family == AF_INET ? 1 : 4);
|
int i, n = (a->family == AF_INET ? 1 : 4);
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
if (a->a6[i] == b->a6[i])
|
if (a->addr.a6[i] == b->addr.a6[i])
|
||||||
continue;
|
continue;
|
||||||
if (a->a6[i] < b->a6[i])
|
if (a->addr.a6[i] < b->addr.a6[i])
|
||||||
return -1;
|
return -1;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -510,7 +510,7 @@ struct inet_peer *inet_getpeer(struct inetpeer_addr *daddr, int create)
|
|||||||
p->daddr = *daddr;
|
p->daddr = *daddr;
|
||||||
atomic_set(&p->refcnt, 1);
|
atomic_set(&p->refcnt, 1);
|
||||||
atomic_set(&p->rid, 0);
|
atomic_set(&p->rid, 0);
|
||||||
atomic_set(&p->ip_id_count, secure_ip_id(daddr->a4));
|
atomic_set(&p->ip_id_count, secure_ip_id(daddr->addr.a4));
|
||||||
p->tcp_ts_stamp = 0;
|
p->tcp_ts_stamp = 0;
|
||||||
p->metrics[RTAX_LOCK-1] = INETPEER_METRICS_NEW;
|
p->metrics[RTAX_LOCK-1] = INETPEER_METRICS_NEW;
|
||||||
p->rate_tokens = 0;
|
p->rate_tokens = 0;
|
||||||
|
@ -1341,7 +1341,7 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
|
|||||||
tcp_death_row.sysctl_tw_recycle &&
|
tcp_death_row.sysctl_tw_recycle &&
|
||||||
(dst = inet_csk_route_req(sk, req)) != NULL &&
|
(dst = inet_csk_route_req(sk, req)) != NULL &&
|
||||||
(peer = rt_get_peer((struct rtable *)dst)) != NULL &&
|
(peer = rt_get_peer((struct rtable *)dst)) != NULL &&
|
||||||
peer->daddr.a4 == saddr) {
|
peer->daddr.addr.a4 == saddr) {
|
||||||
inet_peer_refcheck(peer);
|
inet_peer_refcheck(peer);
|
||||||
if ((u32)get_seconds() - peer->tcp_ts_stamp < TCP_PAWS_MSL &&
|
if ((u32)get_seconds() - peer->tcp_ts_stamp < TCP_PAWS_MSL &&
|
||||||
(s32)(peer->tcp_ts - req->ts_recent) >
|
(s32)(peer->tcp_ts - req->ts_recent) >
|
||||||
|
@ -1323,7 +1323,7 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
|
|||||||
tcp_death_row.sysctl_tw_recycle &&
|
tcp_death_row.sysctl_tw_recycle &&
|
||||||
(dst = inet6_csk_route_req(sk, req)) != NULL &&
|
(dst = inet6_csk_route_req(sk, req)) != NULL &&
|
||||||
(peer = rt6_get_peer((struct rt6_info *)dst)) != NULL &&
|
(peer = rt6_get_peer((struct rt6_info *)dst)) != NULL &&
|
||||||
ipv6_addr_equal((struct in6_addr *)peer->daddr.a6,
|
ipv6_addr_equal((struct in6_addr *)peer->daddr.addr.a6,
|
||||||
&treq->rmt_addr)) {
|
&treq->rmt_addr)) {
|
||||||
inet_peer_refcheck(peer);
|
inet_peer_refcheck(peer);
|
||||||
if ((u32)get_seconds() - peer->tcp_ts_stamp < TCP_PAWS_MSL &&
|
if ((u32)get_seconds() - peer->tcp_ts_stamp < TCP_PAWS_MSL &&
|
||||||
|
Loading…
Reference in New Issue
Block a user