WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH 5 of 8] libxl: autogenerate _libxl_types.h

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH 5 of 8] libxl: autogenerate _libxl_types.h
From: Ian Campbell <ian.campbell@xxxxxxxxxx>
Date: Tue, 03 Aug 2010 12:00:20 +0100
Cc: Ian Campbell <ian.campbell@xxxxxxxxxx>
Delivery-date: Tue, 03 Aug 2010 04:08:24 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <patchbomb.1280833215@xxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1280829586 -3600
# Node ID c87dd259a8ed069d8786aadf9e1f6e555aa6778e
# Parent  cce2e854fa97f300e1efe486a02950c7b93ac339
libxl: autogenerate _libxl_types.h

The libxl interface types are represented by a simple python data
structure (which could be parsed from a bespoke language in the
future).

This will allow the autogeneration of functions to free the component
members of the libxl types. In the future it may also enable auto
generation of type marshalling code for language bindings.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

diff -r cce2e854fa97 -r c87dd259a8ed tools/libxl/Makefile
--- a/tools/libxl/Makefile      Tue Aug 03 10:59:46 2010 +0100
+++ b/tools/libxl/Makefile      Tue Aug 03 10:59:46 2010 +0100
@@ -51,6 +51,12 @@ _libxl_paths.h: genpath
        mv _$@ $@
 
 libxl_paths.c: _libxl_paths.h
+
+libxl.h: _libxl_types.h
+
+_libxl_types.h: gentypes.py libxltypes.py
+       python gentypes.py __libxl_types.h
+       mv __libxl_types.h _libxl_types.h
 
 libxenlight.so: libxenlight.so.$(MAJOR)
        ln -sf $< $@
@@ -108,10 +114,7 @@ install: all
 
 .PHONY: clean
 clean:
-       # XXX Preserve during transition to autogeneration
-       cp _libxl_types.h SAVED__libxl_types.h
        $(RM) -f _*.h *.o *.so* *.a $(CLIENTS) $(DEPS)
-       mv SAVED__libxl_types.h _libxl_types.h 
 #      $(RM) -f $(AUTOSRCS) $(AUTOINCS)
 
 distclean: clean
