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-changelog

[Xen-changelog] [xen-unstable] C bindings adding some basic vTPM extensi

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] C bindings adding some basic vTPM extensions to the API that
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 02 Nov 2006 22:09:20 +0000
Delivery-date: Thu, 02 Nov 2006 21:30:57 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Ewan Mellor <ewan@xxxxxxxxxxxxx>
# Node ID 3d4a027bd04bc3d86989b16761f27e180b2675c6
# Parent  6e78bed60b85c06fb4af1663a8b2fa68cb91815d
C bindings adding some basic vTPM extensions to the API that
make its handling similar to that of VBD etc.

Signed-off-by: Stefan Berger <stefanb@xxxxxxxxxx>
---
 tools/libxen/Makefile                |    2 
 tools/libxen/include/xen_vm.h        |   16 --
 tools/libxen/include/xen_vtpm.h      |  202 +++++++++++++++++++++++++++++++++++
 tools/libxen/include/xen_vtpm_decl.h |   31 +++++
 tools/libxen/src/xen_vm.c            |   46 ++-----
 tools/libxen/src/xen_vtpm.c          |  186 ++++++++++++++++++++++++++++++++
 6 files changed, 438 insertions(+), 45 deletions(-)

diff -r 6e78bed60b85 -r 3d4a027bd04b tools/libxen/Makefile
--- a/tools/libxen/Makefile     Wed Oct 25 16:06:29 2006 +0100
+++ b/tools/libxen/Makefile     Wed Oct 25 17:30:17 2006 +0100
@@ -19,7 +19,7 @@ CFLAGS = -Iinclude                     \
 CFLAGS = -Iinclude                     \
          $(shell xml2-config --cflags) \
          $(shell curl-config --cflags) \
-         -W -Wall -Werror -std=c99 -O2 -fPIC
+         -W -Wall -Wmissing-prototypes -Werror -std=c99 -O2 -fPIC
 
 LDFLAGS = $(shell xml2-config --libs) \
           $(shell curl-config --libs)
diff -r 6e78bed60b85 -r 3d4a027bd04b tools/libxen/include/xen_vm.h
--- a/tools/libxen/include/xen_vm.h     Wed Oct 25 16:06:29 2006 +0100
+++ b/tools/libxen/include/xen_vm.h     Wed Oct 25 17:30:17 2006 +0100
@@ -29,6 +29,7 @@
 #include "xen_string_string_map.h"
 #include "xen_vbd_decl.h"
 #include "xen_vif_decl.h"
+#include "xen_vtpm_decl.h"
 #include "xen_vm_decl.h"
 #include "xen_vm_power_state.h"
 
