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

[Minios-devel] [UNIKRAFT PATCH 2/8] lib/uk9p: Add 9P transport registration



This patch introduces the 9P transport registration and lookup API.

Signed-off-by: Cristian Banu <cristb@xxxxxxxxx>
---
 lib/uk9p/9pdev_trans.c            |  82 +++++++++++++++++++++++++++++++
 lib/uk9p/Makefile.uk              |   2 +
 lib/uk9p/exportsyms.uk            |   3 ++
 lib/uk9p/include/uk/9pdev_trans.h | 101 ++++++++++++++++++++++++++++++++++++++
 4 files changed, 188 insertions(+)
 create mode 100644 lib/uk9p/9pdev_trans.c
 create mode 100644 lib/uk9p/exportsyms.uk
 create mode 100644 lib/uk9p/include/uk/9pdev_trans.h

diff --git a/lib/uk9p/9pdev_trans.c b/lib/uk9p/9pdev_trans.c
new file mode 100644
index 000000000000..60b8a230cbf3
--- /dev/null
+++ b/lib/uk9p/9pdev_trans.c
@@ -0,0 +1,82 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*
+ * Authors: Cristian Banu <cristb@xxxxxxxxx>
+ *
+ * Copyright (c) 2019, University Politehnica of Bucharest. All rights 
reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holder nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY.
+ */
+
+#include <errno.h>
+#include <string.h>
+#include <uk/config.h>
+#include <uk/list.h>
+#include <uk/assert.h>
+#include <uk/9pdev_trans.h>
+
+static UK_LIST_HEAD(uk_9pdev_trans_list);
+
+int uk_9pdev_trans_register(struct uk_9pdev_trans *trans)
+{
+       UK_ASSERT(trans);
+       UK_ASSERT(trans->name);
+       UK_ASSERT(trans->a);
+
+       uk_list_add_tail(&trans->_list, &uk_9pdev_trans_list);
+       uk_pr_info("Registered transport %s\n", trans->name);
+
+       return 0;
+}
+
+int uk_9pdev_trans_by_name(const char *name, struct uk_9pdev_trans **trans)
+{
+       struct uk_9pdev_trans *t;
+
+       uk_list_for_each_entry(t, &uk_9pdev_trans_list, _list) {
+               if (!strcmp(t->name, name)) {
+                       *trans = t;
+                       return 0;
+               }
+       }
+
+       return -ENODEV;
+}
+
+int uk_9pdev_trans_default(struct uk_9pdev_trans **trans)
+{
+       struct uk_9pdev_trans *t;
+
+       uk_list_for_each_entry(t, &uk_9pdev_trans_list, _list) {
+               if (t->is_default) {
+                       *trans = t;
+                       return 0;
+               }
+       }
+
+       return -ENODEV;
+}
diff --git a/lib/uk9p/Makefile.uk b/lib/uk9p/Makefile.uk
index fa754440598c..b1071a0e7d3c 100644
--- a/lib/uk9p/Makefile.uk
+++ b/lib/uk9p/Makefile.uk
@@ -2,3 +2,5 @@ $(eval $(call addlib_s,libuk9p,$(CONFIG_LIBUK9P)))
 
 CINCLUDES-$(CONFIG_LIBUK9P)            += -I$(LIBUK9P_BASE)/include
 CXXINCLUDES-$(CONFIG_LIBUK9P)          += -I$(LIBUK9P_BASE)/include
+
+LIBUK9P_SRCS-y += $(LIBUK9P_BASE)/9pdev_trans.c
diff --git a/lib/uk9p/exportsyms.uk b/lib/uk9p/exportsyms.uk
new file mode 100644
index 000000000000..45f487da2fff
--- /dev/null
+++ b/lib/uk9p/exportsyms.uk
@@ -0,0 +1,3 @@
+uk_9pdev_trans_register
+uk_9pdev_trans_by_name
+uk_9pdev_trans_default
diff --git a/lib/uk9p/include/uk/9pdev_trans.h 
b/lib/uk9p/include/uk/9pdev_trans.h
new file mode 100644
index 000000000000..a0c6d252361c
--- /dev/null
+++ b/lib/uk9p/include/uk/9pdev_trans.h
@@ -0,0 +1,101 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*
+ * Authors: Cristian Banu <cristb@xxxxxxxxx>
+ *
+ * Copyright (c) 2019, University Politehnica of Bucharest. All rights 
reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holder nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY.
+ */
+
+#ifndef __UK_9PDEV_TRANS__
+#define __UK_9PDEV_TRANS__
+
+#include <stdbool.h>
+#include <uk/config.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** A structure used to describe a transport. */
+struct uk_9pdev_trans {
+       /*
+        * Transport name (e.g. "virtio", "xen"). This field is reserved for
+        * future use, when multiple transport options are available on the
+        * same platform.
+        */
+       const char                              *name;
+       /* Can the transport be used as a default one? */
+       bool                                    is_default;
+       /* Allocator used for devices which use this transport layer. */
+       struct uk_alloc                         *a;
+       /* @internal Entry in the list of available transports. */
+       struct uk_list_head                     _list;
+};
+
+/**
+ * Adds a transport to the available transports list for Unikraft 9P Devices.
+ * This should be called once per driver (once for virtio, once for xen, etc.).
+ *
+ * @param trans
+ *   Pointer to the transport structure.
+ * @return
+ *   - (0): Successful.
+ *   - (< 0): Failed to register the transport layer.
+ */
+int uk_9pdev_trans_register(struct uk_9pdev_trans *trans);
+
+/**
+ * Looks up a transport layer by its name.
+ *
+ * @param name
+ *   The transport layer name.
+ * @param trans
+ *   Where to store the pointer to the found transport structure.
+ * @return
+ *   - (-ENOENT): No transport with the given name.
+ *   - (0): Successful.
+ */
+int uk_9pdev_trans_by_name(const char *name, struct uk_9pdev_trans **trans);
+
+/**
+ * Gets the default transport layer.
+ *
+ * @param trans
+ *   Where to store the pointer to the found transport structure.
+ * @return
+ *   - (-ENOENT): No default transport found.
+ *   - (0): Successful.
+ */
+int uk_9pdev_trans_default(struct uk_9pdev_trans **trans);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __UK_9PDEV_TRANS__ */
-- 
2.11.0


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

 


Rackspace

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