Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+15 -11
+10 -6
include/net/inetpeer.h
··· 15 15 #include <net/ipv6.h> 16 16 #include <asm/atomic.h> 17 17 18 - struct inetpeer_addr { 18 + struct inetpeer_addr_base { 19 19 union { 20 - __be32 a4; 21 - __be32 a6[4]; 20 + __be32 a4; 21 + __be32 a6[4]; 22 22 }; 23 - __u16 family; 23 + }; 24 + 25 + struct inetpeer_addr { 26 + struct inetpeer_addr_base addr; 27 + __u16 family; 24 28 }; 25 29 26 30 struct inet_peer { ··· 71 67 { 72 68 struct inetpeer_addr daddr; 73 69 74 - daddr.a4 = v4daddr; 70 + daddr.addr.a4 = v4daddr; 75 71 daddr.family = AF_INET; 76 72 return inet_getpeer(&daddr, create); 77 73 } ··· 80 76 { 81 77 struct inetpeer_addr daddr; 82 78 83 - ipv6_addr_copy((struct in6_addr *)daddr.a6, v6daddr); 79 + ipv6_addr_copy((struct in6_addr *)daddr.addr.a6, v6daddr); 84 80 daddr.family = AF_INET6; 85 81 return inet_getpeer(&daddr, create); 86 82 }
+3 -3
net/ipv4/inetpeer.c
··· 167 167 int i, n = (a->family == AF_INET ? 1 : 4); 168 168 169 169 for (i = 0; i < n; i++) { 170 - if (a->a6[i] == b->a6[i]) 170 + if (a->addr.a6[i] == b->addr.a6[i]) 171 171 continue; 172 - if (a->a6[i] < b->a6[i]) 172 + if (a->addr.a6[i] < b->addr.a6[i]) 173 173 return -1; 174 174 return 1; 175 175 } ··· 510 510 p->daddr = *daddr; 511 511 atomic_set(&p->refcnt, 1); 512 512 atomic_set(&p->rid, 0); 513 - atomic_set(&p->ip_id_count, secure_ip_id(daddr->a4)); 513 + atomic_set(&p->ip_id_count, secure_ip_id(daddr->addr.a4)); 514 514 p->tcp_ts_stamp = 0; 515 515 p->metrics[RTAX_LOCK-1] = INETPEER_METRICS_NEW; 516 516 p->rate_tokens = 0;
+1 -1
net/ipv4/tcp_ipv4.c
··· 1341 1341 tcp_death_row.sysctl_tw_recycle && 1342 1342 (dst = inet_csk_route_req(sk, req)) != NULL && 1343 1343 (peer = rt_get_peer((struct rtable *)dst)) != NULL && 1344 - peer->daddr.a4 == saddr) { 1344 + peer->daddr.addr.a4 == saddr) { 1345 1345 inet_peer_refcheck(peer); 1346 1346 if ((u32)get_seconds() - peer->tcp_ts_stamp < TCP_PAWS_MSL && 1347 1347 (s32)(peer->tcp_ts - req->ts_recent) >
+1 -1
net/ipv6/tcp_ipv6.c
··· 1323 1323 tcp_death_row.sysctl_tw_recycle && 1324 1324 (dst = inet6_csk_route_req(sk, req)) != NULL && 1325 1325 (peer = rt6_get_peer((struct rt6_info *)dst)) != NULL && 1326 - ipv6_addr_equal((struct in6_addr *)peer->daddr.a6, 1326 + ipv6_addr_equal((struct in6_addr *)peer->daddr.addr.a6, 1327 1327 &treq->rmt_addr)) { 1328 1328 inet_peer_refcheck(peer); 1329 1329 if ((u32)get_seconds() - peer->tcp_ts_stamp < TCP_PAWS_MSL &&