diff options
author | hosokawa <hosokawa@FreeBSD.org> | 2000-01-16 06:44:48 +0000 |
---|---|---|
committer | hosokawa <hosokawa@FreeBSD.org> | 2000-01-16 06:44:48 +0000 |
commit | 721d34c8d9cc1ca1480315326ea71269f671217d (patch) | |
tree | 10b960c7cc7e3fbf82a53de66e0c8b428cbbd6ab /usr.sbin/pccard/pccardd/cardd.c | |
parent | b0d0e9404a1f0c003f8cc2e5860cf6c551000367 (diff) | |
download | FreeBSD-src-721d34c8d9cc1ca1480315326ea71269f671217d.zip FreeBSD-src-721d34c8d9cc1ca1480315326ea71269f671217d.tar.gz |
This fixes a bug that /etc/pccard_ether did not work without DHCP.
For example, when /etc/pccard.conf had ed0 in config line, but kernel
refused this name and said
devclass_alloc_unit: ed0 already exists, using next availale unit
number
Kernel used ed1 as device name and it did not match with config and
insert/remove lines. Fortunately, dhclient was called without args,
and it works, but if we wanted to use static IP address for PC-card,
it did not work.
This modification makes pccardd to execute insert/remove lines with
the true device name that returns from kernel. (Last change to
etc/pccard.conf.sample eliminated all hardwired device name from
insert/remove lines in /etc/pccard.conf)
Diffstat (limited to 'usr.sbin/pccard/pccardd/cardd.c')
-rw-r--r-- | usr.sbin/pccard/pccardd/cardd.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/usr.sbin/pccard/pccardd/cardd.c b/usr.sbin/pccard/pccardd/cardd.c index aae658f..f542d60 100644 --- a/usr.sbin/pccard/pccardd/cardd.c +++ b/usr.sbin/pccard/pccardd/cardd.c @@ -484,6 +484,7 @@ setup_slot(struct slot *sp) struct io_desc io; struct dev_desc drv; struct driver *drvp = sp->config->driver; + char *p; char c; off_t offs; int rw_flags; @@ -584,7 +585,6 @@ setup_slot(struct slot *sp) drv.iobase + sp->io.size - 1, drv.mem, drv.memsize, sp->irq, drv.flags); } - /* * If the driver fails to be connected to the device, * then it may mean that the driver did not recognise it. @@ -595,5 +595,16 @@ setup_slot(struct slot *sp) sp->card->manuf, sp->card->version, strerror(errno)); return (0); } + drv.name[sizeof(drv.name) - 1] = '\0'; + if (strncmp(drv.name, drvp->kernel, sizeof(drv.name))) { + drvp->kernel = newstr(drv.name); + p = drvp->kernel; + while (*p++) + if (*p >= '0' && *p <= '9') { + drvp->unit = atoi(p); + *p = '\0'; + break; + } + } return (1); } |