[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH v3 8/8] RFC: Sketch constructors, DomainCreateNew


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: George Dunlap <george.dunlap@xxxxxxxxxx>
  • Date: Fri, 17 Jan 2020 15:57:34 +0000
  • Authentication-results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=george.dunlap@xxxxxxxxxx; spf=Pass smtp.mailfrom=George.Dunlap@xxxxxxxxxx; spf=None smtp.helo=postmaster@xxxxxxxxxxxxxxx
  • Cc: Nick Rosbrook <rosbrookn@xxxxxxxxxxxx>, George Dunlap <george.dunlap@xxxxxxxxxx>
  • Delivery-date: Fri, 17 Jan 2020 15:58:21 +0000
  • Ironport-sdr: phDJsRD1+0pRTgV+tA2Wf07jXibt+z2i1gIbzgkboJ11U5Tzcljcv8DW41uwcNIwlAhADCL1sc U/VnphM3S3uxkHx5mOyEFPlvv2nP79uQnFCLaJHjQZeIF8BrkD4uFZgW6KnPBTtcFBn7xxn4wU INbIuxcI4KZj6ysGPpAXILDnASiLZp4OZqEj0sNpn00/lLXDykyk4TrbTQJ0sDMzU0+K3EHQ+a tw2SB9REVWkxqcc2guZrhQV9CPt4HxNUDagh68Qa++P4xTR6vgdyYEpiL5KwGDYkepoaqzJVZn Z5Q=
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

This is a sketch of functionality suitable for creating a basic
domain, with a disk and a vif.  DomainConfig, DeviceDisk, and
DeviceNic types are all created using constructor functions, which
initialize them with libxl's defaults.

DomainCreateNew takes the config and calls without any updates.

Obviously some of these will need to be changed it we switch to
passing references to .toC() rather than passing back by value.

The main purpose of this is to allow testing of creating a hard-coded
domain.

Creating a domain would look like this:

        // type = "pv"
        dconf, err := xl.NewDomainConfig(xl.DomainTypePv)
        if err != nil {
                fmt.Printf("NewDomainConfig: %v\n", err)
                return
        }
        dconf.CInfo.Type = xl.DomainTypePv
        // name = "c6-01"
        dconf.CInfo.Name = "c6-01"
        // vcpus=4
        dconf.BInfo.MaxVcpus = 4
        // memory = "2048"
        dconf.BInfo.MaxMemkb = 2048 * 1024
        dconf.BInfo.TargetMemkb = 2048 * 1024
        // on_crash = 'destroy'
        dconf.OnCrash = xl.ActionOnShutdownDestroy
        // bootloader = "pygrub"
        dconf.BInfo.Bootloader = "pygrub"
        // disk = [ 'vdev=hda,format=raw,target=/images/c6-01.raw']
        {
                disk, err := xl.NewDeviceDisk()
                if err != nil {
                        fmt.Printf("NewDeviceDisk: %v\n", err)
                        return
                }
                disk.Vdev = "hda"
                //disk.DiskBackend = xl.DiskBackendPhy
                disk.Format = xl.DiskFormatRaw
                disk.Readwrite = 1
                disk.PdevPath = "/images/c6-01.raw"
                dconf.Disks = append(dconf.Disks, *disk)
        }
        // vif = [ 'mac=5a:5b:d6:f1:d6:b4' ]
        {
                vif, err := xl.NewDeviceNic()
                if err != nil {
                        fmt.Printf("NewDeviceNic: %v\n", err)
                        return
                }
                vif.Mac = xl.Mac{ 0x5a, 0x5b, 0xd6, 0x31, 0xd6, 0xb4 }
                dconf.Nics = append(dconf.Nics, *vif)
        }
        // serial='pty' # HVM only

        did, err := ctx.DomainCreateNew(dconf)

        if err != nil {
                fmt.Printf("Creating domain: %v\n", err)
                return
        }

        fmt.Printf("Domain %s(%d) created successfully", dconf.CInfo.Name, did)


Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxx>
---
CC: Nick Rosbrook <rosbrookn@xxxxxxxxxxxx>
---
 tools/golang/xenlight/xenlight.go | 66 +++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)

diff --git a/tools/golang/xenlight/xenlight.go 
b/tools/golang/xenlight/xenlight.go
index c462e4bb42..5a21a2b9b8 100644
--- a/tools/golang/xenlight/xenlight.go
+++ b/tools/golang/xenlight/xenlight.go
@@ -1113,3 +1113,69 @@ func (Ctx *Context) PrimaryConsoleGetTty(domid uint32) 
(path string, err error)
        path = C.GoString(cpath)
        return
 }
+
+func NewDomainConfig(t DomainType) (*DomainConfig, error) {
+       var cconfig C.libxl_domain_config
+
+       C.libxl_domain_config_init(&cconfig)
+       C.libxl_domain_build_info_init_type(&cconfig.b_info, 
C.libxl_domain_type(t))
+
+       gconfig := &DomainConfig{}
+       err := gconfig.fromC(&cconfig)
+       if err != nil {
+               return nil, err
+       }
+
+       return gconfig, nil
+}
+
+func NewDeviceDisk() (*DeviceDisk, error) {
+       var ctype C.libxl_device_disk
+
+       C.libxl_device_disk_init(&ctype)
+
+       gtype := &DeviceDisk{}
+       err := gtype.fromC(&ctype)
+
+       if err != nil {
+               return nil, err
+       }
+
+       return gtype, nil
+}
+
+func NewDeviceNic() (*DeviceNic, error) {
+       var ctype C.libxl_device_nic
+
+       C.libxl_device_nic_init(&ctype)
+
+       gtype := &DeviceNic{}
+       err := gtype.fromC(&ctype)
+
+       if err != nil {
+               return nil, err
+       }
+
+       return gtype, nil
+}
+
+// int libxl_domain_create_new(libxl_ctx *ctx, libxl_domain_config *d_config,
+//                             uint32_t *domid,
+//                             const libxl_asyncop_how *ao_how,
+//                             const libxl_asyncprogress_how *aop_console_how)
+func (Ctx *Context) DomainCreateNew(config *DomainConfig) (Domid, error) {
+       var cdomid C.uint32_t
+       var cconfig C.libxl_domain_config
+       err := config.toC(&cconfig)
+       if err != nil {
+               return Domid(0), fmt.Errorf("converting domain config to C: 
%v", err)
+       }
+       defer C.libxl_domain_config_dispose(&cconfig)
+
+       ret := C.libxl_domain_create_new(Ctx.ctx, &cconfig, &cdomid, nil, nil)
+       if ret != 0 {
+               return Domid(0), Error(ret)
+       }
+
+       return Domid(cdomid), nil
+}
-- 
2.24.1


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.