Commit 7a71ed89 authored by David S. Miller's avatar David S. Miller

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: default avatarDavid S. Miller <davem@davemloft.net>
parent b6644cb7
...@@ -15,12 +15,16 @@ ...@@ -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) ...@@ -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 ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 &&
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment