Commit e7fc7875 authored by Daniel P. Berrangé's avatar Daniel P. Berrangé 💬
Browse files

Add support for domain TPM external backend

parent 4af2fc45
Loading
Loading
Loading
Loading
+47 −0
Original line number Diff line number Diff line
@@ -1958,6 +1958,7 @@ type DomainTPM struct {
type DomainTPMBackend struct {
	Passthrough *DomainTPMBackendPassthrough `xml:"-"`
	Emulator    *DomainTPMBackendEmulator    `xml:"-"`
	External    *DomainTPMBackendExternal    `xml:"-"`
}

type DomainTPMBackendPassthrough struct {
@@ -1989,6 +1990,12 @@ type DomainTPMBackendDevice struct {
	Path string `xml:"path,attr"`
}

type DomainTPMBackendExternalSource DomainChardevSource

type DomainTPMBackendExternal struct {
	Source *DomainTPMBackendExternalSource `xml:"source"`
}

type DomainShmem struct {
	XMLName xml.Name           `xml:"shmem"`
	Name    string             `xml:"name,attr"`
@@ -4324,6 +4331,32 @@ func (d *DomainSmartcard) Marshal() (string, error) {
	return string(doc), nil
}

func (a *DomainTPMBackendExternalSource) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
	start.Name.Local = "source"
	src := DomainChardevSource(*a)
	typ := getChardevSourceType(&src)
	if typ != "" {
		start.Attr = append(start.Attr, xml.Attr{
			xml.Name{Local: "type"}, typ,
		})
	}
	return e.EncodeElement(&src, start)
}

func (a *DomainTPMBackendExternalSource) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
	typ, ok := getAttr(start.Attr, "type")
	if !ok {
		typ = "unix"
	}
	src := createChardevSource(typ)
	err := d.DecodeElement(&src, &start)
	if err != nil {
		return err
	}
	*a = DomainTPMBackendExternalSource(*src)
	return nil
}

func (a *DomainTPMBackend) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
	start.Name.Local = "backend"
	if a.Passthrough != nil {
@@ -4342,6 +4375,14 @@ func (a *DomainTPMBackend) MarshalXML(e *xml.Encoder, start xml.StartElement) er
		if err != nil {
			return err
		}
	} else if a.External != nil {
		start.Attr = append(start.Attr, xml.Attr{
			xml.Name{Local: "type"}, "external",
		})
		err := e.EncodeElement(a.External, start)
		if err != nil {
			return err
		}
	}
	return nil
}
@@ -4363,6 +4404,12 @@ func (a *DomainTPMBackend) UnmarshalXML(d *xml.Decoder, start xml.StartElement)
		if err != nil {
			return err
		}
	} else if typ == "external" {
		a.External = &DomainTPMBackendExternal{}
		err := d.DecodeElement(a.External, &start)
		if err != nil {
			return err
		}
	} else {
		d.Skip()
	}