lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1411573940-14079-9-git-send-email-ahmed@gandi.net>
Date:	Wed, 24 Sep 2014 17:52:04 +0200
From:	Ahmed Amamou <ahmed@...di.net>
To:	netdev@...r.kernel.org
Cc:	william@...di.net, f.cachereul@...halink.fr,
	Ahmed Amamou <ahmed@...di.net>,
	Kamel Haddadou <kamel@...di.net>
Subject: [RFC PATCH 08/24] net: rbridge: Add Rbridge netlink message skeleton

add data plane and control plane basic message skeleton
add netlink socket registration and unregistration respectively within module init and deinit function

Signed-off-by: Ahmed Amamou <ahmed@...di.net>
Signed-off-by: Kamel Haddadou <kamel@...di.net>
---
 net/bridge/Makefile              |   2 +-
 net/bridge/br.c                  |   6 ++
 net/bridge/br_private.h          |   1 +
 net/bridge/rbridge/rbr_netlink.c | 152 +++++++++++++++++++++++++++++++++++++++
 net/bridge/rbridge/rbr_netlink.h |  62 ++++++++++++++++
 5 files changed, 222 insertions(+), 1 deletion(-)
 create mode 100644 net/bridge/rbridge/rbr_netlink.c
 create mode 100644 net/bridge/rbridge/rbr_netlink.h

diff --git a/net/bridge/Makefile b/net/bridge/Makefile
index 314783c..b11a22b 100644
--- a/net/bridge/Makefile
+++ b/net/bridge/Makefile
@@ -18,4 +18,4 @@ bridge-$(CONFIG_BRIDGE_VLAN_FILTERING) += br_vlan.o
 
 obj-$(CONFIG_NETFILTER) += netfilter/
 
-bridge-$(CONFIG_TRILL) += rbridge/rbr.o
+bridge-$(CONFIG_TRILL) += rbridge/rbr.o rbridge/rbr_netlink.o
diff --git a/net/bridge/br.c b/net/bridge/br.c
index 1a755a1..51af134 100644
--- a/net/bridge/br.c
+++ b/net/bridge/br.c
@@ -178,6 +178,9 @@ static int __init br_init(void)
 #if IS_ENABLED(CONFIG_ATM_LANE)
 	br_fdb_test_addr_hook = br_fdb_test_addr;
 #endif
+#ifdef CONFIG_TRILL
+	rbridge_register_genl();
+#endif
 
 	return 0;
 err_out4:
@@ -210,6 +213,9 @@ static void __exit br_deinit(void)
 	br_fdb_test_addr_hook = NULL;
 #endif
 
+#ifdef CONFIG_TRILL
+	rbridge_unregister_genl();
+#endif
 	br_fdb_fini();
 }
 
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index 844c87b..6952db8 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -21,6 +21,7 @@
 #include <linux/if_vlan.h>
 #ifdef CONFIG_TRILL
 #include "rbridge/rbr_private.h"
+#include "rbridge/rbr_netlink.h"
 #endif
 
 #define BR_HASH_BITS 8
