Page MenuHomeFreeBSD

D38560.id117111.diff
No OneTemporary

D38560.id117111.diff

diff --git a/sys/ofed/drivers/infiniband/core/ib_addr.c b/sys/ofed/drivers/infiniband/core/ib_addr.c
--- a/sys/ofed/drivers/infiniband/core/ib_addr.c
+++ b/sys/ofed/drivers/infiniband/core/ib_addr.c
@@ -140,32 +140,34 @@
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 @@
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 @@
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 @@
}
#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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
* 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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
* 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 @@
}
/* 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 @@
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 @@
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 @@
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
--- a/sys/ofed/drivers/infiniband/core/ib_cache.c
+++ b/sys/ofed/drivers/infiniband/core/ib_cache.c
@@ -183,7 +183,7 @@
__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 @@
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 @@
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 @@
}
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 @@
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_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 @@
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 @@
}
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 @@
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
--- a/sys/ofed/drivers/infiniband/core/ib_cm.c
+++ b/sys/ofed/drivers/infiniband/core/ib_cm.c
@@ -1819,7 +1819,7 @@
&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 @@
&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
--- a/sys/ofed/drivers/infiniband/core/ib_cma.c
+++ b/sys/ofed/drivers/infiniband/core/ib_cma.c
@@ -461,7 +461,7 @@
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 @@
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 @@
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 @@
}
#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 @@
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 @@
#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 @@
}
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 @@
} 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 @@
#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 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 @@
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_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 @@
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 @@
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_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 @@
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 @@
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 @@
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 @@
{
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
}
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 @@
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
--- a/sys/ofed/drivers/infiniband/core/ib_device.c
+++ b/sys/ofed/drivers/infiniband/core/ib_device.c
@@ -737,7 +737,7 @@
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;
}
diff --git a/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c b/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c
--- a/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c
+++ b/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c
@@ -150,24 +150,104 @@
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;
+ struct ifnet *ndev;
+};
+
+STAILQ_HEAD(ipx_queue, ipx_entry);
+
+struct roce_update_cb_s{
+ struct ipx_queue *ipx_head;
+ if_t ifp;
+};
+
+#ifdef INET
+static u_int
+roce_gid_update_addr_ifa4_cb(void *arg, struct ifaddr *ifa, u_int count)
+{
+ struct roce_update_cb_s *cbs = 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 = cbs->ifp;
+ STAILQ_INSERT_TAIL(cbs->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 roce_update_cb_s *cbs = 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 = cbs->ifp;
+
+ /* trash IPv6 scope ID */
+ sa6_recoverscope(&entry->ipx_addr.v6);
+ entry->ipx_addr.v6.sin6_scope_id = 0;
+
+ STAILQ_INSERT_TAIL(cbs->ipx_head, entry, entry);
+
+ return (1);
+}
+#endif
+
+static int
+roce_gid_update_addr_ifnet_cb(if_t ifp, void *arg)
+{
+ struct epoch_tracker et;
+ struct roce_update_cb_s cbs;
+ struct roce_update_cb_s *in_cbs;
+
+ in_cbs = arg;
+ if (ifp != in_cbs->ifp) {
+ if (if_gettype(ifp) != IFT_L2VLAN)
+ return (0);
+ if (in_cbs->ifp != rdma_vlan_dev_real_dev(ifp))
+ return (0);
+ }
+
+ /* clone address information for IPv4 and IPv6 */
+ NET_EPOCH_ENTER(et);
+#if defined(INET)
+ if_foreach_addr_type(ifp, AF_INET, roce_gid_update_addr_ifa4_cb, &cbs);
+#endif
+#if defined(INET6)
+ if_foreach_addr_type(ifp, AF_INET, roce_gid_update_addr_ifa6_cb, &cbs);
+#endif
+ NET_EPOCH_EXIT(et);
+
+ return (0);
+}
+
static void
roce_gid_update_addr_callback(struct ib_device *device, u8 port,
struct ifnet *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;
- };
struct ipx_entry *entry;
- struct ifnet *idev;
-#if defined(INET) || defined(INET6)
- struct ifaddr *ifa;
-#endif
+ struct roce_update_cb_s cbs;
VNET_ITERATOR_DECL(vnet_iter);
struct ib_gid_attr gid_attr;
union ib_gid gid;
@@ -175,10 +255,11 @@
u16 index_num;
int i;
- STAILQ_HEAD(, ipx_entry) ipx_head;
+ struct ipx_queue ipx_head;
STAILQ_INIT(&ipx_head);
+ cbs.ipx_head = &ipx_head;
/* make sure default GIDs are in */
default_gids = roce_gid_enum_netdev_default(device, port, ndev);
@@ -186,57 +267,8 @@
VNET_FOREACH(vnet_iter) {
CURVNET_SET(vnet_iter);
IFNET_RLOCK();
- CK_STAILQ_FOREACH(idev, &V_ifnet, if_link) {
- struct epoch_tracker et;
-
- if (idev != ndev) {
- if (idev->if_type != IFT_L2VLAN)
- continue;
- if (ndev != rdma_vlan_dev_real_dev(idev))
- continue;
- }
-
- /* clone address information for IPv4 and IPv6 */
- NET_EPOCH_ENTER(et);
-#if defined(INET)
- CK_STAILQ_FOREACH(ifa, &idev->if_addrhead, ifa_link) {
- if (ifa->ifa_addr == NULL ||
- ifa->ifa_addr->sa_family != AF_INET)
- continue;
- entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
- if (entry == NULL) {
- pr_warn("roce_gid_update_addr_callback: "
- "couldn't allocate entry for IPv4 update\n");
- continue;
- }
- entry->ipx_addr.v4 = *((struct sockaddr_in *)ifa->ifa_addr);
- entry->ndev = idev;
- STAILQ_INSERT_TAIL(&ipx_head, entry, entry);
- }
-#endif
-#if defined(INET6)
- CK_STAILQ_FOREACH(ifa, &idev->if_addrhead, ifa_link) {
- if (ifa->ifa_addr == NULL ||
- ifa->ifa_addr->sa_family != AF_INET6)
- continue;
- entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
- if (entry == NULL) {
- pr_warn("roce_gid_update_addr_callback: "
- "couldn't allocate entry for IPv6 update\n");
- continue;
- }
- entry->ipx_addr.v6 = *((struct sockaddr_in6 *)ifa->ifa_addr);
- entry->ndev = idev;
-
- /* 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);
- }
-#endif
- NET_EPOCH_EXIT(et);
- }
+ cbs.ifp = ndev;
+ if_foreach(roce_gid_update_addr_ifnet_cb, &cbs);
IFNET_RUNLOCK();
CURVNET_RESTORE();
}
@@ -320,7 +352,7 @@
struct roce_netdev_event_work *work;
retry:
- switch (ndev->if_type) {
+ switch (if_gettype(ndev)) {
case IFT_ETHER:
break;
case IFT_L2VLAN:
diff --git a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h
--- a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h
+++ b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h
@@ -321,7 +321,7 @@
spinlock_t lock;
spinlock_t drain_lock;
- struct ifnet *dev;
+ if_t dev;
u8 broadcastaddr[INFINIBAND_ALEN];
@@ -384,7 +384,7 @@
struct ib_event_handler event_handler;
- struct ifnet *parent;
+ if_t parent;
struct list_head child_intfs;
struct list_head list;
@@ -531,7 +531,7 @@
struct mbuf *ipoib_alloc_map_mb(struct ipoib_dev_priv *priv, struct ipoib_rx_buf *rx_req, int align, int size, int max_frags);
-void ipoib_set_ethtool_ops(struct ifnet *dev);
+void ipoib_set_ethtool_ops(if_t dev);
int ipoib_set_dev_features(struct ipoib_dev_priv *priv, struct ib_device *hca);
#ifdef CONFIG_INFINIBAND_IPOIB_CM
@@ -546,7 +546,7 @@
static inline int ipoib_cm_admin_enabled(struct ipoib_dev_priv *priv)
{
- return IPOIB_CM_SUPPORTED(IF_LLADDR(priv->dev));
+ return IPOIB_CM_SUPPORTED(if_getlladdr(priv->dev));
}
static inline int ipoib_cm_enabled(struct ipoib_dev_priv *priv, uint8_t *hwaddr)
@@ -752,6 +752,6 @@
#define IPOIB_QPN(ha) (be32_to_cpup((__be32 *) ha) & 0xffffff)
-void ipoib_start_locked(struct ifnet *, struct ipoib_dev_priv *);
+void ipoib_start_locked(if_t, struct ipoib_dev_priv *);
#endif /* _IPOIB_H */
diff --git a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_cm.c
--- a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -572,7 +572,7 @@
memset(ibh->hwaddr, 0, 4);
memcpy(ibh->hwaddr + 4, priv->local_gid.raw, sizeof(union ib_gid));
- dev->if_input(dev, mb);
+ if_input(dev, mb);
} else {
if_inc_counter(dev, IFCOUNTER_IERRORS, 1);
}
@@ -670,7 +670,7 @@
tx->qp->qp_num);
if (ib_req_notify_cq(priv->send_cq, IB_CQ_NEXT_COMP))
ipoib_warn(priv, "request notify on send CQ failed\n");
- dev->if_drv_flags |= IFF_DRV_OACTIVE;
+ if_setdrvflagbits(dev, IFF_DRV_OACTIVE, 0);
}
}
@@ -703,9 +703,9 @@
++tx->tx_tail;
if (unlikely(--priv->tx_outstanding == ipoib_sendq_size >> 1) &&
- (dev->if_drv_flags & IFF_DRV_OACTIVE) != 0 &&
+ (if_getdrvflags(dev) & IFF_DRV_OACTIVE) != 0 &&
test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags))
- dev->if_drv_flags &= ~IFF_DRV_OACTIVE;
+ if_setdrvflagbits(dev, 0, IFF_DRV_OACTIVE);
if (wc->status != IB_WC_SUCCESS &&
wc->status != IB_WC_WR_FLUSH_ERR) {
@@ -737,7 +737,7 @@
{
int ret;
- if (!IPOIB_CM_SUPPORTED(IF_LLADDR(priv->dev)))
+ if (!IPOIB_CM_SUPPORTED(if_getlladdr(priv->dev)))
return 0;
priv->cm.id = ib_create_cm_id(priv->ca, ipoib_cm_rx_handler, priv);
@@ -791,7 +791,7 @@
unsigned long begin;
int ret;
- if (!IPOIB_CM_SUPPORTED(IF_LLADDR(priv->dev)) || !priv->cm.id)
+ if (!IPOIB_CM_SUPPORTED(if_getlladdr(priv->dev)) || !priv->cm.id)
return;
ib_destroy_cm_id(priv->cm.id);
@@ -910,7 +910,7 @@
if (mb == NULL)
break;
mb->m_pkthdr.rcvif = dev;
- if (dev->if_transmit(dev, mb))
+ if (if_transmit(dev, mb))
ipoib_warn(priv, "dev_queue_xmit failed "
"to requeue packet\n");
}
@@ -1099,9 +1099,9 @@
m_freem(tx_req->mb);
++p->tx_tail;
if (unlikely(--priv->tx_outstanding == ipoib_sendq_size >> 1) &&
- (dev->if_drv_flags & IFF_DRV_OACTIVE) != 0 &&
+ (if_getdrvflags(dev) & IFF_DRV_OACTIVE) != 0 &&
test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags))
- dev->if_drv_flags &= ~IFF_DRV_OACTIVE;
+ if_setdrvflagbits(dev, 0, IFF_DRV_OACTIVE);
}
if (p->qp)
@@ -1272,7 +1272,7 @@
spin_lock_irqsave(&priv->lock, flags);
- CURVNET_SET_QUIET(priv->dev->if_vnet);
+ CURVNET_SET_QUIET(if_getvnet(priv->dev));
for (;;) {
IF_DEQUEUE(&priv->cm.mb_queue, mb);
@@ -1402,7 +1402,7 @@
bzero(&priv->cm.mb_queue, sizeof(priv->cm.mb_queue));
mtx_init(&priv->cm.mb_queue.ifq_mtx,
- dev->if_xname, "if send queue", MTX_DEF);
+ if_name(dev), "if send queue", MTX_DEF);
max_srq_sge = priv->ca->attrs.max_srq_sge;
@@ -1440,7 +1440,7 @@
}
}
- IF_LLADDR(priv->dev)[0] = IPOIB_FLAGS_RC;
+ if_getlladdr(priv->dev)[0] = IPOIB_FLAGS_RC;
return 0;
}
diff --git a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c
--- a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c
+++ b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c
@@ -267,7 +267,7 @@
if (test_bit(IPOIB_FLAG_CSUM, &priv->flags) && likely(wc->wc_flags & IB_WC_IP_CSUM_OK))
mb->m_pkthdr.csum_flags = CSUM_IP_CHECKED | CSUM_IP_VALID;
- dev->if_input(dev, mb);
+ if_input(dev, mb);
repost:
if (unlikely(ipoib_ib_post_receive(priv, wr_id)))
@@ -357,9 +357,9 @@
++priv->tx_tail;
if (unlikely(--priv->tx_outstanding == ipoib_sendq_size >> 1) &&
- (dev->if_drv_flags & IFF_DRV_OACTIVE) &&
+ (if_getdrvflags(dev) & IFF_DRV_OACTIVE) &&
test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags))
- dev->if_drv_flags &= ~IFF_DRV_OACTIVE;
+ if_setdrvflagbits(dev, 0, IFF_DRV_OACTIVE);
if (wc->status != IB_WC_SUCCESS &&
wc->status != IB_WC_WR_FLUSH_ERR)
@@ -434,7 +434,7 @@
while (ipoib_poll_tx(priv, true))
; /* nothing */
- if (dev->if_drv_flags & IFF_DRV_OACTIVE)
+ if (if_getdrvflags(dev) & IFF_DRV_OACTIVE)
mod_timer(&priv->poll_timer, jiffies + 1);
spin_unlock(&priv->lock);
@@ -542,7 +542,7 @@
ipoib_dbg(priv, "TX ring full, stopping kernel net queue\n");
if (ib_req_notify_cq(priv->send_cq, IB_CQ_NEXT_COMP))
ipoib_warn(priv, "request notify on send CQ failed\n");
- dev->if_drv_flags |= IFF_DRV_OACTIVE;
+ if_setdrvflagbits(dev, IFF_DRV_OACTIVE, 0);
}
if (unlikely(post_send(priv,
@@ -553,8 +553,8 @@
--priv->tx_outstanding;
ipoib_dma_unmap_tx(priv->ca, tx_req);
m_freem(mb);
- if (dev->if_drv_flags & IFF_DRV_OACTIVE)
- dev->if_drv_flags &= ~IFF_DRV_OACTIVE;
+ if (if_getdrvflags(dev) & IFF_DRV_OACTIVE)
+ if_setdrvflagbits(dev, 0, IFF_DRV_OACTIVE);
} else {
address->last_send = priv->tx_head;
++priv->tx_head;
@@ -870,7 +870,7 @@
setup_timer(&priv->poll_timer, ipoib_ib_tx_timer_func,
(unsigned long) priv);
- if (dev->if_flags & IFF_UP) {
+ if (if_getflags(dev) & IFF_UP) {
if (ipoib_ib_dev_open(priv)) {
ipoib_transport_dev_cleanup(priv);
return -ENODEV;
diff --git a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
--- a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -89,12 +89,12 @@
static void ipoib_add_one(struct ib_device *device);
static void ipoib_remove_one(struct ib_device *device, void *client_data);
-static struct ifnet *ipoib_get_net_dev_by_params(
+static if_t ipoib_get_net_dev_by_params(
struct ib_device *dev, u8 port, u16 pkey,
const union ib_gid *gid, const struct sockaddr *addr,
void *client_data);
-static void ipoib_start(struct ifnet *dev);
-static int ipoib_ioctl(struct ifnet *ifp, u_long command, caddr_t data);
+static void ipoib_start(if_t dev);
+static int ipoib_ioctl(if_t ifp, u_long command, caddr_t data);
static struct unrhdr *ipoib_unrhdr;
@@ -131,7 +131,7 @@
int
ipoib_open(struct ipoib_dev_priv *priv)
{
- struct ifnet *dev = priv->dev;
+ if_t dev = priv->dev;
ipoib_dbg(priv, "bringing up interface\n");
@@ -152,12 +152,11 @@
/* Bring up any child interfaces too */
mutex_lock(&priv->vlan_mutex);
list_for_each_entry(cpriv, &priv->child_intfs, list)
- if ((cpriv->dev->if_drv_flags & IFF_DRV_RUNNING) == 0)
+ if ((if_getdrvflags(cpriv->dev) & IFF_DRV_RUNNING) == 0)
ipoib_open(cpriv);
mutex_unlock(&priv->vlan_mutex);
}
- dev->if_drv_flags |= IFF_DRV_RUNNING;
- dev->if_drv_flags &= ~IFF_DRV_OACTIVE;
+ if_setdrvflagbits(dev, IFF_DRV_RUNNING, IFF_DRV_OACTIVE);
return 0;
@@ -173,12 +172,12 @@
static void
ipoib_init(void *arg)
{
- struct ifnet *dev;
+ if_t dev;
struct ipoib_dev_priv *priv;
priv = arg;
dev = priv->dev;
- if ((dev->if_drv_flags & IFF_DRV_RUNNING) == 0)
+ if ((if_getdrvflags(dev) & IFF_DRV_RUNNING) == 0)
ipoib_open(priv);
queue_work(ipoib_workqueue, &priv->flush_light);
}
@@ -187,13 +186,13 @@
static int
ipoib_stop(struct ipoib_dev_priv *priv)
{
- struct ifnet *dev = priv->dev;
+ if_t dev = priv->dev;
ipoib_dbg(priv, "stopping interface\n");
clear_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags);
- dev->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
+ if_setdrvflagbits(dev, 0, IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
ipoib_ib_dev_down(priv, 0);
ipoib_ib_dev_stop(priv, 0);
@@ -204,7 +203,7 @@
/* Bring down any child interfaces too */
mutex_lock(&priv->vlan_mutex);
list_for_each_entry(cpriv, &priv->child_intfs, list)
- if ((cpriv->dev->if_drv_flags & IFF_DRV_RUNNING) != 0)
+ if ((if_getdrvflags(cpriv->dev) & IFF_DRV_RUNNING) != 0)
ipoib_stop(cpriv);
mutex_unlock(&priv->vlan_mutex);
}
@@ -216,21 +215,21 @@
ipoib_propagate_ifnet_mtu(struct ipoib_dev_priv *priv, int new_mtu,
bool propagate)
{
- struct ifnet *ifp;
+ if_t ifp;
struct ifreq ifr;
int error;
ifp = priv->dev;
- if (ifp->if_mtu == new_mtu)
+ if (if_getmtu(ifp) == new_mtu)
return (0);
if (propagate) {
strlcpy(ifr.ifr_name, if_name(ifp), IFNAMSIZ);
ifr.ifr_mtu = new_mtu;
- CURVNET_SET(ifp->if_vnet);
+ CURVNET_SET(if_getvnet(ifp));
error = ifhwioctl(SIOCSIFMTU, ifp, (caddr_t)&ifr, curthread);
CURVNET_RESTORE();
} else {
- ifp->if_mtu = new_mtu;
+ if_setmtu(ifp, new_mtu);
error = 0;
}
return (error);
@@ -270,9 +269,9 @@
}
static int
-ipoib_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
+ipoib_ioctl(if_t ifp, u_long command, caddr_t data)
{
- struct ipoib_dev_priv *priv = ifp->if_softc;
+ struct ipoib_dev_priv *priv = if_getsoftc(ifp);
struct ifaddr *ifa = (struct ifaddr *) data;
struct ifreq *ifr = (struct ifreq *) data;
int error = 0;
@@ -289,36 +288,36 @@
switch (command) {
case SIOCSIFFLAGS:
- if (ifp->if_flags & IFF_UP) {
- if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
+ if (if_getflags(ifp) & IFF_UP) {
+ if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0)
error = -ipoib_open(priv);
} else
- if (ifp->if_drv_flags & IFF_DRV_RUNNING)
+ if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
ipoib_stop(priv);
break;
case SIOCADDMULTI:
case SIOCDELMULTI:
- if (ifp->if_drv_flags & IFF_DRV_RUNNING)
+ if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
queue_work(ipoib_workqueue, &priv->restart_task);
break;
case SIOCSIFADDR:
- ifp->if_flags |= IFF_UP;
+ if_setflagbits(ifp, IFF_UP, 0);
switch (ifa->ifa_addr->sa_family) {
#ifdef INET
case AF_INET:
- ifp->if_init(ifp->if_softc); /* before arpwhohas */
+ if_init(ifp, if_getsoftc(ifp)); /* before arpwhohas */
arp_ifinit(ifp, ifa);
break;
#endif
default:
- ifp->if_init(ifp->if_softc);
+ if_init(ifp, if_getsoftc(ifp));
break;
}
break;
case SIOCGIFADDR:
- bcopy(IF_LLADDR(ifp), &ifr->ifr_addr.sa_data[0],
+ bcopy(if_getlladdr(ifp), &ifr->ifr_addr.sa_data[0],
INFINIBAND_ALEN);
break;
@@ -512,7 +511,7 @@
{
struct ipoib_path *path = path_ptr;
struct ipoib_dev_priv *priv = path->priv;
- struct ifnet *dev = priv->dev;
+ if_t dev = priv->dev;
struct ipoib_ah *ah = NULL;
struct ipoib_ah *old_ah = NULL;
struct epoch_tracker et;
@@ -576,7 +575,7 @@
if (mb == NULL)
break;
mb->m_pkthdr.rcvif = dev;
- if (dev->if_transmit(dev, mb))
+ if (if_transmit(dev, mb))
ipoib_warn(priv, "dev_queue_xmit failed "
"to requeue packet\n");
}
@@ -614,7 +613,7 @@
static int
path_rec_start(struct ipoib_dev_priv *priv, struct ipoib_path *path)
{
- struct ifnet *dev = priv->dev;
+ if_t dev = priv->dev;
ib_sa_comp_mask comp_mask = IB_SA_PATH_REC_MTU_SELECTOR | IB_SA_PATH_REC_MTU;
struct ib_sa_path_rec p_rec;
@@ -622,7 +621,7 @@
p_rec = path->pathrec;
p_rec.mtu_selector = IB_SA_GT;
- switch (roundup_pow_of_two(dev->if_mtu + IPOIB_ENCAP_LEN)) {
+ switch (roundup_pow_of_two(if_getmtu(dev) + IPOIB_ENCAP_LEN)) {
case 512:
p_rec.mtu = IB_MTU_256;
break;
@@ -736,15 +735,15 @@
}
void
-ipoib_start_locked(struct ifnet *dev, struct ipoib_dev_priv *priv)
+ipoib_start_locked(if_t dev, struct ipoib_dev_priv *priv)
{
struct mbuf *mb;
assert_spin_locked(&priv->lock);
- while (!IFQ_DRV_IS_EMPTY(&dev->if_snd) &&
- (dev->if_drv_flags & IFF_DRV_OACTIVE) == 0) {
- IFQ_DRV_DEQUEUE(&dev->if_snd, mb);
+ while (!if_sendq_empty(dev) &&
+ (if_getdrvflags(dev) & IFF_DRV_OACTIVE) == 0) {
+ mb = if_dequeue(dev);
if (mb == NULL)
break;
INFINIBAND_BPF_MTAP(dev, mb);
@@ -753,10 +752,10 @@
}
static void
-_ipoib_start(struct ifnet *dev, struct ipoib_dev_priv *priv)
+_ipoib_start(if_t dev, struct ipoib_dev_priv *priv)
{
- if ((dev->if_drv_flags & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) !=
+ if ((if_getdrvflags(dev) & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) !=
IFF_DRV_RUNNING)
return;
@@ -766,13 +765,13 @@
}
static void
-ipoib_start(struct ifnet *dev)
+ipoib_start(if_t dev)
{
- _ipoib_start(dev, dev->if_softc);
+ _ipoib_start(dev, if_getsoftc(dev));
}
static void
-ipoib_vlan_start(struct ifnet *dev)
+ipoib_vlan_start(if_t dev)
{
struct ipoib_dev_priv *priv;
struct mbuf *mb;
@@ -780,8 +779,8 @@
priv = VLAN_COOKIE(dev);
if (priv != NULL)
return _ipoib_start(dev, priv);
- while (!IFQ_DRV_IS_EMPTY(&dev->if_snd)) {
- IFQ_DRV_DEQUEUE(&dev->if_snd, mb);
+ while (!if_sendq_empty(dev)) {
+ mb = if_dequeue(dev);
if (mb == NULL)
break;
m_freem(mb);
@@ -830,7 +829,7 @@
static void
ipoib_ifdetach(struct ipoib_dev_priv *priv)
{
- struct ifnet *dev;
+ if_t dev;
dev = priv->dev;
if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) {
@@ -842,7 +841,7 @@
static void
ipoib_detach(struct ipoib_dev_priv *priv)
{
- struct ifnet *dev;
+ if_t dev;
dev = priv->dev;
if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) {
@@ -905,7 +904,7 @@
ipoib_intf_alloc(const char *name)
{
struct ipoib_dev_priv *priv;
- struct ifnet *dev;
+ if_t dev;
priv = ipoib_priv_alloc();
dev = priv->dev = if_alloc(IFT_INFINIBAND);
@@ -913,7 +912,7 @@
free(priv, M_TEMP);
return NULL;
}
- dev->if_softc = priv;
+ if_setsoftc(dev, priv);
priv->gone = 2; /* initializing */
priv->unit = alloc_unr(ipoib_unrhdr);
if (priv->unit == -1) {
@@ -922,20 +921,20 @@
return NULL;
}
if_initname(dev, name, priv->unit);
- dev->if_flags = IFF_BROADCAST | IFF_MULTICAST;
+ if_setflags(dev, IFF_BROADCAST | IFF_MULTICAST);
infiniband_ifattach(priv->dev, NULL, priv->broadcastaddr);
- dev->if_init = ipoib_init;
- dev->if_ioctl = ipoib_ioctl;
- dev->if_start = ipoib_start;
+ if_setinitfn(dev, ipoib_init);
+ if_setioctlfn(dev, ipoib_ioctl);
+ if_setstartfn(dev, ipoib_start);
- dev->if_snd.ifq_maxlen = ipoib_sendq_size * 2;
+ if_setsendqlen(dev, ipoib_sendq_size * 2);
priv->dev = dev;
if_link_state_change(priv->dev, LINK_STATE_DOWN);
- return dev->if_softc;
+ return if_getsoftc(dev);
}
int
@@ -945,14 +944,14 @@
priv->hca_caps = device_attr->device_cap_flags;
- priv->dev->if_hwassist = 0;
- priv->dev->if_capabilities = 0;
+ if_sethwassist(priv->dev, 0);
+ if_setcapabilities(priv->dev, 0);
#ifndef CONFIG_INFINIBAND_IPOIB_CM
if (priv->hca_caps & IB_DEVICE_UD_IP_CSUM) {
set_bit(IPOIB_FLAG_CSUM, &priv->flags);
- priv->dev->if_hwassist = CSUM_IP | CSUM_TCP | CSUM_UDP;
- priv->dev->if_capabilities = IFCAP_HWCSUM | IFCAP_VLAN_HWCSUM;
+ if_sethwassist(priv->dev, CSUM_IP | CSUM_TCP | CSUM_UDP);
+ if_setcapabilities(priv, IFCAP_HWCSUM | IFCAP_VLAN_HWCSUM);
}
#if 0
@@ -962,15 +961,15 @@
}
#endif
#endif
- priv->dev->if_capabilities |=
- IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_LINKSTATE;
- priv->dev->if_capenable = priv->dev->if_capabilities;
+ if_setcapabilitiesbit(priv->dev,
+ IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_LINKSTATE, 0);
+ if_setcapenable(priv->dev, if_getcapabilities(priv->dev));
return 0;
}
-static struct ifnet *
+static if_t
ipoib_add_port(const char *format, struct ib_device *hca, u8 port)
{
struct ipoib_dev_priv *priv;
@@ -990,8 +989,8 @@
}
/* MTU will be reset when mcast join happens */
- priv->dev->if_mtu = IPOIB_UD_MTU(priv->max_ib_mtu);
- priv->mcast_mtu = priv->admin_mtu = priv->dev->if_mtu;
+ if_setmtu(priv->dev, IPOIB_UD_MTU(priv->max_ib_mtu));
+ priv->mcast_mtu = priv->admin_mtu = if_getmtu(priv->dev);
result = ib_query_pkey(hca, port, 0, &priv->pkey);
if (result) {
@@ -1018,7 +1017,7 @@
hca->name, port, result);
goto device_init_failed;
}
- memcpy(IF_LLADDR(priv->dev) + 4, priv->local_gid.raw, sizeof(union ib_gid));
+ memcpy(if_getlladdr(priv->dev) + 4, priv->local_gid.raw, sizeof(union ib_gid));
result = ipoib_dev_init(priv, hca, port);
if (result < 0) {
@@ -1027,7 +1026,7 @@
goto device_init_failed;
}
if (ipoib_cm_admin_enabled(priv))
- priv->dev->if_mtu = IPOIB_CM_MTU(ipoib_cm_max_mtu(priv));
+ if_setmtu(priv->dev, IPOIB_CM_MTU(ipoib_cm_max_mtu(priv)));
INIT_IB_EVENT_HANDLER(&priv->event_handler,
priv->ca, ipoib_event);
@@ -1059,7 +1058,7 @@
ipoib_add_one(struct ib_device *device)
{
struct list_head *dev_list;
- struct ifnet *dev;
+ if_t dev;
struct ipoib_dev_priv *priv;
int s, e, p;
@@ -1085,7 +1084,7 @@
continue;
dev = ipoib_add_port("ib", device, p);
if (!IS_ERR(dev)) {
- priv = dev->if_softc;
+ priv = if_getsoftc(dev);
list_add_tail(&priv->list, dev_list);
}
}
@@ -1123,25 +1122,33 @@
kfree(dev_list);
}
+static u_int
+ipoib_match_dev_addr_cb(void *arg, struct ifaddr *ifa, u_int count)
+{
+ struct sockaddr *addr = arg;
+
+ /* If a match is already found, skip this. */
+ if (count > 0)
+ return (0);
+
+ if (ifa->ifa_addr->sa_len != addr->sa_len)
+ return (0);
+
+ if (memcmp(ifa->ifa_addr, addr, addr->sa_len) == 0)
+ return (1);
+
+ return (0);
+}
+
static int
-ipoib_match_dev_addr(const struct sockaddr *addr, struct ifnet *dev)
+ipoib_match_dev_addr(const struct sockaddr *addr, if_t dev)
{
struct epoch_tracker et;
- struct ifaddr *ifa;
int retval = 0;
NET_EPOCH_ENTER(et);
- CK_STAILQ_FOREACH(ifa, &dev->if_addrhead, ifa_link) {
- if (ifa->ifa_addr == NULL ||
- ifa->ifa_addr->sa_family != addr->sa_family ||
- ifa->ifa_addr->sa_len != addr->sa_len) {
- continue;
- }
- if (memcmp(ifa->ifa_addr, addr, addr->sa_len) == 0) {
- retval = 1;
- break;
- }
- }
+ retval = if_foreach_addr_type(dev, addr->sa_family,
+ ipoib_match_dev_addr_cb, __DECONST(void *, addr));
NET_EPOCH_EXIT(et);
return (retval);
@@ -1158,7 +1165,7 @@
static int
ipoib_match_gid_pkey_addr(struct ipoib_dev_priv *priv,
const union ib_gid *gid, u16 pkey_index, const struct sockaddr *addr,
- struct ifnet **found_net_dev)
+ if_t *found_net_dev)
{
struct ipoib_dev_priv *child_priv;
int matches = 0;
@@ -1167,7 +1174,7 @@
(!gid || !memcmp(gid, &priv->local_gid, sizeof(*gid)))) {
if (addr == NULL || ipoib_match_dev_addr(addr, priv->dev) != 0) {
if (*found_net_dev == NULL) {
- struct ifnet *net_dev;
+ if_t net_dev;
if (priv->parent != NULL)
net_dev = priv->parent;
@@ -1202,7 +1209,7 @@
static int
__ipoib_get_net_dev_by_params(struct list_head *dev_list, u8 port,
u16 pkey_index, const union ib_gid *gid,
- const struct sockaddr *addr, struct ifnet **net_dev)
+ const struct sockaddr *addr, if_t *net_dev)
{
struct ipoib_dev_priv *priv;
int matches = 0;
@@ -1223,11 +1230,11 @@
return matches;
}
-static struct ifnet *
+static if_t
ipoib_get_net_dev_by_params(struct ib_device *dev, u8 port, u16 pkey,
const union ib_gid *gid, const struct sockaddr *addr, void *client_data)
{
- struct ifnet *net_dev;
+ if_t net_dev;
struct list_head *dev_list = client_data;
u16 pkey_index;
int matches;
@@ -1273,16 +1280,16 @@
}
static void
-ipoib_config_vlan(void *arg, struct ifnet *ifp, uint16_t vtag)
+ipoib_config_vlan(void *arg, if_t ifp, uint16_t vtag)
{
struct ipoib_dev_priv *parent;
struct ipoib_dev_priv *priv;
struct epoch_tracker et;
- struct ifnet *dev;
+ if_t dev;
uint16_t pkey;
int error;
- if (ifp->if_type != IFT_INFINIBAND)
+ if (if_gettype(ifp) != IFT_INFINIBAND)
return;
NET_EPOCH_ENTER(et);
dev = VLAN_DEVAT(ifp, vtag);
@@ -1291,7 +1298,7 @@
return;
priv = NULL;
error = 0;
- parent = ifp->if_softc;
+ parent = if_getsoftc(ifp);
/* We only support 15 bits of pkey. */
if (vtag & 0x8000)
return;
@@ -1310,7 +1317,7 @@
priv = ipoib_priv_alloc();
priv->dev = dev;
priv->max_ib_mtu = parent->max_ib_mtu;
- priv->mcast_mtu = priv->admin_mtu = parent->dev->if_mtu;
+ priv->mcast_mtu = priv->admin_mtu = if_getmtu(parent->dev);
set_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags);
error = ipoib_set_dev_features(priv, parent->ca);
if (error)
@@ -1318,17 +1325,17 @@
priv->pkey = pkey;
priv->broadcastaddr[8] = pkey >> 8;
priv->broadcastaddr[9] = pkey & 0xff;
- dev->if_broadcastaddr = priv->broadcastaddr;
+ if_setbroadcastaddr(dev, priv->broadcastaddr);
error = ipoib_dev_init(priv, parent->ca, parent->port);
if (error)
goto out;
priv->parent = parent->dev;
list_add_tail(&priv->list, &parent->child_intfs);
VLAN_SETCOOKIE(dev, priv);
- dev->if_start = ipoib_vlan_start;
- dev->if_drv_flags &= ~IFF_DRV_RUNNING;
- dev->if_hdrlen = IPOIB_HEADER_LEN;
- if (ifp->if_drv_flags & IFF_DRV_RUNNING)
+ if_setstartfn(dev, ipoib_vlan_start);
+ if_setdrvflagbits(dev, 0, IFF_DRV_RUNNING);
+ if_setifheaderlen(dev, IPOIB_HEADER_LEN);
+ if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
ipoib_open(priv);
mutex_unlock(&parent->vlan_mutex);
return;
@@ -1344,15 +1351,15 @@
}
static void
-ipoib_unconfig_vlan(void *arg, struct ifnet *ifp, uint16_t vtag)
+ipoib_unconfig_vlan(void *arg, if_t ifp, uint16_t vtag)
{
struct ipoib_dev_priv *parent;
struct ipoib_dev_priv *priv;
struct epoch_tracker et;
- struct ifnet *dev;
+ if_t dev;
uint16_t pkey;
- if (ifp->if_type != IFT_INFINIBAND)
+ if (if_gettype(ifp) != IFT_INFINIBAND)
return;
NET_EPOCH_ENTER(et);
@@ -1361,7 +1368,7 @@
if (dev)
VLAN_SETCOOKIE(dev, NULL);
pkey = vtag | 0x8000;
- parent = ifp->if_softc;
+ parent = if_getsoftc(ifp);
mutex_lock(&parent->vlan_mutex);
list_for_each_entry(priv, &parent->child_intfs, list) {
if (priv->pkey == pkey) {
diff --git a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
--- a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+++ b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
@@ -63,7 +63,7 @@
static void ipoib_mcast_free(struct ipoib_mcast *mcast)
{
- struct ifnet *dev = mcast->priv->dev;
+ if_t dev = mcast->priv->dev;
int tx_dropped = 0;
ipoib_dbg_mcast(mcast->priv, "deleting multicast group %16D\n",
@@ -155,7 +155,7 @@
struct ib_sa_mcmember_rec *mcmember)
{
struct ipoib_dev_priv *priv = mcast->priv;
- struct ifnet *dev = priv->dev;
+ if_t dev = priv->dev;
struct ipoib_ah *ah;
struct epoch_tracker et;
int ret;
@@ -164,7 +164,7 @@
mcast->mcmember = *mcmember;
/* Set the cached Q_Key before we attach if it's the broadcast group */
- if (!memcmp(mcast->mcmember.mgid.raw, dev->if_broadcastaddr + 4,
+ if (!memcmp(mcast->mcmember.mgid.raw, if_getbroadcastaddr(dev) + 4,
sizeof (union ib_gid))) {
spin_lock_irq(&priv->lock);
if (!priv->broadcast) {
@@ -236,7 +236,7 @@
_IF_DEQUEUE(&mcast->pkt_queue, mb);
mb->m_pkthdr.rcvif = dev;
- if (dev->if_transmit(dev, mb))
+ if (if_transmit(dev, mb))
ipoib_warn(priv, "dev_queue_xmit failed to requeue packet\n");
}
@@ -474,7 +474,7 @@
{
struct ipoib_dev_priv *priv =
container_of(work, struct ipoib_dev_priv, mcast_task.work);
- struct ifnet *dev = priv->dev;
+ if_t dev = priv->dev;
struct ib_port_attr attr;
ipoib_dbg_mcast(priv, "Running join task. flags 0x%lX\n", priv->flags);
@@ -492,7 +492,7 @@
if (ib_query_gid(priv->ca, priv->port, 0, &priv->local_gid, NULL))
ipoib_warn(priv, "ib_query_gid() failed\n");
else
- memcpy(IF_LLADDR(dev) + 4, priv->local_gid.raw, sizeof (union ib_gid));
+ memcpy(if_getlladdr(dev) + 4, priv->local_gid.raw, sizeof (union ib_gid));
{
struct ib_port_attr attr;
@@ -521,7 +521,7 @@
}
spin_lock_irq(&priv->lock);
- memcpy(broadcast->mcmember.mgid.raw, dev->if_broadcastaddr + 4,
+ memcpy(broadcast->mcmember.mgid.raw, if_getbroadcastaddr(dev) + 4,
sizeof (union ib_gid));
priv->broadcast = broadcast;
@@ -629,7 +629,7 @@
void
ipoib_mcast_send(struct ipoib_dev_priv *priv, void *mgid, struct mbuf *mb)
{
- struct ifnet *dev = priv->dev;
+ if_t dev = priv->dev;
struct ipoib_mcast *mcast;
if (!test_bit(IPOIB_FLAG_OPER_UP, &priv->flags) ||
@@ -757,7 +757,7 @@
addr = LLADDR(sdl);
addrlen = sdl->sdl_alen;
if (!ipoib_mcast_addr_is_valid(addr, addrlen,
- priv->dev->if_broadcastaddr))
+ if_getbroadcastaddr(priv->dev)))
return (0);
memcpy(mgid.raw, addr + 4, sizeof mgid);
@@ -811,7 +811,7 @@
{
struct ipoib_mcast_ctx ctx = { priv,
{ &ctx.remove_list, &ctx.remove_list }};
- struct ifnet *dev = priv->dev;
+ if_t dev = priv->dev;
struct ipoib_mcast *mcast, *tmcast;
ipoib_dbg_mcast(priv, "restarting multicast task flags 0x%lX\n",
diff --git a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_verbs.c b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
--- a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
+++ b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_verbs.c
@@ -143,6 +143,7 @@
.qp_type = IB_QPT_UD
};
struct ib_cq_init_attr cq_attr = {};
+ caddr_t lla;
int ret, size;
int i;
@@ -212,9 +213,10 @@
goto out_free_send_cq;
}
- IF_LLADDR(priv->dev)[1] = (priv->qp->qp_num >> 16) & 0xff;
- IF_LLADDR(priv->dev)[2] = (priv->qp->qp_num >> 8) & 0xff;
- IF_LLADDR(priv->dev)[3] = (priv->qp->qp_num ) & 0xff;
+ lla = if_getlladdr(priv->dev);
+ lla[1] = (priv->qp->qp_num >> 16) & 0xff;
+ lla[2] = (priv->qp->qp_num >> 8) & 0xff;
+ lla[3] = (priv->qp->qp_num ) & 0xff;
for (i = 0; i < IPOIB_MAX_TX_SG; ++i)
priv->tx_sge[i].lkey = priv->pd->local_dma_lkey;
diff --git a/sys/ofed/include/rdma/ib_addr.h b/sys/ofed/include/rdma/ib_addr.h
--- a/sys/ofed/include/rdma/ib_addr.h
+++ b/sys/ofed/include/rdma/ib_addr.h
@@ -54,7 +54,7 @@
/* Linux netdevice.h but for working on an ifnet rather than a net_device. */
#define dev_hold(d) if_ref(d)
#define dev_put(d) if_rele(d)
-#define dev_net(d) ((d)->if_vnet)
+#define dev_net(d) if_getvnet(d)
#define net_eq(a,b) ((a) == (b))
@@ -176,11 +176,11 @@
return dev_addr->dev_type == ARPHRD_INFINIBAND ? 4 : 0;
}
-static inline u16 rdma_vlan_dev_vlan_id(const struct ifnet *dev)
+static inline u16 rdma_vlan_dev_vlan_id(if_t dev)
{
uint16_t tag;
- if (dev->if_type == IFT_ETHER && dev->if_pcp != IFNET_PCP_NONE)
+ if (if_gettype(dev) != IFT_ETHER || if_getpcp(dev) == IFNET_PCP_NONE)
return 0x0000; /* prio-tagged traffic */
if (VLAN_TAG(__DECONST(struct ifnet *, dev), &tag) != 0)
return 0xffff;
@@ -228,11 +228,19 @@
}
}
+static u_int
+_iboe_addr_get_sgid_ia_cb(void *arg, struct ifaddr *ifa, u_int count __unused)
+{
+ ipv6_addr_set_v4mapped(((struct sockaddr_in *)
+ ifa->ifa_addr)->sin_addr.s_addr,
+ (struct in6_addr *)arg);
+ return (0);
+}
+
static inline void iboe_addr_get_sgid(struct rdma_dev_addr *dev_addr,
union ib_gid *gid)
{
struct ifnet *dev;
- struct ifaddr *ifa;
#ifdef VIMAGE
if (dev_addr->net == NULL)
@@ -240,15 +248,8 @@
#endif
dev = dev_get_by_index(dev_addr->net, dev_addr->bound_dev_if);
if (dev) {
- CK_STAILQ_FOREACH(ifa, &dev->if_addrhead, ifa_link) {
- if (ifa->ifa_addr == NULL ||
- ifa->ifa_addr->sa_family != AF_INET)
- continue;
- ipv6_addr_set_v4mapped(((struct sockaddr_in *)
- ifa->ifa_addr)->sin_addr.s_addr,
- (struct in6_addr *)gid);
- break;
- }
+ if_foreach_addr_type(dev, AF_INET,
+ _iboe_addr_get_sgid_ia_cb, gid);
dev_put(dev);
}
}
@@ -302,7 +303,7 @@
static inline int iboe_get_rate(struct ifnet *dev)
{
- uint64_t baudrate = dev->if_baudrate;
+ uint64_t baudrate = if_getbaudrate(dev);
#ifdef if_baudrate_pf
int exp;
for (exp = dev->if_baudrate_pf; exp > 0; exp--)
@@ -370,7 +371,7 @@
struct epoch_tracker et;
NET_EPOCH_ENTER(et);
- if (dev->if_type != IFT_ETHER || dev->if_pcp == IFNET_PCP_NONE)
+ if (if_gettype(dev) != IFT_ETHER || if_getpcp(dev) == IFNET_PCP_NONE)
dev = VLAN_TRUNKDEV(dev); /* non prio-tagged traffic */
NET_EPOCH_EXIT(et);
return (dev);

File Metadata

Mime Type
text/plain
Expires
Sun, Jul 19, 2:40 AM (5 h, 5 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35215640
Default Alt Text
D38560.id117111.diff (53 KB)

Event Timeline