vxlan: Move address helpers to private headers
Move the helpers out of the core C file to the private header so that they could be used by the upcoming MDB code. While at it, constify the second argument of vxlan_nla_get_addr(). Signed-off-by: Ido Schimmel <idosch@nvidia.com> Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
da654c80a0
commit
f307c8bf37
|
@ -71,53 +71,6 @@ static inline bool vxlan_collect_metadata(struct vxlan_sock *vs)
|
|||
ip_tunnel_collect_metadata();
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
static int vxlan_nla_get_addr(union vxlan_addr *ip, struct nlattr *nla)
|
||||
{
|
||||
if (nla_len(nla) >= sizeof(struct in6_addr)) {
|
||||
ip->sin6.sin6_addr = nla_get_in6_addr(nla);
|
||||
ip->sa.sa_family = AF_INET6;
|
||||
return 0;
|
||||
} else if (nla_len(nla) >= sizeof(__be32)) {
|
||||
ip->sin.sin_addr.s_addr = nla_get_in_addr(nla);
|
||||
ip->sa.sa_family = AF_INET;
|
||||
return 0;
|
||||
} else {
|
||||
return -EAFNOSUPPORT;
|
||||
}
|
||||
}
|
||||
|
||||
static int vxlan_nla_put_addr(struct sk_buff *skb, int attr,
|
||||
const union vxlan_addr *ip)
|
||||
{
|
||||
if (ip->sa.sa_family == AF_INET6)
|
||||
return nla_put_in6_addr(skb, attr, &ip->sin6.sin6_addr);
|
||||
else
|
||||
return nla_put_in_addr(skb, attr, ip->sin.sin_addr.s_addr);
|
||||
}
|
||||
|
||||
#else /* !CONFIG_IPV6 */
|
||||
|
||||
static int vxlan_nla_get_addr(union vxlan_addr *ip, struct nlattr *nla)
|
||||
{
|
||||
if (nla_len(nla) >= sizeof(struct in6_addr)) {
|
||||
return -EAFNOSUPPORT;
|
||||
} else if (nla_len(nla) >= sizeof(__be32)) {
|
||||
ip->sin.sin_addr.s_addr = nla_get_in_addr(nla);
|
||||
ip->sa.sa_family = AF_INET;
|
||||
return 0;
|
||||
} else {
|
||||
return -EAFNOSUPPORT;
|
||||
}
|
||||
}
|
||||
|
||||
static int vxlan_nla_put_addr(struct sk_buff *skb, int attr,
|
||||
const union vxlan_addr *ip)
|
||||
{
|
||||
return nla_put_in_addr(skb, attr, ip->sin.sin_addr.s_addr);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Find VXLAN socket based on network namespace, address family, UDP port,
|
||||
* enabled unshareable flags and socket device binding (see l3mdev with
|
||||
* non-default VRF).
|
||||
|
|
|
@ -85,6 +85,31 @@ bool vxlan_addr_equal(const union vxlan_addr *a, const union vxlan_addr *b)
|
|||
return a->sin.sin_addr.s_addr == b->sin.sin_addr.s_addr;
|
||||
}
|
||||
|
||||
static inline int vxlan_nla_get_addr(union vxlan_addr *ip,
|
||||
const struct nlattr *nla)
|
||||
{
|
||||
if (nla_len(nla) >= sizeof(struct in6_addr)) {
|
||||
ip->sin6.sin6_addr = nla_get_in6_addr(nla);
|
||||
ip->sa.sa_family = AF_INET6;
|
||||
return 0;
|
||||
} else if (nla_len(nla) >= sizeof(__be32)) {
|
||||
ip->sin.sin_addr.s_addr = nla_get_in_addr(nla);
|
||||
ip->sa.sa_family = AF_INET;
|
||||
return 0;
|
||||
} else {
|
||||
return -EAFNOSUPPORT;
|
||||
}
|
||||
}
|
||||
|
||||
static inline int vxlan_nla_put_addr(struct sk_buff *skb, int attr,
|
||||
const union vxlan_addr *ip)
|
||||
{
|
||||
if (ip->sa.sa_family == AF_INET6)
|
||||
return nla_put_in6_addr(skb, attr, &ip->sin6.sin6_addr);
|
||||
else
|
||||
return nla_put_in_addr(skb, attr, ip->sin.sin_addr.s_addr);
|
||||
}
|
||||
|
||||
#else /* !CONFIG_IPV6 */
|
||||
|
||||
static inline
|
||||
|
@ -93,6 +118,26 @@ bool vxlan_addr_equal(const union vxlan_addr *a, const union vxlan_addr *b)
|
|||
return a->sin.sin_addr.s_addr == b->sin.sin_addr.s_addr;
|
||||
}
|
||||
|
||||
static inline int vxlan_nla_get_addr(union vxlan_addr *ip,
|
||||
const struct nlattr *nla)
|
||||
{
|
||||
if (nla_len(nla) >= sizeof(struct in6_addr)) {
|
||||
return -EAFNOSUPPORT;
|
||||
} else if (nla_len(nla) >= sizeof(__be32)) {
|
||||
ip->sin.sin_addr.s_addr = nla_get_in_addr(nla);
|
||||
ip->sa.sa_family = AF_INET;
|
||||
return 0;
|
||||
} else {
|
||||
return -EAFNOSUPPORT;
|
||||
}
|
||||
}
|
||||
|
||||
static inline int vxlan_nla_put_addr(struct sk_buff *skb, int attr,
|
||||
const union vxlan_addr *ip)
|
||||
{
|
||||
return nla_put_in_addr(skb, attr, ip->sin.sin_addr.s_addr);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static inline struct vxlan_vni_node *
|
||||
|
|
Loading…
Reference in New Issue