Add Get/SetBlockIoTune to go-libvirt API. (#45)
* Add Get/SetBlockIoTune to go-libvirt API. This adds two libvirt entry points to the go-libvirt API: virDomainSetBlockIoTune and virDomainGetBlockIoTune. These can be used to control block device throttling for a VM.
This commit is contained in:
		| @@ -21,8 +21,9 @@ import ( | ||||
| 	"sync/atomic" | ||||
|  | ||||
| 	"fmt" | ||||
| 	"github.com/digitalocean/go-libvirt/internal/constants" | ||||
| 	"os" | ||||
|  | ||||
| 	"github.com/digitalocean/go-libvirt/internal/constants" | ||||
| ) | ||||
|  | ||||
| var testDomainResponse = []byte{ | ||||
| @@ -399,6 +400,128 @@ var testRebootReply = []byte{ | ||||
| 	0x00, 0x00, 0x00, 0x00, // status | ||||
| } | ||||
|  | ||||
| var testSetBlockIoTuneReply = []byte{ | ||||
| 	0x00, 0x00, 0x00, 0x1c, // length | ||||
| 	0x20, 0x00, 0x80, 0x86, // program | ||||
| 	0x00, 0x00, 0x00, 0x01, // version | ||||
| 	0x00, 0x00, 0x00, 0xfc, // procedure | ||||
| 	0x00, 0x00, 0x00, 0x00, // type | ||||
| 	0x00, 0x00, 0x00, 0x00, // serial | ||||
| 	0x00, 0x00, 0x00, 0x00, // status | ||||
| } | ||||
|  | ||||
| // This result block was obtained by calling `fmt.Printf("%#v", r.Payload)` on | ||||
| // the result returned by an actual call to GetBlockIoTune, and then adding the | ||||
| // standard header to the beginning. The length parameter has to be correct! | ||||
| var testGetBlockIoTuneReply = []byte{ | ||||
| 	0x00, 0x00, 0x02, 0xe0, // length | ||||
| 	0x20, 0x00, 0x80, 0x86, // program | ||||
| 	0x00, 0x00, 0x00, 0x01, // version | ||||
| 	0x00, 0x00, 0x00, 0xfd, // procedure | ||||
| 	0x00, 0x00, 0x00, 0x00, // type | ||||
| 	0x00, 0x00, 0x00, 0x00, // serial | ||||
| 	0x00, 0x00, 0x00, 0x00, // status | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0x13, // 13 TypedParams follow | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0xf, // field name is 15 bytes, padded to a multiple of 4 | ||||
| 	0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x0, | ||||
| 	0x0, 0x0, 0x0, 0x4, // type | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, // value | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0xe, | ||||
| 	0x72, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x0, 0x0, | ||||
| 	0x0, 0x0, 0x0, 0x4, | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0xf, | ||||
| 	0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x0, | ||||
| 	0x0, 0x0, 0x0, 0x4, | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xa1, 0x20, | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0xe, | ||||
| 	0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x69, 0x6f, 0x70, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x0, 0x0, | ||||
| 	0x0, 0x0, 0x0, 0x4, | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0xd, | ||||
| 	0x72, 0x65, 0x61, 0x64, 0x5f, 0x69, 0x6f, 0x70, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x0, 0x0, 0x0, | ||||
| 	0x0, 0x0, 0x0, 0x4, | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0xe, | ||||
| 	0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x6f, 0x70, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x0, 0x0, | ||||
| 	0x0, 0x0, 0x0, 0x4, | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0x13, | ||||
| 	0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x5f, 0x6d, 0x61, 0x78, 0x0, | ||||
| 	0x0, 0x0, 0x0, 0x4, | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0x12, | ||||
| 	0x72, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x5f, 0x6d, 0x61, 0x78, 0x0, 0x0, | ||||
| 	0x0, 0x0, 0x0, 0x4, | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0x13, | ||||
| 	0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x5f, 0x6d, 0x61, 0x78, 0x0, | ||||
| 	0x0, 0x0, 0x0, 0x4, | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc3, 0x50, | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0x12, | ||||
| 	0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x69, 0x6f, 0x70, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x5f, 0x6d, 0x61, 0x78, 0x0, 0x0, | ||||
| 	0x0, 0x0, 0x0, 0x4, | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0x11, | ||||
| 	0x72, 0x65, 0x61, 0x64, 0x5f, 0x69, 0x6f, 0x70, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x5f, 0x6d, 0x61, 0x78, 0x0, 0x0, 0x0, | ||||
| 	0x0, 0x0, 0x0, 0x4, | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0x12, | ||||
| 	0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x6f, 0x70, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x5f, 0x6d, 0x61, 0x78, 0x0, 0x0, | ||||
| 	0x0, 0x0, 0x0, 0x4, | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0xd, | ||||
| 	0x73, 0x69, 0x7a, 0x65, 0x5f, 0x69, 0x6f, 0x70, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x0, 0x0, 0x0, | ||||
| 	0x0, 0x0, 0x0, 0x4, | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0x1a, | ||||
| 	0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x0, 0x0, | ||||
| 	0x0, 0x0, 0x0, 0x4, | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0x19, | ||||
| 	0x72, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x0, 0x0, 0x0, | ||||
| 	0x0, 0x0, 0x0, 0x4, | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0x1a, | ||||
| 	0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x0, 0x0, | ||||
| 	0x0, 0x0, 0x0, 0x4, | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0x19, | ||||
| 	0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x69, 0x6f, 0x70, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x0, 0x0, 0x0, | ||||
| 	0x0, 0x0, 0x0, 0x4, | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0x18, | ||||
| 	0x72, 0x65, 0x61, 0x64, 0x5f, 0x69, 0x6f, 0x70, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, | ||||
| 	0x0, 0x0, 0x0, 0x4, | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0x19, | ||||
| 	0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x6f, 0x70, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x0, 0x0, 0x0, | ||||
| 	0x0, 0x0, 0x0, 0x4, | ||||
| 	0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, | ||||
|  | ||||
| 	0x0, 0x0, 0x0, 0x0, // End of TypedParams | ||||
| } | ||||
|  | ||||
| // MockLibvirt provides a mock libvirt server for testing. | ||||
| type MockLibvirt struct { | ||||
| 	net.Conn | ||||
| @@ -486,6 +609,10 @@ func (m *MockLibvirt) handleRemote(procedure uint32, conn net.Conn) { | ||||
| 		conn.Write(m.reply(testCreateWithFlags)) | ||||
| 	case constants.ProcDomainShutdownFlags: | ||||
| 		conn.Write(m.reply(testShutdownReply)) | ||||
| 	case constants.ProcDomainSetBlockIOTune: | ||||
| 		conn.Write(m.reply(testSetBlockIoTuneReply)) | ||||
| 	case constants.ProcDomainGetBlockIOTune: | ||||
| 		conn.Write(m.reply(testGetBlockIoTuneReply)) | ||||
| 	default: | ||||
| 		fmt.Fprintln(os.Stderr, "unknown procedure", procedure) | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user