@@ -406,17 +407,10 @@ xen_vm_get_vbds(xen_session *session, xe
 
 
 /**
- * Get the TPM/instance field of the given VM.
- */
-extern bool
-xen_vm_get_tpm_instance(xen_session *session, uint64_t *result, xen_vm vm);
-
-
-/**
- * Get the TPM/backend field of the given VM.
- */
-extern bool
-xen_vm_get_tpm_backend(xen_session *session, uint64_t *result, xen_vm vm);
+ * Get the VTPMs field of the given VM.
+ */
+extern bool
+xen_vm_get_vtpms(xen_session *session, xen_vtpm *result, xen_vm vm);
 
 
 /**
diff -r 6e78bed60b85 -r 3d4a027bd04b tools/libxen/src/xen_vm.c
--- a/tools/libxen/src/xen_vm.c Wed Oct 25 16:06:29 2006 +0100
+++ b/tools/libxen/src/xen_vm.c Wed Oct 25 17:30:17 2006 +0100
@@ -32,6 +32,7 @@
 #include "xen_string_string_map.h"
 #include "xen_vbd.h"
 #include "xen_vif.h"
+#include "xen_vtpm.h"
 #include "xen_vm.h"
 #include "xen_vm_power_state_internal.h"
 
@@ -125,12 +126,6 @@ static const struct_member xen_vm_record
         { .key = "vbds",
           .type = &abstract_type_ref_set,
           .offset = offsetof(xen_vm_record, vbds) },
-        { .key = "tpm_instance",
-          .type = &abstract_type_int,
-          .offset = offsetof(xen_vm_record, tpm_instance) },
-        { .key = "tpm_backend",
-          .type = &abstract_type_int,
-          .offset = offsetof(xen_vm_record, tpm_backend) },
         { .key = "bios_boot",
           .type = &abstract_type_string,
           .offset = offsetof(xen_vm_record, bios_boot) },
@@ -711,33 +706,18 @@ xen_vm_get_vbds(xen_session *session, xe
 
 
 bool
-xen_vm_get_tpm_instance(xen_session *session, uint64_t *result, xen_vm vm)
-{
-    abstract_value param_values[] =
-        {
-            { .type = &abstract_type_string,
-              .u.string_val = vm }
-        };
-
-    abstract_type result_type = abstract_type_int;
-
-    XEN_CALL_("VM.get_tpm_instance");
-    return session->ok;
-}
-
-
-bool
-xen_vm_get_tpm_backend(xen_session *session, uint64_t *result, xen_vm vm)
-{
-    abstract_value param_values[] =
-        {
-            { .type = &abstract_type_string,
-              .u.string_val = vm }
-        };
-
-    abstract_type result_type = abstract_type_int;
-
-    XEN_CALL_("VM.get_tpm_backend");
+xen_vm_get_vtpms(xen_session *session, xen_vtpm *result, xen_vm vm)
+{
+    abstract_value param_values[] =
+        {
+            { .type = &abstract_type_string,
+              .u.string_val = vm }
+        };
+
+    abstract_type result_type = abstract_type_string_set;
+
+    *result = NULL;
+    XEN_CALL_("VM.get_vtpms");
     return session->ok;
 }
 
diff -r 6e78bed60b85 -r 3d4a027bd04b tools/libxen/include/xen_vtpm.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/libxen/include/xen_vtpm.h   Wed Oct 25 17:30:17 2006 +0100
@@ -0,0 +1,202 @@
+/*
+ * Copyright (c) 2006, XenSource Inc.
+ * Copyright (c) 2006, IBM Corp.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+ */
+
+#ifndef XEN_VTPM_H
+#define XEN_VTPM_H
+
+#include "xen_common.h"
+#include "xen_driver_type.h"
+#include "xen_vtpm_decl.h"
+#include "xen_vm_decl.h"
+
+
+/*
+ * The VTPM class.
+ *
+ * A virtual TPM device.
+ */
+
+
+/**
+ * Free the given xen_vtpm.  The given handle must have been allocated
+ * by this library.
+ */
+extern void
+xen_vtpm_free(xen_vtpm vtpm);
+
+
+typedef struct xen_vtpm_set
+{
+    size_t size;
+    xen_vtpm *contents[];
+} xen_vtpm_set;
+
+/**
+ * Allocate a xen_vtpm_set of the given size.
+ */
+extern xen_vtpm_set *
+xen_vtpm_set_alloc(size_t size);
+
+/**
+ * Free the given xen_vtpm_set.  The given set must have been allocated
+ * by this library.
+ */
+extern void
+xen_vtpm_set_free(xen_vtpm_set *set);
+
+
+typedef struct xen_vtpm_record
+{
+    xen_vtpm handle;
+    char *uuid;
+    struct xen_vm_record_opt *vm;
+    struct xen_vm_record_opt *backend;
+    int instance;
+    enum xen_driver_type driver;
+} xen_vtpm_record;
+
+/**
+ * Allocate a xen_vtpm_record.
+ */
+extern xen_vtpm_record *
+xen_vtpm_record_alloc(void);
+
+/**
+ * Free the given xen_vtpm_record, and all referenced values.  The given
+ * record must have been allocated by this library.
+ */
+extern void
+xen_vtpm_record_free(xen_vtpm_record *record);
+
+
+typedef struct xen_vtpm_record_opt
+{
+    bool is_record;
+    union
+    {
+        xen_vtpm handle;
+        xen_vtpm_record *record;
+    } u;
+} xen_vtpm_record_opt;
+
+/**
+ * Allocate a xen_vtpm_record_opt.
+ */
+extern xen_vtpm_record_opt *
+xen_vtpm_record_opt_alloc(void);
+
+/**
+ * Free the given xen_vtpm_record_opt, and all referenced values.  The
+ * given record_opt must have been allocated by this library.
+ */
+extern void
+xen_vtpm_record_opt_free(xen_vtpm_record_opt *record_opt);
+
+
+typedef struct xen_vtpm_record_set
+{
+    size_t size;
+    xen_vtpm_record *contents[];
+} xen_vtpm_record_set;
+
+/**
+ * Allocate a xen_vtpm_record_set of the given size.
+ */
+extern xen_vtpm_record_set *
+xen_vtpm_record_set_alloc(size_t size);
+
+/**
+ * Free the given xen_vtpm_record_set, and all referenced values.  The
+ * given set must have been allocated by this library.
+ */
+extern void
+xen_vtpm_record_set_free(xen_vtpm_record_set *set);
+
+
+
+typedef struct xen_vtpm_record_opt_set
+{
+    size_t size;
+    xen_vtpm_record_opt *contents[];
+} xen_vtpm_record_opt_set;
+
+/**
+ * Allocate a xen_vtpm_record_opt_set of the given size.
+ */
+extern xen_vtpm_record_opt_set *
+xen_vtpm_record_opt_set_alloc(size_t size);
+
+/**
+ * Free the given xen_vtpm_record_opt_set, and all referenced values.
+ * The given set must have been allocated by this library.
+ */
+extern void
+xen_vtpm_record_opt_set_free(xen_vtpm_record_opt_set *set);
+
+
+/**
+ * Get the current state of the given VTPM.  !!!
+ */
+extern bool
+xen_vtpm_get_record(xen_session *session, xen_vtpm_record **result, xen_vtpm 
vtpm);
+
+
+/**
+ * Get a reference to the object with the specified UUID.  !!!
+ */
+extern bool
+xen_vtpm_get_by_uuid(xen_session *session, xen_vtpm *result, char *uuid);
+
+
+/**
+ * Create a new VTPM instance, and return its handle.
+ */
+extern bool
+xen_vtpm_create(xen_session *session, xen_vtpm *result, xen_vtpm_record 
*record);
+
+
+/**
+ * Get the uuid field of the given VTPM.
+ */
+extern bool
+xen_vtpm_get_uuid(xen_session *session, char **result, xen_vtpm vtpm);
+
+
+/**
+ * Get the VM field of the given VTPM.
+ */
+extern bool
+xen_vtpm_get_vm(xen_session *session, xen_vm *result, xen_vtpm vtpm);
+
+
+/**
+ * Get the backend field of the given VTPM.
+ */
+extern bool
+xen_vtpm_get_backend(xen_session *session, xen_vm *result, xen_vtpm vtpm);
+
+
+/**
+ * Get the instance field of the given VTPM.
+ */
+extern bool
+xen_vtpm_get_instance(xen_session *session, int *result, xen_vtpm vtpm);
+
+
+#endif
diff -r 6e78bed60b85 -r 3d4a027bd04b tools/libxen/include/xen_vtpm_decl.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/libxen/include/xen_vtpm_decl.h      Wed Oct 25 17:30:17 2006 +0100
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2006, XenSource Inc.
+ * Copyright (c) 2006, IBM Corp.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+ */
+
+#ifndef XEN_VTPM_DECL_H
+#define XEN_VTPM_DECL_H
+
+typedef void *xen_vtpm;
+
+struct xen_vtpm_set;
+struct xen_vtpm_record;
+struct xen_vtpm_record_set;
+struct xen_vtpm_record_opt;
+struct xen_vtpm_record_opt_set;
+
+#endif
diff -r 6e78bed60b85 -r 3d4a027bd04b tools/libxen/src/xen_vtpm.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/libxen/src/xen_vtpm.c       Wed Oct 25 17:30:17 2006 +0100
@@ -0,0 +1,186 @@
+/*
+ * Copyright (c) 2006, XenSource Inc.
+ * Copyright (c) 2006, IBM Corp.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+ */
+
+
+#include <stddef.h>
+#include <stdlib.h>
+
+#include "xen_common.h"
+#include "xen_driver_type_internal.h"
+#include "xen_internal.h"
+#include "xen_vtpm.h"
+#include "xen_vm.h"
+
+
+XEN_FREE(xen_vtpm)
+XEN_SET_ALLOC_FREE(xen_vtpm)
+
+
+static const struct_member xen_vtpm_record_struct_members[] =
+    {
+        { .key = "uuid",
+          .type = &abstract_type_string,
+          .offset = offsetof(xen_vtpm_record, uuid) },
+        { .key = "vm",
+          .type = &abstract_type_ref,
+          .offset = offsetof(xen_vtpm_record, vm) },
+        { .key = "backend",
+          .type = &abstract_type_ref,
+          .offset = offsetof(xen_vtpm_record, backend) },
+        { .key = "driver",
+          .type = &xen_driver_type_abstract_type_,
+          .offset = offsetof(xen_vtpm_record, driver) },
+    };
+
+const abstract_type xen_vtpm_record_abstract_type_ =
+    {
+       .typename = STRUCT,
+       .struct_size = sizeof(xen_vtpm_record),
+       .member_count =
+           sizeof(xen_vtpm_record_struct_members) / sizeof(struct_member),
+       .members = xen_vtpm_record_struct_members
+    };
+
+
+void
+xen_vtpm_record_free(xen_vtpm_record *record)
+{
+    free(record->handle);
+    free(record->uuid);
+    xen_vm_record_opt_free(record->vm);
+    xen_vm_record_opt_free(record->backend);
+    free(record);
+}
+
+
+bool
+xen_vtpm_get_record(xen_session *session, xen_vtpm_record **result, xen_vtpm 
vtpm)
+{
+    abstract_value param_values[] =
+        {
+            { .type = &abstract_type_string,
+              .u.string_val = vtpm }
+        };
+
+    abstract_type result_type = xen_vtpm_record_abstract_type_;
+
+    *result = NULL;
+    XEN_CALL_("VTPM.get_record");
+
+    if (session->ok)
+    {
+       (*result)->handle = xen_strdup_((*result)->uuid);
+    }
+
+    return session->ok;
+}
+
+
+bool
+xen_vtpm_get_by_uuid(xen_session *session, xen_vtpm *result, char *uuid)
+{
+    abstract_value param_values[] =
+        {
+            { .type = &abstract_type_string,
+              .u.string_val = uuid }
+        };
+
+    abstract_type result_type = abstract_type_string;
+
+    *result = NULL;
+    XEN_CALL_("VTPM.get_by_uuid");
+    return session->ok;
+}
+
+
+bool
+xen_vtpm_create(xen_session *session, xen_vtpm *result, xen_vtpm_record 
*record)
+{
+    abstract_value param_values[] =
+        {
+            { .type = &xen_vtpm_record_abstract_type_,
+              .u.struct_val = record }
+        };
+
+    abstract_type result_type = abstract_type_string;
+
+    *result = NULL;
+    XEN_CALL_("VTPM.create");
+    return session->ok;
+}
+
+
+bool
+xen_vtpm_get_vm(xen_session *session, xen_vm *result, xen_vtpm vtpm)
+{
+    abstract_value param_values[] =
+        {
+            { .type = &abstract_type_string,
+              .u.string_val = vtpm }
+        };
+
+    abstract_type result_type = abstract_type_string;
+
+    *result = NULL;
+    XEN_CALL_("VTPM.get_vm");
+    return session->ok;
+}
+
+
+bool
+xen_vtpm_get_backend(xen_session *session, xen_vm *result, xen_vtpm vtpm)
+{
+    abstract_value param_values[] =
+        {
+            { .type = &abstract_type_string,
+              .u.string_val = vtpm }
+        };
+
+    abstract_type result_type = abstract_type_string;
+
+    *result = NULL;
+    XEN_CALL_("VTPM.get_backend");
+    return session->ok;
+}
+
+
+bool
+xen_vtpm_get_instance(xen_session *session, int *result, xen_vtpm vtpm)
+{
+    abstract_value param_values[] =
+        {
+            { .type = &abstract_type_string,
+              .u.string_val = vtpm }
+        };
+
+    abstract_type result_type = abstract_type_int;
+
+    XEN_CALL_("VTPM.get_instance");
+    return session->ok;
+}
+
+
+bool
+xen_vtpm_get_uuid(xen_session *session, char **result, xen_vtpm vtpm)
+{
+    *result = session->ok ? xen_strdup_((char *)vtpm) : NULL;
+    return session->ok;
+}
+
+

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] C bindings adding some basic vTPM extensions to the API that, Xen patchbot-unstable <=