|
@@ -27,6 +27,10 @@
|
|
|
#include <linux/module.h>
|
|
|
#include <linux/moduleparam.h>
|
|
|
#include <net/9p/9p.h>
|
|
|
+#include <linux/fs.h>
|
|
|
+#include <linux/parser.h>
|
|
|
+#include <net/9p/transport.h>
|
|
|
+#include <linux/list.h>
|
|
|
|
|
|
#ifdef CONFIG_NET_9P_DEBUG
|
|
|
unsigned int p9_debug_level = 0; /* feature-rific global debug level */
|
|
@@ -40,6 +44,64 @@ extern void p9_mux_global_exit(void);
|
|
|
extern int p9_sysctl_register(void);
|
|
|
extern void p9_sysctl_unregister(void);
|
|
|
|
|
|
+/*
|
|
|
+ * Dynamic Transport Registration Routines
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+static LIST_HEAD(v9fs_trans_list);
|
|
|
+static struct p9_trans_module *v9fs_default_transport;
|
|
|
+
|
|
|
+/**
|
|
|
+ * v9fs_register_trans - register a new transport with 9p
|
|
|
+ * @m - structure describing the transport module and entry points
|
|
|
+ *
|
|
|
+ */
|
|
|
+void v9fs_register_trans(struct p9_trans_module *m)
|
|
|
+{
|
|
|
+ list_add_tail(&m->list, &v9fs_trans_list);
|
|
|
+ if (m->def)
|
|
|
+ v9fs_default_transport = m;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(v9fs_register_trans);
|
|
|
+
|
|
|
+/**
|
|
|
+ * v9fs_match_trans - match transport versus registered transports
|
|
|
+ * @arg: string identifying transport
|
|
|
+ *
|
|
|
+ */
|
|
|
+struct p9_trans_module *v9fs_match_trans(const substring_t *name)
|
|
|
+{
|
|
|
+ struct list_head *p;
|
|
|
+ struct p9_trans_module *t = NULL;
|
|
|
+
|
|
|
+ list_for_each(p, &v9fs_trans_list) {
|
|
|
+ t = list_entry(p, struct p9_trans_module, list);
|
|
|
+ if (strncmp(t->name, name->from, name->to-name->from) == 0)
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return t;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(v9fs_match_trans);
|
|
|
+
|
|
|
+/**
|
|
|
+ * v9fs_default_trans - returns pointer to default transport
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+struct p9_trans_module *v9fs_default_trans(void)
|
|
|
+{
|
|
|
+ if (v9fs_default_transport)
|
|
|
+ return v9fs_default_transport;
|
|
|
+ else if (!list_empty(&v9fs_trans_list))
|
|
|
+ return list_first_entry(&v9fs_trans_list,
|
|
|
+ struct p9_trans_module, list);
|
|
|
+ else
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(v9fs_default_trans);
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* v9fs_init - Initialize module
|
|
|
*
|