qmp: add qom-list command
This can be used to list properties in the device model. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
		
							parent
							
								
									5dbee474f3
								
							
						
					
					
						commit
						b4b12c6247
					
				| @ -1168,3 +1168,51 @@ | ||||
| # Since: 0.14.0 | ||||
| ## | ||||
| { 'command': 'migrate_set_speed', 'data': {'value': 'int'} } | ||||
| 
 | ||||
| ## | ||||
| # @DevicePropertyInfo: | ||||
| # | ||||
| # @name: the name of the property | ||||
| # | ||||
| # @type: the type of the property.  This will typically come in one of four | ||||
| #        forms: | ||||
| # | ||||
| #        1) A primitive type such as 'u8', 'u16', 'bool', 'str', or 'double'. | ||||
| #           These types are mapped to the appropriate JSON type. | ||||
| # | ||||
| #        2) A legacy type in the form 'legacy<subtype>' where subtype is the | ||||
| #           legacy qdev typename.  These types are always treated as strings. | ||||
| # | ||||
| #        3) A child type in the form 'child<subtype>' where subtype is a qdev | ||||
| #           device type name.  Child properties create the composition tree. | ||||
| # | ||||
| #        4) A link type in the form 'link<subtype>' where subtype is a qdev | ||||
| #           device type name.  Link properties form the device model graph. | ||||
| # | ||||
| # Since: 1.1 | ||||
| # | ||||
| # Notes: This type is experimental.  Its syntax may change in future releases. | ||||
| ## | ||||
| { 'type': 'DevicePropertyInfo', | ||||
|   'data': { 'name': 'str', 'type': 'str' } } | ||||
| 
 | ||||
| ## | ||||
| # @qom-list: | ||||
| # | ||||
| # This command will list any properties of a device given a path in the device | ||||
| # model. | ||||
| # | ||||
| # @path: the path within the device model.  See @qom-get for a description of | ||||
| #        this parameter. | ||||
| # | ||||
| # Returns: a list of @DevicePropertyInfo that describe the properties of the | ||||
| #          device. | ||||
| # | ||||
| # Since: 1.1 | ||||
| # | ||||
| # Notes: This command is experimental.  It's syntax may change in future | ||||
| #        releases. | ||||
| ## | ||||
| { 'command': 'qom-list', | ||||
|   'data': { 'path': 'str' }, | ||||
|   'returns': [ 'DevicePropertyInfo' ] } | ||||
|  | ||||
| @ -2009,3 +2009,9 @@ EQMP | ||||
|         .args_type  = "", | ||||
|         .mhandler.cmd_new = qmp_marshal_input_query_balloon, | ||||
|     }, | ||||
| 
 | ||||
|     { | ||||
|         .name       = "qom-list", | ||||
|         .args_type  = "path:s", | ||||
|         .mhandler.cmd_new = qmp_marshal_input_qom_list, | ||||
|     }, | ||||
|  | ||||
							
								
								
									
										28
									
								
								qmp.c
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								qmp.c
									
									
									
									
									
								
							| @ -16,6 +16,7 @@ | ||||
| #include "qmp-commands.h" | ||||
| #include "kvm.h" | ||||
| #include "arch_init.h" | ||||
| #include "hw/qdev.h" | ||||
| 
 | ||||
| NameInfo *qmp_query_name(Error **errp) | ||||
| { | ||||
| @ -154,3 +155,30 @@ void qmp_cont(Error **errp) | ||||
| 
 | ||||
|     vm_start(); | ||||
| } | ||||
| 
 | ||||
| DevicePropertyInfoList *qmp_qom_list(const char *path, Error **errp) | ||||
| { | ||||
|     DeviceState *dev; | ||||
|     bool ambiguous = false; | ||||
|     DevicePropertyInfoList *props = NULL; | ||||
|     DeviceProperty *prop; | ||||
| 
 | ||||
|     dev = qdev_resolve_path(path, &ambiguous); | ||||
|     if (dev == NULL) { | ||||
|         error_set(errp, QERR_DEVICE_NOT_FOUND, path); | ||||
|         return NULL; | ||||
|     } | ||||
| 
 | ||||
|     QTAILQ_FOREACH(prop, &dev->properties, node) { | ||||
|         DevicePropertyInfoList *entry = g_malloc0(sizeof(*entry)); | ||||
| 
 | ||||
|         entry->value = g_malloc0(sizeof(DevicePropertyInfo)); | ||||
|         entry->next = props; | ||||
|         props = entry; | ||||
| 
 | ||||
|         entry->value->name = g_strdup(prop->name); | ||||
|         entry->value->type = g_strdup(prop->type); | ||||
|     } | ||||
| 
 | ||||
|     return props; | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Anthony Liguori
						Anthony Liguori