diff --git a/sys/contrib/rdma/krping/krping.c b/sys/contrib/rdma/krping/krping.c --- a/sys/contrib/rdma/krping/krping.c +++ b/sys/contrib/rdma/krping/krping.c @@ -1994,7 +1994,7 @@ CURVNET_RESTORE(); if (ifp == NULL) return (0); - retval = ifp->if_index; + retval = if_getindex(ifp); if_rele(ifp); return (retval); } diff --git a/sys/dev/irdma/fbsd_kcompat.c b/sys/dev/irdma/fbsd_kcompat.c --- a/sys/dev/irdma/fbsd_kcompat.c +++ b/sys/dev/irdma/fbsd_kcompat.c @@ -171,6 +171,34 @@ return ret_code; } +struct irdma_add_addr_cb_s { + struct irdma_device *iwdev; + u8 *mac_addr; +}; + +static u_int +irdma_add_ipv6_cb(void *arg, struct ifaddr *addr, u_int count __unused) +{ + struct sockaddr_in6 *sin6; + struct irdma_add_addr_cb_s *cbs = arg; + u32 local_ipaddr6[4] = {}; + char ip6buf[INET6_ADDRSTRLEN]; + + sin6 = (struct sockaddr_in6 *)addr->ifa_addr; + + irdma_copy_ip_ntohl(local_ipaddr6, (u32 *)&sin6->sin6_addr); + + printf("%s:%d IP=%s, MAC=%02x:%02x:%02x:%02x:%02x:%02x\n", + __func__, __LINE__, + ip6_sprintf(ip6buf, &sin6->sin6_addr), + cbs->mac_addr[0], cbs->mac_addr[1], cbs->mac_addr[2], + cbs->mac_addr[3], cbs->mac_addr[4], cbs->mac_addr[5]); + + irdma_manage_arp_cache(cbs->iwdev->rf, cbs->mac_addr, local_ipaddr6, + IRDMA_ARP_ADD); + return (0); +} + /** * irdma_add_ipv6_addr - add ipv6 address to the hw arp table * @iwdev: irdma device @@ -179,32 +207,38 @@ static void irdma_add_ipv6_addr(struct irdma_device *iwdev, struct ifnet *ifp) { - struct ifaddr *ifa, *tmp; - struct sockaddr_in6 *sin6; - u32 local_ipaddr6[4]; - u8 *mac_addr; - char ip6buf[INET6_ADDRSTRLEN]; + struct irdma_add_addr_cb_s cbs; + cbs.mac_addr = if_getlladdr(ifp); + cbs.iwdev = iwdev; if_addr_rlock(ifp); - IRDMA_TAILQ_FOREACH_SAFE(ifa, &ifp->if_addrhead, ifa_link, tmp) { - sin6 = (struct sockaddr_in6 *)ifa->ifa_addr; - if (sin6->sin6_family != AF_INET6) - continue; + if_foreach_addr_type(ifp, AF_INET6, irdma_add_ipv6_cb, &cbs); + if_addr_runlock(ifp); +} + +static u_int +irdma_add_ipv4_cb(void *arg, struct ifaddr *addr, u_int count __unused) +{ + struct sockaddr_in *sin; + struct irdma_add_addr_cb_s *cbs = arg; + u32 ip_addr[4] = {}; - irdma_copy_ip_ntohl(local_ipaddr6, (u32 *)&sin6->sin6_addr); - mac_addr = IF_LLADDR(ifp); + sin = (struct sockaddr_in *)addr->ifa_addr; - printf("%s:%d IP=%s, MAC=%02x:%02x:%02x:%02x:%02x:%02x\n", - __func__, __LINE__, - ip6_sprintf(ip6buf, &sin6->sin6_addr), - mac_addr[0], mac_addr[1], mac_addr[2], - mac_addr[3], mac_addr[4], mac_addr[5]); + ip_addr[0] = ntohl(sin->sin_addr.s_addr); - irdma_manage_arp_cache(iwdev->rf, mac_addr, local_ipaddr6, - IRDMA_ARP_ADD); + printf("%s:%d IP=%d.%d.%d.%d, MAC=%02x:%02x:%02x:%02x:%02x:%02x\n", + __func__, __LINE__, + ip_addr[0] >> 24, + (ip_addr[0] >> 16) & 0xFF, + (ip_addr[0] >> 8) & 0xFF, + ip_addr[0] & 0xFF, + cbs->mac_addr[0], cbs->mac_addr[1], cbs->mac_addr[2], + cbs->mac_addr[3], cbs->mac_addr[4], cbs->mac_addr[5]); - } - if_addr_runlock(ifp); + irdma_manage_arp_cache(cbs->iwdev->rf, cbs->mac_addr, ip_addr, + IRDMA_ARP_ADD); + return (0); } /** @@ -215,32 +249,12 @@ static void irdma_add_ipv4_addr(struct irdma_device *iwdev, struct ifnet *ifp) { - struct ifaddr *ifa; - struct sockaddr_in *sin; - u32 ip_addr[4] = {}; - u8 *mac_addr; + struct irdma_add_addr_cb_s cbs; + cbs.mac_addr = if_getlladdr(ifp); + cbs.iwdev = iwdev; if_addr_rlock(ifp); - IRDMA_TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) { - sin = (struct sockaddr_in *)ifa->ifa_addr; - if (sin->sin_family != AF_INET) - continue; - - ip_addr[0] = ntohl(sin->sin_addr.s_addr); - mac_addr = IF_LLADDR(ifp); - - printf("%s:%d IP=%d.%d.%d.%d, MAC=%02x:%02x:%02x:%02x:%02x:%02x\n", - __func__, __LINE__, - ip_addr[0] >> 24, - (ip_addr[0] >> 16) & 0xFF, - (ip_addr[0] >> 8) & 0xFF, - ip_addr[0] & 0xFF, - mac_addr[0], mac_addr[1], mac_addr[2], - mac_addr[3], mac_addr[4], mac_addr[5]); - - irdma_manage_arp_cache(iwdev->rf, mac_addr, ip_addr, - IRDMA_ARP_ADD); - } + if_foreach_addr_type(ifp, AF_INET, irdma_add_ipv4_cb, &cbs); if_addr_runlock(ifp); } @@ -259,7 +273,7 @@ irdma_add_ipv4_addr(iwdev, ifp); irdma_add_ipv6_addr(iwdev, ifp); - for (i = 0; ifp->if_vlantrunk != NULL && i < VLAN_N_VID; ++i) { + for (i = 0; if_getvlantrunk(ifp) != NULL && i < VLAN_N_VID; ++i) { ifv = VLAN_DEVAT(ifp, i); if (!ifv) continue; @@ -281,7 +295,7 @@ if (!ifa || !ifa->ifa_addr || !ifp) return; if (rf->iwdev->netdev != ifp) { - for (i = 0; rf->iwdev->netdev->if_vlantrunk != NULL && i < VLAN_N_VID; ++i) { + for (i = 0; if_getvlantrunk(rf->iwdev->netdev) != NULL && i < VLAN_N_VID; ++i) { NET_EPOCH_ENTER(et); ifv = VLAN_DEVAT(rf->iwdev->netdev, i); NET_EPOCH_EXIT(et); @@ -455,7 +469,7 @@ dst_addr.sin6_family = AF_INET6; dst_addr.sin6_len = sizeof(dst_addr); - dst_addr.sin6_scope_id = iwdev->netdev->if_index; + dst_addr.sin6_scope_id = if_getindex(iwdev->netdev); irdma_copy_ip_htonl(dst_addr.sin6_addr.__u6_addr.__u6_addr32, dest); err = irdma_get_dst_mac(cm_node, (struct sockaddr *)&dst_addr, dst_mac); diff --git a/sys/dev/irdma/icrdma.c b/sys/dev/irdma/icrdma.c --- a/sys/dev/irdma/icrdma.c +++ b/sys/dev/irdma/icrdma.c @@ -55,7 +55,7 @@ */ char irdma_driver_version[] = "1.1.5-k"; -#define pf_if_d(peer) peer->ifp->if_dunit +#define pf_if_d(peer) if_getdunit(peer->ifp) /** * irdma_init_tunable - prepare tunables diff --git a/sys/dev/irdma/irdma_cm.c b/sys/dev/irdma/irdma_cm.c --- a/sys/dev/irdma/irdma_cm.c +++ b/sys/dev/irdma/irdma_cm.c @@ -1623,10 +1623,10 @@ * Returns the net_device of the IPv6 address and also sets the * vlan id and mac for that address. */ -struct ifnet * +if_t irdma_netdev_vlan_ipv6(u32 *addr, u16 *vlan_id, u8 *mac) { - struct ifnet *ip_dev = NULL; + if_t ip_dev = NULL; struct in6_addr laddr6; u16 scope_id = 0; @@ -1644,8 +1644,8 @@ if (ip_dev) { if (vlan_id) *vlan_id = rdma_vlan_dev_vlan_id(ip_dev); - if (ip_dev->if_addr && ip_dev->if_addr->ifa_addr && mac) - ether_addr_copy(mac, IF_LLADDR(ip_dev)); + if (if_getifaddr(ip_dev) && if_getifaddr(ip_dev)->ifa_addr && mac) + ether_addr_copy(mac, if_getlladdr(ip_dev)); } return ip_dev; @@ -1658,7 +1658,7 @@ u16 irdma_get_vlan_ipv4(u32 *addr) { - struct ifnet *netdev; + if_t netdev; u16 vlan_id = 0xFFFF; netdev = ip_ifp_find(&init_net, htonl(addr[0])); @@ -1670,172 +1670,176 @@ return vlan_id; } +struct irdma_add_mqh_cbs { + struct irdma_device *iwdev; + struct irdma_cm_info *cm_info; + struct irdma_cm_listener *cm_listen_node; +}; + /** - * irdma_add_mqh_6 - Adds multiple qhashes for IPv6 - * @iwdev: iWarp device - * @cm_info: CM info for parent listen node - * @cm_parent_listen_node: The parent listen node + * irdma_add_mqh_4 - Adds multiple qhashes for IPv6 + * @arg: Calback argument structure from irdma_add_mqh + * @ifa: Current address to compute against + * @count: Current cumulative output of all callbacks in this iteration * - * Adds a qhash and a child listen node for every IPv6 address + * Adds a qhash and a child listen node for a single IPv6 address * on the adapter and adds the associated qhash filter */ -static int -irdma_add_mqh_6(struct irdma_device *iwdev, - struct irdma_cm_info *cm_info, - struct irdma_cm_listener *cm_parent_listen_node) +static u_int +irdma_add_mqh_6_ifa_cb(void *arg, struct ifaddr *ifa, u_int count) { - struct ifnet *ip_dev; - struct ifaddr *ifp; + struct irdma_add_mqh_cbs *cbs = arg; struct irdma_cm_listener *child_listen_node; + struct irdma_cm_info *cm_info = cbs->cm_info; + struct irdma_device *iwdev = cbs->iwdev; + struct irdma_cm_listener *cm_parent_listen_node = cbs->cm_listen_node; + if_t ip_dev = ifa->ifa_ifp; unsigned long flags; - int ret = 0; - - IFNET_RLOCK(); - IRDMA_TAILQ_FOREACH((ip_dev), &V_ifnet, if_link) { - if (!(ip_dev->if_flags & IFF_UP)) - continue; - - if (((rdma_vlan_dev_vlan_id(ip_dev) >= VLAN_N_VID) || - (rdma_vlan_dev_real_dev(ip_dev) != iwdev->netdev)) && - ip_dev != iwdev->netdev) - continue; + int ret; - if_addr_rlock(ip_dev); - IRDMA_TAILQ_FOREACH(ifp, &ip_dev->if_addrhead, ifa_link) { - irdma_debug(iwdev_to_idev(iwdev), IRDMA_DEBUG_CM, - "IP=%pI6, vlan_id=%d, MAC=%pM\n", - &((struct sockaddr_in6 *)ifp->ifa_addr)->sin6_addr, rdma_vlan_dev_vlan_id(ip_dev), - IF_LLADDR(ip_dev)); - if (((struct sockaddr_in6 *)ifp->ifa_addr)->sin6_family != AF_INET6) - continue; - child_listen_node = kzalloc(sizeof(*child_listen_node), GFP_KERNEL); - irdma_debug(iwdev_to_idev(iwdev), IRDMA_DEBUG_CM, - "Allocating child listener %p\n", - child_listen_node); - if (!child_listen_node) { - irdma_debug(iwdev_to_idev(iwdev), - IRDMA_DEBUG_CM, - "listener memory allocation\n"); - ret = -ENOMEM; - if_addr_runlock(ip_dev); - goto exit; - } + if (count != 0) + return (0); - memcpy(child_listen_node, cm_parent_listen_node, - sizeof(*child_listen_node)); - cm_info->vlan_id = rdma_vlan_dev_vlan_id(ip_dev); - child_listen_node->vlan_id = cm_info->vlan_id; - irdma_copy_ip_ntohl(child_listen_node->loc_addr, - ((struct sockaddr_in6 *)ifp->ifa_addr)->sin6_addr.__u6_addr.__u6_addr32); - memcpy(cm_info->loc_addr, child_listen_node->loc_addr, - sizeof(cm_info->loc_addr)); - ret = irdma_manage_qhash(iwdev, cm_info, - IRDMA_QHASH_TYPE_TCP_SYN, - IRDMA_QHASH_MANAGE_TYPE_ADD, - NULL, true); - if (ret) { - kfree(child_listen_node); - continue; - } + irdma_debug(iwdev_to_idev(iwdev), IRDMA_DEBUG_CM, + "IP=%pI6, vlan_id=%d, MAC=%pM\n", + &((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr, rdma_vlan_dev_vlan_id(ip_dev), + if_getlladdr(ip_dev)); + child_listen_node = kzalloc(sizeof(*child_listen_node), GFP_KERNEL); + irdma_debug(iwdev_to_idev(iwdev), IRDMA_DEBUG_CM, + "Allocating child listener %p\n", + child_listen_node); + if (!child_listen_node) { + irdma_debug(iwdev_to_idev(iwdev), + IRDMA_DEBUG_CM, + "listener memory allocation\n"); + ret = -ENOMEM; + return (ret); + } - child_listen_node->qhash_set = true; - spin_lock_irqsave(&iwdev->cm_core.listen_list_lock, flags); - list_add(&child_listen_node->child_listen_list, - &cm_parent_listen_node->child_listen_list); - spin_unlock_irqrestore(&iwdev->cm_core.listen_list_lock, flags); - cm_parent_listen_node->cm_core->stats_listen_nodes_created++; - } - if_addr_runlock(ip_dev); + memcpy(child_listen_node, cm_parent_listen_node, + sizeof(*child_listen_node)); + cm_info->vlan_id = rdma_vlan_dev_vlan_id(ip_dev); + child_listen_node->vlan_id = cm_info->vlan_id; + irdma_copy_ip_ntohl(child_listen_node->loc_addr, + ((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr.__u6_addr.__u6_addr32); + memcpy(cm_info->loc_addr, child_listen_node->loc_addr, + sizeof(cm_info->loc_addr)); + ret = irdma_manage_qhash(iwdev, cm_info, + IRDMA_QHASH_TYPE_TCP_SYN, + IRDMA_QHASH_MANAGE_TYPE_ADD, + NULL, true); + if (ret) { + kfree(child_listen_node); + return (ret); } -exit: - IFNET_RUNLOCK(); - return ret; + child_listen_node->qhash_set = true; + spin_lock_irqsave(&iwdev->cm_core.listen_list_lock, flags); + list_add(&child_listen_node->child_listen_list, + &cm_parent_listen_node->child_listen_list); + spin_unlock_irqrestore(&iwdev->cm_core.listen_list_lock, flags); + cm_parent_listen_node->cm_core->stats_listen_nodes_created++; + + return (0); } /** * irdma_add_mqh_4 - Adds multiple qhashes for IPv4 - * @iwdev: iWarp device - * @cm_info: CM info for parent listen node - * @cm_parent_listen_node: The parent listen node + * @arg: Calback argument structure from irdma_add_mqh + * @ifa: Current address to compute against + * @count: Current cumulative output of all callbacks in this iteration * - * Adds a qhash and a child listen node for every IPv4 address + * Adds a qhash and a child listen node for a single IPv4 address * on the adapter and adds the associated qhash filter */ -static int -irdma_add_mqh_4(struct irdma_device *iwdev, - struct irdma_cm_info *cm_info, - struct irdma_cm_listener *cm_parent_listen_node) +static u_int +irdma_add_mqh_4_ifa_cb(void *arg, struct ifaddr *ifa, u_int count) { - struct ifnet *ip_dev; + struct irdma_add_mqh_cbs *cbs = arg; struct irdma_cm_listener *child_listen_node; + struct irdma_cm_info *cm_info = cbs->cm_info; + struct irdma_device *iwdev = cbs->iwdev; + struct irdma_cm_listener *cm_parent_listen_node = cbs->cm_listen_node; + if_t ip_dev = ifa->ifa_ifp; unsigned long flags; - struct ifaddr *ifa; - int ret = 0; + int ret; - IFNET_RLOCK(); - IRDMA_TAILQ_FOREACH((ip_dev), &V_ifnet, if_link) { - if (!(ip_dev->if_flags & IFF_UP)) - continue; + if (count != 0) + return (0); - if (((rdma_vlan_dev_vlan_id(ip_dev) >= VLAN_N_VID) || - (rdma_vlan_dev_real_dev(ip_dev) != iwdev->netdev)) && - ip_dev != iwdev->netdev) - continue; + irdma_debug(iwdev_to_idev(iwdev), IRDMA_DEBUG_CM, + "Allocating child CM Listener forIP=%pI4, vlan_id=%d, MAC=%pM\n", + &ifa->ifa_addr, + rdma_vlan_dev_vlan_id(ip_dev), if_getlladdr(ip_dev)); + child_listen_node = kzalloc(sizeof(*child_listen_node), GFP_KERNEL); + irdma_debug(iwdev_to_idev(iwdev), IRDMA_DEBUG_CM, + "Allocating child listener %p\n", + child_listen_node); + if (!child_listen_node) { + irdma_debug(iwdev_to_idev(iwdev), + IRDMA_DEBUG_CM, + "listener memory allocation\n"); + ret = -ENOMEM; + return (ret); + } - if_addr_rlock(ip_dev); - IRDMA_TAILQ_FOREACH(ifa, &ip_dev->if_addrhead, ifa_link) { - irdma_debug(iwdev_to_idev(iwdev), IRDMA_DEBUG_CM, - "Allocating child CM Listener forIP=%pI4, vlan_id=%d, MAC=%pM\n", - &ifa->ifa_addr, - rdma_vlan_dev_vlan_id(ip_dev), IF_LLADDR(ip_dev)); - if (((struct sockaddr_in *)ifa->ifa_addr)->sin_family != AF_INET) - continue; - child_listen_node = kzalloc(sizeof(*child_listen_node), GFP_KERNEL); - cm_parent_listen_node->cm_core->stats_listen_nodes_created++; - irdma_debug(iwdev_to_idev(iwdev), IRDMA_DEBUG_CM, - "Allocating child listener %p\n", - child_listen_node); - if (!child_listen_node) { - irdma_debug(iwdev_to_idev(iwdev), IRDMA_DEBUG_CM, - "listener memory allocation\n"); - if_addr_runlock(ip_dev); - ret = -ENOMEM; - goto exit; - } + memcpy(child_listen_node, cm_parent_listen_node, + sizeof(*child_listen_node)); + cm_info->vlan_id = rdma_vlan_dev_vlan_id(ip_dev); + child_listen_node->vlan_id = cm_info->vlan_id; + child_listen_node->loc_addr[0] = + ntohl(((struct sockaddr_in *)ifa->ifa_addr)->sin_addr.s_addr); + memcpy(cm_info->loc_addr, child_listen_node->loc_addr, + sizeof(cm_info->loc_addr)); + ret = irdma_manage_qhash(iwdev, cm_info, + IRDMA_QHASH_TYPE_TCP_SYN, + IRDMA_QHASH_MANAGE_TYPE_ADD, + NULL, true); + if (ret) { + kfree(child_listen_node); + return (ret); + } - memcpy(child_listen_node, cm_parent_listen_node, - sizeof(*child_listen_node)); - child_listen_node->vlan_id = rdma_vlan_dev_vlan_id(ip_dev); - cm_info->vlan_id = child_listen_node->vlan_id; - child_listen_node->loc_addr[0] = - ntohl(((struct sockaddr_in *)ifa->ifa_addr)->sin_addr.s_addr); - memcpy(cm_info->loc_addr, child_listen_node->loc_addr, - sizeof(cm_info->loc_addr)); - ret = irdma_manage_qhash(iwdev, cm_info, - IRDMA_QHASH_TYPE_TCP_SYN, - IRDMA_QHASH_MANAGE_TYPE_ADD, - NULL, true); - if (ret) { - kfree(child_listen_node); - cm_parent_listen_node->cm_core - ->stats_listen_nodes_created--; - continue; - } + child_listen_node->qhash_set = true; + spin_lock_irqsave(&iwdev->cm_core.listen_list_lock, flags); + list_add(&child_listen_node->child_listen_list, + &cm_parent_listen_node->child_listen_list); + spin_unlock_irqrestore(&iwdev->cm_core.listen_list_lock, flags); + cm_parent_listen_node->cm_core->stats_listen_nodes_created++; - child_listen_node->qhash_set = true; - spin_lock_irqsave(&iwdev->cm_core.listen_list_lock, - flags); - list_add(&child_listen_node->child_listen_list, - &cm_parent_listen_node->child_listen_list); - spin_unlock_irqrestore(&iwdev->cm_core.listen_list_lock, flags); - } - if_addr_runlock(ip_dev); - } -exit: - IFNET_RUNLOCK(); + return (0); +} - return ret; +/** + * irdma_add_mqh_fp - Adds multiple qhashes for one interface + * @ifp: Interface to modify + * @arg: Callback argument list from irdma_add_mqh + * + * Adds a qhash and a child listen node for every address + * on the adapter and adds the associated qhash filter + */ +static int +irdma_add_mqh_ifp(if_t ifp, void *arg) +{ + struct irdma_add_mqh_cbs *cbs = arg; + int rv; + + if (!(if_getflags(ifp) & IFF_UP)) + return (0); + + if (((rdma_vlan_dev_vlan_id(ifp) >= VLAN_N_VID) || + (rdma_vlan_dev_real_dev(ifp) != cbs->iwdev->netdev)) && + ifp != cbs->iwdev->netdev) + return (0); + + if_addr_rlock(ifp); + if (cbs->cm_info->ipv4) + rv = if_foreach_addr_type(ifp, AF_INET, irdma_add_mqh_4_ifa_cb, arg); + else + rv = if_foreach_addr_type(ifp, AF_INET6, irdma_add_mqh_6_ifa_cb, arg); + if_addr_runlock(ifp); + + return (rv); } /** @@ -1849,21 +1853,24 @@ struct irdma_cm_info *cm_info, struct irdma_cm_listener *cm_listen_node) { + struct epoch_tracker et; + struct irdma_add_mqh_cbs cbs; int err; + + cbs.iwdev = iwdev; + cbs.cm_info = cm_info; + cbs.cm_listen_node = cm_listen_node; + VNET_ITERATOR_DECL(vnet_iter); VNET_LIST_RLOCK(); + NET_EPOCH_ENTER(et); VNET_FOREACH(vnet_iter) { - IFNET_RLOCK(); CURVNET_SET_QUIET(vnet_iter); - - if (cm_info->ipv4) - err = irdma_add_mqh_4(iwdev, cm_info, cm_listen_node); - else - err = irdma_add_mqh_6(iwdev, cm_info, cm_listen_node); + err = if_foreach(irdma_add_mqh_ifp, &cbs); CURVNET_RESTORE(); - IFNET_RUNLOCK(); } + NET_EPOCH_EXIT(et); VNET_LIST_RUNLOCK(); return err; @@ -2095,7 +2102,7 @@ struct vnet *vnet = rdma_id->route.addr.dev_addr.net; #endif - ether_addr_copy(ah_info.mac_addr, IF_LLADDR(iwdev->netdev)); + ether_addr_copy(ah_info.mac_addr, if_getlladdr(iwdev->netdev)); ah_info.hop_ttl = 0x40; ah_info.tc_tos = cm_node->tos; @@ -2165,7 +2172,7 @@ { struct irdma_cm_node *cm_node; int arpindex; - struct ifnet *netdev = iwdev->netdev; + if_t netdev = iwdev->netdev; /* create an hte and cm_node for this instance */ cm_node = kzalloc(sizeof(*cm_node), GFP_ATOMIC); @@ -2210,7 +2217,7 @@ cm_node->listener = listener; cm_node->cm_id = cm_info->cm_id; - ether_addr_copy(cm_node->loc_mac, IF_LLADDR(netdev)); + ether_addr_copy(cm_node->loc_mac, if_getlladdr(netdev)); spin_lock_init(&cm_node->retrans_list_lock); cm_node->ack_rcvd = false; diff --git a/sys/dev/irdma/irdma_hw.c b/sys/dev/irdma/irdma_hw.c --- a/sys/dev/irdma/irdma_hw.c +++ b/sys/dev/irdma/irdma_hw.c @@ -1114,7 +1114,7 @@ &iwdev->mac_ip_table_idx); if (!status) { status = irdma_add_local_mac_entry(iwdev->rf, - (u8 *)IF_LLADDR(iwdev->netdev), + (u8 *)if_getlladdr(iwdev->netdev), (u8)iwdev->mac_ip_table_idx); if (status) irdma_del_local_mac_entry(iwdev->rf, @@ -2591,7 +2591,7 @@ } info->ipv4_valid = cminfo->ipv4; info->user_pri = cminfo->user_pri; - ether_addr_copy(info->mac_addr, IF_LLADDR(iwdev->netdev)); + ether_addr_copy(info->mac_addr, if_getlladdr(iwdev->netdev)); info->qp_num = cminfo->qh_qpid; info->dest_port = cminfo->loc_port; info->dest_ip[0] = cminfo->loc_addr[0]; diff --git a/sys/dev/irdma/irdma_kcompat.c b/sys/dev/irdma/irdma_kcompat.c --- a/sys/dev/irdma/irdma_kcompat.c +++ b/sys/dev/irdma/irdma_kcompat.c @@ -710,7 +710,7 @@ ah_info = &sc_ah->ah_info; ah_info->ah_idx = ah_id; ah_info->pd_idx = pd->sc_pd.pd_id; - ether_addr_copy(ah_info->mac_addr, IF_LLADDR(iwdev->netdev)); + ether_addr_copy(ah_info->mac_addr, if_getlladdr(iwdev->netdev)); if (attr->ah_flags & IB_AH_GRH) { ah_info->flow_label = attr->grh.flow_label; @@ -720,7 +720,7 @@ ether_addr_copy(dmac, attr->dmac); - irdma_fill_ah_info(iwdev->netdev->if_vnet, ah_info, &sgid_attr, &sgid_addr.saddr, &dgid_addr.saddr, + irdma_fill_ah_info(if_getvnet(iwdev->netdev), ah_info, &sgid_attr, &sgid_addr.saddr, &dgid_addr.saddr, dmac, ah->av.net_type); err = irdma_create_ah_vlan_tag(iwdev, ah_info, &sgid_attr, dmac); @@ -881,7 +881,7 @@ ah_info->ah_idx = ah_id; ah_info->pd_idx = pd->sc_pd.pd_id; - ether_addr_copy(ah_info->mac_addr, IF_LLADDR(iwdev->netdev)); + ether_addr_copy(ah_info->mac_addr, if_getlladdr(iwdev->netdev)); if (attr->ah_flags & IB_AH_GRH) { ah_info->flow_label = attr->grh.flow_label; ah_info->hop_ttl = attr->grh.hop_limit; @@ -892,7 +892,7 @@ ib_resolve_eth_dmac(ibpd->device, attr); irdma_ether_copy(dmac, attr); - irdma_fill_ah_info(iwdev->netdev->if_vnet, ah_info, &sgid_attr, &sgid_addr.saddr, &dgid_addr.saddr, + irdma_fill_ah_info(if_getvnet(iwdev->netdev), ah_info, &sgid_attr, &sgid_addr.saddr, &dgid_addr.saddr, dmac, ah->av.net_type); err = irdma_create_ah_vlan_tag(iwdev, ah_info, &sgid_attr, dmac); @@ -1663,7 +1663,7 @@ if (sgid_attr.ndev) { *vlan_id = rdma_vlan_dev_vlan_id(sgid_attr.ndev); - ether_addr_copy(iwqp->ctx_info.roce_info->mac_addr, IF_LLADDR(sgid_attr.ndev)); + ether_addr_copy(iwqp->ctx_info.roce_info->mac_addr, if_getlladdr(sgid_attr.ndev)); } rdma_gid2ip((struct sockaddr *)&av->sgid_addr, &sgid); @@ -1929,7 +1929,7 @@ #endif struct ib_device * -ib_device_get_by_netdev(struct ifnet *netdev, int driver_id) +ib_device_get_by_netdev(if_t netdev, int driver_id) { struct irdma_device *iwdev; struct irdma_handler *hdl; @@ -2089,17 +2089,18 @@ struct ib_port_attr *props) { struct irdma_device *iwdev = to_iwdev(ibdev); - struct ifnet *netdev = iwdev->netdev; + if_t netdev = iwdev->netdev; /* no need to zero out pros here. done by caller */ props->max_mtu = IB_MTU_4096; - props->active_mtu = ib_mtu_int_to_enum(netdev->if_mtu); + props->active_mtu = ib_mtu_int_to_enum(if_getmtu(netdev)); props->lid = 1; props->lmc = 0; props->sm_lid = 0; props->sm_sl = 0; - if ((netdev->if_link_state == LINK_STATE_UP) && (netdev->if_drv_flags & IFF_DRV_RUNNING)) { + if ((if_getlinkstate(netdev) == LINK_STATE_UP) && + (if_getdrvflags(netdev) & IFF_DRV_RUNNING)) { props->state = IB_PORT_ACTIVE; props->phys_state = IB_PORT_PHYS_STATE_LINK_UP; } else { @@ -2233,7 +2234,7 @@ struct irdma_device *iwdev = to_iwdev(ibdev); memset(gid->raw, 0, sizeof(gid->raw)); - ether_addr_copy(gid->raw, IF_LLADDR(iwdev->netdev)); + ether_addr_copy(gid->raw, if_getlladdr(iwdev->netdev)); return 0; } diff --git a/sys/dev/irdma/irdma_verbs.c b/sys/dev/irdma/irdma_verbs.c --- a/sys/dev/irdma/irdma_verbs.c +++ b/sys/dev/irdma/irdma_verbs.c @@ -55,7 +55,7 @@ return -EINVAL; memset(props, 0, sizeof(*props)); - ether_addr_copy((u8 *)&props->sys_image_guid, IF_LLADDR(iwdev->netdev)); + ether_addr_copy((u8 *)&props->sys_image_guid, if_getlladdr(iwdev->netdev)); props->fw_ver = (u64)irdma_fw_major_ver(&rf->sc_dev) << 32 | irdma_fw_minor_ver(&rf->sc_dev); props->device_cap_flags = IB_DEVICE_MEM_WINDOW | @@ -731,7 +731,7 @@ udp_info->src_port = 0xc000; udp_info->dst_port = ROCE_V2_UDP_DPORT; roce_info = &iwqp->roce_info; - ether_addr_copy(roce_info->mac_addr, IF_LLADDR(iwdev->netdev)); + ether_addr_copy(roce_info->mac_addr, if_getlladdr(iwdev->netdev)); roce_info->rd_en = true; roce_info->wr_rdresp_en = true; @@ -764,7 +764,7 @@ struct irdma_iwarp_offload_info *iwarp_info; iwarp_info = &iwqp->iwarp_info; - ether_addr_copy(iwarp_info->mac_addr, IF_LLADDR(iwdev->netdev)); + ether_addr_copy(iwarp_info->mac_addr, if_getlladdr(iwdev->netdev)); iwarp_info->rd_en = true; iwarp_info->wr_rdresp_en = true; iwarp_info->bind_en = true; @@ -3496,8 +3496,8 @@ return 0; } -static __be64 irdma_mac_to_guid(struct ifnet *ndev){ - const unsigned char *mac = IF_LLADDR(ndev); +static __be64 irdma_mac_to_guid(if_t ndev){ + const unsigned char *mac = if_getlladdr(ndev); __be64 guid; unsigned char *dst = (unsigned char *)&guid; @@ -3513,7 +3513,7 @@ return guid; } -static struct ifnet * +static if_t irdma_get_netdev(struct ib_device *ibdev, u8 port_num) { struct irdma_device *iwdev = to_iwdev(ibdev); @@ -3645,10 +3645,10 @@ static int irdma_init_iw_device(struct irdma_device *iwdev) { - struct ifnet *netdev = iwdev->netdev; + if_t netdev = iwdev->netdev; iwdev->ibdev.node_type = RDMA_NODE_RNIC; - ether_addr_copy((u8 *)&iwdev->ibdev.node_guid, IF_LLADDR(netdev)); + ether_addr_copy((u8 *)&iwdev->ibdev.node_guid, if_getlladdr(netdev)); iwdev->ibdev.iwcm = kzalloc(sizeof(*iwdev->ibdev.iwcm), GFP_KERNEL); if (!iwdev->ibdev.iwcm) return -ENOMEM;