Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F162895732
D38560.id117111.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
53 KB
Referenced Files
None
Subscribers
None
D38560.id117111.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D38560: ofed: Mechanically convert to IfAPI
Attached
Detach File
Event Timeline
Log In to Comment