qemu/include/qom/object_interfaces.h
<<
>>
Prefs
   1#ifndef OBJECT_INTERFACES_H
   2#define OBJECT_INTERFACES_H
   3
   4#include "qom/object.h"
   5#include "qapi/qapi-types-qom.h"
   6#include "qapi/visitor.h"
   7
   8#define TYPE_USER_CREATABLE "user-creatable"
   9
  10typedef struct UserCreatableClass UserCreatableClass;
  11DECLARE_CLASS_CHECKERS(UserCreatableClass, USER_CREATABLE,
  12                       TYPE_USER_CREATABLE)
  13#define USER_CREATABLE(obj) \
  14     INTERFACE_CHECK(UserCreatable, (obj), \
  15                     TYPE_USER_CREATABLE)
  16
  17typedef struct UserCreatable UserCreatable;
  18
  19/**
  20 * UserCreatableClass:
  21 * @parent_class: the base class
  22 * @complete: callback to be called after @obj's properties are set.
  23 * @can_be_deleted: callback to be called before an object is removed
  24 * to check if @obj can be removed safely.
  25 *
  26 * Interface is designed to work with -object/object-add/object_add
  27 * commands.
  28 * Interface is mandatory for objects that are designed to be user
  29 * creatable (i.e. -object/object-add/object_add, will accept only
  30 * objects that inherit this interface).
  31 *
  32 * Interface also provides an optional ability to do the second
  33 * stage * initialization of the object after its properties were
  34 * set.
  35 *
  36 * For objects created without using -object/object-add/object_add,
  37 * @user_creatable_complete() wrapper should be called manually if
  38 * object's type implements USER_CREATABLE interface and needs
  39 * complete() callback to be called.
  40 */
  41struct UserCreatableClass {
  42    /* <private> */
  43    InterfaceClass parent_class;
  44
  45    /* <public> */
  46    void (*complete)(UserCreatable *uc, Error **errp);
  47    bool (*can_be_deleted)(UserCreatable *uc);
  48};
  49
  50/**
  51 * user_creatable_complete:
  52 * @uc: the user-creatable object whose complete() method is called if defined
  53 * @errp: if an error occurs, a pointer to an area to store the error
  54 *
  55 * Wrapper to call complete() method if one of types it's inherited
  56 * from implements USER_CREATABLE interface, otherwise the call does
  57 * nothing.
  58 *
  59 * Returns: %true on success, %false on failure.
  60 */
  61bool user_creatable_complete(UserCreatable *uc, Error **errp);
  62
  63/**
  64 * user_creatable_can_be_deleted:
  65 * @uc: the object whose can_be_deleted() method is called if implemented
  66 *
  67 * Wrapper to call can_be_deleted() method if one of types it's inherited
  68 * from implements USER_CREATABLE interface.
  69 */
  70bool user_creatable_can_be_deleted(UserCreatable *uc);
  71
  72/**
  73 * user_creatable_add_type:
  74 * @type: the object type name
  75 * @id: the unique ID for the object
  76 * @qdict: the object properties
  77 * @v: the visitor
  78 * @errp: if an error occurs, a pointer to an area to store the error
  79 *
  80 * Create an instance of the user creatable object @type, placing
  81 * it in the object composition tree with name @id, initializing
  82 * it with properties from @qdict
  83 *
  84 * Returns: the newly created object or NULL on error
  85 */
  86Object *user_creatable_add_type(const char *type, const char *id,
  87                                const QDict *qdict,
  88                                Visitor *v, Error **errp);
  89
  90/**
  91 * user_creatable_add_qapi:
  92 * @options: the object definition
  93 * @errp: if an error occurs, a pointer to an area to store the error
  94 *
  95 * Create an instance of the user creatable object according to the
  96 * options passed in @opts as described in the QAPI schema documentation.
  97 */
  98void user_creatable_add_qapi(ObjectOptions *options, Error **errp);
  99
 100/**
 101 * user_creatable_parse_str:
 102 * @optarg: the object definition string as passed on the command line
 103 * @errp: if an error occurs, a pointer to an area to store the error
 104 *
 105 * Parses the option for the user creatable object with a keyval parser and
 106 * implicit key 'qom-type', converting the result to ObjectOptions.
 107 *
 108 * If a help option is given, print help instead.
 109 *
 110 * Returns: ObjectOptions on success, NULL when an error occurred (*errp is set
 111 * then) or help was printed (*errp is not set).
 112 */
 113ObjectOptions *user_creatable_parse_str(const char *optarg, Error **errp);
 114
 115/**
 116 * user_creatable_add_from_str:
 117 * @optarg: the object definition string as passed on the command line
 118 * @errp: if an error occurs, a pointer to an area to store the error
 119 *
 120 * Create an instance of the user creatable object by parsing optarg
 121 * with a keyval parser and implicit key 'qom-type', converting the
 122 * result to ObjectOptions and calling into qmp_object_add().
 123 *
 124 * If a help option is given, print help instead.
 125 *
 126 * Returns: true when an object was successfully created, false when an error
 127 * occurred (*errp is set then) or help was printed (*errp is not set).
 128 */
 129bool user_creatable_add_from_str(const char *optarg, Error **errp);
 130
 131/**
 132 * user_creatable_process_cmdline:
 133 * @optarg: the object definition string as passed on the command line
 134 *
 135 * Create an instance of the user creatable object by parsing optarg
 136 * with a keyval parser and implicit key 'qom-type', converting the
 137 * result to ObjectOptions and calling into qmp_object_add().
 138 *
 139 * If a help option is given, print help instead and exit.
 140 *
 141 * This function is only meant to be called during command line parsing.
 142 * It exits the process on failure or after printing help.
 143 */
 144void user_creatable_process_cmdline(const char *optarg);
 145
 146/**
 147 * user_creatable_print_help:
 148 * @type: the QOM type to be added
 149 * @opts: options to create
 150 *
 151 * Prints help if requested in @type or @opts. Note that if @type is neither
 152 * "help"/"?" nor a valid user creatable type, no help will be printed
 153 * regardless of @opts.
 154 *
 155 * Returns: true if a help option was found and help was printed, false
 156 * otherwise.
 157 */
 158bool user_creatable_print_help(const char *type, QemuOpts *opts);
 159
 160/**
 161 * user_creatable_del:
 162 * @id: the unique ID for the object
 163 * @errp: if an error occurs, a pointer to an area to store the error
 164 *
 165 * Delete an instance of the user creatable object identified
 166 * by @id.
 167 *
 168 * Returns: %true on success, %false on failure.
 169 */
 170bool user_creatable_del(const char *id, Error **errp);
 171
 172/**
 173 * user_creatable_cleanup:
 174 *
 175 * Delete all user-creatable objects and the user-creatable
 176 * objects container.
 177 */
 178void user_creatable_cleanup(void);
 179
 180#endif
 181