Changeset View
Changeset View
Standalone View
Standalone View
head/sbin/geom/class/label/geom_label.c
Show First 20 Lines • Show All 47 Lines • ▼ Show 20 Lines | |||||
uint32_t PUBSYM(lib_version) = G_LIB_VERSION; | uint32_t PUBSYM(lib_version) = G_LIB_VERSION; | ||||
uint32_t PUBSYM(version) = G_LABEL_VERSION; | uint32_t PUBSYM(version) = G_LABEL_VERSION; | ||||
static void label_main(struct gctl_req *req, unsigned flags); | static void label_main(struct gctl_req *req, unsigned flags); | ||||
static void label_clear(struct gctl_req *req); | static void label_clear(struct gctl_req *req); | ||||
static void label_dump(struct gctl_req *req); | static void label_dump(struct gctl_req *req); | ||||
static void label_label(struct gctl_req *req); | static void label_label(struct gctl_req *req); | ||||
static void label_refresh(struct gctl_req *req); | |||||
struct g_command PUBSYM(class_commands)[] = { | struct g_command PUBSYM(class_commands)[] = { | ||||
{ "clear", G_FLAG_VERBOSE, label_main, G_NULL_OPTS, | { "clear", G_FLAG_VERBOSE, label_main, G_NULL_OPTS, | ||||
"[-v] dev ..." | "[-v] dev ..." | ||||
}, | }, | ||||
{ "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL, G_NULL_OPTS, | { "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL, G_NULL_OPTS, | ||||
"[-v] name dev" | "[-v] name dev" | ||||
}, | }, | ||||
{ "destroy", G_FLAG_VERBOSE, NULL, | { "destroy", G_FLAG_VERBOSE, NULL, | ||||
{ | { | ||||
{ 'f', "force", NULL, G_TYPE_BOOL }, | { 'f', "force", NULL, G_TYPE_BOOL }, | ||||
G_OPT_SENTINEL | G_OPT_SENTINEL | ||||
}, | }, | ||||
"[-fv] name ..." | "[-fv] name ..." | ||||
}, | }, | ||||
{ "dump", 0, label_main, G_NULL_OPTS, | { "dump", 0, label_main, G_NULL_OPTS, | ||||
"dev ..." | "dev ..." | ||||
}, | }, | ||||
{ "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, label_main, G_NULL_OPTS, | { "label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, label_main, G_NULL_OPTS, | ||||
"[-v] name dev" | "[-v] name dev" | ||||
}, | }, | ||||
{ "refresh", 0, label_main, G_NULL_OPTS, | |||||
"dev ..." | |||||
}, | |||||
{ "stop", G_FLAG_VERBOSE, NULL, | { "stop", G_FLAG_VERBOSE, NULL, | ||||
{ | { | ||||
{ 'f', "force", NULL, G_TYPE_BOOL }, | { 'f', "force", NULL, G_TYPE_BOOL }, | ||||
G_OPT_SENTINEL | G_OPT_SENTINEL | ||||
}, | }, | ||||
"[-fv] name ..." | "[-fv] name ..." | ||||
}, | }, | ||||
G_CMD_SENTINEL | G_CMD_SENTINEL | ||||
Show All 15 Lines | if (name == NULL) { | ||||
return; | return; | ||||
} | } | ||||
if (strcmp(name, "label") == 0) | if (strcmp(name, "label") == 0) | ||||
label_label(req); | label_label(req); | ||||
else if (strcmp(name, "clear") == 0) | else if (strcmp(name, "clear") == 0) | ||||
label_clear(req); | label_clear(req); | ||||
else if (strcmp(name, "dump") == 0) | else if (strcmp(name, "dump") == 0) | ||||
label_dump(req); | label_dump(req); | ||||
else if (strcmp(name, "refresh") == 0) | |||||
label_refresh(req); | |||||
else | else | ||||
gctl_error(req, "Unknown command: %s.", name); | gctl_error(req, "Unknown command: %s.", name); | ||||
} | } | ||||
static void | static void | ||||
label_label(struct gctl_req *req) | label_label(struct gctl_req *req) | ||||
{ | { | ||||
struct g_label_metadata md; | struct g_label_metadata md; | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | if (error != 0) { | ||||
name, strerror(error)); | name, strerror(error)); | ||||
gctl_error(req, "Not fully done."); | gctl_error(req, "Not fully done."); | ||||
continue; | continue; | ||||
} | } | ||||
label_metadata_decode((u_char *)&tmpmd, &md); | label_metadata_decode((u_char *)&tmpmd, &md); | ||||
printf("Metadata on %s:\n", name); | printf("Metadata on %s:\n", name); | ||||
label_metadata_dump(&md); | label_metadata_dump(&md); | ||||
printf("\n"); | printf("\n"); | ||||
} | |||||
} | |||||
static void | |||||
label_refresh(struct gctl_req *req) | |||||
{ | |||||
const char *name; | |||||
int i, nargs, fd; | |||||
nargs = gctl_get_int(req, "nargs"); | |||||
if (nargs < 1) { | |||||
gctl_error(req, "Too few arguments."); | |||||
return; | |||||
} | |||||
for (i = 0; i < nargs; i++) { | |||||
name = gctl_get_ascii(req, "arg%d", i); | |||||
fd = g_open(name, 1); | |||||
if (fd == -1) { | |||||
printf("Can't refresh metadata from %s: %s.\n", | |||||
name, strerror(errno)); | |||||
} else { | |||||
printf("Metadata from %s refreshed.\n", name); | |||||
(void)g_close(fd); | |||||
} | |||||
} | } | ||||
} | } |