diff --git a/net/bridge/rbridge/rbr_netlink.c b/net/bridge/rbridge/rbr_netlink.c
new file mode 100644
index 0000000..eb7c902
--- /dev/null
+++ b/net/bridge/rbridge/rbr_netlink.c
@@ -0,0 +1,152 @@
+/*
+ *	Generic parts
+ *	Linux ethernet Rbridge
+ *
+ *	Authors:
+ *	Ahmed AMAMOU	<ahmed@...di.net>
+ *	Kamel Haddadou	<kamel@...di.net>
+ *
+ *	This program is free software; you can redistribute it and/or
+ *	modify it under the terms of the GNU General Public License
+ *	as published by the Free Software Foundation; either version
+ *	2 of the License, or (at your option) any later version.
+ */
+
+#include <net/genetlink.h>
+#include <net/netlink.h>
+#include <linux/if_trill.h>
+#include <linux/socket.h>
+#include <linux/socket.h>
+#include "br_private.h"
+#include "rbr_private.h"
+#include "rbr_netlink.h"
+
+static struct nla_policy attrs_policy[TRILL_ATTR_MAX + 1] = {
+	[TRILL_ATTR_U16] = {.type = NLA_U16},
+	[TRILL_ATTR_BIN] = {.type = NLA_UNSPEC},
+};
+
+static struct genl_family trill_genl_family = {
+	.id = GENL_ID_GENERATE,
+	.hdrsize = sizeof(struct trill_nl_header),
+	.name = TRILL_NL_FAMILY,
+	.version = TRILL_NL_VERSION,
+	.maxattr = TRILL_ATTR_MAX
+};
+
+static struct genl_multicast_group trill_mcgrps[] = {
+	[TRILL_MCGRP_OFFSET] = {.name = TRILL_MCAST_NAME,},
+};
+
+static int trill_cmd_set_nicks_info(struct sk_buff *skb, struct genl_info *info)
+{
+	return 0;
+}
+
+static int trill_cmd_get_nicks_info(struct sk_buff *skb, struct genl_info *info)
+{
+	return 0;
+}
+
+static int trill_cmd_add_nicks_info(struct sk_buff *skb, struct genl_info *info)
+{
+	return 0;
+}
+
+static int trill_cmd_set_treeroot_id(struct sk_buff *skb,
+				     struct genl_info *info)
+{
+	return 0;
+}
+
+static int trill_cmd_get_rbridge(struct sk_buff *skb, struct genl_info *info)
+{
+	return 0;
+}
+
+static int trill_cmd_set_rbridge(struct sk_buff *skb, struct genl_info *info)
+{
+	return 0;
+}
+
+static int trill_cmd_port_flush(struct sk_buff *skb, struct genl_info *info)
+{
+	return 0;
+}
+
+static int trill_cmd_nick_flush(struct sk_buff *skb, struct genl_info *info)
+{
+	return 0;
+}
+
+static struct genl_ops trill_genl_ops[] = {
+	{
+	 .cmd = TRILL_CMD_SET_NICKS_INFO,
+	 .flags = GENL_ADMIN_PERM,	/* Requires CAP_NET_ADMIN privilege. */
+	 .policy = attrs_policy,
+	 .doit = trill_cmd_set_nicks_info,
+	 },
+	{
+	 .cmd = TRILL_CMD_GET_NICKS_INFO,
+	 .flags = GENL_ADMIN_PERM,	/* Requires CAP_NET_ADMIN privilege. */
+	 .policy = attrs_policy,
+	 .doit = trill_cmd_get_nicks_info,
+	 },
+	{
+	 .cmd = TRILL_CMD_ADD_NICKS_INFO,
+	 .flags = GENL_ADMIN_PERM,	/* Requires CAP_NET_ADMIN privilege. */
+	 .policy = attrs_policy,
+	 .doit = trill_cmd_add_nicks_info,
+	 },
+	{
+	 .cmd = TRILL_CMD_SET_TREEROOT_ID,
+	 .flags = GENL_ADMIN_PERM,	/* Requires CAP_NET_ADMIN privilege. */
+	 .policy = attrs_policy,
+	 .doit = trill_cmd_set_treeroot_id,
+	 },
+	{
+	 .cmd = TRILL_CMD_GET_RBRIDGE,
+	 .flags = GENL_ADMIN_PERM,	/* Requires CAP_NET_ADMIN privilege. */
+	 .policy = attrs_policy,
+	 .doit = trill_cmd_get_rbridge,
+	 },
+	{
+	 .cmd = TRILL_CMD_SET_RBRIDGE,
+	 .flags = GENL_ADMIN_PERM,	/* Requires CAP_NET_ADMIN privilege. */
+	 .policy = attrs_policy,
+	 .doit = trill_cmd_set_rbridge,
+	 },
+	{
+	 .cmd = TRILL_CMD_PORT_FLUSH,
+	 .flags = GENL_ADMIN_PERM,	/* Requires CAP_NET_ADMIN privilege. */
+	 .doit = trill_cmd_port_flush,
+	 },
+	{
+	 .cmd = TRILL_CMD_NICK_FLUSH,
+	 .flags = GENL_ADMIN_PERM,	/* Requires CAP_NET_ADMIN privilege. */
+	 .policy = attrs_policy,
+	 .doit = trill_cmd_nick_flush,
+	 },
+};
+
+void __exit rbridge_unregister_genl(void)
+{
+	genl_unregister_family(&trill_genl_family);
+}
+
+int __init rbridge_register_genl(void)
+{
+	int err;
+
+	err =
+	    genl_register_family_with_ops_groups(&trill_genl_family,
+						 trill_genl_ops, trill_mcgrps);
+	if (err)
+		goto fail_genl_register_family;
+
+	return 0;
+
+ fail_genl_register_family:
+
+	return err;
+}
diff --git a/net/bridge/rbridge/rbr_netlink.h b/net/bridge/rbridge/rbr_netlink.h
new file mode 100644
index 0000000..0556323
--- /dev/null
+++ b/net/bridge/rbridge/rbr_netlink.h
@@ -0,0 +1,62 @@
+/*
+ *	Generic parts
+ *	Linux ethernet Rbridge
+ *
+ *	Authors:
+ *	Ahmed AMAMOU	<ahmed@...di.net>
+ *	Kamel Haddadou	<kamel@...di.net>
+ *
+ *	This program is free software; you can redistribute it and/or
+ *	modify it under the terms of the GNU General Public License
+ *	as published by the Free Software Foundation; either version
+ *	2 of the License, or (at your option) any later version.
+ */
+
+#ifndef RBR_NETLINK_H_
+#define RBR_NETLINK_H_
+
+/* TRILL Generic Netlink attributes definition*/
+#define TRILL_NL_VERSION	0x1
+#define TRILL_NL_FAMILY		"TRILL_NL"
+#define TRILL_MCAST_NAME	"TR_NL_MCAST"
+#define TRILL_MCGRP_OFFSET     0
+
+struct trill_nl_header {
+	int ifindex;		/* port id */
+	int total_length;	/* message total length for mutipart messages check */
+	int msg_number;		/* message number for multipart messages check */
+};
+
+enum {
+	TRILL_ATTR_UNSPEC,
+	TRILL_ATTR_U16,
+	TRILL_ATTR_BIN,
+	__TRILL_ATTR_MAX,
+};
+#define TRILL_ATTR_MAX (__TRILL_ATTR_MAX-1)
+
+/* GET and set are from user space perspective  example TRILL_CMD_GET_BRIDGE
+ * means that the kernel will send this bridge name to userspace
+ */
+enum {
+	TRILL_CMD_UNSPEC,
+	TRILL_CMD_SET_NICKS_INFO,
+	TRILL_CMD_GET_NICKS_INFO,
+	TRILL_CMD_ADD_NICKS_INFO,
+	TRILL_CMD_DEL_NICK,
+	TRILL_CMD_SET_TREEROOT_ID,
+	TRILL_CMD_GET_RBRIDGE,
+	TRILL_CMD_SET_RBRIDGE,
+	TRILL_CMD_PORT_FLUSH,
+	TRILL_CMD_NICK_FLUSH,
+	__TRILL_CMD_MAX,
+};
+#define TRILL_CMD_MAX (__TRILL_CMD_MAX - 1)
+
+int __init rbridge_register_genl(void);
+void __exit rbridge_unregister_genl(void);
+
+/* used to indicate that message is provided by kernel to user space */
+#define KERNL_RESPONSE_INTERFACE -1
+
+#endif				/* RBR_NETLINK_H_ */
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