Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 21 Sep 2007 11:54:27 +1200
From:      Andrew Thompson <thompsa@FreeBSD.org>
To:        FreeBSD-net <freebsd-net@freebsd.org>
Subject:   ifconfig patch
Message-ID:  <20070920235427.GA46172@heff.fud.org.nz>

next in thread | raw e-mail | index | archive | help

--fdj2RfSjLxBAspz7
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hi,


I have been digging into why the edsc module wasnt being loaded by
ifconfig and now have a patch.

A few printfs showed the problem.

# ifconfig edsc0 create
ifmaybeload(edsc0)
trying to find if_edsc or edsc0
found @ ed

Its comparing using the string length of the module name so any partial
matches are going through. I have changed it so it strips the number
from the interface name and uses the full string to match.

I want to ask re@ soon so any feedback would be great.


Andrew

--fdj2RfSjLxBAspz7
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="ifconfig_kldload.diff"

Index: ifconfig.c
===================================================================
RCS file: /home/ncvs/src/sbin/ifconfig/ifconfig.c,v
retrieving revision 1.133
diff -u -p -r1.133 ifconfig.c
--- ifconfig.c	13 Jun 2007 18:07:59 -0000	1.133
+++ ifconfig.c	20 Sep 2007 23:47:28 -0000
@@ -897,7 +897,7 @@ ifmaybeload(const char *name)
 {
 	struct module_stat mstat;
 	int fileid, modid;
-	char ifkind[35], *dp;
+	char ifkind[35], ifname[32], *dp;
 	const char *cp;
 
 	/* loading suppressed by the user */
@@ -911,6 +911,12 @@ ifmaybeload(const char *name)
 		*dp = *cp;
 	*dp = 0;
 
+	/* trim the interface number off the end */
+	strcpy(ifname, name);
+	for (dp = ifname; *dp != 0; dp++)
+		if (isdigit(*dp))
+			*dp = '\0';
+
 	/* scan files in kernel */
 	mstat.version = sizeof(struct module_stat);
 	for (fileid = kldnext(0); fileid > 0; fileid = kldnext(fileid)) {
@@ -926,8 +932,8 @@ ifmaybeload(const char *name)
 				cp = mstat.name;
 			}
 			/* already loaded? */
-			if (strncmp(name, cp, strlen(cp)) == 0 ||
-			    strncmp(ifkind, cp, strlen(cp)) == 0)
+			if (strncmp(ifname, cp, strlen(ifname)) == 0 ||
+			    strncmp(ifkind, cp, strlen(ifkind)) == 0)
 				return;
 		}
 	}

--fdj2RfSjLxBAspz7--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070920235427.GA46172>