LinuxKPI/OFED: (re)move inetdevice.h implementation
The two functions in linux/inetdevice.h are highly FreeBSD/ifnet specific. This is a result of struct net_device being mapped to struct ifnet. The only known consumer of these functions are two files in the ofed/infiniband code. As a first step of cleaning up copy linux/inetdevice.h to rdma/ib_addr_freebsd.h. (It stayed a separate file to preserve copyright and license of the original file; otherwise it could be merged into ib_addr.h where more EPOCH/vnet/.. are already used). Slightly rename the function to not conflict with LinuxKPI in the future. Remove the three last, now unneeded includes of inetdevice.h and zap linux/inetdevice.h to an empty header file with only the forward include to netdevice.h remaining. Sponsored-by: The FreeBSD Foundation MFC-after: 2 weeks Reviewed-by: hselasky, kib X-D-R: D29366 (extracted as further cleanup) Differential Revision: https://reviews.freebsd.org/D29434
This commit is contained in:
parent
7446b0888d
commit
7069b4c6a4
@ -1,93 +1,6 @@
|
|||||||
/*-
|
|
||||||
* Copyright (c) 2010 Isilon Systems, Inc.
|
|
||||||
* Copyright (c) 2010 iX Systems, Inc.
|
|
||||||
* Copyright (c) 2010 Panasas, Inc.
|
|
||||||
* Copyright (c) 2013-2017 Mellanox Technologies, Ltd.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice unmodified, this list of conditions, and the following
|
|
||||||
* disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
||||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
* $FreeBSD$
|
|
||||||
*/
|
|
||||||
#ifndef _LINUX_INETDEVICE_H_
|
#ifndef _LINUX_INETDEVICE_H_
|
||||||
#define _LINUX_INETDEVICE_H_
|
#define _LINUX_INETDEVICE_H_
|
||||||
|
|
||||||
#include <linux/netdevice.h>
|
#include <linux/netdevice.h>
|
||||||
|
|
||||||
static inline struct net_device *
|
|
||||||
ip_dev_find(struct vnet *vnet, uint32_t addr)
|
|
||||||
{
|
|
||||||
struct sockaddr_in sin;
|
|
||||||
struct epoch_tracker et;
|
|
||||||
struct ifaddr *ifa;
|
|
||||||
struct ifnet *ifp;
|
|
||||||
|
|
||||||
memset(&sin, 0, sizeof(sin));
|
|
||||||
sin.sin_addr.s_addr = addr;
|
|
||||||
sin.sin_len = sizeof(sin);
|
|
||||||
sin.sin_family = AF_INET;
|
|
||||||
NET_EPOCH_ENTER(et);
|
|
||||||
CURVNET_SET_QUIET(vnet);
|
|
||||||
ifa = ifa_ifwithaddr((struct sockaddr *)&sin);
|
|
||||||
CURVNET_RESTORE();
|
|
||||||
if (ifa) {
|
|
||||||
ifp = ifa->ifa_ifp;
|
|
||||||
if_ref(ifp);
|
|
||||||
} else {
|
|
||||||
ifp = NULL;
|
|
||||||
}
|
|
||||||
NET_EPOCH_EXIT(et);
|
|
||||||
return (ifp);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline struct net_device *
|
|
||||||
ip6_dev_find(struct vnet *vnet, struct in6_addr addr, uint16_t scope_id)
|
|
||||||
{
|
|
||||||
struct sockaddr_in6 sin6;
|
|
||||||
struct epoch_tracker et;
|
|
||||||
struct ifaddr *ifa;
|
|
||||||
struct ifnet *ifp;
|
|
||||||
|
|
||||||
memset(&sin6, 0, sizeof(sin6));
|
|
||||||
sin6.sin6_addr = addr;
|
|
||||||
sin6.sin6_len = sizeof(sin6);
|
|
||||||
sin6.sin6_family = AF_INET6;
|
|
||||||
if (IN6_IS_SCOPE_LINKLOCAL(&addr) ||
|
|
||||||
IN6_IS_ADDR_MC_INTFACELOCAL(&addr)) {
|
|
||||||
/* embed the IPv6 scope ID */
|
|
||||||
sin6.sin6_addr.s6_addr16[1] = htons(scope_id);
|
|
||||||
}
|
|
||||||
NET_EPOCH_ENTER(et);
|
|
||||||
CURVNET_SET_QUIET(vnet);
|
|
||||||
ifa = ifa_ifwithaddr((struct sockaddr *)&sin6);
|
|
||||||
CURVNET_RESTORE();
|
|
||||||
if (ifa != NULL) {
|
|
||||||
ifp = ifa->ifa_ifp;
|
|
||||||
if_ref(ifp);
|
|
||||||
} else {
|
|
||||||
ifp = NULL;
|
|
||||||
}
|
|
||||||
NET_EPOCH_EXIT(et);
|
|
||||||
return (ifp);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* _LINUX_INETDEVICE_H_ */
|
#endif /* _LINUX_INETDEVICE_H_ */
|
||||||
|
@ -39,7 +39,6 @@
|
|||||||
__FBSDID("$FreeBSD$");
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
#include <linux/inetdevice.h>
|
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
@ -47,6 +46,7 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include <net/route/nhop.h>
|
#include <net/route/nhop.h>
|
||||||
#include <net/netevent.h>
|
#include <net/netevent.h>
|
||||||
#include <rdma/ib_addr.h>
|
#include <rdma/ib_addr.h>
|
||||||
|
#include <rdma/ib_addr_freebsd.h>
|
||||||
#include <rdma/ib.h>
|
#include <rdma/ib.h>
|
||||||
|
|
||||||
#include <netinet/in_fib.h>
|
#include <netinet/in_fib.h>
|
||||||
@ -181,13 +181,13 @@ int rdma_translate_ip(const struct sockaddr *addr,
|
|||||||
} else switch (addr->sa_family) {
|
} else switch (addr->sa_family) {
|
||||||
#ifdef INET
|
#ifdef INET
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
dev = ip_dev_find(dev_addr->net,
|
dev = ip_ifp_find(dev_addr->net,
|
||||||
((const struct sockaddr_in *)addr)->sin_addr.s_addr);
|
((const struct sockaddr_in *)addr)->sin_addr.s_addr);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef INET6
|
#ifdef INET6
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
dev = ip6_dev_find(dev_addr->net,
|
dev = ip6_ifp_find(dev_addr->net,
|
||||||
((const struct sockaddr_in6 *)addr)->sin6_addr, 0);
|
((const struct sockaddr_in6 *)addr)->sin6_addr, 0);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
@ -325,7 +325,7 @@ static int addr4_resolve(struct sockaddr_in *src_in,
|
|||||||
if (addr->bound_dev_if != 0) {
|
if (addr->bound_dev_if != 0) {
|
||||||
ifp = dev_get_by_index(addr->net, addr->bound_dev_if);
|
ifp = dev_get_by_index(addr->net, addr->bound_dev_if);
|
||||||
} else {
|
} else {
|
||||||
ifp = ip_dev_find(addr->net, src_in->sin_addr.s_addr);
|
ifp = ip_ifp_find(addr->net, src_in->sin_addr.s_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check source interface */
|
/* check source interface */
|
||||||
@ -516,7 +516,7 @@ static int addr6_resolve(struct sockaddr_in6 *src_in,
|
|||||||
if (addr->bound_dev_if != 0) {
|
if (addr->bound_dev_if != 0) {
|
||||||
ifp = dev_get_by_index(addr->net, addr->bound_dev_if);
|
ifp = dev_get_by_index(addr->net, addr->bound_dev_if);
|
||||||
} else {
|
} else {
|
||||||
ifp = ip6_dev_find(addr->net, src_in->sin6_addr, 0);
|
ifp = ip6_ifp_find(addr->net, src_in->sin6_addr, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check source interface */
|
/* check source interface */
|
||||||
|
@ -46,7 +46,6 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
#include <linux/random.h>
|
#include <linux/random.h>
|
||||||
#include <linux/idr.h>
|
#include <linux/idr.h>
|
||||||
#include <linux/inetdevice.h>
|
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <net/route.h>
|
#include <net/route.h>
|
||||||
@ -66,6 +65,7 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include <rdma/rdma_sdp.h>
|
#include <rdma/rdma_sdp.h>
|
||||||
#include <rdma/ib.h>
|
#include <rdma/ib.h>
|
||||||
#include <rdma/ib_addr.h>
|
#include <rdma/ib_addr.h>
|
||||||
|
#include <rdma/ib_addr_freebsd.h>
|
||||||
#include <rdma/ib_cache.h>
|
#include <rdma/ib_cache.h>
|
||||||
#include <rdma/ib_cm.h>
|
#include <rdma/ib_cm.h>
|
||||||
#include <rdma/ib_sa.h>
|
#include <rdma/ib_sa.h>
|
||||||
@ -1364,7 +1364,7 @@ static bool validate_ipv4_net_dev(struct net_device *net_dev,
|
|||||||
ipv4_is_loopback(saddr))
|
ipv4_is_loopback(saddr))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
dst_dev = ip_dev_find(net_dev->if_vnet, daddr);
|
dst_dev = ip_ifp_find(net_dev->if_vnet, daddr);
|
||||||
if (dst_dev != net_dev) {
|
if (dst_dev != net_dev) {
|
||||||
if (dst_dev != NULL)
|
if (dst_dev != NULL)
|
||||||
dev_put(dst_dev);
|
dev_put(dst_dev);
|
||||||
@ -1402,7 +1402,7 @@ static bool validate_ipv6_net_dev(struct net_device *net_dev,
|
|||||||
struct nhop_object *nh;
|
struct nhop_object *nh;
|
||||||
bool ret;
|
bool ret;
|
||||||
|
|
||||||
dst_dev = ip6_dev_find(net_dev->if_vnet, dst_tmp.sin6_addr,
|
dst_dev = ip6_ifp_find(net_dev->if_vnet, dst_tmp.sin6_addr,
|
||||||
net_dev->if_index);
|
net_dev->if_index);
|
||||||
if (dst_dev != net_dev) {
|
if (dst_dev != net_dev) {
|
||||||
if (dst_dev != NULL)
|
if (dst_dev != NULL)
|
||||||
|
@ -42,7 +42,6 @@
|
|||||||
#include <linux/in6.h>
|
#include <linux/in6.h>
|
||||||
#include <linux/if_arp.h>
|
#include <linux/if_arp.h>
|
||||||
#include <linux/netdevice.h>
|
#include <linux/netdevice.h>
|
||||||
#include <linux/inetdevice.h>
|
|
||||||
#include <linux/socket.h>
|
#include <linux/socket.h>
|
||||||
#include <linux/if_vlan.h>
|
#include <linux/if_vlan.h>
|
||||||
#include <net/ipv6.h>
|
#include <net/ipv6.h>
|
||||||
|
95
sys/ofed/include/rdma/ib_addr_freebsd.h
Normal file
95
sys/ofed/include/rdma/ib_addr_freebsd.h
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
/*-
|
||||||
|
* Copyright (c) 2010 Isilon Systems, Inc.
|
||||||
|
* Copyright (c) 2010 iX Systems, Inc.
|
||||||
|
* Copyright (c) 2010 Panasas, Inc.
|
||||||
|
* Copyright (c) 2013-2017 Mellanox Technologies, Ltd.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice unmodified, this list of conditions, and the following
|
||||||
|
* disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
|
*/
|
||||||
|
#ifndef _RDMA_IB_ADDR_FREEBSD_H
|
||||||
|
#define _RDMA_IB_ADDR_FREEBSD_H
|
||||||
|
|
||||||
|
#ifdef INET
|
||||||
|
static inline struct ifnet *
|
||||||
|
ip_ifp_find(struct vnet *vnet, uint32_t addr)
|
||||||
|
{
|
||||||
|
struct sockaddr_in sin;
|
||||||
|
struct epoch_tracker et;
|
||||||
|
struct ifaddr *ifa;
|
||||||
|
struct ifnet *ifp;
|
||||||
|
|
||||||
|
memset(&sin, 0, sizeof(sin));
|
||||||
|
sin.sin_addr.s_addr = addr;
|
||||||
|
sin.sin_len = sizeof(sin);
|
||||||
|
sin.sin_family = AF_INET;
|
||||||
|
NET_EPOCH_ENTER(et);
|
||||||
|
CURVNET_SET_QUIET(vnet);
|
||||||
|
ifa = ifa_ifwithaddr((struct sockaddr *)&sin);
|
||||||
|
CURVNET_RESTORE();
|
||||||
|
if (ifa) {
|
||||||
|
ifp = ifa->ifa_ifp;
|
||||||
|
if_ref(ifp);
|
||||||
|
} else {
|
||||||
|
ifp = NULL;
|
||||||
|
}
|
||||||
|
NET_EPOCH_EXIT(et);
|
||||||
|
return (ifp);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef INET6
|
||||||
|
static inline struct ifnet *
|
||||||
|
ip6_ifp_find(struct vnet *vnet, struct in6_addr addr, uint16_t scope_id)
|
||||||
|
{
|
||||||
|
struct sockaddr_in6 sin6;
|
||||||
|
struct epoch_tracker et;
|
||||||
|
struct ifaddr *ifa;
|
||||||
|
struct ifnet *ifp;
|
||||||
|
|
||||||
|
memset(&sin6, 0, sizeof(sin6));
|
||||||
|
sin6.sin6_addr = addr;
|
||||||
|
sin6.sin6_len = sizeof(sin6);
|
||||||
|
sin6.sin6_family = AF_INET6;
|
||||||
|
if (IN6_IS_SCOPE_LINKLOCAL(&addr) ||
|
||||||
|
IN6_IS_ADDR_MC_INTFACELOCAL(&addr)) {
|
||||||
|
/* embed the IPv6 scope ID */
|
||||||
|
sin6.sin6_addr.s6_addr16[1] = htons(scope_id);
|
||||||
|
}
|
||||||
|
NET_EPOCH_ENTER(et);
|
||||||
|
CURVNET_SET_QUIET(vnet);
|
||||||
|
ifa = ifa_ifwithaddr((struct sockaddr *)&sin6);
|
||||||
|
CURVNET_RESTORE();
|
||||||
|
if (ifa != NULL) {
|
||||||
|
ifp = ifa->ifa_ifp;
|
||||||
|
if_ref(ifp);
|
||||||
|
} else {
|
||||||
|
ifp = NULL;
|
||||||
|
}
|
||||||
|
NET_EPOCH_EXIT(et);
|
||||||
|
return (ifp);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _RDMA_IB_ADDR_FREEBSD_H */
|
Loading…
Reference in New Issue
Block a user