Changeset b0f1366 in mainline for uspace/app
- Timestamp:
- 2024-09-06T11:37:54Z (19 months ago)
- Children:
- 9c1cf34c
- Parents:
- ee83e9c
- File:
-
- 1 edited
-
uspace/app/hrctl/hrctl.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/hrctl/hrctl.c
ree83e9c rb0f1366 53 53 "\n" 54 54 "Options:\n" 55 " -h, --help display this help and exit\n" 56 " -C, --config-file=path create an array from file,\n" 57 " sample file at: " HRCTL_SAMPLE_CONFIG_PATH "\n" 58 " -s, --status display status of active arrays\n" 59 " -a, --assemble=NAME assemble an existing array\n" 60 " -c, --create=NAME create new array\n" 61 " -n non-zero number of devices\n" 62 " -l, --level=LEVEL set the RAID level,\n" 63 " valid values: 0, 1, 5, linear\n" 64 " -0 striping\n" 65 " -1 mirroring\n" 66 " -5 distributed parity\n" 67 " -L linear concatenation\n" 55 " -h, --help display this help and exit\n" 56 " -C, --create-file=path create an array from file,\n" 57 " sample file at: " HRCTL_SAMPLE_CONFIG_PATH "\n" 58 " -A, --assemble-file=path create an array from file\n" 59 " -s, --status display status of active arrays\n" 60 " -c, --create=NAME create new array\n" 61 " -a, --assemble=NAME assemble an existing array\n" 62 " -n non-zero number of devices\n" 63 " -l, --level=LEVEL set the RAID level,\n" 64 " valid values: 0, 1, 5, linear\n" 65 " -0 striping\n" 66 " -1 mirroring\n" 67 " -5 distributed parity\n" 68 " -L linear concatenation\n" 68 69 "\n" 69 70 "Example usage:\n" … … 83 84 { "create", required_argument, 0, 'c' }, 84 85 { "level", required_argument, 0, 'l' }, 85 { "config-file", required_argument, 0, 'C' }, 86 { "create-file", required_argument, 0, 'C' }, 87 { "assemble-file", required_argument, 0, 'A' }, 86 88 { 0, 0, 0, 0 } 87 89 }; … … 154 156 155 157 level_str = sif_node_get_attr(narray, "level"); 156 if (level_str == NULL) { 157 rc = EIO; 158 goto error; 159 } 160 cfg->level = strtol(level_str, NULL, 10); 158 if (level_str == NULL) 159 cfg->level = hr_l_empty; 160 else if (str_cmp(level_str, "linear") == 0) 161 cfg->level = hr_l_linear; 162 else 163 cfg->level = strtol(level_str, NULL, 10); 161 164 162 165 dev_no_str = sif_node_get_attr(narray, "n"); … … 228 231 229 232 while (c != -1) { 230 c = getopt_long(argc, argv, "hsC:c: a:l:015Ln:",233 c = getopt_long(argc, argv, "hsC:c:A:a:l:015Ln:", 231 234 long_options, NULL); 232 235 switch (c) { … … 239 242 return 1; 240 243 return 0; 241 case 'a':242 if (str_size(optarg) > sizeof(cfg->devname) - 1) {243 printf("hrctl: device name too long\n");244 return 1;245 }246 str_cpy(cfg->devname, sizeof(cfg->devname), optarg);247 assemble = true;248 break;249 244 case 'C': 250 245 /* only support 1 array inside config for now XXX */ … … 264 259 create = true; 265 260 break; 261 case 'A': 262 rc = load_config(optarg, cfg); 263 if (rc != EOK) { 264 printf("hrctl: failed to load config\n"); 265 return 1; 266 } 267 assemble = true; 268 goto skip; 269 case 'a': 270 if (str_size(optarg) > sizeof(cfg->devname) - 1) { 271 printf("hrctl: device name too long\n"); 272 return 1; 273 } 274 str_cpy(cfg->devname, sizeof(cfg->devname), optarg); 275 assemble = true; 276 break; 266 277 case 'l': 267 278 if (cfg->level != hr_l_empty) … … 296 307 if ((int) cfg->dev_no + optind != argc) 297 308 goto bad; 298 if (cfg->dev_no > HR_MAXDEVS) {299 printf("hrctl: too many devices\n");300 return 1;301 }302 309 rc = fill_config_devs(argc, argv, optind, cfg); 303 310 if (rc != EOK) … … 308 315 309 316 skip: 310 if ((create && assemble) || 311 (!create && !assemble) || 312 (create && cfg->level == hr_l_empty) || 313 (assemble && cfg->level != hr_l_empty) || 314 (cfg->dev_no == 0)) { 317 if ((create && assemble) || (!create && !assemble)) 315 318 goto bad; 319 320 if (create && cfg->level == hr_l_empty) { 321 printf("hrctl: invalid level, exiting\n"); 322 return 1; 323 } 324 325 if (cfg->dev_no > HR_MAXDEVS) { 326 printf("hrctl: too many devices, exiting\n"); 327 return 1; 328 } 329 330 if (cfg->dev_no == 0) { 331 printf("hrctl: invalid number of devices, exiting\n"); 332 return 1; 316 333 } 317 334 … … 327 344 printf("hrctl: hr_create() rc: %s\n", str_error(rc)); 328 345 } else if (assemble) { 329 printf("hrctl: assemble not implemented yet\n"); 346 rc = hr_assemble(hr, cfg); 347 printf("hrctl: hr_assemble() rc: %s\n", str_error(rc)); 330 348 } 331 349
Note:
See TracChangeset
for help on using the changeset viewer.
