[libvirt] [PATCH go-xml] Add support for device RNG
Daniel P. Berrange
berrange at redhat.com
Wed Jul 5 12:10:48 UTC 2017
On Tue, Jul 04, 2017 at 10:16:07AM +0200, Thomas Hipp wrote:
> Add support for device RNG (random number generator), and add test code.
>
> Signed-off-by: Thomas Hipp <thipp at suse.de>
> ---
> domain.go | 34 +++++++++++++++++++++++
> domain_test.go | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 119 insertions(+)
>
> diff --git a/domain.go b/domain.go
> index f9e3a80..b4f56bf 100644
> --- a/domain.go
> +++ b/domain.go
> @@ -184,6 +184,8 @@ type DomainInterfaceSource struct {
> Path string `xml:"path,attr,omitempty"`
> Mode string `xml:"mode,attr,omitempty"`
> Port uint `xml:"port,attr,omitempty"`
> + Service string `xml:"service,attr,omitempty"`
> + Host string `xml:"host,attr,omitempty"`
> }
>
> type DomainInterfaceTarget struct {
> @@ -384,6 +386,25 @@ type DomainSound struct {
> Address *DomainAddress `xml:"address"`
> }
>
> +type DomainRNGRate struct {
> + Bytes uint `xml:"bytes,attr"`
> + Period uint `xml:"period,attr,omitempty"`
> +}
> +
> +type DomainRNGBackend struct {
> + Backend string `xml:",chardata"`
Nitpick, I'll rename this to 'Device' to make it more obvious what
it is.
> + Model string `xml:"model,attr"`
> + Type string `xml:"type,attr,omitempty"`
> + Sources []DomainInterfaceSource `xml:"source"`
> +}
> +
> +type DomainRNG struct {
> + XMLName xml.Name `xml:"rng"`
> + Model string `xml:"model,attr"`
> + Rate *DomainRNGRate `xml:"rate"`
> + Backend *DomainRNGBackend `xml:"backend"`
> +}
> +
> type DomainDeviceList struct {
> Emulator string `xml:"emulator,omitempty"`
> Controllers []DomainController `xml:"controller"`
> @@ -398,6 +419,7 @@ type DomainDeviceList struct {
> Channels []DomainChannel `xml:"channel"`
> MemBalloon *DomainMemBalloon `xml:"memballoon"`
> Sounds []DomainSound `xml:"sound"`
> + RNGs []DomainRNG `xml:"rng"`
> }
>
> type DomainMemory struct {
> @@ -734,3 +756,15 @@ func (d *DomainSound) Marshal() (string, error) {
> }
> return string(doc), nil
> }
> +
> +func (d *DomainRNG) Unmarshal(doc string) error {
> + return xml.Unmarshal([]byte(doc), d)
> +}
> +
> +func (d *DomainRNG) Marshal() (string, error) {
> + doc, err := xml.MarshalIndent(d, "", " ")
> + if err != nil {
> + return "", err
> + }
> + return string(doc), nil
> +}
> diff --git a/domain_test.go b/domain_test.go
> index 0ce908b..aac23fe 100644
> --- a/domain_test.go
> +++ b/domain_test.go
> @@ -333,6 +333,30 @@ var domainTestData = []struct {
> },
> },
> },
> + RNGs: []DomainRNG{
> + DomainRNG{
> + Model: "virtio",
> + Rate: &DomainRNGRate{
> + Period: 2000,
> + Bytes: 1234,
> + },
> + Backend: &DomainRNGBackend{
> + Model: "egd",
> + Type: "udp",
> + Sources: []DomainInterfaceSource{
> + DomainInterfaceSource{
> + Mode: "bind",
> + Service: "1234",
> + },
> + DomainInterfaceSource{
> + Mode: "connect",
> + Host: "1.2.3.4",
> + Service: "1234",
> + },
> + },
> + },
> + },
> + },
> },
> },
> Expected: []string{
> @@ -368,6 +392,13 @@ var domainTestData = []struct {
> ` <codec type="duplex"></codec>`,
> ` <address type="pci" domain="0" bus="0" slot="8" function="0"></address>`,
> ` </sound>`,
> + ` <rng model="virtio">`,
> + ` <rate bytes="1234" period="2000"></rate>`,
> + ` <backend model="egd" type="udp">`,
> + ` <source mode="bind" service="1234"></source>`,
> + ` <source mode="connect" service="1234" host="1.2.3.4"></source>`,
> + ` </backend>`,
> + ` </rng>`,
> ` </devices>`,
> `</domain>`,
> },
> @@ -1334,6 +1365,60 @@ var domainTestData = []struct {
> `</sound>`,
> },
> },
> + {
> + Object: &DomainRNG{
> + Model: "virtio",
> + Rate: &DomainRNGRate{
> + Period: 2000,
> + Bytes: 1234,
> + },
> + Backend: &DomainRNGBackend{
> + Backend: "/dev/random",
> + Model: "random",
> + },
> + },
> +
> + Expected: []string{
> + `<rng model="virtio">`,
> + ` <rate bytes="1234" period="2000"></rate>`,
> + ` <backend model="random">/dev/random</backend>`,
> + `</rng>`,
> + },
> + },
> + {
> + Object: &DomainRNG{
> + Model: "virtio",
> + Rate: &DomainRNGRate{
> + Period: 2000,
> + Bytes: 1234,
> + },
> + Backend: &DomainRNGBackend{
> + Model: "egd",
> + Type: "udp",
> + Sources: []DomainInterfaceSource{
> + DomainInterfaceSource{
> + Mode: "bind",
> + Service: "1234",
> + },
> + DomainInterfaceSource{
> + Mode: "connect",
> + Host: "1.2.3.4",
> + Service: "1234",
> + },
> + },
> + },
> + },
> +
> + Expected: []string{
> + `<rng model="virtio">`,
> + ` <rate bytes="1234" period="2000"></rate>`,
> + ` <backend model="egd" type="udp">`,
> + ` <source mode="bind" service="1234"></source>`,
> + ` <source mode="connect" service="1234" host="1.2.3.4"></source>`,
> + ` </backend>`,
> + `</rng>`,
> + },
> + },
> }
Reviewed-by: Daniel P. Berrange <berrange at redhat.com>
THanks, I'll merge this
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
More information about the libvir-list
mailing list