diff -r cce2e854fa97 -r c87dd259a8ed tools/libxl/_libxl_types.h
--- a/tools/libxl/_libxl_types.h        Tue Aug 03 10:59:46 2010 +0100
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,335 +0,0 @@
-#ifndef __LIBXL_TYPES_H
-#define __LIBXL_TYPES_H
-
-typedef struct {
-    libxl_uuid uuid;
-    uint32_t domid;
-    uint8_t running:1;
-    uint8_t blocked:1;
-    uint8_t paused:1;
-    uint8_t shutdown:1;
-    uint8_t dying:1;
-    /*
-     * Valid SHUTDOWN_* value from xen/sched.h iff (shutdown||dying).
-     *
-     * Otherwise set to a value guaranteed not to clash with any valid
-     * SHUTDOWN_* constant.
-     */
-    unsigned int shutdown_reason;
-    uint64_t max_memkb;
-    uint64_t cpu_time;
-    uint32_t vcpu_max_id;
-    uint32_t vcpu_online;
-} libxl_dominfo;
-
-typedef struct {
-    uint32_t poolid;
-} libxl_poolinfo;
-
-typedef struct {
-    libxl_uuid uuid;
-    uint32_t domid;
-} libxl_vminfo;
-
-typedef struct {
-    int xen_version_major;
-    int xen_version_minor;
-    char * xen_version_extra;
-    char * compiler;
-    char * compile_by;
-    char * compile_domain;
-    char * compile_date;
-    char * capabilities;
-    char * changeset;
-    unsigned long virt_start;
-    unsigned long pagesize;
-    char * commandline;
-} libxl_version_info;
-
-typedef struct {
-    bool hvm;
-    bool hap;
-    bool oos;
-    int ssidref;
-    char * name;
-    libxl_uuid uuid;
-    char ** xsdata;
-    char ** platformdata;
-    uint32_t poolid;
-    char * poolname;
-} libxl_domain_create_info;
-
-typedef struct {
-    /*
-     * Path is always set if the file refernece is valid. However if
-     * mapped is true then the actual file may already be unlinked.
-     */
-    char * path;
-    int mapped;
-    void * data;
-    size_t size;
-} libxl_file_reference;
-
-/*
- * Instances of libxl_file_reference contained in this struct which
- * have been mapped (with libxl_file_reference_map) will be unmapped
- * by libxl_domain_build/restore. If either of these are never called
- * then the user is responsible for calling
- * libxl_file_reference_unmap.
- */
-typedef struct {
-    int max_vcpus;
-    int cur_vcpus;
-    int tsc_mode;
-    uint32_t max_memkb;
-    uint32_t target_memkb;
-    uint32_t video_memkb;
-    uint32_t shadow_memkb;
-    bool disable_migrate;
-    libxl_file_reference kernel;
-    int hvm;
-    union {
-        struct {
-            bool pae;
-            bool apic;
-            bool acpi;
-            bool nx;
-            bool viridian;
-            char * timeoffset;
-            bool hpet;
-            bool vpt_align;
-            int timer_mode;
-        } hvm;
-        struct {
-            uint32_t slack_memkb;
-            const char * bootloader;
-            const char * bootloader_args;
-            char * cmdline;
-            libxl_file_reference ramdisk;
-            const char * features;
-        } pv;
-    } u;
-} libxl_domain_build_info;
-
-typedef struct {
-    uint32_t store_port;
-    unsigned long store_mfn;
-    uint32_t console_port;
-    unsigned long console_mfn;
-} libxl_domain_build_state;
-
-/*
- * Device Model information.
- *
- * Network is missing
- */
-typedef struct {
-    int domid;
-    /*
-     * this is use only with stubdom, and must be different from the domain 
uuid
-     */
-    libxl_uuid uuid;
-    char * dom_name;
-    char * device_model;
-    char * saved_state;
-    libxl_qemu_machine_type type;
-    /*
-     * size of the videoram in MB
-     */
-    int videoram;
-    /*
-     * stdvga enabled or disabled
-     */
-    bool stdvga;
-    /*
-     * vnc enabled or disabled
-     */
-    bool vnc;
-    /*
-     * address:port that should be listened on for the VNC server if vnc is set
-     */
-    char * vnclisten;
-    /*
-     * the VNC password
-     */
-    char * vncpasswd;
-    /*
-     * set VNC display number
-     */
-    int vncdisplay;
-    /*
-     * try to find an unused port for the VNC server
-     */
-    bool vncunused;
-    /*
-     * set keyboard layout, default is en-us keyboard
-     */
-    char * keymap;
-    /*
-     * sdl enabled or disabled
-     */
-    bool sdl;
-    /*
-     * opengl enabled or disabled (if enabled requires sdl enabled)
-     */
-    bool opengl;
-    /*
-     * no graphics, use serial port
-     */
-    bool nographic;
-    /*
-     * serial port re-direct to pty deivce
-     */
-    char * serial;
-    /*
-     * boot order, for example dca
-     */
-    char * boot;
-    /*
-     * usb support enabled or disabled
-     */
-    bool usb;
-    /*
-     * enable usb mouse: tablet for absolute mouse, mouse for PS/2 protocol 
relative mouse
-     */
-    char * usbdevice;
-    /*
-     * enable sound hardware
-     */
-    char * soundhw;
-    /*
-     * apic enabled or disabled
-     */
-    bool apic;
-    /*
-     * max number of vcpus
-     */
-    int vcpus;
-    /*
-     * vcpus actually available
-     */
-    int vcpu_avail;
-    /*
-     * enable/disable the xen platform pci device
-     */
-    int xen_platform_pci;
-    /*
-     * extra parameters pass directly to qemu, NULL terminated
-     */
-    char ** extra;
-} libxl_device_model_info;
-
-typedef struct {
-    uint32_t backend_domid;
-    uint32_t domid;
-    int devid;
-    /*
-     * vnc enabled or disabled
-     */
-    bool vnc;
-    /*
-     * address:port that should be listened on for the VNC server if vnc is set
-     */
-    char * vnclisten;
-    /*
-     * the VNC password
-     */
-    char * vncpasswd;
-    /*
-     * set VNC display number
-     */
-    int vncdisplay;
-    /*
-     * try to find an unused port for the VNC server
-     */
-    bool vncunused;
-    /*
-     * set keyboard layout, default is en-us keyboard
-     */
-    char * keymap;
-    /*
-     * sdl enabled or disabled
-     */
-    bool sdl;
-    /*
-     * opengl enabled or disabled (if enabled requires sdl enabled)
-     */
-    bool opengl;
-    char * display;
-    char * xauthority;
-} libxl_device_vfb;
-
-typedef struct {
-    uint32_t backend_domid;
-    uint32_t domid;
-    int devid;
-} libxl_device_vkb;
-
-typedef struct {
-    uint32_t backend_domid;
-    uint32_t domid;
-    int devid;
-    libxl_console_constype constype;
-    libxl_domain_build_state * build_state;
-} libxl_device_console;
-
-typedef struct {
-    uint32_t backend_domid;
-    uint32_t domid;
-    char * physpath;
-    libxl_disk_phystype phystype;
-    char * virtpath;
-    int unpluggable;
-    int readwrite;
-    int is_cdrom;
-} libxl_device_disk;
-
-typedef struct {
-    uint32_t backend_domid;
-    uint32_t domid;
-    int devid;
-    int mtu;
-    char * model;
-    libxl_mac mac;
-    struct in_addr ip;
-    char * bridge;
-    char * ifname;
-    char * script;
-    libxl_nic_type nictype;
-} libxl_device_nic;
-
-typedef struct {
-    int devid;
-    libxl_mac front_mac;
-    libxl_mac back_mac;
-    uint32_t backend_domid;
-    uint32_t domid;
-    uint32_t trusted:1;
-    uint32_t back_trusted:1;
-    uint32_t filter_mac:1;
-    uint32_t front_filter_mac:1;
-    uint32_t pdev;
-    uint32_t max_bypasses;
-    char * bridge;
-} libxl_device_net2;
-
-typedef struct {
-    union {
-        unsigned int value;
-        struct {
-            unsigned int reserved1:2;
-            unsigned int reg:6;
-            unsigned int func:3;
-            unsigned int dev:5;
-            unsigned int bus:8;
-            unsigned int reserved2:7;
-            unsigned int enable:1;
-        };
-    };
-    unsigned int domain;
-    unsigned int vdevfn;
-    bool msitranslate;
-    bool power_mgmt;
-} libxl_device_pci;
-
-#endif /* __LIBXL_TYPES_H */
diff -r cce2e854fa97 -r c87dd259a8ed tools/libxl/gentypes.py
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/libxl/gentypes.py   Tue Aug 03 10:59:46 2010 +0100
@@ -0,0 +1,86 @@
+#!/usr/bin/python
+import sys
+import re
+
+import libxltypes
+
+def format_comment(level, comment):
+    indent = reduce(lambda x,y: x + " ", range(level), "")
+    s  = "%s/*\n" % indent
+    s += "%s * " % indent
+    comment = comment.replace("\n", "\n%s * " % indent)
+    x = re.compile(r'^%s \* $' % indent, re.MULTILINE)
+    comment = x.sub("%s *" % indent, comment)
+    s += comment
+    s += "\n"
+    s += "%s */" % indent
+    s += "\n"
+    return s
+
+def libxl_C_type_of(ty):
+    return ty.typename
+
+def libxl_C_instance_of(ty, instancename):
+    if isinstance(ty, libxltypes.BitField):
+        return libxl_C_type_of(ty) + " " + instancename + ":%d" % ty.width
+    elif isinstance(ty, libxltypes.Aggregate) and ty.typename is None:
+        if instancename is None:
+            return libxl_C_type_define(ty)
+        else:
+            return libxl_C_type_define(ty) + " " + instancename
+    else:
+        return libxl_C_type_of(ty) + " " + instancename
+
+def libxl_C_type_define(ty, indent = ""):
+    s = ""
+    if isinstance(ty, libxltypes.Aggregate):
+       if ty.comment is not None:
+            s += format_comment(0, ty.comment)
+
+        if ty.name is None:
+            s += "%s {\n" % ty.kind
+        else:
+            s += "typedef %s {\n" % ty.kind
+
+        for f in ty.fields:
+            if f.comment is not None:
+                s += format_comment(4, f.comment)
+            x = libxl_C_instance_of(f.type, f.name)
+            if f.const:
+                x = "const " + x
+            x = x.replace("\n", "\n    ")
+            s += "    " + x + ";\n"
+        if ty.name is None:
+            s += "}"
+        else:
+            s += "} libxl_%s" % ty.name
+    else:
+        raise NotImplementedError("%s" % type(ty))
+    return s.replace("\n", "\n%s" % indent)
+
+if __name__ == '__main__':
+    if len(sys.argv) < 2:
+        print >>sys.stderr, "Usage: gentypes.py <header>"
+        sys.exit(1)
+
+    header = sys.argv[1]
+    print "outputting libxl types to %s" % header
+
+    f = open(header, "w")
+    
+    f.write("""#ifndef __LIBXL_TYPES_H
+#define __LIBXL_TYPES_H
+
+/* DO NOT EDIT.
+ *
+ * This file is autogenerated by
+ * "%s"
+ */
+ 
+""" % " ".join(sys.argv))
+        
+    for t in libxltypes.Types:
+        f.write(libxl_C_type_define(t) + ";\n")
+        f.write("\n")
+
+    f.write("""#endif /* __LIBXL_TYPES_H */\n""")
diff -r cce2e854fa97 -r c87dd259a8ed tools/libxl/libxltypes.py
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/libxl/libxltypes.py Tue Aug 03 10:59:46 2010 +0100
@@ -0,0 +1,377 @@
+class Type(object):
+    def __init__(self, typename, **kwargs):
+        self.comment = None        
+        self.namespace = "libxl_"
+        
+        if kwargs.has_key('libxl_type'):
+            self.comment = kwargs['comment']
+            
+        if kwargs.has_key('namespace'):
+            self.namespace = kwargs['namespace']
+
+        if typename is None: # Anonymous type
+            self.typename = None
+        elif self.namespace is None: # e.g. system provided types
+            self.typename = typename
+        else:
+            self.typename = self.namespace + typename
+
+class Builtin(Type):
+    """Builtin type"""
+    def __init__(self, typename, namespace = "libxl_"):
+        Type.__init__(self, typename, namespace = namespace)
+
+class UInt(Type):
+    def __init__(self, w):
+       typename = "uint%d_t" % w
+        Type.__init__(self, typename, namespace = None)
+        self.width = w
+
+class BitField(Type):
+    def __init__(self, ty, w):
+        Type.__init__(self, ty.typename, namespace = ty.namespace)
+        self.width = w
+
+
+class Field(Type):
+    """An element of an Aggregate type"""
+    def __init__(self, type, name, const = False, comment = None):
+        Type.__init__(self,type.typename)
+        self.type = type
+        self.name = name
+        self.const = const
+        self.comment = comment
+
+class Aggregate(Type):
+    """A type containing a collection of other types"""
+    def __init__(self, kind, name, fields, comment = None):
+        Type.__init__(self, name)
+        self.kind = kind
+        self.name = name
+       self.comment = comment
+        self.fields = []
+        for f in fields:
+            # (name, type[, const=False[, comment=None]])
+            if len(f) == 2:
+                n,t = f
+                const = False
+                comment = None
+            elif len(f) == 3:
+                n,t,const = f
+                comment = None
+            else:
+                n,t,const,comment = f
+            self.fields.append(Field(t,n,const,comment))
+
+class Struct(Aggregate):
+    def __init__(self, name, fields, comment = None):
+        Aggregate.__init__(self, "struct", name, fields, comment)
+
+class Union(Aggregate):
+    def __init__(self, name, fields, comment = None):
+        Aggregate.__init__(self, "union", name, fields, comment)
+    
+class KeyValueList(Type):
+    """A map type"""
+    def __init__(self, ktype, vtype):
+        if ktype != string and vtype != string:
+            raise NotImplementedError("Only KeyValueList string -> string is 
supported")
+        
+        Type.__init__(self, "char **", namespace = None)
+
+class Reference(Type):
+    """A reference to another type"""
+    def __init__(self, ty):
+        # Ugh
+        Type.__init__(self, ty.name + " *")
+
+#
+# Standard Types
+#
+
+void = Builtin("void *", namespace = None)
+bool = Builtin("bool", namespace = None)
+size_t = Builtin("size_t", namespace = None)
+
+integer = Builtin("int", namespace = None)
+unsigned_integer = Builtin("unsigned int", namespace = None)
+unsigned = Builtin("unsigned int", namespace = None)
+unsigned_long = Builtin("unsigned long", namespace = None)
+
+uint8 = UInt(8)
+uint16 = UInt(16)
+uint32 = UInt(32)
+uint64 = UInt(64)
+
+domid = UInt(32)
+
+string = Builtin("char *", namespace = None)
+string_list = Builtin("char **", namespace = None)
+
+inaddr_ip = Builtin("struct in_addr", namespace = None)
+
+#
+# Builtin libxl types
+#
+
+libxl_ctx = Builtin("ctx")
+libxl_uuid = Builtin("uuid")
+libxl_mac = Builtin("mac")
+libxl_qemu_machine_type = Builtin("qemu_machine_type")
+libxl_console_constype = Builtin("console_constype")
+libxl_disk_phystype = Builtin("disk_phystype")
+libxl_nic_type = Builtin("nic_type")
+
+#
+# Complex libxl types
+#
+libxl_dominfo = Struct("dominfo",[
+    ("uuid",        libxl_uuid),
+    ("domid",       domid),
+    ("running",     BitField(uint8, 1)),
+    ("blocked",     BitField(uint8, 1)),
+    ("paused",      BitField(uint8, 1)),
+    ("shutdown",    BitField(uint8, 1)),
+    ("dying",       BitField(uint8, 1)),
+    
+    ("shutdown_reason", unsigned, False, 
+"""Valid SHUTDOWN_* value from xen/sched.h iff (shutdown||dying).
+
+Otherwise set to a value guaranteed not to clash with any valid
+SHUTDOWN_* constant."""),
+    ("max_memkb",   uint64),
+    ("cpu_time",    uint64),
+    ("vcpu_max_id", uint32),
+    ("vcpu_online", uint32),
+    ])
+
+libxl_poolinfo = Struct("poolinfo", [("poolid", uint32)])
+
+libxl_vminfo = Struct("vminfo", [
+    ("uuid", libxl_uuid),
+    ("domid", domid),
+    ])
+
+libxl_version_info = Struct("version_info", [
+    ("xen_version_major", integer),
+    ("xen_version_minor", integer),
+    ("xen_version_extra", string),
+    ("compiler",          string),
+    ("compile_by",        string),
+    ("compile_domain",    string),
+    ("compile_date",      string),
+    ("capabilities",      string),
+    ("changeset",         string),
+    ("virt_start",        unsigned_long),
+    ("pagesize",          unsigned_long),
+    ("commandline",       string),
+    ])
+                                             
+libxl_file_reference = Struct("file_reference",[
+    ("path", string, False,
+"""Path is always set if the file refernece is valid. However if
+mapped is true then the actual file may already be unlinked."""),
+    ("mapped", integer),
+    ("data", void),
+    ("size", size_t)])
+
+libxl_domain_create_info = Struct("domain_create_info",[
+    ("hvm",          bool),
+    ("hap",          bool),
+    ("oos",          bool),
+    ("ssidref",      integer),
+    ("name",         string),
+    ("uuid",         libxl_uuid),
+    ("xsdata",       KeyValueList(string, string)),
+    ("platformdata", KeyValueList(string, string)),
+    ("poolid",       uint32),
+    ("poolname",     string),
+    ])
+
+libxl_domain_build_info = Struct("domain_build_info",[
+    ("max_vcpus",       integer),
+    ("cur_vcpus",       integer),
+    ("tsc_mode",        integer),
+    ("max_memkb",       uint32),
+    ("target_memkb",    uint32),
+    ("video_memkb",     uint32),
+    ("shadow_memkb",    uint32),
+    ("disable_migrate", bool),
+    ("kernel",          libxl_file_reference),
+    ("hvm",             integer),
+    ("u", Union(None,
+                [("hvm", Struct(None,
+                                [("pae", bool),
+                                 ("apic", bool),
+                                 ("acpi", bool),
+                                 ("nx", bool),
+                                 ("viridian", bool),
+                                 ("timeoffset", string),
+                                 ("hpet", bool),
+                                 ("vpt_align", bool),
+                                 ("timer_mode", integer),
+                                 ])),
+                 ("pv", Struct(None,
+                               [("slack_memkb", uint32),
+                                ("bootloader", string, True),
+                                ("bootloader_args", string, True),
+                                ("cmdline", string),
+                                ("ramdisk", libxl_file_reference),
+                                ("features", string, True),
+                                ])),
+                 ])),
+    ],
+    comment =
+"""Instances of libxl_file_reference contained in this struct which
+have been mapped (with libxl_file_reference_map) will be unmapped
+by libxl_domain_build/restore. If either of these are never called
+then the user is responsible for calling
+libxl_file_reference_unmap.""")
+
+libxl_domain_build_state = Struct("domain_build_state",[
+    ("store_port",   uint32),
+    ("store_mfn",    unsigned_long),
+    ("console_port", uint32),
+    ("console_mfn",  unsigned_long),
+    ])
+
+libxl_device_model_info = Struct("device_model_info",[
+    ("domid",            integer),
+    ("uuid",             libxl_uuid,  False, "this is use only with stubdom, 
and must be different from the domain uuid"),
+    ("dom_name",         string),
+    ("device_model",     string),
+    ("saved_state",      string),
+    ("type",             libxl_qemu_machine_type),
+    ("videoram",         integer,     False, "size of the videoram in MB"),
+    ("stdvga",           bool,        False, "stdvga enabled or disabled"),
+    ("vnc",              bool,        False, "vnc enabled or disabled"),
+    ("vnclisten",        string,      False, "address:port that should be 
listened on for the VNC server if vnc is set"),
+    ("vncpasswd",        string,      False, "the VNC password"),
+    ("vncdisplay",       integer,     False, "set VNC display number"),
+    ("vncunused",        bool,        False, "try to find an unused port for 
the VNC server"),
+    ("keymap",           string,      False, "set keyboard layout, default is 
en-us keyboard"),
+    ("sdl",              bool,        False, "sdl enabled or disabled"),
+    ("opengl",           bool,        False, "opengl enabled or disabled (if 
enabled requires sdl enabled)"),
+    ("nographic",        bool,        False, "no graphics, use serial port"),
+    ("serial",           string,      False, "serial port re-direct to pty 
deivce"),
+    ("boot",             string,      False, "boot order, for example dca"),
+    ("usb",              bool,        False, "usb support enabled or 
disabled"),
+    ("usbdevice",        string,      False, "enable usb mouse: tablet for 
absolute mouse, mouse for PS/2 protocol relative mouse"),
+    ("soundhw",          string,      False, "enable sound hardware"),
+    ("apic",             bool,        False, "apic enabled or disabled"),
+    ("vcpus",             integer,    False, "max number of vcpus"),
+    ("vcpu_avail",       integer,     False, "vcpus actually available"),
+    ("xen_platform_pci", integer,     False, "enable/disable the xen platform 
pci device"),
+    ("extra",            string_list, False, "extra parameters pass directly 
to qemu, NULL terminated"),
+    ],
+    comment=
+"""Device Model information.
+
+Network is missing""")
+
+libxl_device_vfb = Struct("device_vfb", [
+    ("backend_domid", uint32),
+    ("domid",         uint32),
+    ("devid",         integer),
+    ("vnc",           bool,     False, "vnc enabled or disabled"),
+    ("vnclisten",     string,   False, "address:port that should be listened 
on for the VNC server if vnc is set"),
+    ("vncpasswd",     string,   False, "the VNC password"),
+    ("vncdisplay",    integer,  False, "set VNC display number"),
+    ("vncunused",     bool,     False, "try to find an unused port for the VNC 
server"),
+    ("keymap",        string,   False, "set keyboard layout, default is en-us 
keyboard"),
+    ("sdl",           bool,     False, "sdl enabled or disabled"),
+    ("opengl",        bool,     False, "opengl enabled or disabled (if enabled 
requires sdl enabled)"),
+    ("display",       string),
+    ("xauthority",    string),
+    ])
+
+libxl_device_vkb = Struct("device_vkb", [
+    ("backend_domid", uint32),
+    ("domid", domid),
+    ("devid", integer),
+    ])
+
+libxl_device_console = Struct("device_console", [
+    ("backend_domid", uint32),
+    ("domid", domid),
+    ("devid", integer),
+    ("constype", libxl_console_constype),
+    ("build_state", Reference(libxl_domain_build_state)),
+    ])
+
+libxl_device_disk = Struct("device_disk", [
+    ("backend_domid", uint32),
+    ("domid", domid),
+    ("physpath", string),
+    ("phystype", libxl_disk_phystype),
+    ("virtpath", string),
+    ("unpluggable", integer),
+    ("readwrite", integer),
+    ("is_cdrom", integer),
+    ])
+
+libxl_device_nic = Struct("device_nic", [
+    ("backend_domid", uint32),
+    ("domid", domid),
+    ("devid", integer),
+    ("mtu", integer),
+    ("model", string),
+    ("mac", libxl_mac),
+    ("ip", inaddr_ip),
+    ("bridge", string),
+    ("ifname", string),
+    ("script", string),
+    ("nictype", libxl_nic_type),
+    ])
+
+libxl_device_net2 = Struct("device_net2", [
+    ("devid", integer),
+    ("front_mac", libxl_mac),
+    ("back_mac", libxl_mac),
+    ("backend_domid", uint32),
+    ("domid", domid),
+    ("trusted", BitField(uint32, 1)),
+    ("back_trusted", BitField(uint32, 1)),
+    ("filter_mac", BitField(uint32, 1)),
+    ("front_filter_mac", BitField(uint32, 1)),
+    ("pdev", uint32),
+    ("max_bypasses", uint32),
+    ("bridge", string),
+    ])
+
+libxl_device_pci = Struct("device_pci", [
+    (None, Union(None, [("value", unsigned_integer),
+                        (None, Struct(None,[("reserved1", 
BitField(unsigned_integer, 2)),
+                                            ("reg",       
BitField(unsigned_integer, 6)),
+                                            ("func",      
BitField(unsigned_integer, 3)),
+                                            ("dev",       
BitField(unsigned_integer, 5)),
+                                            ("bus",       
BitField(unsigned_integer, 8)),
+                                            ("reserved2", 
BitField(unsigned_integer, 7)),
+                                            ("enable",    
BitField(unsigned_integer, 1)),
+                                             ])),
+                        ])
+     ),
+    ("domain", unsigned_integer),
+    ("vdevfn", unsigned_integer),
+    ("msitranslate", bool),
+    ("power_mgmt", bool),
+    ])
+
+Types = [
+    libxl_dominfo,
+    libxl_poolinfo,
+    libxl_vminfo,
+    libxl_version_info,
+    libxl_domain_create_info,
+    libxl_file_reference,
+    libxl_domain_build_info,
+    libxl_domain_build_state,
+    libxl_device_model_info,
+    libxl_device_vfb,
+    libxl_device_vkb,
+    libxl_device_console,
+    libxl_device_disk,
+    libxl_device_nic,
+    libxl_device_net2,
+    libxl_device_pci,
+]

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel