summaryrefslogtreecommitdiff
path: root/src/gsmd/vendor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gsmd/vendor.c')
-rw-r--r--src/gsmd/vendor.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/gsmd/vendor.c b/src/gsmd/vendor.c
new file mode 100644
index 0000000..d577e98
--- /dev/null
+++ b/src/gsmd/vendor.c
@@ -0,0 +1,39 @@
+#include <errno.h>
+
+#include <common/linux_list.h>
+
+#include "gsmd.h"
+
+#include <gsmd/gsmd.h>
+#include <gsmd/vendorplugin.h>
+
+static LLIST_HEAD(vendorpl_list);
+
+int gsmd_vendor_plugin_register(struct gsmd_vendor_plugin *pl)
+{
+ llist_add(&pl->list, &vendorpl_list);
+
+ return 0;
+}
+
+void gsmd_vendor_plugin_unregister(struct gsmd_vendor_plugin *pl)
+{
+ llist_del(&pl->list);
+}
+
+int gsmd_vendor_plugin_find(struct gsmd *g)
+{
+ struct gsmd_vendor_plugin *pl;
+
+ if (g->vendorpl)
+ return -EEXIST;
+
+ llist_for_each_entry(pl, &vendorpl_list, list) {
+ if (pl->detect(g) == 1) {
+ g->vendorpl = pl;
+ return 1;
+ }
+ }
+
+ return 0;
+}
personal git repositories of Harald Welte. Your mileage may vary