ifconfig patch
Andrew Thompson
thompsa at FreeBSD.org
Thu Sep 20 16:54:30 PDT 2007
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
-------------- next part --------------
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;
}
}
More information about the freebsd-net
mailing list