tcp: simplify inetpeer_addr_base use
authorJiri Benc <jbenc@redhat.com>
Sun, 29 Mar 2015 14:59:23 +0000 (16:59 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 31 Mar 2015 17:58:35 +0000 (13:58 -0400)
In many places, the a6 field is typecasted to struct in6_addr. As the
fields are in union anyway, just add in6_addr type to the union and get rid
of the typecasting.

Signed-off-by: Jiri Benc <jbenc@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/inetpeer.h
net/ipv4/tcp_metrics.c

index 80479abddf73cc181899e1115a572727f578633d..d5332ddcea3f3b58fb7f38254d6c8a7e84de21eb 100644 (file)
@@ -19,6 +19,7 @@ struct inetpeer_addr_base {
        union {
                __be32                  a4;
                __be32                  a6[4];
+               struct in6_addr         in6;
        };
 };
 
@@ -151,7 +152,7 @@ static inline struct inet_peer *inet_getpeer_v6(struct inet_peer_base *base,
 {
        struct inetpeer_addr daddr;
 
-       *(struct in6_addr *)daddr.addr.a6 = *v6daddr;
+       daddr.addr.in6 = *v6daddr;
        daddr.family = AF_INET6;
        return inet_getpeer(base, &daddr, create);
 }
index 5bef3513af77afc8943d99a107f74155b9979aaa..f62c2c68ced002ad3696196b145786e0f63493e3 100644 (file)
@@ -80,17 +80,11 @@ static void tcp_metric_set(struct tcp_metrics_block *tm,
 static bool addr_same(const struct inetpeer_addr *a,
                      const struct inetpeer_addr *b)
 {
-       const struct in6_addr *a6, *b6;
-
        if (a->family != b->family)
                return false;
        if (a->family == AF_INET)
                return a->addr.a4 == b->addr.a4;
-
-       a6 = (const struct in6_addr *) &a->addr.a6[0];
-       b6 = (const struct in6_addr *) &b->addr.a6[0];
-
-       return ipv6_addr_equal(a6, b6);
+       return ipv6_addr_equal(&a->addr.in6, &b->addr.in6);
 }
 
 struct tcpm_hash_bucket {
@@ -256,8 +250,8 @@ static struct tcp_metrics_block *__tcp_get_metrics_req(struct request_sock *req,
                break;
 #if IS_ENABLED(CONFIG_IPV6)
        case AF_INET6:
-               *(struct in6_addr *)saddr.addr.a6 = inet_rsk(req)->ir_v6_loc_addr;
-               *(struct in6_addr *)daddr.addr.a6 = inet_rsk(req)->ir_v6_rmt_addr;
+               saddr.addr.in6 = inet_rsk(req)->ir_v6_loc_addr;
+               daddr.addr.in6 = inet_rsk(req)->ir_v6_rmt_addr;
                hash = ipv6_addr_hash(&inet_rsk(req)->ir_v6_rmt_addr);
                break;
 #endif
@@ -304,9 +298,9 @@ static struct tcp_metrics_block *__tcp_get_metrics_tw(struct inet_timewait_sock
                        hash = (__force unsigned int) daddr.addr.a4;
                } else {
                        saddr.family = AF_INET6;
-                       *(struct in6_addr *)saddr.addr.a6 = tw->tw_v6_rcv_saddr;
+                       saddr.addr.in6 = tw->tw_v6_rcv_saddr;
                        daddr.family = AF_INET6;
-                       *(struct in6_addr *)daddr.addr.a6 = tw->tw_v6_daddr;
+                       daddr.addr.in6 = tw->tw_v6_daddr;
                        hash = ipv6_addr_hash(&tw->tw_v6_daddr);
                }
        }
@@ -354,9 +348,9 @@ static struct tcp_metrics_block *tcp_get_metrics(struct sock *sk,
                        hash = (__force unsigned int) daddr.addr.a4;
                } else {
                        saddr.family = AF_INET6;
-                       *(struct in6_addr *)saddr.addr.a6 = sk->sk_v6_rcv_saddr;
+                       saddr.addr.in6 = sk->sk_v6_rcv_saddr;
                        daddr.family = AF_INET6;
-                       *(struct in6_addr *)daddr.addr.a6 = sk->sk_v6_daddr;
+                       daddr.addr.in6 = sk->sk_v6_daddr;
                        hash = ipv6_addr_hash(&sk->sk_v6_daddr);
                }
        }
@@ -966,7 +960,7 @@ static int __parse_nl_addr(struct genl_info *info, struct inetpeer_addr *addr,
                addr->family = AF_INET6;
                memcpy(addr->addr.a6, nla_data(a), sizeof(addr->addr.a6));
                if (hash)
-                       *hash = ipv6_addr_hash((struct in6_addr *) addr->addr.a6);
+                       *hash = ipv6_addr_hash(&addr->addr.in6);
                return 0;
        }
        return optional ? 1 : -EAFNOSUPPORT;