summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/man/man4/Makefile1
-rw-r--r--share/man/man4/ng_bridge.42
-rw-r--r--share/man/man4/ng_hub.466
-rw-r--r--share/man/man4/ng_one2many.41
-rw-r--r--sys/modules/netgraph/Makefile1
-rw-r--r--sys/modules/netgraph/hub/Makefile6
-rw-r--r--sys/netgraph/ng_hub.c110
-rw-r--r--sys/netgraph/ng_hub.h36
8 files changed, 223 insertions, 0 deletions
diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile
index 3f96b4f..fc4c4f1 100644
--- a/share/man/man4/Makefile
+++ b/share/man/man4/Makefile
@@ -170,6 +170,7 @@ MAN= aac.4 \
ng_h4.4 \
ng_hci.4 \
ng_hole.4 \
+ ng_hub.4 \
ng_iface.4 \
ng_ip_input.4 \
ng_ksocket.4 \
diff --git a/share/man/man4/ng_bridge.4 b/share/man/man4/ng_bridge.4
index 219eaef..b9a04db 100644
--- a/share/man/man4/ng_bridge.4
+++ b/share/man/man4/ng_bridge.4
@@ -195,6 +195,8 @@ Example script showing how to set up a bridging network
.Xr bridge 4 ,
.Xr netgraph 4 ,
.Xr ng_ether 4 ,
+.Xr ng_hub 4 ,
+.Xr ng_one2many 4 ,
.Xr ngctl 8
.Sh HISTORY
The
diff --git a/share/man/man4/ng_hub.4 b/share/man/man4/ng_hub.4
new file mode 100644
index 0000000..a1ad068
--- /dev/null
+++ b/share/man/man4/ng_hub.4
@@ -0,0 +1,66 @@
+.\" Copyright (c) 2004 Ruslan Ermilov
+.\" 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 AUTHOR 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 AUTHOR 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.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd April 17, 2004
+.Dt NG_HUB 4
+.Os
+.Sh NAME
+.Nm ng_hub
+.Nd packet distribution netgraph node type
+.Sh SYNOPSIS
+.In netgraph/ng_hub.h
+.Sh DESCRIPTION
+The
+.Nm hub
+node type provides a simple mechanism for distributing packets over
+several links.
+Packets received on any of the hooks are forwarded out the other hooks.
+Packets are not altered in any way.
+.Sh HOOKS
+A
+.Nm hub
+node accepts any request to connect, regardless of the hook name,
+as long as the name is unique.
+.Sh CONTROL MESSAGES
+This node type supports only the generic control messages.
+.Sh SHUTDOWN
+This node shuts down upon receipt of a
+.Dv NGM_SHUTDOWN
+control message, or when all hooks have been disconnected.
+.Sh SEE ALSO
+.Xr netgraph 4 ,
+.Xr ng_bridge 4 ,
+.Xr ng_ether 4 ,
+.Xr ng_one2many 4 ,
+.Xr ngctl 8 ,
+.Xr nghook 8
+.Sh HISTORY
+The
+.Nm
+node type appeared in
+.Fx 5.3 .
+.Sh AUTHORS
+.An Ruslan Ermilov Aq ru@FreeBSD.org
diff --git a/share/man/man4/ng_one2many.4 b/share/man/man4/ng_one2many.4
index 1238680..08078bc 100644
--- a/share/man/man4/ng_one2many.4
+++ b/share/man/man4/ng_one2many.4
@@ -228,6 +228,7 @@ A good candidate is Cisco's Etherchannel.
.Xr netgraph 4 ,
.Xr ng_bridge 4 ,
.Xr ng_ether 4 ,
+.Xr ng_hub 4 ,
.Xr ngctl 8
.Sh HISTORY
The
diff --git a/sys/modules/netgraph/Makefile b/sys/modules/netgraph/Makefile
index 3b92f0b..d3abf41 100644
--- a/sys/modules/netgraph/Makefile
+++ b/sys/modules/netgraph/Makefile
@@ -17,6 +17,7 @@ SUBDIR= UI \
gif \
gif_demux \
hole \
+ hub \
iface \
ip_input \
ksocket \
diff --git a/sys/modules/netgraph/hub/Makefile b/sys/modules/netgraph/hub/Makefile
new file mode 100644
index 0000000..9ebb54d
--- /dev/null
+++ b/sys/modules/netgraph/hub/Makefile
@@ -0,0 +1,6 @@
+# $FreeBSD$
+
+KMOD= ng_hub
+SRCS= ng_hub.c
+
+.include <bsd.kmod.mk>
diff --git a/sys/netgraph/ng_hub.c b/sys/netgraph/ng_hub.c
new file mode 100644
index 0000000..bf61f6a
--- /dev/null
+++ b/sys/netgraph/ng_hub.c
@@ -0,0 +1,110 @@
+/*-
+ * Copyright (c) 2004 Ruslan Ermilov
+ * 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 AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/param.h>
+#include <sys/errno.h>
+#include <sys/kernel.h>
+#include <sys/mbuf.h>
+#include <sys/systm.h>
+
+#include <netgraph/ng_message.h>
+#include <netgraph/ng_hub.h>
+#include <netgraph/netgraph.h>
+
+static ng_constructor_t ng_hub_constructor;
+static ng_rcvdata_t ng_hub_rcvdata;
+static ng_disconnect_t ng_hub_disconnect;
+
+static struct ng_type ng_hub_typestruct = {
+ .version = NG_ABI_VERSION,
+ .name = NG_HUB_NODE_TYPE,
+ .constructor = ng_hub_constructor,
+ .rcvdata = ng_hub_rcvdata,
+ .disconnect = ng_hub_disconnect,
+};
+NETGRAPH_INIT(hub, &ng_hub_typestruct);
+
+
+static int
+ng_hub_constructor(node_p node)
+{
+
+ return (0);
+}
+
+static int
+ng_hub_rcvdata(hook_p hook, item_p item)
+{
+ const node_p node = NG_HOOK_NODE(hook);
+ int error = 0;
+ hook_p hook2;
+ struct mbuf * const m = NGI_M(item), *m2;
+ meta_p const meta = NGI_META(item);
+ meta_p meta2;
+ int nhooks;
+
+ if ((nhooks = NG_NODE_NUMHOOKS(node)) == 1) {
+ NG_FREE_ITEM(item);
+ return (0);
+ }
+ LIST_FOREACH(hook2, &node->nd_hooks, hk_hooks) {
+ if (hook2 == hook)
+ continue;
+ if (--nhooks == 1)
+ NG_FWD_ITEM_HOOK(error, item, hook2);
+ else {
+ if ((m2 = m_dup(m, M_DONTWAIT)) == NULL) {
+ NG_FREE_ITEM(item);
+ return (ENOBUFS);
+ }
+ if (meta != NULL) {
+ if ((meta2 = ng_copy_meta(meta)) == NULL) {
+ m_freem(m2);
+ NG_FREE_ITEM(item);
+ return (ENOMEM);
+ }
+ } else
+ meta2 = NULL;
+ NG_SEND_DATA(error, hook2, m2, meta2);
+ if (error)
+ break;
+ }
+ }
+
+ return (error);
+}
+
+static int
+ng_hub_disconnect(hook_p hook)
+{
+
+ if (NG_NODE_NUMHOOKS(NG_HOOK_NODE(hook)) == 0 &&
+ NG_NODE_IS_VALID(NG_HOOK_NODE(hook)))
+ ng_rmnode_self(NG_HOOK_NODE(hook));
+ return (0);
+}
diff --git a/sys/netgraph/ng_hub.h b/sys/netgraph/ng_hub.h
new file mode 100644
index 0000000..a735d7b
--- /dev/null
+++ b/sys/netgraph/ng_hub.h
@@ -0,0 +1,36 @@
+/*-
+ * Copyright (c) 2004 Ruslan Ermilov
+ * 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 AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _NETGRAPH_NG_HUB_H_
+#define _NETGRAPH_NG_HUB_H_
+
+/* Node type name and magic cookie. */
+#define NG_HUB_NODE_TYPE "hub"
+#define NGM_HUB_COOKIE 1082189597
+
+#endif /* _NETGRAPH_NG_HUB_H_ */
OpenPOWER on IntegriCloud