summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2013-10-12 02:41:28 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2013-10-12 02:41:28 +0200
commitd66f59187743d8724b53a1f5cdd587ea2939e786 (patch)
treed560374d5ff0e58394c85fdd8091a5928c4cf899
parent83930b4eff0277ca69a0800ccdd4f7552cdf1460 (diff)
downloadmodfastd-d66f59187743d8724b53a1f5cdd587ea2939e786.tar
modfastd-d66f59187743d8724b53a1f5cdd587ea2939e786.zip
Basic genl registration
-rw-r--r--fastd.c156
-rw-r--r--fastd.h57
2 files changed, 156 insertions, 57 deletions
diff --git a/fastd.c b/fastd.c
index 9c3552f..6eefd72 100644
--- a/fastd.c
+++ b/fastd.c
@@ -1,31 +1,43 @@
/*
- Copyright (c) 2012-2013, Matthias Schiffer <mschiffer@universe-factory.net>
- 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.
-
- 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.
-*/
+ * fastd.c - driver for the "Fast and Secure Tunneling Daemon"
+ *
+ * Copyright (c) 2012-2013, Matthias Schiffer <mschiffer@universe-factory.net>
+ * 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.
+ *
+ * Alternatively, provided that this notice is retained in full, this
+ * software may be distributed under the terms of the GNU General
+ * Public License ("GPL") version 2, in which case the provisions of the
+ * GPL apply INSTEAD OF those given above.
+ *
+ * The provided data structures and external interfaces from this code
+ * are not restricted to be used by modules with a GPL compatible license.
+ *
+ * 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
+ * OWNER 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.
+ */
#define DRV_NAME "fastd"
-#define DRV_VERSION "1"
+#define DRV_VERSION "0.1"
#define DRV_DESCRIPTION "fastd tunnel driver"
#define DRV_COPYRIGHT "(C) 2013 Matthias Schiffer <mschiffer@universe-factory.net>"
@@ -34,51 +46,81 @@
#include <linux/errno.h>
#include <linux/init.h>
#include <linux/kernel.h>
-#include <linux/miscdevice.h>
-#include <linux/poll.h>
-
-
-static const struct file_operations fastd_fops = {
- .owner = THIS_MODULE,
- .llseek = no_llseek,
- .read = do_sync_read,
-// .aio_read = fastd_chr_aio_read,
- .write = do_sync_write,
-// .aio_write = fastd_chr_aio_write,
-// .poll = fastd_chr_poll,
-// .unlocked_ioctl = fastd_chr_ioctl,
-//#ifdef CONFIG_COMPAT
-// .compat_ioctl = fastd_chr_compat_ioctl,
-//#endif
-// .open = fastd_chr_open,
-// .release = fastd_chr_close,
-// .fasync = fastd_chr_fasync
+#include <net/genetlink.h>
+
+#include "fastd.h"
+
+
+static struct genl_family fastd_nl_family = {
+ .id = GENL_ID_GENERATE,
+ .name = DRV_NAME,
+ .version = 1,
+ .hdrsize = 0,
+ .maxattr = FASTD_A_MAX,
};
-static struct miscdevice fastd_miscdev = {
- .minor = MISC_DYNAMIC_MINOR,
- .name = "fastd",
- .nodename = "net/fastd",
- .fops = &fastd_fops,
+
+static int fastd_nl_event(struct notifier_block *this,
+ unsigned long event, void *ptr)
+{
+ struct netlink_notify *n = ptr;
+
+ if (event != NETLINK_URELEASE || n->protocol != NETLINK_GENERIC)
+ return NOTIFY_DONE;
+
+ return NOTIFY_DONE;
+}
+
+static struct notifier_block nl_notifier = {
+ .notifier_call = fastd_nl_event,
+};
+
+
+static int fastd_cmd_create(struct sk_buff *skb, struct genl_info *info)
+{
+ if (!capable(CAP_NET_ADMIN))
+ return -EPERM;
+
+ return -EINVAL;
+}
+
+
+static struct nla_policy fastd_nl_policy[__FASTD_A_MAX] = {
+};
+
+static struct genl_ops fastd_nl_ops[] = {
+ {
+ .cmd = FASTD_CMD_CREATE,
+ .doit = fastd_cmd_create,
+ .policy = fastd_nl_policy,
+ },
};
static int __init fastd_init(void)
{
- int ret;
+ int ret = 0;
+
+ netlink_register_notifier(&nl_notifier);
+
+ ret = genl_register_family_with_ops(&fastd_nl_family, fastd_nl_ops, ARRAY_SIZE(fastd_nl_ops));
+ if (ret)
+ goto unregister_notifier;
+
+ pr_info("%s %s\n", DRV_DESCRIPTION, DRV_VERSION);
+
+ return 0;
- ret = misc_register(&fastd_miscdev);
- if (ret) {
- pr_err("Can't register misc device\n");
- return ret;
- }
+ unregister_notifier:
+ netlink_unregister_notifier(&nl_notifier);
- return 0;
+ return ret;
}
static void fastd_cleanup(void)
{
- misc_deregister(&fastd_miscdev);
+ genl_unregister_family(&fastd_nl_family);
+ netlink_unregister_notifier(&nl_notifier);
}
@@ -87,4 +129,4 @@ module_exit(fastd_cleanup);
MODULE_DESCRIPTION(DRV_DESCRIPTION);
MODULE_AUTHOR(DRV_COPYRIGHT);
MODULE_LICENSE("Dual BSD/GPL");
-MODULE_ALIAS("devname:net/fastd");
+MODULE_ALIAS_GENL_FAMILY("fastd");
diff --git a/fastd.h b/fastd.h
new file mode 100644
index 0000000..0e110a9
--- /dev/null
+++ b/fastd.h
@@ -0,0 +1,57 @@
+/*
+ * fastd.h - userspace interface for the "Fast and Secure Tunneling Daemon"
+ *
+ * Copyright (c) 2012-2013, Matthias Schiffer <mschiffer@universe-factory.net>
+ * 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.
+ *
+ * Alternatively, provided that this notice is retained in full, this
+ * software may be distributed under the terms of the GNU General
+ * Public License ("GPL") version 2, in which case the provisions of the
+ * GPL apply INSTEAD OF those given above.
+ *
+ * The provided data structures and external interfaces from this code
+ * are not restricted to be used by modules with a GPL compatible license.
+ *
+ * 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
+ * OWNER 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.
+ */
+
+
+#ifndef __LINUX_FASTD_H
+#define __LINUX_FASTD_H
+
+enum {
+ FASTD_CMD_UNSPEC,
+ FASTD_CMD_CREATE,
+ __FASTD_CMD_MAX
+};
+
+enum {
+ FASTD_A_UNSPEC,
+ __FASTD_A_MAX
+};
+
+
+#define FASTD_CMD_MAX (__FASTD_CMD_MAX - 1)
+#define FASTD_A_MAX (__FASTD_A_MAX - 1)
+
+#endif /* __LINUX_FASTD_H */