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:
|
case AF_INET:
|
||||||
return addr->a4 == 0;
|
return addr->a4 == 0;
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
return ipv6_addr_any((struct in6_addr *)&addr->a6);
|
return ipv6_addr_any(&addr->in6);
|
||||||
}
|
}
|
||||||
return 0;
|
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));
|
memcpy(&daddr->a4, &fl->u.ip4.daddr, sizeof(daddr->a4));
|
||||||
break;
|
break;
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
*(struct in6_addr *)saddr->a6 = fl->u.ip6.saddr;
|
saddr->in6 = fl->u.ip6.saddr;
|
||||||
*(struct in6_addr *)daddr->a6 = fl->u.ip6.daddr;
|
daddr->in6 = fl->u.ip6.daddr;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#ifndef _LINUX_XFRM_H
|
#ifndef _LINUX_XFRM_H
|
||||||
#define _LINUX_XFRM_H
|
#define _LINUX_XFRM_H
|
||||||
|
|
||||||
|
#include <linux/in6.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
/* All of the structures in this file may not change size as they are
|
/* All of the structures in this file may not change size as they are
|
||||||
|
@ -13,6 +14,7 @@
|
||||||
typedef union {
|
typedef union {
|
||||||
__be32 a4;
|
__be32 a4;
|
||||||
__be32 a6[4];
|
__be32 a6[4];
|
||||||
|
struct in6_addr in6;
|
||||||
} xfrm_address_t;
|
} xfrm_address_t;
|
||||||
|
|
||||||
/* Ident of a specific xfrm_state. It is used on input to lookup
|
/* 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 = ipv6_hdr(skb);
|
||||||
ip6h->payload_len = htons(skb->len - size);
|
ip6h->payload_len = htons(skb->len - size);
|
||||||
ip6h->daddr = *(struct in6_addr *)&x->sel.daddr.a6;
|
ip6h->daddr = x->sel.daddr.in6;
|
||||||
ip6h->saddr = *(struct in6_addr *)&x->sel.saddr.a6;
|
ip6h->saddr = x->sel.saddr.in6;
|
||||||
err = 0;
|
err = 0;
|
||||||
out:
|
out:
|
||||||
return err;
|
return err;
|
||||||
|
|
|
@ -61,9 +61,7 @@ static int xfrm6_get_saddr(struct net *net,
|
||||||
return -EHOSTUNREACH;
|
return -EHOSTUNREACH;
|
||||||
|
|
||||||
dev = ip6_dst_idev(dst)->dev;
|
dev = ip6_dst_idev(dst)->dev;
|
||||||
ipv6_dev_get_saddr(dev_net(dev), dev,
|
ipv6_dev_get_saddr(dev_net(dev), dev, &daddr->in6, 0, &saddr->in6);
|
||||||
(struct in6_addr *)&daddr->a6, 0,
|
|
||||||
(struct in6_addr *)&saddr->a6);
|
|
||||||
dst_release(dst);
|
dst_release(dst);
|
||||||
return 0;
|
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_family = AF_INET6;
|
||||||
sin6->sin6_port = port;
|
sin6->sin6_port = port;
|
||||||
sin6->sin6_flowinfo = 0;
|
sin6->sin6_flowinfo = 0;
|
||||||
sin6->sin6_addr = *(struct in6_addr *)xaddr->a6;
|
sin6->sin6_addr = xaddr->in6;
|
||||||
sin6->sin6_scope_id = 0;
|
sin6->sin6_scope_id = 0;
|
||||||
return 128;
|
return 128;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1043,12 +1043,12 @@ static struct xfrm_state *__find_acq_core(struct net *net,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
*(struct in6_addr *)x->sel.daddr.a6 = *(struct in6_addr *)daddr;
|
x->sel.daddr.in6 = daddr->in6;
|
||||||
*(struct in6_addr *)x->sel.saddr.a6 = *(struct in6_addr *)saddr;
|
x->sel.saddr.in6 = saddr->in6;
|
||||||
x->sel.prefixlen_d = 128;
|
x->sel.prefixlen_d = 128;
|
||||||
x->sel.prefixlen_s = 128;
|
x->sel.prefixlen_s = 128;
|
||||||
*(struct in6_addr *)x->props.saddr.a6 = *(struct in6_addr *)saddr;
|
x->props.saddr.in6 = saddr->in6;
|
||||||
*(struct in6_addr *)x->id.daddr.a6 = *(struct in6_addr *)daddr;
|
x->id.daddr.in6 = daddr->in6;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue