mirror of
https://github.com/torvalds/linux.git
synced 2024-12-27 21:33:00 +00:00
xfrm: simplify xfrm_address_t use
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. Modifying the uapi header is okay, the union has still the same size. Signed-off-by: Jiri Benc <jbenc@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8f55db4860
commit
15e318bdc6
@ -1025,7 +1025,7 @@ xfrm_addr_any(const xfrm_address_t *addr, unsigned short family)
|
||||
case AF_INET:
|
||||
return addr->a4 == 0;
|
||||
case AF_INET6:
|
||||
return ipv6_addr_any((struct in6_addr *)&addr->a6);
|
||||
return ipv6_addr_any(&addr->in6);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -1238,8 +1238,8 @@ void xfrm_flowi_addr_get(const struct flowi *fl,
|
||||
memcpy(&daddr->a4, &fl->u.ip4.daddr, sizeof(daddr->a4));
|
||||
break;
|
||||
case AF_INET6:
|
||||
*(struct in6_addr *)saddr->a6 = fl->u.ip6.saddr;
|
||||
*(struct in6_addr *)daddr->a6 = fl->u.ip6.daddr;
|
||||
saddr->in6 = fl->u.ip6.saddr;
|
||||
daddr->in6 = fl->u.ip6.daddr;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
#ifndef _LINUX_XFRM_H
|
||||
#define _LINUX_XFRM_H
|
||||
|
||||
#include <linux/in6.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
/* All of the structures in this file may not change size as they are
|
||||
@ -13,6 +14,7 @@
|
||||
typedef union {
|
||||
__be32 a4;
|
||||
__be32 a6[4];
|
||||
struct in6_addr in6;
|
||||
} xfrm_address_t;
|
||||
|
||||
/* Ident of a specific xfrm_state. It is used on input to lookup
|
||||
|
@ -95,8 +95,8 @@ static int xfrm6_beet_input(struct xfrm_state *x, struct sk_buff *skb)
|
||||
|
||||
ip6h = ipv6_hdr(skb);
|
||||
ip6h->payload_len = htons(skb->len - size);
|
||||
ip6h->daddr = *(struct in6_addr *)&x->sel.daddr.a6;
|
||||
ip6h->saddr = *(struct in6_addr *)&x->sel.saddr.a6;
|
||||
ip6h->daddr = x->sel.daddr.in6;
|
||||
ip6h->saddr = x->sel.saddr.in6;
|
||||
err = 0;
|
||||
out:
|
||||
return err;
|
||||
|
@ -61,9 +61,7 @@ static int xfrm6_get_saddr(struct net *net,
|
||||
return -EHOSTUNREACH;
|
||||
|
||||
dev = ip6_dst_idev(dst)->dev;
|
||||
ipv6_dev_get_saddr(dev_net(dev), dev,
|
||||
(struct in6_addr *)&daddr->a6, 0,
|
||||
(struct in6_addr *)&saddr->a6);
|
||||
ipv6_dev_get_saddr(dev_net(dev), dev, &daddr->in6, 0, &saddr->in6);
|
||||
dst_release(dst);
|
||||
return 0;
|
||||
}
|
||||
|
@ -709,7 +709,7 @@ static unsigned int pfkey_sockaddr_fill(const xfrm_address_t *xaddr, __be16 port
|
||||
sin6->sin6_family = AF_INET6;
|
||||
sin6->sin6_port = port;
|
||||
sin6->sin6_flowinfo = 0;
|
||||
sin6->sin6_addr = *(struct in6_addr *)xaddr->a6;
|
||||
sin6->sin6_addr = xaddr->in6;
|
||||
sin6->sin6_scope_id = 0;
|
||||
return 128;
|
||||
}
|
||||
|
@ -1043,12 +1043,12 @@ static struct xfrm_state *__find_acq_core(struct net *net,
|
||||
break;
|
||||
|
||||
case AF_INET6:
|
||||
*(struct in6_addr *)x->sel.daddr.a6 = *(struct in6_addr *)daddr;
|
||||
*(struct in6_addr *)x->sel.saddr.a6 = *(struct in6_addr *)saddr;
|
||||
x->sel.daddr.in6 = daddr->in6;
|
||||
x->sel.saddr.in6 = saddr->in6;
|
||||
x->sel.prefixlen_d = 128;
|
||||
x->sel.prefixlen_s = 128;
|
||||
*(struct in6_addr *)x->props.saddr.a6 = *(struct in6_addr *)saddr;
|
||||
*(struct in6_addr *)x->id.daddr.a6 = *(struct in6_addr *)daddr;
|
||||
x->props.saddr.in6 = saddr->in6;
|
||||
x->id.daddr.in6 = daddr->in6;
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user