HEADS UP - DEVFS ON MASTER

YONETANI Tomokazu qhwt+dfly at les.ath.cx
Wed Aug 5 03:35:21 PDT 2009


Hi.
Is there any policy on how device major/minor numbers are determined?
I haven't gone through the devfs change, but `ls -l /dev' looks
a bit weird :), in that most of device nodes have either 0 or 2 as
their major number, and the minor number are rather high.

I noticed that while I was trying to fix tap and vke.  Somehow
make_dev() seems to ignore the minor passed as its second argument.

diff --git a/sys/net/tap/if_tap.c b/sys/net/tap/if_tap.c
index 1e49439..3cacea9 100644
--- a/sys/net/tap/if_tap.c
+++ b/sys/net/tap/if_tap.c
@@ -211,7 +211,6 @@ tapmodevent(module_t mod, int type, void *data)
 static cdev_t
 tapcreate(int unit)
 {
-	cdev_t		dev = NULL;
 	struct ifnet		*ifp = NULL;
 	struct tap_softc	*tp = NULL;
 	uint8_t			ether_addr[ETHER_ADDR_LEN];
@@ -235,9 +234,9 @@ tapcreate(int unit)
 	}
 #endif
 
-	tp->tap_dev = make_dev(&tap_ops, minor(dev), UID_ROOT, GID_WHEEL, 
+	tp->tap_dev = make_dev(&tap_ops, unit, UID_ROOT, GID_WHEEL,
 						0600, "%s%d", name, unit);
-	tp->tap_dev->si_drv1 = dev->si_drv1 = tp;
+	tp->tap_dev->si_drv1 = tp;
 	reference_dev(tp->tap_dev);	/* so we can destroy it later */
 
 	/* generate fake MAC address: 00 bd xx xx xx unit_no */
@@ -270,7 +269,7 @@ tapcreate(int unit)
 	SLIST_INSERT_HEAD(&tap_listhead, tp, tap_link);
 
 	TAPDEBUG(ifp, "created. minor = %#x\n", minor(tp->tap_dev));
-	return dev;
+	return tp->tap_dev;
 } /* tapcreate */
 
 /*
diff --git a/sys/platform/vkernel/platform/init.c b/sys/platform/vkernel/platform/init.c
index 2d3fd72..7caaf5b 100644
--- a/sys/platform/vkernel/platform/init.c
+++ b/sys/platform/vkernel/platform/init.c
@@ -955,9 +955,7 @@ netif_open_tap(const char *netif, int *tap_unit, int s)
 	 */
 	failed = 1;
 	if (fstat(tap_fd, &st) == 0 && S_ISCHR(st.st_mode) &&
-	    TAPDEV_MAJOR(st.st_rdev) == TAP_CDEV_MAJOR) {
-		*tap_unit = TAPDEV_MINOR(st.st_rdev);
-
+	    sscanf(tap_dev, "/dev/tap%d", tap_unit) == 1) {
 		/*
 		 * Bring up the corresponding tap(4) interface
 		 */





More information about the Kernel mailing list