Re: [Xen-devel] [PATCH v2 4/5] golang/xenlight: Implement libxl_domain_info and libxl_domain_unpause
On Fri, Mar 03, 2017 at 03:15:51PM +, George Dunlap wrote: > On 02/03/17 16:07, Ronald Rojas wrote: > > Add calls for the following host-related functionality: > > - libxl_domain_info > > - libxl_domain_unpause > > > > Include Golang version for the libxl_domain_info as > > DomainInfo. > > > > Signed-off-by: George Dunlap> > Signed-off-by: Ronald Rojas > > --- > > Changes since last version > > - Created type and enumeration of DomainType and ShutdownReason > > > > - Created String() method for DomainType and ShutdownReason > > > > - Refactored creating DomainInfo from c type into seperate > > toGo() function > > > > - Applied libxl_domain_info_init/dispose() > > > > - whitespace fixes > > > > CC: xen-devel@lists.xen.org > > CC: george.dun...@citrix.com > > CC: ian.jack...@eu.citrix.com > > CC: wei.l...@citrix.com > > > > --- > > --- > > tools/golang/xenlight/xenlight.go | 132 > > ++ > > 1 file changed, 132 insertions(+) > > > > diff --git a/tools/golang/xenlight/xenlight.go > > b/tools/golang/xenlight/xenlight.go > > index 63cc805..18dedcb 100644 > > --- a/tools/golang/xenlight/xenlight.go > > +++ b/tools/golang/xenlight/xenlight.go > > @@ -34,6 +34,7 @@ import "C" > > import ( > > "fmt" > > "unsafe" > > + "time" > > ) > > > > /* > > @@ -102,6 +103,12 @@ var errors = [...]string{ > > * Types: Builtins > > */ > > > > +type Domid uint32 > > + > > +type MemKB uint64 > > + > > +type Uuid C.libxl_uuid > > + > > type Context struct { > > ctx *C.libxl_ctx > > } > > @@ -203,6 +210,95 @@ func (cinfo *C.libxl_version_info) toGo() (info > > *VersionInfo) { > > return > > } > > > > +type ShutdownReason int32 > > + > > +const( > > + ShutdownReasonUnknown = ShutdownReason(C.LIBXL_SHUTDOWN_REASON_UNKNOWN) > > + ShutdownReasonPoweroff = > > ShutdownReason(C.LIBXL_SHUTDOWN_REASON_POWEROFF) > > + ShutdownReasonReboot = ShutdownReason(C.LIBXL_SHUTDOWN_REASON_REBOOT) > > + ShutdownReasonSuspend = ShutdownReason(C.LIBXL_SHUTDOWN_REASON_SUSPEND) > > + ShutdownReasonCrash = ShutdownReason(C.LIBXL_SHUTDOWN_REASON_CRASH) > > + ShutdownReasonWatchdog = > > ShutdownReason(C.LIBXL_SHUTDOWN_REASON_WATCHDOG) > > + ShutdownReasonSoftReset = > > ShutdownReason(C.LIBXL_SHUTDOWN_REASON_SOFT_RESET) > > Looks like this could use having `go fmt` run. > > > + > > +) > > + > > +func (sr ShutdownReason) String()(str string){ > > + cstr := C.libxl_shutdown_reason_to_string(C.libxl_shutdown_reason(sr)) > > + str = C.GoString(cstr) > > + > > + return > > +} > > + > > +type DomainType int32 > > + > > +const( > > + DomainTypeInvalid = DomainType(C.LIBXL_DOMAIN_TYPE_INVALID) > > + DomainTypeHvm = DomainType(C.LIBXL_DOMAIN_TYPE_HVM) > > + DomainTypePv = DomainType(C.LIBXL_DOMAIN_TYPE_PV) > > +) > > + > > +func (dt DomainType) String()(str string){ > > + cstr := C.libxl_domain_type_to_string(C.libxl_domain_type(dt)) > > + str = C.GoString(cstr) > > + > > + return > > +} > > + > > +type Dominfo struct { > > + Uuid Uuid > > + Domid Domid > > + Ssidref uint32 > > + SsidLabel string > > + Runningbool > > + Blockedbool > > + Paused bool > > + Shutdown bool > > + Dying bool > > + NeverStop bool > > + > > + ShutdownReason int32 > > + OutstandingMemkb MemKB > > + CurrentMemkb MemKB > > + SharedMemkb MemKB > > + PagedMemkb MemKB > > + MaxMemkb MemKB > > + CpuTime time.Duration > > + VcpuMaxId uint32 > > + VcpuOnline uint32 > > + Cpupool uint32 > > + DomainType int32 > > + > > +} > > + > > +func (cdi *C.libxl_dominfo) toGo()(di *Dominfo){ > > + > > + di = {} > > + di.Uuid = Uuid(cdi.uuid) > > + di.Domid = Domid(cdi.domid) > > + di.Ssidref = uint32(cdi.ssidref) > > + di.SsidLabel = C.GoString(cdi.ssid_label) > > + di.Running = bool(cdi.running) > > + di.Blocked = bool(cdi.blocked) > > + di.Paused = bool(cdi.paused) > > + di.Shutdown = bool(cdi.shutdown) > > + di.Dying = bool(cdi.dying) > > + di.NeverStop= bool(cdi.never_stop) > > + di.ShutdownReason= int32(cdi.shutdown_reason) > > + di.OutstandingMemkb= MemKB(cdi.outstanding_memkb) > > + di.CurrentMemkb = MemKB(cdi.current_memkb) > > + di.SharedMemkb = MemKB(cdi.shared_memkb) > > + di.PagedMemkb = MemKB(cdi.paged_memkb) > > + di.MaxMemkb= MemKB(cdi.max_memkb) > > + di.CpuTime= time.Duration(cdi.cpu_time) > > + di.VcpuMaxId = uint32(cdi.vcpu_max_id) > > + di.VcpuOnline = uint32(cdi.vcpu_online) > > + di.Cpupool = uint32(cdi.cpupool) > > + di.DomainType = int32(cdi.domain_type) > > + > > + return > > +} > > + > > /* > > * Context > > */ > > @@ -356,3 +452,39 @@ func (Ctx *Context) GetVersionInfo() (info > > *VersionInfo, err error) { > > > > return > > } > > + > > +func (Ctx *Context) DomainInfo(Id Domid) (di *Dominfo, err error) { > > + err =
Re: [Xen-devel] [PATCH v2 4/5] golang/xenlight: Implement libxl_domain_info and libxl_domain_unpause
On 02/03/17 16:07, Ronald Rojas wrote: > Add calls for the following host-related functionality: > - libxl_domain_info > - libxl_domain_unpause > > Include Golang version for the libxl_domain_info as > DomainInfo. > > Signed-off-by: George Dunlap> Signed-off-by: Ronald Rojas > --- > Changes since last version > - Created type and enumeration of DomainType and ShutdownReason > > - Created String() method for DomainType and ShutdownReason > > - Refactored creating DomainInfo from c type into seperate > toGo() function > > - Applied libxl_domain_info_init/dispose() > > - whitespace fixes > > CC: xen-devel@lists.xen.org > CC: george.dun...@citrix.com > CC: ian.jack...@eu.citrix.com > CC: wei.l...@citrix.com > > --- > --- > tools/golang/xenlight/xenlight.go | 132 > ++ > 1 file changed, 132 insertions(+) > > diff --git a/tools/golang/xenlight/xenlight.go > b/tools/golang/xenlight/xenlight.go > index 63cc805..18dedcb 100644 > --- a/tools/golang/xenlight/xenlight.go > +++ b/tools/golang/xenlight/xenlight.go > @@ -34,6 +34,7 @@ import "C" > import ( > "fmt" > "unsafe" > + "time" > ) > > /* > @@ -102,6 +103,12 @@ var errors = [...]string{ > * Types: Builtins > */ > > +type Domid uint32 > + > +type MemKB uint64 > + > +type Uuid C.libxl_uuid > + > type Context struct { > ctx *C.libxl_ctx > } > @@ -203,6 +210,95 @@ func (cinfo *C.libxl_version_info) toGo() (info > *VersionInfo) { > return > } > > +type ShutdownReason int32 > + > +const( > + ShutdownReasonUnknown = ShutdownReason(C.LIBXL_SHUTDOWN_REASON_UNKNOWN) > + ShutdownReasonPoweroff = > ShutdownReason(C.LIBXL_SHUTDOWN_REASON_POWEROFF) > + ShutdownReasonReboot = ShutdownReason(C.LIBXL_SHUTDOWN_REASON_REBOOT) > + ShutdownReasonSuspend = ShutdownReason(C.LIBXL_SHUTDOWN_REASON_SUSPEND) > + ShutdownReasonCrash = ShutdownReason(C.LIBXL_SHUTDOWN_REASON_CRASH) > + ShutdownReasonWatchdog = > ShutdownReason(C.LIBXL_SHUTDOWN_REASON_WATCHDOG) > + ShutdownReasonSoftReset = > ShutdownReason(C.LIBXL_SHUTDOWN_REASON_SOFT_RESET) Looks like this could use having `go fmt` run. > + > +) > + > +func (sr ShutdownReason) String()(str string){ > + cstr := C.libxl_shutdown_reason_to_string(C.libxl_shutdown_reason(sr)) > + str = C.GoString(cstr) > + > + return > +} > + > +type DomainType int32 > + > +const( > + DomainTypeInvalid = DomainType(C.LIBXL_DOMAIN_TYPE_INVALID) > + DomainTypeHvm = DomainType(C.LIBXL_DOMAIN_TYPE_HVM) > + DomainTypePv = DomainType(C.LIBXL_DOMAIN_TYPE_PV) > +) > + > +func (dt DomainType) String()(str string){ > + cstr := C.libxl_domain_type_to_string(C.libxl_domain_type(dt)) > + str = C.GoString(cstr) > + > + return > +} > + > +type Dominfo struct { > + Uuid Uuid > + Domid Domid > + Ssidref uint32 > + SsidLabel string > + Runningbool > + Blockedbool > + Paused bool > + Shutdown bool > + Dying bool > + NeverStop bool > + > + ShutdownReason int32 > + OutstandingMemkb MemKB > + CurrentMemkb MemKB > + SharedMemkb MemKB > + PagedMemkb MemKB > + MaxMemkb MemKB > + CpuTime time.Duration > + VcpuMaxId uint32 > + VcpuOnline uint32 > + Cpupool uint32 > + DomainType int32 > + > +} > + > +func (cdi *C.libxl_dominfo) toGo()(di *Dominfo){ > + > + di = {} > + di.Uuid = Uuid(cdi.uuid) > + di.Domid = Domid(cdi.domid) > + di.Ssidref = uint32(cdi.ssidref) > + di.SsidLabel = C.GoString(cdi.ssid_label) > + di.Running = bool(cdi.running) > + di.Blocked = bool(cdi.blocked) > + di.Paused = bool(cdi.paused) > + di.Shutdown = bool(cdi.shutdown) > + di.Dying = bool(cdi.dying) > + di.NeverStop= bool(cdi.never_stop) > + di.ShutdownReason= int32(cdi.shutdown_reason) > + di.OutstandingMemkb= MemKB(cdi.outstanding_memkb) > + di.CurrentMemkb = MemKB(cdi.current_memkb) > + di.SharedMemkb = MemKB(cdi.shared_memkb) > + di.PagedMemkb = MemKB(cdi.paged_memkb) > + di.MaxMemkb= MemKB(cdi.max_memkb) > + di.CpuTime= time.Duration(cdi.cpu_time) > + di.VcpuMaxId = uint32(cdi.vcpu_max_id) > + di.VcpuOnline = uint32(cdi.vcpu_online) > + di.Cpupool = uint32(cdi.cpupool) > + di.DomainType = int32(cdi.domain_type) > + > + return > +} > + > /* > * Context > */ > @@ -356,3 +452,39 @@ func (Ctx *Context) GetVersionInfo() (info *VersionInfo, > err error) { > > return > } > + > +func (Ctx *Context) DomainInfo(Id Domid) (di *Dominfo, err error) { > + err = Ctx.CheckOpen() > + if err != nil { > + return > + } > + > + var cdi C.libxl_dominfo > + C.libxl_dominfo_init() As before, put the 'defer libxl_dominfo_dispose()' here. > + > + ret := C.libxl_domain_info(Ctx.ctx, unsafe.Pointer(), >
[Xen-devel] [PATCH v2 4/5] golang/xenlight: Implement libxl_domain_info and libxl_domain_unpause
Add calls for the following host-related functionality: - libxl_domain_info - libxl_domain_unpause Include Golang version for the libxl_domain_info as DomainInfo. Signed-off-by: George DunlapSigned-off-by: Ronald Rojas --- Changes since last version - Created type and enumeration of DomainType and ShutdownReason - Created String() method for DomainType and ShutdownReason - Refactored creating DomainInfo from c type into seperate toGo() function - Applied libxl_domain_info_init/dispose() - whitespace fixes CC: xen-devel@lists.xen.org CC: george.dun...@citrix.com CC: ian.jack...@eu.citrix.com CC: wei.l...@citrix.com --- --- tools/golang/xenlight/xenlight.go | 132 ++ 1 file changed, 132 insertions(+) diff --git a/tools/golang/xenlight/xenlight.go b/tools/golang/xenlight/xenlight.go index 63cc805..18dedcb 100644 --- a/tools/golang/xenlight/xenlight.go +++ b/tools/golang/xenlight/xenlight.go @@ -34,6 +34,7 @@ import "C" import ( "fmt" "unsafe" + "time" ) /* @@ -102,6 +103,12 @@ var errors = [...]string{ * Types: Builtins */ +type Domid uint32 + +type MemKB uint64 + +type Uuid C.libxl_uuid + type Context struct { ctx *C.libxl_ctx } @@ -203,6 +210,95 @@ func (cinfo *C.libxl_version_info) toGo() (info *VersionInfo) { return } +type ShutdownReason int32 + +const( + ShutdownReasonUnknown = ShutdownReason(C.LIBXL_SHUTDOWN_REASON_UNKNOWN) + ShutdownReasonPoweroff = ShutdownReason(C.LIBXL_SHUTDOWN_REASON_POWEROFF) + ShutdownReasonReboot = ShutdownReason(C.LIBXL_SHUTDOWN_REASON_REBOOT) + ShutdownReasonSuspend = ShutdownReason(C.LIBXL_SHUTDOWN_REASON_SUSPEND) + ShutdownReasonCrash = ShutdownReason(C.LIBXL_SHUTDOWN_REASON_CRASH) + ShutdownReasonWatchdog = ShutdownReason(C.LIBXL_SHUTDOWN_REASON_WATCHDOG) + ShutdownReasonSoftReset = ShutdownReason(C.LIBXL_SHUTDOWN_REASON_SOFT_RESET) + +) + +func (sr ShutdownReason) String()(str string){ + cstr := C.libxl_shutdown_reason_to_string(C.libxl_shutdown_reason(sr)) + str = C.GoString(cstr) + + return +} + +type DomainType int32 + +const( + DomainTypeInvalid = DomainType(C.LIBXL_DOMAIN_TYPE_INVALID) + DomainTypeHvm = DomainType(C.LIBXL_DOMAIN_TYPE_HVM) + DomainTypePv = DomainType(C.LIBXL_DOMAIN_TYPE_PV) +) + +func (dt DomainType) String()(str string){ + cstr := C.libxl_domain_type_to_string(C.libxl_domain_type(dt)) + str = C.GoString(cstr) + + return +} + +type Dominfo struct { + Uuid Uuid + Domid Domid + Ssidref uint32 + SsidLabel string + Runningbool + Blockedbool + Paused bool + Shutdown bool + Dying bool + NeverStop bool + + ShutdownReason int32 + OutstandingMemkb MemKB + CurrentMemkb MemKB + SharedMemkb MemKB + PagedMemkb MemKB + MaxMemkb MemKB + CpuTime time.Duration + VcpuMaxId uint32 + VcpuOnline uint32 + Cpupool uint32 + DomainType int32 + +} + +func (cdi *C.libxl_dominfo) toGo()(di *Dominfo){ + + di = {} + di.Uuid = Uuid(cdi.uuid) + di.Domid = Domid(cdi.domid) + di.Ssidref = uint32(cdi.ssidref) + di.SsidLabel = C.GoString(cdi.ssid_label) + di.Running = bool(cdi.running) + di.Blocked = bool(cdi.blocked) + di.Paused = bool(cdi.paused) + di.Shutdown = bool(cdi.shutdown) + di.Dying = bool(cdi.dying) + di.NeverStop= bool(cdi.never_stop) + di.ShutdownReason= int32(cdi.shutdown_reason) + di.OutstandingMemkb= MemKB(cdi.outstanding_memkb) + di.CurrentMemkb = MemKB(cdi.current_memkb) + di.SharedMemkb = MemKB(cdi.shared_memkb) + di.PagedMemkb = MemKB(cdi.paged_memkb) + di.MaxMemkb= MemKB(cdi.max_memkb) + di.CpuTime= time.Duration(cdi.cpu_time) + di.VcpuMaxId = uint32(cdi.vcpu_max_id) + di.VcpuOnline = uint32(cdi.vcpu_online) + di.Cpupool = uint32(cdi.cpupool) + di.DomainType = int32(cdi.domain_type) + + return +} + /* * Context */ @@ -356,3 +452,39 @@ func (Ctx *Context) GetVersionInfo() (info *VersionInfo, err error) { return } + +func (Ctx *Context) DomainInfo(Id Domid) (di *Dominfo, err error) { + err = Ctx.CheckOpen() + if err != nil { + return + } + + var cdi C.libxl_dominfo + C.libxl_dominfo_init() + + ret := C.libxl_domain_info(Ctx.ctx, unsafe.Pointer(), C.uint32_t(Id)) + + if ret != 0 { + err = Error(-ret) + return + } + + di = cdi.toGo() + C.libxl_dominfo_dispose() + + return +} + +func (Ctx *Context) DomainUnpause(Id Domid) (err error) { + err = Ctx.CheckOpen() + if err != nil { + return + } + + ret :=