git: 7069b4c6a4e5 - main - LinuxKPI/OFED: (re)move inetdevice.h implementation

Bjoern A. Zeeb bz at FreeBSD.org
Tue Mar 30 14:52:35 UTC 2021


The branch main has been updated by bz:

URL: https://cgit.FreeBSD.org/src/commit/?id=7069b4c6a4e516e1435d8beb7a436d88193156d3

commit 7069b4c6a4e516e1435d8beb7a436d88193156d3
Author:     Bjoern A. Zeeb <bz at FreeBSD.org>
AuthorDate: 2021-03-26 17:52:24 +0000
Commit:     Bjoern A. Zeeb <bz at FreeBSD.org>
CommitDate: 2021-03-30 14:40:46 +0000

    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
---
 .../linuxkpi/common/include/linux/inetdevice.h     | 87 --------------------
 sys/ofed/drivers/infiniband/core/ib_addr.c         | 10 +--
 sys/ofed/drivers/infiniband/core/ib_cma.c          |  6 +-
 sys/ofed/include/rdma/ib_addr.h                    |  1 -
 sys/ofed/include/rdma/ib_addr_freebsd.h            | 95 ++++++++++++++++++++++
 5 files changed, 103 insertions(+), 96 deletions(-)

diff --git a/sys/compat/linuxkpi/common/include/linux/inetdevice.h b/sys/compat/linuxkpi/common/include/linux/inetdevice.h
index 87c880392b71..41852e8fed81 100644
--- a/sys/compat/linuxkpi/common/include/linux/inetdevice.h
+++ b/sys/compat/linuxkpi/common/include/linux/inetdevice.h
@@ -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_
 #define	_LINUX_INETDEVICE_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_ */
diff --git a/sys/ofed/drivers/infiniband/core/ib_addr.c b/sys/ofed/drivers/infiniband/core/ib_addr.c
index 7d0055032903..f8c1cb180af8 100644
--- a/sys/ofed/drivers/infiniband/core/ib_addr.c
+++ b/sys/ofed/drivers/infiniband/core/ib_addr.c
@@ -39,7 +39,6 @@
 __FBSDID("$FreeBSD$");
 
 #include <linux/mutex.h>
-#include <linux/inetdevice.h>
 #include <linux/slab.h>
 #include <linux/workqueue.h>
 #include <linux/module.h>
@@ -47,6 +46,7 @@ __FBSDID("$FreeBSD$");
 #include <net/route/nhop.h>
 #include <net/netevent.h>
 #include <rdma/ib_addr.h>
+#include <rdma/ib_addr_freebsd.h>
 #include <rdma/ib.h>
 
 #include <netinet/in_fib.h>
@@ -181,13 +181,13 @@ int rdma_translate_ip(const struct sockaddr *addr,
 	} else switch (addr->sa_family) {
 #ifdef 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);
 		break;
 #endif
 #ifdef 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);
 		break;
 #endif
@@ -325,7 +325,7 @@ static int addr4_resolve(struct sockaddr_in *src_in,
 		if (addr->bound_dev_if != 0) {
 			ifp = dev_get_by_index(addr->net, addr->bound_dev_if);
 		} 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 */
@@ -516,7 +516,7 @@ static int addr6_resolve(struct sockaddr_in6 *src_in,
 		if (addr->bound_dev_if != 0) {
 			ifp = dev_get_by_index(addr->net, addr->bound_dev_if);
 		} 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 */
diff --git a/sys/ofed/drivers/infiniband/core/ib_cma.c b/sys/ofed/drivers/infiniband/core/ib_cma.c
index 215a3c7aae35..717d7c70e9de 100644
--- a/sys/ofed/drivers/infiniband/core/ib_cma.c
+++ b/sys/ofed/drivers/infiniband/core/ib_cma.c
@@ -46,7 +46,6 @@ __FBSDID("$FreeBSD$");
 #include <linux/mutex.h>
 #include <linux/random.h>
 #include <linux/idr.h>
-#include <linux/inetdevice.h>
 #include <linux/slab.h>
 #include <linux/module.h>
 #include <net/route.h>
@@ -66,6 +65,7 @@ __FBSDID("$FreeBSD$");
 #include <rdma/rdma_sdp.h>
 #include <rdma/ib.h>
 #include <rdma/ib_addr.h>
+#include <rdma/ib_addr_freebsd.h>
 #include <rdma/ib_cache.h>
 #include <rdma/ib_cm.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))
 		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 != NULL)
 			dev_put(dst_dev);
@@ -1402,7 +1402,7 @@ static bool validate_ipv6_net_dev(struct net_device *net_dev,
 	struct nhop_object *nh;
 	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);
 	if (dst_dev != net_dev) {
 		if (dst_dev != NULL)
diff --git a/sys/ofed/include/rdma/ib_addr.h b/sys/ofed/include/rdma/ib_addr.h
index 15d6a937c4db..052fc636f617 100644
--- a/sys/ofed/include/rdma/ib_addr.h
+++ b/sys/ofed/include/rdma/ib_addr.h
@@ -42,7 +42,6 @@
 #include <linux/in6.h>
 #include <linux/if_arp.h>
 #include <linux/netdevice.h>
-#include <linux/inetdevice.h>
 #include <linux/socket.h>
 #include <linux/if_vlan.h>
 #include <net/ipv6.h>
diff --git a/sys/ofed/include/rdma/ib_addr_freebsd.h b/sys/ofed/include/rdma/ib_addr_freebsd.h
new file mode 100644
index 000000000000..5ce5f2f8a5ed
--- /dev/null
+++ b/sys/ofed/include/rdma/ib_addr_freebsd.h
@@ -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 */


More information about the dev-commits-src-main mailing list