qemu: Add an Object slice field to the Config structure

The Object slice tells qemu which specific object to create.
Qemu objects can represent memory backend files, random number
generators, TLS credentials, etc...

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
Samuel Ortiz 2016-09-12 18:06:14 +02:00
parent 8744dfe85e
commit b973bc59fb

47
qemu.go
View File

@ -56,6 +56,22 @@ type Device struct {
CharDev string CharDev string
} }
// Object is a qemu object representation.
type Object struct {
// Type is the qemu object type
Type string
// ID is the user defined object ID.
ID string
// MemPath is the object's memory path.
// This is only relevant for memory objects
MemPath string
// Size is the object size in bytes
Size uint64
}
// QMPSocket represents a qemu QMP socket configuration. // QMPSocket represents a qemu QMP socket configuration.
type QMPSocket struct { type QMPSocket struct {
// Type is the socket type (e.g. "unix"). // Type is the socket type (e.g. "unix").
@ -98,6 +114,9 @@ type Config struct {
// Devices is a list of devices for qemu to create. // Devices is a list of devices for qemu to create.
Devices []Device Devices []Device
// Objects is a list of objects for qemu to create.
Objects []Object
// ExtraParams is a slice of options to pass to qemu. // ExtraParams is a slice of options to pass to qemu.
ExtraParams []string ExtraParams []string
@ -187,6 +206,33 @@ func appendDevices(params []string, config Config) []string {
return params return params
} }
func appendObjects(params []string, config Config) []string {
for _, o := range config.Objects {
if o.Type != "" {
var objectParams []string
objectParams = append(objectParams, o.Type)
if o.ID != "" {
objectParams = append(objectParams, fmt.Sprintf(",id=%s", o.ID))
}
if o.MemPath != "" {
objectParams = append(objectParams, fmt.Sprintf(",mem-path=%s", o.MemPath))
}
if o.Size > 0 {
objectParams = append(objectParams, fmt.Sprintf(",size=%d", o.Size))
}
params = append(params, "-object")
params = append(params, strings.Join(objectParams, ""))
}
}
return params
}
// LaunchQemu can be used to launch a new qemu instance. // LaunchQemu can be used to launch a new qemu instance.
// //
// The Config parameter contains a set of qemu parameters and settings. // The Config parameter contains a set of qemu parameters and settings.
@ -204,6 +250,7 @@ func LaunchQemu(config Config, logger QMPLog) (string, error) {
params = appendCPUModel(params, config) params = appendCPUModel(params, config)
params = appendQMPSocket(params, config) params = appendQMPSocket(params, config)
params = appendDevices(params, config) params = appendDevices(params, config)
params = appendObjects(params, config)
params = append(params, config.ExtraParams...) params = append(params, config.ExtraParams...)