Index: c/src/exec/libnetworking/rtems/rtems_bsdnet_internal.h
===================================================================
--- c/src/exec/libnetworking/rtems/rtems_bsdnet_internal.h	(revision ca3fec49827c4b1b4a33585579b65af4cffdb3c0)
+++ c/src/exec/libnetworking/rtems/rtems_bsdnet_internal.h	(revision b6f5f9385daf2d4b5a6272c5085c7e253f381aa9)
@@ -117,4 +117,5 @@
 struct	tty;
 struct	uio;
+struct	rtems_bsdnet_ifconfig;
 
 /*
@@ -131,4 +132,5 @@
 void rtems_bsdnet_semaphore_release (void);
 void rtems_bsdnet_schednetisr (int n);
+int rtems_bsdnet_parse_driver_name (const struct rtems_bsdnet_ifconfig *config, char **namep);
 
 unsigned long rtems_bsdnet_seconds_since_boot (void);
Index: c/src/exec/libnetworking/rtems/rtems_glue.c
===================================================================
--- c/src/exec/libnetworking/rtems/rtems_glue.c	(revision ca3fec49827c4b1b4a33585579b65af4cffdb3c0)
+++ c/src/exec/libnetworking/rtems/rtems_glue.c	(revision b6f5f9385daf2d4b5a6272c5085c7e253f381aa9)
@@ -883,2 +883,45 @@
 	return 0;
 }
+
+/*
+ * Parse a network driver name into a name and a unit number
+ */
+int
+rtems_bsdnet_parse_driver_name (const struct rtems_bsdnet_ifconfig *config, char **namep)
+{
+	const char *cp = config->name;
+	char c;
+	int unitNumber = 0;
+
+	if (cp == NULL) {
+		printf ("No network driver name");
+		return -1;
+	}
+	while ((c = *cp++) != '\0') {
+		if ((c >= '0') && (c <= '9')) {
+			int len = cp - config->name - 1;
+			if ((len < 2) || (len > 50))
+				break;
+			for (;;) {
+				unitNumber = (unitNumber * 10) + (c - '0');
+				c = *cp++;
+				if (c == '\0') {
+					char *unitName = malloc (len);
+					if (unitName == NULL) {
+						printf ("No memory");
+						return -1;
+					}
+					strncpy (unitName, config->name, len - 1);
+					unitName[len-1] = '\0';
+					*namep = unitName;
+					return unitNumber;
+				}
+				if ((c < '0') || (c > '9'))
+					break;
+			}
+			break;
+		}
+	}
+	printf ("Bad network driver name `%s'", config->name);
+	return -1;
+}
Index: c/src/lib/libbsp/m68k/gen68360/network/network.c
===================================================================
--- c/src/lib/libbsp/m68k/gen68360/network/network.c	(revision ca3fec49827c4b1b4a33585579b65af4cffdb3c0)
+++ c/src/lib/libbsp/m68k/gen68360/network/network.c	(revision b6f5f9385daf2d4b5a6272c5085c7e253f381aa9)
@@ -853,17 +853,24 @@
 	struct ifnet *ifp;
 	int mtu;
