From nobody Fri Mar 24 15:49:11 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Pjmpv2r2bz41jfK; Fri, 24 Mar 2023 15:49:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Pjmpv2Vnjz4HgW; Fri, 24 Mar 2023 15:49:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1679672951; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=hRVxqt2wJ4GNlL0r5ynBlSkay2fPHoKvePSpVGdeX/c=; b=BsS/FtOexqGJJ2/KtdzmUTNrUyEEl3S9b/Jer/DIGXcunwvNk006miYvMQiiZyI/S1+PZV 204I7NqqOuhCaQKp+rUKePpgE9txLfxGaXsJwX37t9VbXnvIfjMRA/kJgV+deS6r0aYbZf 8RzAcQj+cSxt5O8n9TuD/OS4j4xXip24xd3KS7uQGvBbXCqlb7uK+JRwvdghOsNUNBxQu+ OzQ/+jXA5tsTfnbrucz4d3yQ/HPyPXfKMfm8KnGK9iPX1Cz66Peolbxbq3jD4kIfKxRnr/ d5nKlQdxl/Kwolw9w8A7+lckyhB+q2gJH7UIwQBjzMng2fZdQ2hr7emt4RRI4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1679672951; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=hRVxqt2wJ4GNlL0r5ynBlSkay2fPHoKvePSpVGdeX/c=; b=pTB8qmPeu8HfBXDEQXygf93QJGEdfU1oyfIM8qEE8YvxKJA3aa39M1EaOrowrgd9KRj+02 T4GL/4LYxyaAp6axz86W3UOBWceC0o4UXtkACvJjTc4jMKue1QoR5cZUZP09Q6FOjZ9FeG AlyiOni1ekgaNFUOefRX4+f2CdbabJZpem1XkxQtfBxzwDLIxoOxrf6H14TunNsqxxod0h yyHXkpdBsbdkhx4fPYLzS9iR82yzWtmn5M2O2DzyJNTumCI39jeOvqu5STeCY+jzuaU3Lq cTlqjjcj5/ehPX6fJus/Uxek4Onj5LVWn1LoPI3rTe4iZNbkwLF6KuzWkI+6Hg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1679672951; a=rsa-sha256; cv=none; b=iXvSC31POqcmOxeR5YKkbRr2kNIRGcNblNpd7Zk3n/iXHXaWqpeSfLixQG6GIakfGCuC6J q0WIBJUmBBHtCyaZEz0pczWW6mSmPTG3FRdTP8ieew0ZJBXeoDzE3CW2Brtlis5hGfsPWQ Jt1gOdiEn0/jdCPwYZ1iyIiSVDKWA5yenU4ycDMf6sgCH17cCCjPXV1aXClaQYdSsYquQO 5RHlnmqYZc/sUvLkF+UtXJZDZbcSmD0+i8WdD4zt7+WMKWwAxt1O+MIk2Ti9jApGI5QCXk /q2USBXAjNskPuO9XlDjs93GAlDDDI9ZD7bGLoj4DbTunmwOuAmIh554LYeJcQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Pjmpv1XGQzP18; Fri, 24 Mar 2023 15:49:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 32OFnBHB078716; Fri, 24 Mar 2023 15:49:11 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 32OFnB2v078715; Fri, 24 Mar 2023 15:49:11 GMT (envelope-from git) Date: Fri, 24 Mar 2023 15:49:11 GMT Message-Id: <202303241549.32OFnB2v078715@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Justin Hibbits Subject: git: 3e142e07675b - main - ofed: Mechanically convert to IfAPI List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhibbits X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 3e142e07675be6df39e4aaf5003637dca54cdcea Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by jhibbits: URL: https://cgit.FreeBSD.org/src/commit/?id=3e142e07675be6df39e4aaf5003637dca54cdcea commit 3e142e07675be6df39e4aaf5003637dca54cdcea Author: Justin Hibbits AuthorDate: 2023-02-09 02:31:24 +0000 Commit: Justin Hibbits CommitDate: 2023-03-24 14:04:33 +0000 ofed: Mechanically convert to IfAPI Summary: Because of the intricacies of this code it wasn't purely scripted, but instead hand-mechanical. Reviewed by: hselasky Sponsored by: Juniper Networks, Inc. Differential Revision: https://reviews.freebsd.org/D38560 --- sys/ofed/drivers/infiniband/core/core_priv.h | 10 +- sys/ofed/drivers/infiniband/core/ib_addr.c | 88 +++++---- sys/ofed/drivers/infiniband/core/ib_cache.c | 26 +-- sys/ofed/drivers/infiniband/core/ib_cm.c | 6 +- sys/ofed/drivers/infiniband/core/ib_cma.c | 74 ++++---- sys/ofed/drivers/infiniband/core/ib_device.c | 12 +- sys/ofed/drivers/infiniband/core/ib_multicast.c | 2 +- .../drivers/infiniband/core/ib_roce_gid_mgmt.c | 152 +++++++++------- sys/ofed/drivers/infiniband/core/ib_sa_query.c | 6 +- sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h | 10 +- sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_cm.c | 36 ++-- .../drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 16 +- sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_fs.c | 4 +- sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c | 26 +-- sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c | 201 +++++++++++---------- .../drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 20 +- .../drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 8 +- sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 10 +- sys/ofed/include/rdma/ib_addr.h | 43 ++--- sys/ofed/include/rdma/ib_addr_freebsd.h | 12 +- sys/ofed/include/rdma/ib_cache.h | 4 +- sys/ofed/include/rdma/ib_sa.h | 4 +- sys/ofed/include/rdma/ib_verbs.h | 10 +- 23 files changed, 401 insertions(+), 379 deletions(-) diff --git a/sys/ofed/drivers/infiniband/core/core_priv.h b/sys/ofed/drivers/infiniband/core/core_priv.h index ebbb46d73933..db6cbac386ba 100644 --- a/sys/ofed/drivers/infiniband/core/core_priv.h +++ b/sys/ofed/drivers/infiniband/core/core_priv.h @@ -82,10 +82,10 @@ void ib_cache_setup(void); void ib_cache_cleanup(void); typedef void (*roce_netdev_callback)(struct ib_device *device, u8 port, - struct ifnet *idev, void *cookie); + if_t idev, void *cookie); typedef int (*roce_netdev_filter)(struct ib_device *device, u8 port, - struct ifnet *idev, void *cookie); + if_t idev, void *cookie); void ib_enum_roce_netdev(struct ib_device *ib_dev, roce_netdev_filter filter, @@ -107,7 +107,7 @@ int ib_cache_gid_parse_type_str(const char *buf); const char *ib_cache_gid_type_str(enum ib_gid_type gid_type); void ib_cache_gid_set_default_gid(struct ib_device *ib_dev, u8 port, - struct ifnet *ndev, + if_t ndev, unsigned long gid_type_mask, enum ib_cache_gid_default_mode mode); @@ -118,8 +118,8 @@ int ib_cache_gid_del(struct ib_device *ib_dev, u8 port, union ib_gid *gid, struct ib_gid_attr *attr); int ib_cache_gid_del_all_netdev_gids(struct ib_device *ib_dev, u8 port, - struct ifnet *ndev); -void ib_cache_gid_del_all_by_netdev(struct ifnet *ndev); + if_t ndev); +void ib_cache_gid_del_all_by_netdev(if_t ndev); int roce_gid_mgmt_init(void); void roce_gid_mgmt_cleanup(void); diff --git a/sys/ofed/drivers/infiniband/core/ib_addr.c b/sys/ofed/drivers/infiniband/core/ib_addr.c index 974860b77caf..ee5e792027d3 100644 --- a/sys/ofed/drivers/infiniband/core/ib_addr.c +++ b/sys/ofed/drivers/infiniband/core/ib_addr.c @@ -140,32 +140,34 @@ rdma_copy_addr_sub(u8 *dst, const u8 *src, unsigned min, unsigned max) memset(dst + min, 0, max - min); } -int rdma_copy_addr(struct rdma_dev_addr *dev_addr, struct ifnet *dev, +int rdma_copy_addr(struct rdma_dev_addr *dev_addr, if_t dev, const unsigned char *dst_dev_addr) { + int dev_type = if_gettype(dev); + /* check for loopback device */ - if (dev->if_flags & IFF_LOOPBACK) { + if (if_getflags(dev) & IFF_LOOPBACK) { dev_addr->dev_type = ARPHRD_ETHER; memset(dev_addr->src_dev_addr, 0, MAX_ADDR_LEN); memset(dev_addr->broadcast, 0, MAX_ADDR_LEN); memset(dev_addr->dst_dev_addr, 0, MAX_ADDR_LEN); - dev_addr->bound_dev_if = dev->if_index; + dev_addr->bound_dev_if = if_getindex(dev); return (0); - } else if (dev->if_type == IFT_INFINIBAND) + } else if (dev_type == IFT_INFINIBAND) dev_addr->dev_type = ARPHRD_INFINIBAND; - else if (dev->if_type == IFT_ETHER || dev->if_type == IFT_L2VLAN) + else if (dev_type == IFT_ETHER || dev_type == IFT_L2VLAN) dev_addr->dev_type = ARPHRD_ETHER; else dev_addr->dev_type = 0; - rdma_copy_addr_sub(dev_addr->src_dev_addr, IF_LLADDR(dev), - dev->if_addrlen, MAX_ADDR_LEN); - rdma_copy_addr_sub(dev_addr->broadcast, dev->if_broadcastaddr, - dev->if_addrlen, MAX_ADDR_LEN); + rdma_copy_addr_sub(dev_addr->src_dev_addr, if_getlladdr(dev), + if_getaddrlen(dev), MAX_ADDR_LEN); + rdma_copy_addr_sub(dev_addr->broadcast, if_getbroadcastaddr(dev), + if_getaddrlen(dev), MAX_ADDR_LEN); if (dst_dev_addr != NULL) { rdma_copy_addr_sub(dev_addr->dst_dev_addr, dst_dev_addr, - dev->if_addrlen, MAX_ADDR_LEN); + if_getaddrlen(dev), MAX_ADDR_LEN); } - dev_addr->bound_dev_if = dev->if_index; + dev_addr->bound_dev_if = if_getindex(dev); return 0; } EXPORT_SYMBOL(rdma_copy_addr); @@ -173,7 +175,7 @@ EXPORT_SYMBOL(rdma_copy_addr); int rdma_translate_ip(const struct sockaddr *addr, struct rdma_dev_addr *dev_addr) { - struct ifnet *dev; + if_t dev; int ret; if (dev_addr->bound_dev_if) { @@ -198,7 +200,7 @@ int rdma_translate_ip(const struct sockaddr *addr, if (dev != NULL) { /* disallow connections through 127.0.0.1 itself */ - if (dev->if_flags & IFF_LOOPBACK) + if (if_getflags(dev) & IFF_LOOPBACK) ret = -EINVAL; else ret = rdma_copy_addr(dev_addr, dev, NULL); @@ -241,7 +243,7 @@ static void queue_req(struct addr_req *req) } #if defined(INET) || defined(INET6) -static int addr_resolve_multi(u8 *edst, struct ifnet *ifp, struct sockaddr *dst_in) +static int addr_resolve_multi(u8 *edst, if_t ifp, struct sockaddr *dst_in) { struct sockaddr *llsa; struct sockaddr_dl sdl; @@ -250,14 +252,10 @@ static int addr_resolve_multi(u8 *edst, struct ifnet *ifp, struct sockaddr *dst_ sdl.sdl_len = sizeof(sdl); llsa = (struct sockaddr *)&sdl; - if (ifp->if_resolvemulti == NULL) { - error = EOPNOTSUPP; - } else { - error = ifp->if_resolvemulti(ifp, &llsa, dst_in); - if (error == 0) { - rdma_copy_addr_sub(edst, LLADDR((struct sockaddr_dl *)llsa), - ifp->if_addrlen, MAX_ADDR_LEN); - } + error = if_resolvemulti(ifp, &llsa, dst_in); + if (error == 0) { + rdma_copy_addr_sub(edst, LLADDR((struct sockaddr_dl *)llsa), + if_getaddrlen(ifp), MAX_ADDR_LEN); } return (error); } @@ -268,7 +266,7 @@ static int addr4_resolve(struct sockaddr_in *src_in, const struct sockaddr_in *dst_in, struct rdma_dev_addr *addr, u8 *edst, - struct ifnet **ifpp) + if_t *ifpp) { enum { ADDR_VALID = 0, @@ -279,7 +277,7 @@ static int addr4_resolve(struct sockaddr_in *src_in, in_port_t src_port; struct sockaddr *saddr = NULL; struct nhop_object *nh; - struct ifnet *ifp; + if_t ifp; int error; int type; @@ -332,13 +330,13 @@ static int addr4_resolve(struct sockaddr_in *src_in, if (ifp == NULL) { error = ENETUNREACH; goto done; - } else if (ifp->if_flags & IFF_LOOPBACK) { + } else if (if_getflags(ifp) & IFF_LOOPBACK) { /* * Source address cannot be a loopback device. */ error = EHOSTUNREACH; goto error_put_ifp; - } else if (nh->nh_ifp->if_flags & IFF_LOOPBACK) { + } else if (if_getflags(nh->nh_ifp) & IFF_LOOPBACK) { if (memcmp(&src_in->sin_addr, &dst_in->sin_addr, sizeof(src_in->sin_addr))) { /* @@ -364,7 +362,7 @@ static int addr4_resolve(struct sockaddr_in *src_in, break; case ADDR_SRC_ANY: /* check for loopback device */ - if (nh->nh_ifp->if_flags & IFF_LOOPBACK) + if (if_getflags(nh->nh_ifp) & IFF_LOOPBACK) saddr = (struct sockaddr *)&dst_tmp; else saddr = nh->nh_ifa->ifa_addr; @@ -381,8 +379,8 @@ static int addr4_resolve(struct sockaddr_in *src_in, * Step 3 - resolve destination MAC address */ if (dst_tmp.sin_addr.s_addr == INADDR_BROADCAST) { - rdma_copy_addr_sub(edst, ifp->if_broadcastaddr, - ifp->if_addrlen, MAX_ADDR_LEN); + rdma_copy_addr_sub(edst, if_getbroadcastaddr(ifp), + if_getaddrlen(ifp), MAX_ADDR_LEN); error = 0; } else if (IN_MULTICAST(ntohl(dst_tmp.sin_addr.s_addr))) { bool is_gw = (nh->nh_flags & NHF_GATEWAY) != 0; @@ -391,7 +389,7 @@ static int addr4_resolve(struct sockaddr_in *src_in, goto error_put_ifp; else if (is_gw) addr->network = RDMA_NETWORK_IPV4; - } else if (ifp->if_flags & IFF_LOOPBACK) { + } else if (if_getflags(ifp) & IFF_LOOPBACK) { memset(edst, 0, MAX_ADDR_LEN); error = 0; } else { @@ -440,7 +438,7 @@ static int addr4_resolve(struct sockaddr_in *src_in, const struct sockaddr_in *dst_in, struct rdma_dev_addr *addr, u8 *edst, - struct ifnet **ifpp) + if_t *ifpp) { return -EADDRNOTAVAIL; } @@ -451,7 +449,7 @@ static int addr6_resolve(struct sockaddr_in6 *src_in, const struct sockaddr_in6 *dst_in, struct rdma_dev_addr *addr, u8 *edst, - struct ifnet **ifpp) + if_t *ifpp) { enum { ADDR_VALID = 0, @@ -462,7 +460,7 @@ static int addr6_resolve(struct sockaddr_in6 *src_in, in_port_t src_port; struct sockaddr *saddr = NULL; struct nhop_object *nh; - struct ifnet *ifp; + if_t ifp; int error; int type; @@ -530,13 +528,13 @@ static int addr6_resolve(struct sockaddr_in6 *src_in, if (ifp == NULL) { error = ENETUNREACH; goto done; - } else if (ifp->if_flags & IFF_LOOPBACK) { + } else if (if_getflags(ifp) & IFF_LOOPBACK) { /* * Source address cannot be a loopback device. */ error = EHOSTUNREACH; goto error_put_ifp; - } else if (nh->nh_ifp->if_flags & IFF_LOOPBACK) { + } else if (if_getflags(nh->nh_ifp) & IFF_LOOPBACK) { if (memcmp(&src_in->sin6_addr, &dst_in->sin6_addr, sizeof(src_in->sin6_addr))) { /* @@ -562,7 +560,7 @@ static int addr6_resolve(struct sockaddr_in6 *src_in, break; case ADDR_SRC_ANY: /* check for loopback device */ - if (nh->nh_ifp->if_flags & IFF_LOOPBACK) + if (if_getflags(nh->nh_ifp) & IFF_LOOPBACK) saddr = (struct sockaddr *)&dst_tmp; else saddr = nh->nh_ifa->ifa_addr; @@ -586,7 +584,7 @@ static int addr6_resolve(struct sockaddr_in6 *src_in, goto error_put_ifp; else if (is_gw) addr->network = RDMA_NETWORK_IPV6; - } else if (nh->nh_ifp->if_flags & IFF_LOOPBACK) { + } else if (if_getflags(nh->nh_ifp) & IFF_LOOPBACK) { memset(edst, 0, MAX_ADDR_LEN); error = 0; } else { @@ -628,18 +626,18 @@ static int addr6_resolve(struct sockaddr_in6 *src_in, const struct sockaddr_in6 *dst_in, struct rdma_dev_addr *addr, u8 *edst, - struct ifnet **ifpp) + if_t *ifpp) { return -EADDRNOTAVAIL; } #endif -static int addr_resolve_neigh(struct ifnet *dev, +static int addr_resolve_neigh(if_t dev, const struct sockaddr *dst_in, u8 *edst, struct rdma_dev_addr *addr) { - if (dev->if_flags & IFF_LOOPBACK) { + if (if_getflags(dev) & IFF_LOOPBACK) { int ret; /* @@ -647,7 +645,7 @@ static int addr_resolve_neigh(struct ifnet *dev, * sure the destination device address is global by * clearing the bound device interface: */ - if (addr->bound_dev_if == dev->if_index) + if (addr->bound_dev_if == if_getindex(dev)) addr->bound_dev_if = 0; ret = rdma_translate_ip(dst_in, addr); @@ -659,7 +657,7 @@ static int addr_resolve_neigh(struct ifnet *dev, } /* If the device doesn't do ARP internally */ - if (!(dev->if_flags & IFF_NOARP)) + if (!(if_getflags(dev) & IFF_NOARP)) return rdma_copy_addr(addr, dev, edst); return rdma_copy_addr(addr, dev, NULL); @@ -670,7 +668,7 @@ static int addr_resolve(struct sockaddr *src_in, struct rdma_dev_addr *addr) { struct epoch_tracker et; - struct ifnet *ndev = NULL; + if_t ndev = NULL; u8 edst[MAX_ADDR_LEN]; int ret; @@ -860,7 +858,7 @@ static void resolve_cb(int status, struct sockaddr *src_addr, int rdma_addr_find_l2_eth_by_grh(const union ib_gid *sgid, const union ib_gid *dgid, - u8 *dmac, struct ifnet *dev, + u8 *dmac, if_t dev, int *hoplimit) { int ret = 0; @@ -874,7 +872,7 @@ int rdma_addr_find_l2_eth_by_grh(const union ib_gid *sgid, memset(&dev_addr, 0, sizeof(dev_addr)); - dev_addr.bound_dev_if = dev->if_index; + dev_addr.bound_dev_if = if_getindex(dev); dev_addr.net = dev_net(dev); ctx.addr = &dev_addr; diff --git a/sys/ofed/drivers/infiniband/core/ib_cache.c b/sys/ofed/drivers/infiniband/core/ib_cache.c index 1f44841348fe..17b283c48e14 100644 --- a/sys/ofed/drivers/infiniband/core/ib_cache.c +++ b/sys/ofed/drivers/infiniband/core/ib_cache.c @@ -183,7 +183,7 @@ static int write_gid(struct ib_device *ib_dev, u8 port, __releases(&table->rwlock) __acquires(&table->rwlock) { int ret = 0; - struct ifnet *old_net_dev; + if_t old_net_dev; enum ib_gid_type old_gid_type; /* in rdma_cap_roce_gid_table, this funciton should be protected by a @@ -311,12 +311,12 @@ static int find_gid(struct ib_gid_table *table, const union ib_gid *gid, return found; } -static void addrconf_ifid_eui48(u8 *eui, struct ifnet *dev) +static void addrconf_ifid_eui48(u8 *eui, if_t dev) { - if (dev->if_addrlen != ETH_ALEN) + if (if_getaddrlen(dev) != ETH_ALEN) return; - memcpy(eui, IF_LLADDR(dev), 3); - memcpy(eui + 5, IF_LLADDR(dev) + 3, 3); + memcpy(eui, if_getlladdr(dev), 3); + memcpy(eui + 5, if_getlladdr(dev) + 3, 3); /* NOTE: The scope ID is added by the GID to IP conversion */ @@ -325,7 +325,7 @@ static void addrconf_ifid_eui48(u8 *eui, struct ifnet *dev) eui[0] ^= 2; } -static void make_default_gid(struct ifnet *dev, union ib_gid *gid) +static void make_default_gid(if_t dev, union ib_gid *gid) { gid->global.subnet_prefix = cpu_to_be64(0xfe80000000000000LL); addrconf_ifid_eui48(&gid->raw[8], dev); @@ -400,7 +400,7 @@ out_unlock: } int ib_cache_gid_del_all_netdev_gids(struct ib_device *ib_dev, u8 port, - struct ifnet *ndev) + if_t ndev) { struct ib_gid_table **ports_table = ib_dev->cache.gid_cache; struct ib_gid_table *table; @@ -447,8 +447,8 @@ static int __ib_cache_gid_get(struct ib_device *ib_dev, u8 port, int index, memcpy(attr, &table->data_vec[index].attr, sizeof(*attr)); /* make sure network device is valid and attached */ if (attr->ndev != NULL && - (attr->ndev->if_flags & IFF_DYING) == 0 && - attr->ndev->if_addr != NULL) + (if_getflags(attr->ndev) & IFF_DYING) == 0 && + if_getifaddr(attr->ndev) != NULL) dev_hold(attr->ndev); else attr->ndev = NULL; @@ -490,7 +490,7 @@ static int _ib_cache_gid_table_find(struct ib_device *ib_dev, static int ib_cache_gid_find(struct ib_device *ib_dev, const union ib_gid *gid, enum ib_gid_type gid_type, - struct ifnet *ndev, u8 *port, + if_t ndev, u8 *port, u16 *index) { unsigned long mask = GID_ATTR_FIND_MASK_GID | @@ -507,7 +507,7 @@ static int ib_cache_gid_find(struct ib_device *ib_dev, int ib_find_cached_gid_by_port(struct ib_device *ib_dev, const union ib_gid *gid, enum ib_gid_type gid_type, - u8 port, struct ifnet *ndev, + u8 port, if_t ndev, u16 *index) { int local_index; @@ -672,7 +672,7 @@ static void cleanup_gid_table_port(struct ib_device *ib_dev, u8 port, } void ib_cache_gid_set_default_gid(struct ib_device *ib_dev, u8 port, - struct ifnet *ndev, + if_t ndev, unsigned long gid_type_mask, enum ib_cache_gid_default_mode mode) { @@ -899,7 +899,7 @@ EXPORT_SYMBOL(ib_get_cached_gid); int ib_find_cached_gid(struct ib_device *device, const union ib_gid *gid, enum ib_gid_type gid_type, - struct ifnet *ndev, + if_t ndev, u8 *port_num, u16 *index) { diff --git a/sys/ofed/drivers/infiniband/core/ib_cm.c b/sys/ofed/drivers/infiniband/core/ib_cm.c index 45f316252b69..f7812fe4259a 100644 --- a/sys/ofed/drivers/infiniband/core/ib_cm.c +++ b/sys/ofed/drivers/infiniband/core/ib_cm.c @@ -503,7 +503,7 @@ static int cm_init_av_by_path(struct ib_sa_path_rec *path, struct cm_av *av, unsigned long flags; int ret; u8 p; - struct ifnet *ndev = ib_get_ndev_from_path(path); + if_t ndev = ib_get_ndev_from_path(path); read_lock_irqsave(&cm.device_lock, flags); list_for_each_entry(cm_dev, &cm.device_list, list) { @@ -1819,7 +1819,7 @@ static int cm_req_handler(struct cm_work *work) &gid, &gid_attr); if (!ret) { if (gid_attr.ndev) { - work->path[0].ifindex = gid_attr.ndev->if_index; + work->path[0].ifindex = if_getindex(gid_attr.ndev); work->path[0].net = dev_net(gid_attr.ndev); dev_put(gid_attr.ndev); } @@ -1833,7 +1833,7 @@ static int cm_req_handler(struct cm_work *work) &work->path[0].sgid, &gid_attr); if (!err && gid_attr.ndev) { - work->path[0].ifindex = gid_attr.ndev->if_index; + work->path[0].ifindex = if_getindex(gid_attr.ndev); work->path[0].net = dev_net(gid_attr.ndev); dev_put(gid_attr.ndev); } diff --git a/sys/ofed/drivers/infiniband/core/ib_cma.c b/sys/ofed/drivers/infiniband/core/ib_cma.c index 85af3330f08a..f8a346dac35e 100644 --- a/sys/ofed/drivers/infiniband/core/ib_cma.c +++ b/sys/ofed/drivers/infiniband/core/ib_cma.c @@ -461,7 +461,7 @@ static inline void sdp_set_ip_ver(struct sdp_hh *hh, u8 ip_ver) hh->ipv_cap = (ip_ver << 4) | (hh->ipv_cap & 0xF); } -static int cma_igmp_send(struct ifnet *ndev, const union ib_gid *mgid, bool join) +static int cma_igmp_send(if_t ndev, const union ib_gid *mgid, bool join) { int retval; @@ -470,7 +470,7 @@ static int cma_igmp_send(struct ifnet *ndev, const union ib_gid *mgid, bool join rdma_gid2ip(&addr._sockaddr, mgid); - CURVNET_SET_QUIET(ndev->if_vnet); + CURVNET_SET_QUIET(if_getvnet(ndev)); if (join) retval = -if_addmulti(ndev, &addr._sockaddr, NULL); else @@ -603,7 +603,7 @@ static inline int cma_validate_port(struct ib_device *device, u8 port, const struct rdma_dev_addr *dev_addr) { const int dev_type = dev_addr->dev_type; - struct ifnet *ndev; + if_t ndev; int ret = -ENODEV; if ((dev_type == ARPHRD_INFINIBAND) && !rdma_protocol_ib(device, port)) @@ -1396,21 +1396,21 @@ static bool validate_ipv4_net_dev_addr(struct vnet *vnet, } #endif -static bool validate_ipv4_net_dev(struct ifnet *net_dev, +static bool validate_ipv4_net_dev(if_t net_dev, const struct sockaddr_in *dst_addr, const struct sockaddr_in *src_addr) { #ifdef INET __be32 daddr = dst_addr->sin_addr.s_addr, saddr = src_addr->sin_addr.s_addr; - struct ifnet *dst_dev; + if_t dst_dev; struct nhop_object *nh; bool ret; - if (validate_ipv4_net_dev_addr(net_dev->if_vnet, saddr, daddr)) + if (validate_ipv4_net_dev_addr(if_getvnet(net_dev), saddr, daddr)) return false; - dst_dev = ip_ifp_find(net_dev->if_vnet, daddr); + dst_dev = ip_ifp_find(if_getvnet(net_dev), daddr); if (dst_dev != net_dev) { if (dst_dev != NULL) dev_put(dst_dev); @@ -1424,7 +1424,7 @@ static bool validate_ipv4_net_dev(struct ifnet *net_dev, if (saddr == daddr) return true; - CURVNET_SET(net_dev->if_vnet); + CURVNET_SET(if_getvnet(net_dev)); nh = fib4_lookup(RT_DEFAULT_FIB, src_addr->sin_addr, 0, NHR_NONE, 0); if (nh != NULL) ret = (nh->nh_ifp == net_dev); @@ -1437,19 +1437,19 @@ static bool validate_ipv4_net_dev(struct ifnet *net_dev, #endif } -static bool validate_ipv6_net_dev(struct ifnet *net_dev, +static bool validate_ipv6_net_dev(if_t net_dev, const struct sockaddr_in6 *dst_addr, const struct sockaddr_in6 *src_addr) { #ifdef INET6 struct sockaddr_in6 src_tmp = *src_addr; struct sockaddr_in6 dst_tmp = *dst_addr; - struct ifnet *dst_dev; + if_t dst_dev; struct nhop_object *nh; bool ret; - dst_dev = ip6_ifp_find(net_dev->if_vnet, dst_tmp.sin6_addr, - net_dev->if_index); + dst_dev = ip6_ifp_find(if_getvnet(net_dev), dst_tmp.sin6_addr, + if_getindex(net_dev)); if (dst_dev != net_dev) { if (dst_dev != NULL) dev_put(dst_dev); @@ -1457,15 +1457,15 @@ static bool validate_ipv6_net_dev(struct ifnet *net_dev, } dev_put(dst_dev); - CURVNET_SET(net_dev->if_vnet); + CURVNET_SET(if_getvnet(net_dev)); /* * Make sure the scope ID gets embedded. */ - src_tmp.sin6_scope_id = net_dev->if_index; + src_tmp.sin6_scope_id = if_getindex(net_dev); sa6_embedscope(&src_tmp, 0); - dst_tmp.sin6_scope_id = net_dev->if_index; + dst_tmp.sin6_scope_id = if_getindex(net_dev); sa6_embedscope(&dst_tmp, 0); /* @@ -1478,7 +1478,7 @@ static bool validate_ipv6_net_dev(struct ifnet *net_dev, } else { /* non-loopback case */ nh = fib6_lookup(RT_DEFAULT_FIB, &src_addr->sin6_addr, - net_dev->if_index, NHR_NONE, 0); + if_getindex(net_dev), NHR_NONE, 0); if (nh != NULL) ret = (nh->nh_ifp == net_dev); else @@ -1491,7 +1491,7 @@ static bool validate_ipv6_net_dev(struct ifnet *net_dev, #endif } -static bool validate_net_dev(struct ifnet *net_dev, +static bool validate_net_dev(if_t net_dev, const struct sockaddr *daddr, const struct sockaddr *saddr) { @@ -1514,7 +1514,7 @@ static bool validate_net_dev(struct ifnet *net_dev, } } -static struct ifnet * +static if_t roce_get_net_dev_by_cm_event(struct ib_device *device, u8 port_num, const struct ib_cm_event *ib_event) { @@ -1534,13 +1534,13 @@ roce_get_net_dev_by_cm_event(struct ib_device *device, u8 port_num, return (sgid_attr.ndev); } -static struct ifnet *cma_get_net_dev(struct ib_cm_event *ib_event, +static if_t cma_get_net_dev(struct ib_cm_event *ib_event, const struct cma_req_info *req) { struct sockaddr_storage listen_addr_storage, src_addr_storage; struct sockaddr *listen_addr = (struct sockaddr *)&listen_addr_storage, *src_addr = (struct sockaddr *)&src_addr_storage; - struct ifnet *net_dev; + if_t net_dev; const union ib_gid *gid = req->has_gid ? &req->local_gid : NULL; struct epoch_tracker et; int err; @@ -1672,7 +1672,7 @@ static bool cma_protocol_roce(const struct rdma_cm_id *id) } static bool cma_match_net_dev(const struct rdma_cm_id *id, - const struct ifnet *net_dev, + const if_t net_dev, u8 port_num) { const struct rdma_addr *addr = &id->route.addr; @@ -1694,7 +1694,7 @@ static bool cma_match_net_dev(const struct rdma_cm_id *id, return !addr->dev_addr.bound_dev_if || (net_eq(dev_net(net_dev), addr->dev_addr.net) && - addr->dev_addr.bound_dev_if == net_dev->if_index); + addr->dev_addr.bound_dev_if == if_getindex(net_dev)); } static struct rdma_id_private *cma_find_listener( @@ -1702,7 +1702,7 @@ static struct rdma_id_private *cma_find_listener( const struct ib_cm_id *cm_id, const struct ib_cm_event *ib_event, const struct cma_req_info *req, - const struct ifnet *net_dev) + const if_t net_dev) { struct rdma_id_private *id_priv, *id_priv_dev; @@ -1729,7 +1729,7 @@ static struct rdma_id_private *cma_find_listener( static struct rdma_id_private *cma_id_from_event(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event, - struct ifnet **net_dev) + if_t *net_dev) { struct cma_req_info req; struct rdma_bind_list *bind_list; @@ -1864,7 +1864,7 @@ static void cma_leave_mc_groups(struct rdma_id_private *id_priv) if (mc->igmp_joined) { struct rdma_dev_addr *dev_addr = &id_priv->id.route.addr.dev_addr; - struct ifnet *ndev = NULL; + if_t ndev = NULL; if (dev_addr->bound_dev_if) ndev = dev_get_by_index(dev_addr->net, @@ -2053,7 +2053,7 @@ out: static struct rdma_id_private *cma_new_conn_id(struct rdma_cm_id *listen_id, struct ib_cm_event *ib_event, - struct ifnet *net_dev) + if_t net_dev) { struct rdma_id_private *id_priv; struct rdma_cm_id *id; @@ -2115,7 +2115,7 @@ err: static struct rdma_id_private *cma_new_udp_id(struct rdma_cm_id *listen_id, struct ib_cm_event *ib_event, - struct ifnet *net_dev) + if_t net_dev) { struct rdma_id_private *id_priv; struct rdma_cm_id *id; @@ -2183,7 +2183,7 @@ static int cma_req_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event) { struct rdma_id_private *listen_id, *conn_id = NULL; struct rdma_cm_event event; - struct ifnet *net_dev; + if_t net_dev; int offset, ret; listen_id = cma_id_from_event(cm_id, ib_event, &net_dev); @@ -2731,7 +2731,7 @@ static int cma_resolve_iw_route(struct rdma_id_private *id_priv, int timeout_ms) return 0; } -static int iboe_tos_to_sl(struct ifnet *ndev, int tos) +static int iboe_tos_to_sl(if_t ndev, int tos) { /* get service level, SL, from IPv4 type of service, TOS */ int sl = (tos >> 5) & 0x7; @@ -2758,7 +2758,7 @@ static int cma_resolve_iboe_route(struct rdma_id_private *id_priv) struct rdma_addr *addr = &route->addr; struct cma_work *work; int ret; - struct ifnet *ndev = NULL; + if_t ndev = NULL; work = kzalloc(sizeof *work, GFP_KERNEL); @@ -2786,8 +2786,8 @@ static int cma_resolve_iboe_route(struct rdma_id_private *id_priv) goto err2; } - route->path_rec->net = ndev->if_vnet; - route->path_rec->ifindex = ndev->if_index; + route->path_rec->net = if_getvnet(ndev); + route->path_rec->ifindex = if_getindex(ndev); supported_gids = roce_gid_type_mask_support(id_priv->id.device, id_priv->id.port_num); route->path_rec->gid_type = @@ -2820,7 +2820,7 @@ static int cma_resolve_iboe_route(struct rdma_id_private *id_priv) route->path_rec->mtu_selector = IB_SA_EQ; route->path_rec->sl = iboe_tos_to_sl(ndev, id_priv->tos); route->path_rec->traffic_class = id_priv->tos; - route->path_rec->mtu = iboe_get_mtu(ndev->if_mtu); + route->path_rec->mtu = iboe_get_mtu(if_getmtu(ndev)); route->path_rec->rate_selector = IB_SA_EQ; route->path_rec->rate = iboe_get_rate(ndev); dev_put(ndev); @@ -4083,7 +4083,7 @@ static int cma_ib_mc_handler(int status, struct ib_sa_multicast *multicast) if (!status) { struct rdma_dev_addr *dev_addr = &id_priv->id.route.addr.dev_addr; - struct ifnet *ndev = + if_t ndev = dev_get_by_index(dev_addr->net, dev_addr->bound_dev_if); enum ib_gid_type gid_type = id_priv->cma_dev->default_gid_type[id_priv->id.port_num - @@ -4310,7 +4310,7 @@ static int cma_iboe_join_multicast(struct rdma_id_private *id_priv, struct rdma_dev_addr *dev_addr = &id_priv->id.route.addr.dev_addr; int err = 0; struct sockaddr *addr = (struct sockaddr *)&mc->addr; - struct ifnet *ndev = NULL; + if_t ndev = NULL; enum ib_gid_type gid_type; bool send_only; @@ -4345,7 +4345,7 @@ static int cma_iboe_join_multicast(struct rdma_id_private *id_priv, } mc->multicast.ib->rec.rate = iboe_get_rate(ndev); mc->multicast.ib->rec.hop_limit = 1; - mc->multicast.ib->rec.mtu = iboe_get_mtu(ndev->if_mtu); + mc->multicast.ib->rec.mtu = iboe_get_mtu(if_getmtu(ndev)); if (addr->sa_family == AF_INET || addr->sa_family == AF_INET6) { if (gid_type == IB_GID_TYPE_ROCE_UDP_ENCAP) { @@ -4456,7 +4456,7 @@ void rdma_leave_multicast(struct rdma_cm_id *id, struct sockaddr *addr) if (mc->igmp_joined) { struct rdma_dev_addr *dev_addr = &id->route.addr.dev_addr; - struct ifnet *ndev = NULL; + if_t ndev = NULL; if (dev_addr->bound_dev_if) ndev = dev_get_by_index(dev_addr->net, diff --git a/sys/ofed/drivers/infiniband/core/ib_device.c b/sys/ofed/drivers/infiniband/core/ib_device.c index dc0e6a5866d2..f4ab1f945f58 100644 --- a/sys/ofed/drivers/infiniband/core/ib_device.c +++ b/sys/ofed/drivers/infiniband/core/ib_device.c @@ -732,12 +732,12 @@ void ib_enum_roce_netdev(struct ib_device *ib_dev, for (port = rdma_start_port(ib_dev); port <= rdma_end_port(ib_dev); port++) if (rdma_protocol_roce(ib_dev, port)) { - struct ifnet *idev = NULL; + if_t idev = NULL; if (ib_dev->get_netdev) idev = ib_dev->get_netdev(ib_dev, port); - if (idev && (idev->if_flags & IFF_DYING)) { + if (idev && (if_getflags(idev) & IFF_DYING)) { dev_put(idev); idev = NULL; } @@ -779,7 +779,7 @@ void ib_enum_all_roce_netdevs(roce_netdev_filter filter, * * @ndev: Pointer to netdevice */ -void ib_cache_gid_del_all_by_netdev(struct ifnet *ndev) +void ib_cache_gid_del_all_by_netdev(if_t ndev) { struct ib_device *ib_dev; u8 port; @@ -875,7 +875,7 @@ EXPORT_SYMBOL(ib_modify_port); * parameter may be NULL. */ int ib_find_gid(struct ib_device *device, union ib_gid *gid, - enum ib_gid_type gid_type, struct ifnet *ndev, + enum ib_gid_type gid_type, if_t ndev, u8 *port_num, u16 *index) { union ib_gid tmp_gid; @@ -959,13 +959,13 @@ EXPORT_SYMBOL(ib_find_pkey); * @addr: Contains the IP address that the request specified as its * destination. */ -struct ifnet *ib_get_net_dev_by_params(struct ib_device *dev, +if_t ib_get_net_dev_by_params(struct ib_device *dev, u8 port, u16 pkey, const union ib_gid *gid, const struct sockaddr *addr) { - struct ifnet *net_dev = NULL; + if_t net_dev = NULL; struct ib_client_data *context; if (!rdma_protocol_ib(dev, port)) diff --git a/sys/ofed/drivers/infiniband/core/ib_multicast.c b/sys/ofed/drivers/infiniband/core/ib_multicast.c index 3784a3e5e290..b323f17a99ea 100644 --- a/sys/ofed/drivers/infiniband/core/ib_multicast.c +++ b/sys/ofed/drivers/infiniband/core/ib_multicast.c @@ -723,7 +723,7 @@ EXPORT_SYMBOL(ib_sa_get_mcmember_rec); int ib_init_ah_from_mcmember(struct ib_device *device, u8 port_num, struct ib_sa_mcmember_rec *rec, - struct ifnet *ndev, + if_t ndev, enum ib_gid_type gid_type, struct ib_ah_attr *ah_attr) { diff --git a/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c b/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c index fb19f2944180..1396a4aacf3a 100644 --- a/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c +++ b/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c @@ -56,7 +56,7 @@ enum gid_op_type { struct roce_netdev_event_work { struct work_struct work; - struct ifnet *ndev; + if_t ndev; }; struct roce_rescan_work { @@ -91,7 +91,7 @@ unsigned long roce_gid_type_mask_support(struct ib_device *ib_dev, u8 port) EXPORT_SYMBOL(roce_gid_type_mask_support); static void update_gid(enum gid_op_type gid_op, struct ib_device *ib_dev, - u8 port, union ib_gid *gid, struct ifnet *ndev) + u8 port, union ib_gid *gid, if_t ndev) { int i; unsigned long gid_type_mask = roce_gid_type_mask_support(ib_dev, port); @@ -119,9 +119,9 @@ static void update_gid(enum gid_op_type gid_op, struct ib_device *ib_dev, static int roce_gid_match_netdev(struct ib_device *ib_dev, u8 port, - struct ifnet *idev, void *cookie) + if_t idev, void *cookie) { - struct ifnet *ndev = (struct ifnet *)cookie; + if_t ndev = (if_t )cookie; if (idev == NULL) return (0); return (ndev == idev); @@ -129,7 +129,7 @@ roce_gid_match_netdev(struct ib_device *ib_dev, u8 port, static int roce_gid_match_all(struct ib_device *ib_dev, u8 port, - struct ifnet *idev, void *cookie) + if_t idev, void *cookie) { if (idev == NULL) return (0); @@ -138,7 +138,7 @@ roce_gid_match_all(struct ib_device *ib_dev, u8 port, static int roce_gid_enum_netdev_default(struct ib_device *ib_dev, - u8 port, struct ifnet *idev) + u8 port, if_t idev) { unsigned long gid_type_mask; @@ -150,32 +150,81 @@ roce_gid_enum_netdev_default(struct ib_device *ib_dev, return (hweight_long(gid_type_mask)); } +struct ipx_entry { + STAILQ_ENTRY(ipx_entry) entry; + union ipx_addr { + struct sockaddr sa[0]; + struct sockaddr_in v4; + struct sockaddr_in6 v6; + } ipx_addr; + if_t ndev; +}; + +STAILQ_HEAD(ipx_queue, ipx_entry); + +#ifdef INET +static u_int +roce_gid_update_addr_ifa4_cb(void *arg, struct ifaddr *ifa, u_int count) +{ + struct ipx_queue *ipx_head = arg; + struct ipx_entry *entry; + + entry = kzalloc(sizeof(*entry), GFP_ATOMIC); + if (entry == NULL) { + pr_warn("roce_gid_update_addr_callback: " + "couldn't allocate entry for IPv4 update\n"); + return (0); + } + entry->ipx_addr.v4 = *((struct sockaddr_in *)ifa->ifa_addr); + entry->ndev = ifa->ifa_ifp; + STAILQ_INSERT_TAIL(ipx_head, entry, entry); + + return (1); +} +#endif + +#ifdef INET6 +static u_int +roce_gid_update_addr_ifa6_cb(void *arg, struct ifaddr *ifa, u_int count) +{ + struct ipx_queue *ipx_head = arg; + struct ipx_entry *entry; + + entry = kzalloc(sizeof(*entry), GFP_ATOMIC); + if (entry == NULL) { + pr_warn("roce_gid_update_addr_callback: " + "couldn't allocate entry for IPv6 update\n"); + return (0); + } + entry->ipx_addr.v6 = *((struct sockaddr_in6 *)ifa->ifa_addr); + entry->ndev = ifa->ifa_ifp; + + /* trash IPv6 scope ID */ + sa6_recoverscope(&entry->ipx_addr.v6); + entry->ipx_addr.v6.sin6_scope_id = 0; + + STAILQ_INSERT_TAIL(ipx_head, entry, entry); + + return (1); +} +#endif + static void roce_gid_update_addr_callback(struct ib_device *device, u8 port, - struct ifnet *ndev, void *cookie) + if_t ndev, void *cookie) { - struct ipx_entry { - STAILQ_ENTRY(ipx_entry) entry; - union ipx_addr { - struct sockaddr sa[0]; - struct sockaddr_in v4; - struct sockaddr_in6 v6; - } ipx_addr; - struct ifnet *ndev; *** 1566 LINES SKIPPED ***