From d66f59187743d8724b53a1f5cdd587ea2939e786 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 12 Oct 2013 02:41:28 +0200 Subject: Basic genl registration --- fastd.c | 156 ++++++++++++++++++++++++++++++++++++++++------------------------ fastd.h | 57 ++++++++++++++++++++++++ 2 files changed, 156 insertions(+), 57 deletions(-) create mode 100644 fastd.h 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 - 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 + * 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 " @@ -34,51 +46,81 @@ #include #include #include -#include -#include - - -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 + +#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 + * 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 */ -- cgit v1.2.3