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
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; } }
_______________________________________________ freebsd-net@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "[EMAIL PROTECTED]"