-	int i;
-
-	/*
-	 * Find a free driver
-	 */
-	for (i = 0 ; i < NSCCDRIVER ; i++) {
-		sc = &scc_softc[i];
-		ifp = &sc->arpcom.ac_if;
-		if (ifp->if_softc == NULL)
-			break;
-	}
-	if (i >= NSCCDRIVER) {
-		printf ("Too many SCC drivers.\n");
+	int unitNumber;
+	char *unitName;
+
+	/*
+ 	 * Parse driver name
+	 */
+	if ((unitNumber = rtems_bsdnet_parse_driver_name (config, &unitName)) < 0)
+		return 0;
+	
+	/*
+	 * Is driver free?
+	 */
+	if ((unitNumber <= 0) || (unitNumber > NSCCDRIVER)) {
+		printf ("Bad SCC unit number.\n");
+		return 0;
+	}
+	sc = &scc_softc[unitNumber - 1];
+	ifp = &sc->arpcom.ac_if;
+	if (ifp->if_softc != NULL) {
+		printf ("Driver already in use.\n");
 		return 0;
 	}
@@ -931,6 +938,6 @@
 	 */
 	ifp->if_softc = sc;
-	ifp->if_unit = i + 1;
-	ifp->if_name = "scc";
+	ifp->if_unit = unitNumber;
+	ifp->if_name = unitName;
 	ifp->if_mtu = mtu;
 	ifp->if_init = scc_init;
Index: c/src/lib/libnetworking/rtems/rtems_bsdnet_internal.h
===================================================================
--- c/src/lib/libnetworking/rtems/rtems_bsdnet_internal.h	(revision ca3fec49827c4b1b4a33585579b65af4cffdb3c0)
+++ c/src/lib/libnetworking/rtems/rtems_bsdnet_internal.h	(revision b6f5f9385daf2d4b5a6272c5085c7e253f381aa9)
@@ -117,4 +117,5 @@
 struct	tty;
 struct	uio;
+struct	rtems_bsdnet_ifconfig;
 
 /*
@@ -131,4 +132,5 @@
 void rtems_bsdnet_semaphore_release (void);
 void rtems_bsdnet_schednetisr (int n);
+int rtems_bsdnet_parse_driver_name (const struct rtems_bsdnet_ifconfig *config, char **namep);
 
 unsigned long rtems_bsdnet_seconds_since_boot (void);
Index: c/src/lib/libnetworking/rtems/rtems_glue.c
===================================================================
--- c/src/lib/libnetworking/rtems/rtems_glue.c	(revision ca3fec49827c4b1b4a33585579b65af4cffdb3c0)
+++ c/src/lib/libnetworking/rtems/rtems_glue.c	(revision b6f5f9385daf2d4b5a6272c5085c7e253f381aa9)
@@ -883,2 +883,45 @@
 	return 0;
 }
+
+/*
+ * Parse a network driver name into a name and a unit number
+ */
+int
+rtems_bsdnet_parse_driver_name (const struct rtems_bsdnet_ifconfig *config, char **namep)
+{
+	const char *cp = config->name;
+	char c;
+	int unitNumber = 0;
+
+	if (cp == NULL) {
+		printf ("No network driver name");
+		return -1;
+	}
+	while ((c = *cp++) != '\0') {
+		if ((c >= '0') && (c <= '9')) {
+			int len = cp - config->name - 1;
+			if ((len < 2) || (len > 50))
+				break;
+			for (;;) {
+				unitNumber = (unitNumber * 10) + (c - '0');
+				c = *cp++;
+				if (c == '\0') {
+					char *unitName = malloc (len);
+					if (unitName == NULL) {
+						printf ("No memory");
+						return -1;
+					}
+					strncpy (unitName, config->name, len - 1);
+					unitName[len-1] = '\0';
+					*namep = unitName;
+					return unitNumber;
+				}
+				if ((c < '0') || (c > '9'))
+					break;
+			}
+			break;
+		}
+	}
+	printf ("Bad network driver name `%s'", config->name);
+	return -1;
+}
Index: c/src/libnetworking/rtems/rtems_bsdnet_internal.h
===================================================================
--- c/src/libnetworking/rtems/rtems_bsdnet_internal.h	(revision ca3fec49827c4b1b4a33585579b65af4cffdb3c0)
+++ c/src/libnetworking/rtems/rtems_bsdnet_internal.h	(revision b6f5f9385daf2d4b5a6272c5085c7e253f381aa9)
@@ -117,4 +117,5 @@
 struct	tty;
 struct	uio;
+struct	rtems_bsdnet_ifconfig;
 
 /*
@@ -131,4 +132,5 @@
 void rtems_bsdnet_semaphore_release (void);
 void rtems_bsdnet_schednetisr (int n);
+int rtems_bsdnet_parse_driver_name (const struct rtems_bsdnet_ifconfig *config, char **namep);
 
 unsigned long rtems_bsdnet_seconds_since_boot (void);
Index: c/src/libnetworking/rtems/rtems_glue.c
===================================================================
--- c/src/libnetworking/rtems/rtems_glue.c	(revision ca3fec49827c4b1b4a33585579b65af4cffdb3c0)
+++ c/src/libnetworking/rtems/rtems_glue.c	(revision b6f5f9385daf2d4b5a6272c5085c7e253f381aa9)
@@ -883,2 +883,45 @@
 	return 0;
 }
+
+/*
+ * Parse a network driver name into a name and a unit number
+ */
+int
+rtems_bsdnet_parse_driver_name (const struct rtems_bsdnet_ifconfig *config, char **namep)
+{
+	const char *cp = config->name;
+	char c;
+	int unitNumber = 0;
+
+	if (cp == NULL) {
+		printf ("No network driver name");
+		return -1;
+	}
+	while ((c = *cp++) != '\0') {
+		if ((c >= '0') && (c <= '9')) {
+			int len = cp - config->name - 1;
+			if ((len < 2) || (len > 50))
+				break;
+			for (;;) {
+				unitNumber = (unitNumber * 10) + (c - '0');
+				c = *cp++;
+				if (c == '\0') {
+					char *unitName = malloc (len);
+					if (unitName == NULL) {
+						printf ("No memory");
+						return -1;
+					}
+					strncpy (unitName, config->name, len - 1);
+					unitName[len-1] = '\0';
+					*namep = unitName;
+					return unitNumber;
+				}
+				if ((c < '0') || (c > '9'))
+					break;
+			}
+			break;
+		}
+	}
+	printf ("Bad network driver name `%s'", config->name);
+	return -1;
+}
Index: cpukit/libnetworking/rtems/rtems_bsdnet_internal.h
===================================================================
--- cpukit/libnetworking/rtems/rtems_bsdnet_internal.h	(revision ca3fec49827c4b1b4a33585579b65af4cffdb3c0)
+++ cpukit/libnetworking/rtems/rtems_bsdnet_internal.h	(revision b6f5f9385daf2d4b5a6272c5085c7e253f381aa9)
@@ -117,4 +117,5 @@
 struct	tty;
 struct	uio;
+struct	rtems_bsdnet_ifconfig;
 
 /*
@@ -131,4 +132,5 @@
 void rtems_bsdnet_semaphore_release (void);
 void rtems_bsdnet_schednetisr (int n);
+int rtems_bsdnet_parse_driver_name (const struct rtems_bsdnet_ifconfig *config, char **namep);
 
 unsigned long rtems_bsdnet_seconds_since_boot (void);
Index: cpukit/libnetworking/rtems/rtems_glue.c
===================================================================
--- cpukit/libnetworking/rtems/rtems_glue.c	(revision ca3fec49827c4b1b4a33585579b65af4cffdb3c0)
+++ cpukit/libnetworking/rtems/rtems_glue.c	(revision b6f5f9385daf2d4b5a6272c5085c7e253f381aa9)
@@ -883,2 +883,45 @@
 	return 0;
 }
+
+/*
+ * Parse a network driver name into a name and a unit number
+ */
+int
+rtems_bsdnet_parse_driver_name (const struct rtems_bsdnet_ifconfig *config, char **namep)
+{
+	const char *cp = config->name;
+	char c;
+	int unitNumber = 0;
+
+	if (cp == NULL) {
+		printf ("No network driver name");
+		return -1;
+	}
+	while ((c = *cp++) != '\0') {
+		if ((c >= '0') && (c <= '9')) {
+			int len = cp - config->name - 1;
+			if ((len < 2) || (len > 50))
+				break;
+			for (;;) {
+				unitNumber = (unitNumber * 10) + (c - '0');
+				c = *cp++;
+				if (c == '\0') {
+					char *unitName = malloc (len);
+					if (unitName == NULL) {
+						printf ("No memory");
+						return -1;
+					}
+					strncpy (unitName, config->name, len - 1);
+					unitName[len-1] = '\0';
+					*namep = unitName;
+					return unitNumber;
+				}
+				if ((c < '0') || (c > '9'))
+					break;
+			}
+			break;
+		}
+	}
+	printf ("Bad network driver name `%s'", config->name);
+	return -1;
+}
