Signed-off-by: Daniel P. Berrangé <berrange@xxxxxxxxxx> --- nwfilter_binding.go | 73 +++++++++++++++++++++++++++++++++++++++++++++ xml_test.go | 3 ++ 2 files changed, 76 insertions(+) create mode 100644 nwfilter_binding.go diff --git a/nwfilter_binding.go b/nwfilter_binding.go new file mode 100644 index 0000000..918ab71 --- /dev/null +++ b/nwfilter_binding.go @@ -0,0 +1,73 @@ +/* + * This file is part of the libvirt-go-xml project + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Copyright (C) 2017 Lian Duan <blazeblue@xxxxxxxxx> + * + */ + +package libvirtxml + +import ( + "encoding/xml" +) + +type NWFilterBinding struct { + XMLName xml.Name `xml:"filterbinding"` + Owner *NWFilterBindingOwner `xml:"owner"` + PortDev *NWFilterBindingPortDev `xml:"portdev"` + MAC *NWFilterBindingMAC `xml:"mac"` + FilterRef *NWFilterBindingFilterRef `xml:"filterref"` +} + +type NWFilterBindingOwner struct { + UUID string `xml:"uuid,omitempty"` + Name string `xml:"name,omitempty"` +} + +type NWFilterBindingPortDev struct { + Name string `xml:"name,attr"` +} + +type NWFilterBindingMAC struct { + Address string `xml:"address,attr"` +} + +type NWFilterBindingFilterRef struct { + Filter string `xml:"filter,attr"` + Parameters []NWFilterBindingFilterParam `xml:"parameter"` +} + +type NWFilterBindingFilterParam struct { + Name string `xml:"name,attr"` + Value string `xml:"value,attr"` +} + +func (s *NWFilterBinding) Unmarshal(doc string) error { + return xml.Unmarshal([]byte(doc), s) +} + +func (s *NWFilterBinding) Marshal() (string, error) { + doc, err := xml.MarshalIndent(s, "", " ") + if err != nil { + return "", err + } + return string(doc), nil +} diff --git a/xml_test.go b/xml_test.go index 320c248..d1da879 100644 --- a/xml_test.go +++ b/xml_test.go @@ -83,6 +83,7 @@ var xmldirs = []string{ "testdata/libvirt/tests/storagevolxml2xmlin", "testdata/libvirt/tests/storagevolxml2xmlout", "testdata/libvirt/tests/vircaps2xmldata", + "testdata/libvirt/tests/virnwfilterbindingxml2xmldata", "testdata/libvirt/tests/virstorageutildata", "testdata/libvirt/tests/vmx2xmldata", "testdata/libvirt/tests/xlconfigdata", @@ -325,6 +326,8 @@ func testRoundTrip(t *testing.T, xml string, filename string) { } else { doc = &CapsHostCPU{} } + } else if strings.HasPrefix(xml, "<filterbinding") { + doc = &NWFilterBinding{} } else if strings.HasPrefix(xml, "<filter") { doc = &NWFilter{} } else if strings.HasPrefix(xml, "<interface") { -- 2.21.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list