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]"

Reply via email to