|
|
1.1 root 1: /*
2: * Virtio 9p
3: *
4: * Copyright IBM, Corp. 2010
5: *
6: * Authors:
7: * Gautham R Shenoy <[email protected]>
8: *
9: * This work is licensed under the terms of the GNU GPL, version 2. See
10: * the COPYING file in the top-level directory.
11: *
12: */
13: #include <stdio.h>
14: #include <string.h>
15: #include "qemu-fsdev.h"
16: #include "qemu-queue.h"
17: #include "osdep.h"
18: #include "qemu-common.h"
1.1.1.2 ! root 19: #include "qemu-config.h"
1.1 root 20:
21: static QTAILQ_HEAD(FsTypeEntry_head, FsTypeListEntry) fstype_entries =
22: QTAILQ_HEAD_INITIALIZER(fstype_entries);
23:
24: static FsTypeTable FsTypes[] = {
25: { .name = "local", .ops = &local_ops},
26: };
27:
28: int qemu_fsdev_add(QemuOpts *opts)
29: {
30: struct FsTypeListEntry *fsle;
31: int i;
1.1.1.2 ! root 32: const char *fsdev_id = qemu_opts_id(opts);
! 33: const char *fstype = qemu_opt_get(opts, "fstype");
! 34: const char *path = qemu_opt_get(opts, "path");
! 35: const char *sec_model = qemu_opt_get(opts, "security_model");
1.1 root 36:
1.1.1.2 ! root 37: if (!fsdev_id) {
1.1 root 38: fprintf(stderr, "fsdev: No id specified\n");
39: return -1;
40: }
41:
1.1.1.2 ! root 42: if (fstype) {
! 43: for (i = 0; i < ARRAY_SIZE(FsTypes); i++) {
! 44: if (strcmp(FsTypes[i].name, fstype) == 0) {
! 45: break;
! 46: }
1.1 root 47: }
48:
1.1.1.2 ! root 49: if (i == ARRAY_SIZE(FsTypes)) {
! 50: fprintf(stderr, "fsdev: fstype %s not found\n", fstype);
! 51: return -1;
! 52: }
! 53: } else {
! 54: fprintf(stderr, "fsdev: No fstype specified\n");
1.1 root 55: return -1;
56: }
57:
1.1.1.2 ! root 58: if (!sec_model) {
1.1 root 59: fprintf(stderr, "fsdev: No security_model specified.\n");
60: return -1;
61: }
62:
1.1.1.2 ! root 63: if (!path) {
! 64: fprintf(stderr, "fsdev: No path specified.\n");
! 65: return -1;
! 66: }
! 67:
1.1 root 68: fsle = qemu_malloc(sizeof(*fsle));
69:
1.1.1.2 ! root 70: fsle->fse.fsdev_id = qemu_strdup(fsdev_id);
! 71: fsle->fse.path = qemu_strdup(path);
! 72: fsle->fse.security_model = qemu_strdup(sec_model);
1.1 root 73: fsle->fse.ops = FsTypes[i].ops;
74:
75: QTAILQ_INSERT_TAIL(&fstype_entries, fsle, next);
76: return 0;
77:
78: }
79:
80: FsTypeEntry *get_fsdev_fsentry(char *id)
81: {
1.1.1.2 ! root 82: if (id) {
! 83: struct FsTypeListEntry *fsle;
1.1 root 84:
1.1.1.2 ! root 85: QTAILQ_FOREACH(fsle, &fstype_entries, next) {
! 86: if (strcmp(fsle->fse.fsdev_id, id) == 0) {
! 87: return &fsle->fse;
! 88: }
1.1 root 89: }
90: }
91: return NULL;
92: }
1.1.1.2 ! root 93:
! 94: static void fsdev_register_config(void)
! 95: {
! 96: qemu_add_opts(&qemu_fsdev_opts);
! 97: qemu_add_opts(&qemu_virtfs_opts);
! 98: }
! 99: machine_init(fsdev_register_config);
! 100:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.