diff options
author | Guillaume Cottenceau <gc@mandriva.com> | 2001-06-11 11:44:34 +0000 |
---|---|---|
committer | Guillaume Cottenceau <gc@mandriva.com> | 2001-06-11 11:44:34 +0000 |
commit | ab5559aaabd1167a18ac882e64d97c5adc0e7d03 (patch) | |
tree | d22adafe4701e0abbccc7456fc58ae60ce75d5fb /mdk-stage1/ppp/sunos4/ppp_vdcmd.c | |
parent | f35f2383eed07ff16aa76f30975817117eea6cbb (diff) | |
download | drakx-backup-do-not-use-ab5559aaabd1167a18ac882e64d97c5adc0e7d03.tar drakx-backup-do-not-use-ab5559aaabd1167a18ac882e64d97c5adc0e7d03.tar.gz drakx-backup-do-not-use-ab5559aaabd1167a18ac882e64d97c5adc0e7d03.tar.bz2 drakx-backup-do-not-use-ab5559aaabd1167a18ac882e64d97c5adc0e7d03.tar.xz drakx-backup-do-not-use-ab5559aaabd1167a18ac882e64d97c5adc0e7d03.zip |
Initial revision
Diffstat (limited to 'mdk-stage1/ppp/sunos4/ppp_vdcmd.c')
-rw-r--r-- | mdk-stage1/ppp/sunos4/ppp_vdcmd.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/mdk-stage1/ppp/sunos4/ppp_vdcmd.c b/mdk-stage1/ppp/sunos4/ppp_vdcmd.c new file mode 100644 index 000000000..68095c92e --- /dev/null +++ b/mdk-stage1/ppp/sunos4/ppp_vdcmd.c @@ -0,0 +1,81 @@ +#include <sys/types.h> +#include <sys/errno.h> +#include <sys/conf.h> +#include <sun/vddrv.h> + +extern struct streamtab pppinfo; +extern int ppp_count; +extern int nchrdev; + +static struct vdldrv vd = { + VDMAGIC_PSEUDO, + "ppp" +}; + +extern int nodev(); + +static struct cdevsw ppp_cdevsw = { + nodev, nodev, nodev, nodev, nodev, nodev, nodev, 0, + &pppinfo +}; + +static struct cdevsw old_entry; + +int +ppp_vdcmd(fun, vdp, vdi, vds) + unsigned int fun; + struct vddrv *vdp; + addr_t vdi; + struct vdstat *vds; +{ + static int majnum = -1; + int n, maj; + + switch (fun) { + case VDLOAD: + /* + * It seems like modload doesn't install the cdevsw entry + * for us. Oh well... + */ + for (maj = 1; maj < nchrdev; ++maj) + if (cdevsw[maj].d_open == vd_unuseddev) + break; + if (maj >= nchrdev) + return ENODEV; + vd.Drv_charmajor = maj; + old_entry = cdevsw[maj]; + cdevsw[maj] = ppp_cdevsw; + vd.Drv_cdevsw = &ppp_cdevsw; + vdp->vdd_vdtab = (struct vdlinkage *) &vd; + majnum = maj; + break; + + case VDUNLOAD: + if (ppp_count > 0) + return EBUSY; + if (vd.Drv_charmajor > 0) + cdevsw[vd.Drv_charmajor] = old_entry; + break; + + case VDSTAT: + /* + * We have to fool the modstat command into thinking + * that this module is actually a driver! This is + * so that installation commands that use the -exec + * option of modload to run a shell script find out + * the block and/or char major numbers of the driver + * loaded (so that the shell script can go off to + * /dev and *MAKE* the bloody device nodes- remember + * they might change from one load to another if + * you don't hardwire the number!). + */ + vds->vds_magic = VDMAGIC_DRV; + vds->vds_modinfo[0] = (char) 0; + vds->vds_modinfo[1] = (char) majnum; + break; + + default: + return EIO; + } + return 0; +} |