Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F102132347
D38560.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
69 KB
Referenced Files
None
Subscribers
None
D38560.diff
View Options
diff --git a/sys/ofed/drivers/infiniband/core/core_priv.h b/sys/ofed/drivers/infiniband/core/core_priv.h
--- a/sys/ofed/drivers/infiniband/core/core_priv.h
+++ b/sys/ofed/drivers/infiniband/core/core_priv.h
@@ -82,10 +82,10 @@
void ib_cache_cleanup(void);
typedef void (*roce_netdev_callback)(struct ib_device *device, u8 port,
- struct ifnet *idev, void *cookie);
+ if_t idev, void *cookie);
typedef int (*roce_netdev_filter)(struct ib_device *device, u8 port,
- struct ifnet *idev, void *cookie);
+ if_t idev, void *cookie);
void ib_enum_roce_netdev(struct ib_device *ib_dev,
roce_netdev_filter filter,
@@ -107,7 +107,7 @@
const char *ib_cache_gid_type_str(enum ib_gid_type gid_type);
void ib_cache_gid_set_default_gid(struct ib_device *ib_dev, u8 port,
- struct ifnet *ndev,
+ if_t ndev,
unsigned long gid_type_mask,
enum ib_cache_gid_default_mode mode);
@@ -118,8 +118,8 @@
union ib_gid *gid, struct ib_gid_attr *attr);
int ib_cache_gid_del_all_netdev_gids(struct ib_device *ib_dev, u8 port,
- struct ifnet *ndev);
-void ib_cache_gid_del_all_by_netdev(struct ifnet *ndev);
+ if_t ndev);
+void ib_cache_gid_del_all_by_netdev(if_t ndev);
int roce_gid_mgmt_init(void);
void roce_gid_mgmt_cleanup(void);
diff --git a/sys/ofed/drivers/infiniband/core/ib_addr.c b/sys/ofed/drivers/infiniband/core/ib_addr.c
--- 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
@@ -503,7 +503,7 @@
unsigned long flags;
int ret;
u8 p;
- struct ifnet *ndev = ib_get_ndev_from_path(path);
+ if_t ndev = ib_get_ndev_from_path(path);
read_lock_irqsave(&cm.device_lock, flags);
list_for_each_entry(cm_dev, &cm.device_list, list) {
@@ -1819,7 +1819,7 @@
&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
@@ -732,12 +732,12 @@
for (port = rdma_start_port(ib_dev); port <= rdma_end_port(ib_dev);
port++)
if (rdma_protocol_roce(ib_dev, port)) {
- struct ifnet *idev = NULL;
+ if_t idev = NULL;
if (ib_dev->get_netdev)
idev = ib_dev->get_netdev(ib_dev, port);
- if (idev && (idev->if_flags & IFF_DYING)) {
+ if (idev && (if_getflags(idev) & IFF_DYING)) {
dev_put(idev);
idev = NULL;
}
@@ -779,7 +779,7 @@
*
* @ndev: Pointer to netdevice
*/
-void ib_cache_gid_del_all_by_netdev(struct ifnet *ndev)
+void ib_cache_gid_del_all_by_netdev(if_t ndev)
{
struct ib_device *ib_dev;
u8 port;
@@ -875,7 +875,7 @@
* parameter may be NULL.
*/
int ib_find_gid(struct ib_device *device, union ib_gid *gid,
- enum ib_gid_type gid_type, struct ifnet *ndev,
+ enum ib_gid_type gid_type, if_t ndev,
u8 *port_num, u16 *index)
{
union ib_gid tmp_gid;
@@ -959,13 +959,13 @@
* @addr: Contains the IP address that the request specified as its
* destination.
*/
-struct ifnet *ib_get_net_dev_by_params(struct ib_device *dev,
+if_t ib_get_net_dev_by_params(struct ib_device *dev,
u8 port,
u16 pkey,
const union ib_gid *gid,
const struct sockaddr *addr)
{
- struct ifnet *net_dev = NULL;
+ if_t net_dev = NULL;
struct ib_client_data *context;
if (!rdma_protocol_ib(dev, port))
diff --git a/sys/ofed/drivers/infiniband/core/ib_multicast.c b/sys/ofed/drivers/infiniband/core/ib_multicast.c
--- a/sys/ofed/drivers/infiniband/core/ib_multicast.c
+++ b/sys/ofed/drivers/infiniband/core/ib_multicast.c
@@ -723,7 +723,7 @@
int ib_init_ah_from_mcmember(struct ib_device *device, u8 port_num,
struct ib_sa_mcmember_rec *rec,
- struct ifnet *ndev,
+ if_t ndev,
enum ib_gid_type gid_type,
struct ib_ah_attr *ah_attr)
{
diff --git a/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c b/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c
--- a/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c
+++ b/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c
@@ -56,7 +56,7 @@
struct roce_netdev_event_work {
struct work_struct work;
- struct ifnet *ndev;
+ if_t ndev;
};
struct roce_rescan_work {
@@ -91,7 +91,7 @@
EXPORT_SYMBOL(roce_gid_type_mask_support);
static void update_gid(enum gid_op_type gid_op, struct ib_device *ib_dev,
- u8 port, union ib_gid *gid, struct ifnet *ndev)
+ u8 port, union ib_gid *gid, if_t ndev)
{
int i;
unsigned long gid_type_mask = roce_gid_type_mask_support(ib_dev, port);
@@ -119,9 +119,9 @@
static int
roce_gid_match_netdev(struct ib_device *ib_dev, u8 port,
- struct ifnet *idev, void *cookie)
+ if_t idev, void *cookie)
{
- struct ifnet *ndev = (struct ifnet *)cookie;
+ if_t ndev = (if_t )cookie;
if (idev == NULL)
return (0);
return (ndev == idev);
@@ -129,7 +129,7 @@
static int
roce_gid_match_all(struct ib_device *ib_dev, u8 port,
- struct ifnet *idev, void *cookie)
+ if_t idev, void *cookie)
{
if (idev == NULL)
return (0);
@@ -138,7 +138,7 @@
static int
roce_gid_enum_netdev_default(struct ib_device *ib_dev,
- u8 port, struct ifnet *idev)
+ u8 port, if_t idev)
{
unsigned long gid_type_mask;
@@ -150,32 +150,81 @@
return (hweight_long(gid_type_mask));
}
+struct ipx_entry {
+ STAILQ_ENTRY(ipx_entry) entry;
+ union ipx_addr {
+ struct sockaddr sa[0];
+ struct sockaddr_in v4;
+ struct sockaddr_in6 v6;
+ } ipx_addr;
+ if_t ndev;
+};
+
+STAILQ_HEAD(ipx_queue, ipx_entry);
+
+#ifdef INET
+static u_int
+roce_gid_update_addr_ifa4_cb(void *arg, struct ifaddr *ifa, u_int count)
+{
+ struct ipx_queue *ipx_head = arg;
+ struct ipx_entry *entry;
+
+ entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+ if (entry == NULL) {
+ pr_warn("roce_gid_update_addr_callback: "
+ "couldn't allocate entry for IPv4 update\n");
+ return (0);
+ }
+ entry->ipx_addr.v4 = *((struct sockaddr_in *)ifa->ifa_addr);
+ entry->ndev = ifa->ifa_ifp;
+ STAILQ_INSERT_TAIL(ipx_head, entry, entry);
+
+ return (1);
+}
+#endif
+
+#ifdef INET6
+static u_int
+roce_gid_update_addr_ifa6_cb(void *arg, struct ifaddr *ifa, u_int count)
+{
+ struct ipx_queue *ipx_head = arg;
+ struct ipx_entry *entry;
+
+ entry = kzalloc(sizeof(*entry), GFP_ATOMIC);
+ if (entry == NULL) {
+ pr_warn("roce_gid_update_addr_callback: "
+ "couldn't allocate entry for IPv6 update\n");
+ return (0);
+ }
+ entry->ipx_addr.v6 = *((struct sockaddr_in6 *)ifa->ifa_addr);
+ entry->ndev = ifa->ifa_ifp;
+
+ /* trash IPv6 scope ID */
+ sa6_recoverscope(&entry->ipx_addr.v6);
+ entry->ipx_addr.v6.sin6_scope_id = 0;
+
+ STAILQ_INSERT_TAIL(ipx_head, entry, entry);
+
+ return (1);
+}
+#endif
+
static void
roce_gid_update_addr_callback(struct ib_device *device, u8 port,
- struct ifnet *ndev, void *cookie)
+ if_t ndev, void *cookie)
{
- struct ipx_entry {
- STAILQ_ENTRY(ipx_entry) entry;
- union ipx_addr {
- struct sockaddr sa[0];
- struct sockaddr_in v4;
- struct sockaddr_in6 v6;
- } ipx_addr;
- struct ifnet *ndev;
- };
+ struct epoch_tracker et;
+ struct if_iter iter;
struct ipx_entry *entry;
- struct ifnet *idev;
-#if defined(INET) || defined(INET6)
- struct ifaddr *ifa;
-#endif
VNET_ITERATOR_DECL(vnet_iter);
struct ib_gid_attr gid_attr;
union ib_gid gid;
+ if_t ifp;
int default_gids;
u16 index_num;
int i;
- STAILQ_HEAD(, ipx_entry) ipx_head;
+ struct ipx_queue ipx_head;
STAILQ_INIT(&ipx_head);
@@ -185,59 +234,24 @@
VNET_LIST_RLOCK();
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)
+ NET_EPOCH_ENTER(et);
+ for (ifp = if_iter_start(&iter); ifp != NULL; ifp = if_iter_next(&iter)) {
+ if (ifp != ndev) {
+ if (if_gettype(ifp) != IFT_L2VLAN)
continue;
- if (ndev != rdma_vlan_dev_real_dev(idev))
+ if (ifp != rdma_vlan_dev_real_dev(ifp))
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);
- }
+ if_foreach_addr_type(ifp, AF_INET, roce_gid_update_addr_ifa4_cb, &ipx_head);
#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);
- }
+ if_foreach_addr_type(ifp, AF_INET6, roce_gid_update_addr_ifa6_cb, &ipx_head);
#endif
- NET_EPOCH_EXIT(et);
}
- IFNET_RUNLOCK();
+ NET_EPOCH_EXIT(et);
CURVNET_RESTORE();
}
VNET_LIST_RUNLOCK();
@@ -315,12 +329,12 @@
}
static void
-roce_gid_queue_scan_event(struct ifnet *ndev)
+roce_gid_queue_scan_event(if_t ndev)
{
struct roce_netdev_event_work *work;
retry:
- switch (ndev->if_type) {
+ switch (if_gettype(ndev)) {
case IFT_ETHER:
break;
case IFT_L2VLAN:
@@ -358,7 +372,7 @@
}
static void
-roce_gid_delete_all_event(struct ifnet *ndev)
+roce_gid_delete_all_event(if_t ndev)
{
struct roce_netdev_event_work *work;
@@ -380,7 +394,7 @@
static int
inetaddr_event(struct notifier_block *this, unsigned long event, void *ptr)
{
- struct ifnet *ndev = netdev_notifier_info_to_ifp(ptr);
+ if_t ndev = netdev_notifier_info_to_ifp(ptr);
switch (event) {
case NETDEV_UNREGISTER:
@@ -404,7 +418,7 @@
static eventhandler_tag eh_ifnet_event;
static void
-roce_ifnet_event(void *arg, struct ifnet *ifp, int event)
+roce_ifnet_event(void *arg, if_t ifp, int event)
{
if (event != IFNET_EVENT_PCP || is_vlan_dev(ifp))
return;
diff --git a/sys/ofed/drivers/infiniband/core/ib_sa_query.c b/sys/ofed/drivers/infiniband/core/ib_sa_query.c
--- a/sys/ofed/drivers/infiniband/core/ib_sa_query.c
+++ b/sys/ofed/drivers/infiniband/core/ib_sa_query.c
@@ -652,7 +652,7 @@
int ret;
u16 gid_index;
int use_roce;
- struct ifnet *ndev = NULL;
+ if_t ndev = NULL;
memset(ah_attr, 0, sizeof *ah_attr);
ah_attr->dlid = be16_to_cpu(rec->dlid);
@@ -665,8 +665,8 @@
use_roce = rdma_cap_eth_ah(device, port_num);
if (use_roce) {
- struct ifnet *idev;
- struct ifnet *resolved_dev;
+ if_t idev;
+ if_t resolved_dev;
struct rdma_dev_addr dev_addr = {.bound_dev_if = rec->ifindex,
.net = rec->net ? rec->net :
&init_net};
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
@@ -480,7 +480,7 @@
struct ipoib_cm_rx_buf saverx;
struct ipoib_cm_rx_buf *rx_ring;
unsigned int wr_id = wc->wr_id & ~(IPOIB_OP_CM | IPOIB_OP_RECV);
- struct ifnet *dev = priv->dev;
+ if_t dev = priv->dev;
struct mbuf *mb, *newmb;
struct ipoib_cm_rx *p;
int has_srq;
@@ -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);
}
@@ -620,7 +620,7 @@
void ipoib_cm_send(struct ipoib_dev_priv *priv, struct mbuf *mb, struct ipoib_cm_tx *tx)
{
struct ipoib_cm_tx_buf *tx_req;
- struct ifnet *dev = priv->dev;
+ if_t dev = priv->dev;
if (unlikely(priv->tx_outstanding > MAX_SEND_CQE)) {
while (ipoib_poll_tx(priv, false))
@@ -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);
}
}
@@ -680,7 +680,7 @@
{
struct ipoib_cm_tx *tx = wc->qp->qp_context;
unsigned int wr_id = wc->wr_id & ~IPOIB_OP_CM;
- struct ifnet *dev = priv->dev;
+ if_t dev = priv->dev;
struct ipoib_cm_tx_buf *tx_req;
ipoib_dbg_data(priv, "cm send completion: id %d, status: %d\n",
@@ -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);
@@ -905,12 +905,12 @@
NET_EPOCH_ENTER(et);
for (;;) {
- struct ifnet *dev = p->priv->dev;
+ if_t dev = p->priv->dev;
_IF_DEQUEUE(&mbqueue, mb);
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");
}
@@ -1064,7 +1064,7 @@
static void ipoib_cm_tx_destroy(struct ipoib_cm_tx *p)
{
struct ipoib_dev_priv *priv = p->priv;
- struct ifnet *dev = priv->dev;
+ if_t dev = priv->dev;
struct ipoib_cm_tx_buf *tx_req;
unsigned long begin;
@@ -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);
@@ -1383,7 +1383,7 @@
int ipoib_cm_dev_init(struct ipoib_dev_priv *priv)
{
- struct ifnet *dev = priv->dev;
+ if_t dev = priv->dev;
int i;
int max_srq_sge;
@@ -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_ethtool.c b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ethtool.c
--- a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ethtool.c
+++ b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ethtool.c
@@ -40,20 +40,20 @@
#include "ipoib.h"
-static void ipoib_get_drvinfo(struct ifnet *netdev,
+static void ipoib_get_drvinfo(if_t netdev,
struct ethtool_drvinfo *drvinfo)
{
strncpy(drvinfo->driver, "ipoib", sizeof(drvinfo->driver) - 1);
}
-static u32 ipoib_get_rx_csum(struct ifnet *dev)
+static u32 ipoib_get_rx_csum(if_t dev)
{
struct ipoib_dev_priv *priv = dev->if_softc;
return test_bit(IPOIB_FLAG_CSUM, &priv->flags) &&
!test_bit(IPOIB_FLAG_ADMIN_CM, &priv->flags);
}
-static int ipoib_get_coalesce(struct ifnet *dev,
+static int ipoib_get_coalesce(if_t dev,
struct ethtool_coalesce *coal)
{
struct ipoib_dev_priv *priv = dev->if_softc;
@@ -66,7 +66,7 @@
return 0;
}
-static int ipoib_set_coalesce(struct ifnet *dev,
+static int ipoib_set_coalesce(if_t dev,
struct ethtool_coalesce *coal)
{
struct ipoib_dev_priv *priv = dev->if_softc;
@@ -109,7 +109,7 @@
"LRO avg aggr", "LRO no desc"
};
-static void ipoib_get_strings(struct ifnet *netdev, u32 stringset, u8 *data)
+static void ipoib_get_strings(if_t netdev, u32 stringset, u8 *data)
{
switch (stringset) {
case ETH_SS_STATS:
@@ -118,7 +118,7 @@
}
}
-static int ipoib_get_sset_count(struct ifnet *dev, int sset)
+static int ipoib_get_sset_count(if_t dev, int sset)
{
switch (sset) {
case ETH_SS_STATS:
@@ -128,7 +128,7 @@
}
}
-static void ipoib_get_ethtool_stats(struct ifnet *dev,
+static void ipoib_get_ethtool_stats(if_t dev,
struct ethtool_stats *stats, uint64_t *data)
{
struct ipoib_dev_priv *priv = dev->if_softc;
@@ -157,7 +157,7 @@
.get_ethtool_stats = ipoib_get_ethtool_stats,
};
-void ipoib_set_ethtool_ops(struct ifnet *dev)
+void ipoib_set_ethtool_ops(if_t dev)
{
SET_ETHTOOL_OPS(dev, &ipoib_ethtool_ops);
}
diff --git a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_fs.c b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_fs.c
--- a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_fs.c
+++ b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_fs.c
@@ -263,7 +263,7 @@
.release = seq_release
};
-void ipoib_create_debug_files(struct ifnet *dev)
+void ipoib_create_debug_files(if_t dev)
{
struct ipoib_dev_priv *priv = dev->if_softc;
char name[IFNAMSIZ + sizeof "_path"];
@@ -281,7 +281,7 @@
ipoib_warn(priv, "failed to create path debug file\n");
}
-void ipoib_delete_debug_files(struct ifnet *dev)
+void ipoib_delete_debug_files(if_t dev)
{
struct ipoib_dev_priv *priv = dev->if_softc;
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
@@ -203,7 +203,7 @@
{
struct ipoib_rx_buf saverx;
unsigned int wr_id = wc->wr_id & ~IPOIB_OP_RECV;
- struct ifnet *dev = priv->dev;
+ if_t dev = priv->dev;
struct ipoib_header *eh;
struct mbuf *mb;
@@ -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)))
@@ -334,7 +334,7 @@
static void ipoib_ib_handle_tx_wc(struct ipoib_dev_priv *priv, struct ib_wc *wc)
{
- struct ifnet *dev = priv->dev;
+ if_t dev = priv->dev;
unsigned int wr_id = wc->wr_id;
struct ipoib_tx_buf *tx_req;
@@ -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)
@@ -428,13 +428,13 @@
static void drain_tx_cq(struct ipoib_dev_priv *priv)
{
- struct ifnet *dev = priv->dev;
+ if_t dev = priv->dev;
spin_lock(&priv->lock);
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);
@@ -482,7 +482,7 @@
ipoib_send(struct ipoib_dev_priv *priv, struct mbuf *mb,
struct ipoib_ah *address, u32 qpn)
{
- struct ifnet *dev = priv->dev;
+ if_t dev = priv->dev;
struct ipoib_tx_buf *tx_req;
int hlen;
void *phead;
@@ -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;
@@ -856,7 +856,7 @@
int ipoib_ib_dev_init(struct ipoib_dev_priv *priv, struct ib_device *ca, int port)
{
- struct ifnet *dev = priv->dev;
+ if_t dev = priv->dev;
priv->ca = ca;
priv->port = port;
@@ -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->dev, 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/drivers/infiniband/ulp/ipoib/ipoib_vlan.c b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
--- a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
+++ b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
@@ -48,14 +48,14 @@
static ssize_t show_parent(struct device *d, struct device_attribute *attr,
char *buf)
{
- struct ifnet *dev = to_net_dev(d);
+ if_t dev = to_net_dev(d);
struct ipoib_dev_priv *priv = dev->if_softc;
return sprintf(buf, "%s\n", priv->parent->name);
}
static DEVICE_ATTR(parent, S_IRUGO, show_parent, NULL);
-int ipoib_vlan_add(struct ifnet *pdev, unsigned short pkey)
+int ipoib_vlan_add(if_t pdev, unsigned short pkey)
{
struct ipoib_dev_priv *ppriv, *priv;
char intf_name[IFNAMSIZ];
@@ -107,7 +107,7 @@
priv->pkey = pkey;
- memcpy(IF_LLADDR(priv->dev), ppriv->dev->dev_addr, INFINIBAND_ALEN);
+ memcpy(if_getlladdr(priv->dev), ppriv->dev->dev_addr, INFINIBAND_ALEN);
priv->broadcastaddr[8] = pkey >> 8;
priv->broadcastaddr[9] = pkey & 0xff;
@@ -162,10 +162,10 @@
return result;
}
-int ipoib_vlan_delete(struct ifnet *pdev, unsigned short pkey)
+int ipoib_vlan_delete(if_t pdev, unsigned short pkey)
{
struct ipoib_dev_priv *ppriv, *priv, *tpriv;
- struct ifnet *dev = NULL;
+ if_t dev = NULL;
if (!capable(CAP_NET_ADMIN))
return -EPERM;
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))
@@ -142,7 +142,7 @@
void rdma_addr_cancel(struct rdma_dev_addr *addr);
-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 rdma_addr_size(struct sockaddr *addr);
@@ -151,7 +151,7 @@
int rdma_addr_find_l2_eth_by_grh(const union ib_gid *sgid,
const union ib_gid *dgid,
- u8 *smac, struct ifnet *dev,
+ u8 *smac, if_t dev,
int *hoplimit);
static inline u16 ib_addr_get_pkey(struct rdma_dev_addr *dev_addr)
@@ -176,13 +176,13 @@
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)
+ if (VLAN_TAG(__DECONST(if_t, dev), &tag) != 0)
return 0xffff;
return tag;
}
@@ -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;
+ if_t dev;
#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);
}
}
@@ -300,9 +301,9 @@
return 0;
}
-static inline int iboe_get_rate(struct ifnet *dev)
+static inline int iboe_get_rate(if_t 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--)
@@ -365,12 +366,12 @@
return vid < 0x1000 ? vid : 0xffff;
}
-static inline struct ifnet *rdma_vlan_dev_real_dev(struct ifnet *dev)
+static inline if_t rdma_vlan_dev_real_dev(if_t dev)
{
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);
diff --git a/sys/ofed/include/rdma/ib_addr_freebsd.h b/sys/ofed/include/rdma/ib_addr_freebsd.h
--- a/sys/ofed/include/rdma/ib_addr_freebsd.h
+++ b/sys/ofed/include/rdma/ib_addr_freebsd.h
@@ -32,13 +32,13 @@
#define _RDMA_IB_ADDR_FREEBSD_H
#ifdef INET
-static inline struct ifnet *
+static inline if_t
ip_ifp_find(struct vnet *vnet, uint32_t addr)
{
struct sockaddr_in sin;
struct epoch_tracker et;
struct ifaddr *ifa;
- struct ifnet *ifp;
+ if_t ifp;
memset(&sin, 0, sizeof(sin));
sin.sin_addr.s_addr = addr;
@@ -60,13 +60,13 @@
#endif
#ifdef INET6
-static inline struct ifnet *
+static inline if_t
ip6_ifp_find(struct vnet *vnet, struct in6_addr addr, uint16_t scope_id)
{
struct sockaddr_in6 sin6;
struct epoch_tracker et;
struct ifaddr *ifa;
- struct ifnet *ifp;
+ if_t ifp;
memset(&sin6, 0, sizeof(sin6));
sin6.sin6_addr = addr;
@@ -92,11 +92,11 @@
}
#endif
-static inline struct ifnet *
+static inline if_t
dev_get_by_index(struct vnet *vnet, int if_index)
{
struct epoch_tracker et;
- struct ifnet *retval;
+ if_t retval;
NET_EPOCH_ENTER(et);
CURVNET_SET(vnet);
diff --git a/sys/ofed/include/rdma/ib_cache.h b/sys/ofed/include/rdma/ib_cache.h
--- a/sys/ofed/include/rdma/ib_cache.h
+++ b/sys/ofed/include/rdma/ib_cache.h
@@ -76,7 +76,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);
@@ -99,7 +99,7 @@
const union ib_gid *gid,
enum ib_gid_type gid_type,
u8 port_num,
- struct ifnet *ndev,
+ if_t ndev,
u16 *index);
int ib_find_gid_by_filter(struct ib_device *device,
diff --git a/sys/ofed/include/rdma/ib_sa.h b/sys/ofed/include/rdma/ib_sa.h
--- a/sys/ofed/include/rdma/ib_sa.h
+++ b/sys/ofed/include/rdma/ib_sa.h
@@ -181,7 +181,7 @@
enum ib_gid_type gid_type;
};
-static inline struct ifnet *ib_get_ndev_from_path(struct ib_sa_path_rec *rec)
+static inline if_t ib_get_ndev_from_path(struct ib_sa_path_rec *rec)
{
#ifdef VIMAGE
if (rec->net == NULL)
@@ -425,7 +425,7 @@
*/
int ib_init_ah_from_mcmember(struct ib_device *device, u8 port_num,
struct ib_sa_mcmember_rec *rec,
- struct ifnet *ndev,
+ if_t ndev,
enum ib_gid_type gid_type,
struct ib_ah_attr *ah_attr);
diff --git a/sys/ofed/include/rdma/ib_verbs.h b/sys/ofed/include/rdma/ib_verbs.h
--- a/sys/ofed/include/rdma/ib_verbs.h
+++ b/sys/ofed/include/rdma/ib_verbs.h
@@ -106,7 +106,7 @@
#define ROCE_V2_UDP_DPORT 4791
struct ib_gid_attr {
enum ib_gid_type gid_type;
- struct ifnet *ndev;
+ if_t ndev;
};
enum rdma_node_type {
@@ -2165,7 +2165,7 @@
* that this function returns NULL before the net device reaches
* NETDEV_UNREGISTER_FINAL state.
*/
- struct ifnet *(*get_netdev)(struct ib_device *device,
+ if_t (*get_netdev)(struct ib_device *device,
u8 port_num);
int (*query_gid)(struct ib_device *device,
u8 port_num, int index,
@@ -2443,7 +2443,7 @@
*
* The caller is responsible for calling dev_put on the returned
* netdev. */
- struct ifnet *(*get_net_dev_by_params)(
+ if_t (*get_net_dev_by_params)(
struct ib_device *dev,
u8 port,
u16 pkey,
@@ -2931,7 +2931,7 @@
struct ib_port_modify *port_modify);
int ib_find_gid(struct ib_device *device, union ib_gid *gid,
- enum ib_gid_type gid_type, struct ifnet *ndev,
+ enum ib_gid_type gid_type, if_t ndev,
u8 *port_num, u16 *index);
int ib_find_pkey(struct ib_device *device,
@@ -3918,7 +3918,7 @@
int ib_check_mr_status(struct ib_mr *mr, u32 check_mask,
struct ib_mr_status *mr_status);
-struct ifnet *ib_get_net_dev_by_params(struct ib_device *dev, u8 port,
+if_t ib_get_net_dev_by_params(struct ib_device *dev, u8 port,
u16 pkey, const union ib_gid *gid,
const struct sockaddr *addr);
struct ib_wq *ib_create_wq(struct ib_pd *pd,
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Nov 9, 12:36 AM (21 h, 30 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14546546
Default Alt Text
D38560.diff (69 KB)
Attached To
Mode
D38560: ofed: Mechanically convert to IfAPI
Attached
Detach File
Event Timeline
Log In to Comment