The changes to support the new flags in the vn driver.
This commit is contained in:
parent
5511b2e4f3
commit
5dad287ead
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=6999
@ -66,11 +66,16 @@ struct vndisk {
|
||||
#define VN_MOUNTRO 0x20
|
||||
#define VN_MOUNTRW 0x40
|
||||
#define VN_IGNORE 0x80
|
||||
#define VN_SET 0x100
|
||||
#define VN_RESET 0x200
|
||||
|
||||
int nvndisks;
|
||||
|
||||
int all = 0;
|
||||
int verbose = 0;
|
||||
int global = 0;
|
||||
u_long setopt = 0;
|
||||
u_long resetopt = 0;
|
||||
char *configfile;
|
||||
char *pname;
|
||||
|
||||
@ -86,7 +91,7 @@ main(argc, argv)
|
||||
|
||||
pname = argv[0];
|
||||
configfile = _PATH_VNTAB;
|
||||
while ((i = getopt(argc, argv, "acdef:uv")) != EOF)
|
||||
while ((i = getopt(argc, argv, "acdef:gr:s:uv")) != EOF)
|
||||
switch (i) {
|
||||
|
||||
/* all -- use config file */
|
||||
@ -117,6 +122,31 @@ main(argc, argv)
|
||||
configfile = optarg;
|
||||
break;
|
||||
|
||||
/* fiddle global options */
|
||||
case 'g':
|
||||
global = 1 - global;
|
||||
break;
|
||||
|
||||
/* reset options */
|
||||
case 'r':
|
||||
if (what_opt(optarg,&resetopt)) {
|
||||
fprintf(stderr,"Invalid options '%s'\n",
|
||||
optarg);
|
||||
usage();
|
||||
}
|
||||
flags |= VN_RESET;
|
||||
break;
|
||||
|
||||
/* set options */
|
||||
case 's':
|
||||
if (what_opt(optarg,&setopt)) {
|
||||
fprintf(stderr,"Invalid options '%s'\n",
|
||||
optarg);
|
||||
usage();
|
||||
}
|
||||
flags |= VN_SET;
|
||||
break;
|
||||
|
||||
/* unconfigure */
|
||||
case 'u':
|
||||
flags |= (VN_DISABLE|VN_UNCONFIG);
|
||||
@ -153,6 +183,20 @@ main(argc, argv)
|
||||
exit(rv);
|
||||
}
|
||||
|
||||
int
|
||||
what_opt(str,p)
|
||||
char *str;
|
||||
u_long *p;
|
||||
{
|
||||
if (!strcmp(str,"labels")) { *p |= VN_LABELS; return 0; }
|
||||
if (!strcmp(str,"follow")) { *p |= VN_FOLLOW; return 0; }
|
||||
if (!strcmp(str,"debug")) { *p |= VN_DEBUG; return 0; }
|
||||
if (!strcmp(str,"io")) { *p |= VN_IO; return 0; }
|
||||
if (!strcmp(str,"all")) { *p |= ~0; return 0; }
|
||||
if (!strcmp(str,"none")) { *p |= 0; return 0; }
|
||||
return 1;
|
||||
}
|
||||
|
||||
config(vnp)
|
||||
struct vndisk *vnp;
|
||||
{
|
||||
@ -163,6 +207,7 @@ config(vnp)
|
||||
char *rdev;
|
||||
FILE *f;
|
||||
extern int errno;
|
||||
u_long l;
|
||||
|
||||
dev = vnp->dev;
|
||||
file = vnp->file;
|
||||
@ -199,14 +244,14 @@ config(vnp)
|
||||
* Clear (un-configure) the device
|
||||
*/
|
||||
if (flags & VN_UNCONFIG) {
|
||||
rv = ioctl(fileno(f), VNIOCCLR, &vnio);
|
||||
rv = ioctl(fileno(f), VNIOCDETACH, &vnio);
|
||||
if (rv) {
|
||||
if (errno == ENODEV) {
|
||||
if (verbose)
|
||||
printf("%s: not configured\n", dev);
|
||||
rv = 0;
|
||||
} else
|
||||
perror("VNIOCCLR");
|
||||
perror("VNIOCDETACH");
|
||||
} else if (verbose)
|
||||
printf("%s: cleared\n", dev);
|
||||
}
|
||||
@ -214,14 +259,43 @@ config(vnp)
|
||||
* Configure the device
|
||||
*/
|
||||
if (flags & VN_CONFIG) {
|
||||
rv = ioctl(fileno(f), VNIOCSET, &vnio);
|
||||
rv = ioctl(fileno(f), VNIOCATTACH, &vnio);
|
||||
if (rv) {
|
||||
perror("VNIOCSET");
|
||||
perror("VNIOCATTACH");
|
||||
flags &= ~VN_ENABLE;
|
||||
} else if (verbose)
|
||||
printf("%s: %d bytes on %s\n",
|
||||
dev, vnio.vn_size, file);
|
||||
}
|
||||
/*
|
||||
* Set an option
|
||||
*/
|
||||
if (flags & VN_SET) {
|
||||
l = setopt;
|
||||
if (global)
|
||||
rv = ioctl(fileno(f), VNIOCGSET, &l);
|
||||
else
|
||||
rv = ioctl(fileno(f), VNIOCUSET, &l);
|
||||
if (rv) {
|
||||
perror("VNIO[GU]SET");
|
||||
} else if (verbose)
|
||||
printf("%s: flags now=%08x\n",dev,l);
|
||||
}
|
||||
/*
|
||||
* Reset an option
|
||||
*/
|
||||
if (flags & VN_RESET) {
|
||||
l = resetopt;
|
||||
if (global)
|
||||
rv = ioctl(fileno(f), VNIOCGCLEAR, &l);
|
||||
else
|
||||
rv = ioctl(fileno(f), VNIOCUCLEAR, &l);
|
||||
if (rv) {
|
||||
perror("VNIO[GU]CLEAR");
|
||||
} else if (verbose)
|
||||
printf("%s: flags now=%08x\n",dev,l);
|
||||
}
|
||||
|
||||
/*
|
||||
* Enable special functions on the device
|
||||
*/
|
||||
@ -362,7 +436,8 @@ rawdevice(dev)
|
||||
|
||||
usage()
|
||||
{
|
||||
fprintf(stderr, "usage: %s [-acdefuv] [special-device file]\n",
|
||||
fprintf(stderr, "usage: %s [-acdefguv] [-s option] [-r option] [special-device file]\n",
|
||||
pname);
|
||||
fprintf(stderr, "\toptions: labels, follow, debug, io, all, none\n");
|
||||
exit(1);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user