summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/dev/netmap/netmap.c25
1 files changed, 10 insertions, 15 deletions
diff --git a/sys/dev/netmap/netmap.c b/sys/dev/netmap/netmap.c
index 0fd362f..f37bf9e 100644
--- a/sys/dev/netmap/netmap.c
+++ b/sys/dev/netmap/netmap.c
@@ -2222,23 +2222,18 @@ netmap_ioctl(struct cdev *dev, u_long cmd, caddr_t data,
default: /* allow device-specific ioctls */
{
- struct socket so;
- struct ifnet *ifp;
+ struct ifnet *ifp = ifunit_ref(nmr->nr_name);
+ if (ifp == NULL) {
+ error = ENXIO;
+ } else {
+ struct socket so;
- bzero(&so, sizeof(so));
- NMG_LOCK();
- error = netmap_get_na(nmr, &na, 0 /* don't create */); /* keep reference */
- if (error) {
- netmap_adapter_put(na);
- NMG_UNLOCK();
- break;
+ bzero(&so, sizeof(so));
+ so.so_vnet = ifp->if_vnet;
+ // so->so_proto not null.
+ error = ifioctl(&so, cmd, data, td);
+ if_rele(ifp);
}
- ifp = na->ifp;
- so.so_vnet = ifp->if_vnet;
- // so->so_proto not null.
- error = ifioctl(&so, cmd, data, td);
- netmap_adapter_put(na);
- NMG_UNLOCK();
break;
}
OpenPOWER on IntegriCloud