aboutsummaryrefslogtreecommitdiff
path: root/share/man/man4/ng_one2many.4
diff options
context:
space:
mode:
Diffstat (limited to 'share/man/man4/ng_one2many.4')
-rw-r--r--share/man/man4/ng_one2many.4273
1 files changed, 273 insertions, 0 deletions
diff --git a/share/man/man4/ng_one2many.4 b/share/man/man4/ng_one2many.4
new file mode 100644
index 000000000000..e43fd8a2fa52
--- /dev/null
+++ b/share/man/man4/ng_one2many.4
@@ -0,0 +1,273 @@
+.\" Copyright (c) 2000 Whistle Communications, Inc.
+.\" All rights reserved.
+.\"
+.\" Subject to the following obligations and disclaimer of warranty, use and
+.\" redistribution of this software, in source or object code forms, with or
+.\" without modifications are expressly permitted by Whistle Communications;
+.\" provided, however, that:
+.\" 1. Any and all reproductions of the source or object code must include the
+.\" copyright notice above and the following disclaimer of warranties; and
+.\" 2. No rights are granted, in any manner or form, to use Whistle
+.\" Communications, Inc. trademarks, including the mark "WHISTLE
+.\" COMMUNICATIONS" on advertising, endorsements, or otherwise except as
+.\" such appears in the above copyright notice or in the software.
+.\"
+.\" THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND
+.\" TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO
+.\" REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE,
+.\" INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
+.\" WHISTLE COMMUNICATIONS DOES NOT WARRANT, GUARANTEE, OR MAKE ANY
+.\" REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS OF THE USE OF THIS
+.\" SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY OR OTHERWISE.
+.\" IN NO EVENT SHALL WHISTLE COMMUNICATIONS BE LIABLE FOR ANY DAMAGES
+.\" RESULTING FROM OR ARISING OUT OF ANY USE OF THIS SOFTWARE, INCLUDING
+.\" WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+.\" PUNITIVE, OR CONSEQUENTIAL DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR
+.\" SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER 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 WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY
+.\" OF SUCH DAMAGE.
+.\"
+.\" Author: Archie Cobbs <archie@FreeBSD.org>
+.\"
+.\" $FreeBSD$
+.\"
+.Dd February 19, 2006
+.Dt NG_ONE2MANY 4
+.Os
+.Sh NAME
+.Nm ng_one2many
+.Nd packet multiplexing netgraph node type
+.Sh SYNOPSIS
+.In sys/types.h
+.In netgraph/ng_one2many.h
+.Sh DESCRIPTION
+The
+.Nm one2many
+provides a simple mechanism for routing packets over several links
+in a one-to-many (and in the reverse direction, many-to-one) fashion.
+There is a single hook named
+.Dv one ,
+and multiple hooks named
+.Dv many0 ,
+.Dv many1 ,
+etc.
+Packets received on any of the
+.Dv many
+hooks are forwarded out the
+.Dv one
+hook.
+Packets received on the
+.Dv one
+hook are forwarded out one or more of the
+.Dv many
+hooks; which hook(s) is determined by the node's configured
+transmit algorithm.
+Packets are not altered in any way.
+.Pp
+Each of the connected many links may be considered to be up or down.
+Packets are never delivered out a many hook that is down.
+How a link is determined to be up or down depends on the node's
+configured link failure detection algorithm.
+.Pp
+Before an interface or link can be plumbed into a group, its status
+must be marked as being
+.Dq up .
+This is normally setup during the initial boot stages by
+.Xr rc.conf 5 .
+It is also possible to change an interface's status to
+.Dq up
+by using the
+.Xr ifconfig 8
+utility.
+.Sh TRANSMIT ALGORITHMS
+.Bl -tag -width foo
+.It Dv NG_ONE2MANY_XMIT_ROUNDROBIN
+Packets are delivered out the many hooks in sequential order.
+Each packet goes out on a different
+.Dv many
+hook.
+.It Dv NG_ONE2MANY_XMIT_ALL
+Packets are delivered out all the
+.Dv many
+hooks.
+Each packet goes out each
+.Dv many
+hook.
+.El
+.Pp
+In the future other algorithms may be added as well.
+.Sh LINK FAILURE DETECTION
+The node distinguishes between active and failed links.
+Data is sent only to active links.
+The following link failure detection algorithms are available:
+.Bl -tag -width indent
+.It Dv NG_ONE2MANY_FAIL_MANUAL
+The node is explicitly told which of the links are up via the
+.Dv NGM_ONE2MANY_SET_CONFIG
+control message (see below).
+Newly connected links are down until configured otherwise.
+.It Dv NG_ONE2MANY_FAIL_NOTIFY
+The node listens to flow control message from
+.Va many
+hooks, and considers link failed if
+.Dv NGM_LINK_IS_DOWN
+is received.
+If the
+.Dv NGM_LINK_IS_UP
+message is received, node considers link active.
+.El
+.Pp
+In the future other algorithms may be added as well.
+.Pp
+When all links are considered failed, node sends the
+.Dv NGM_LINK_IS_DOWN
+message towards the
+.Va one
+hook.
+When at least one link comes up, node sends the
+.Dv NGM_LINK_IS_UP
+message towards the
+.Va one
+hook.
+.Sh HOOKS
+This node type supports up to
+.Dv NG_ONE2MANY_MAX_LINKS
+hooks named
+.Dv many0 ,
+.Dv many1 ,
+etc.,
+plus a single hook named
+.Dv one .
+.Sh CONTROL MESSAGES
+This node type supports the generic control messages, plus the
+following:
+.Bl -tag -width foo
+.It Dv NGM_ONE2MANY_SET_CONFIG
+Sets the node configuration using a
+.Dv "struct ng_one2many_link_config"
+as the control message argument:
+.Bd -literal
+/* Node configuration structure */
+struct ng_one2many_config {
+ u_int32_t xmitAlg; /* how to distribute packets */
+ u_int32_t failAlg; /* how to detect link failure */
+ u_char enabledLinks[NG_ONE2MANY_MAX_LINKS];
+};
+.Ed
+.Pp
+Currently, the valid settings for the
+.Dv xmitAlg
+field are
+.Dv NG_ONE2MANY_XMIT_ROUNDROBIN
+(default) or
+.Dv NG_ONE2MANY_XMIT_ALL .
+The valid settings for
+.Dv failAlg
+are
+.Dv NG_ONE2MANY_FAIL_MANUAL
+(default) or
+.Dv NG_ONE2MANY_FAIL_NOTIFY .
+.It Dv NGM_ONE2MANY_GET_CONFIG
+Returns the current node configuration in a
+.Dv "struct ng_one2many_link_config" .
+.It Dv NGM_ONE2MANY_GET_STATS
+This command takes a 32 bit link number as an argument and
+returns a
+.Dv "struct ng_one2many_link_stats"
+containing statistics for the corresponding
+.Dv many
+link, which may or may not be currently connected:
+.Bd -literal
+/* Statistics structure (one for each link) */
+struct ng_one2many_link_stats {
+ u_int64_t recvOctets; /* total octets rec'd on link */
+ u_int64_t recvPackets; /* total pkts rec'd on link */
+ u_int64_t xmitOctets; /* total octets xmit'd on link */
+ u_int64_t xmitPackets; /* total pkts xmit'd on link */
+};
+.Ed
+.Pp
+To access statistics for the
+.Dv one
+link, use the link number
+.Dv -1 .
+.It Dv NGM_ONE2MANY_CLR_STATS
+This command takes a 32 bit link number as an argument and
+clears the statistics for that link.
+.It Dv NGM_ONE2MANY_GETCLR_STATS
+Same as
+.Dv NGM_ONE2MANY_GET_STATS ,
+but also atomically clears the statistics for the link as well.
+.El
+.Sh SHUTDOWN
+This node shuts down upon receipt of a
+.Dv NGM_SHUTDOWN
+control message, or when all hooks have been disconnected.
+.Sh EXAMPLES
+The following commands will set up Ethernet interfaces
+.Dv fxp0
+to deliver packets alternating over the physical interfaces
+corresponding to networking interfaces
+.Dv fxp0
+through
+.Dv fxp3 :
+.Bd -literal
+ # Plumb nodes together
+
+ ngctl mkpeer fxp0: one2many upper one
+ ngctl connect fxp0: fxp0:upper lower many0
+ ngctl connect fxp1: fxp0:upper lower many1
+ ngctl connect fxp2: fxp0:upper lower many2
+ ngctl connect fxp3: fxp0:upper lower many3
+
+ # Allow fxp1 through fxp3 to xmit/recv fxp0 frames
+
+ ngctl msg fxp1: setpromisc 1
+ ngctl msg fxp2: setpromisc 1
+ ngctl msg fxp3: setpromisc 1
+ ngctl msg fxp1: setautosrc 0
+ ngctl msg fxp2: setautosrc 0
+ ngctl msg fxp3: setautosrc 0
+
+ # Configure all four links as up
+
+ ngctl msg fxp0:upper \\
+ setconfig "{ xmitAlg=1 failAlg=1 enabledLinks=[ 1 1 1 1 ] }"
+
+ # Bring up interface
+
+ ifconfig fxp0 192.168.1.1 netmask 0xfffffffc
+.Ed
+.Pp
+With a similar setup on a peer machine (using the address
+192.168.1.2), a point-to-point
+Ethernet connection with four times normal bandwidth is
+achieved.
+.Sh SEE ALSO
+.Xr netgraph 4 ,
+.Xr ng_bridge 4 ,
+.Xr ng_ether 4 ,
+.Xr ng_hub 4 ,
+.Xr ifconfig 8 ,
+.Xr ngctl 8
+.Sh HISTORY
+The
+.Nm
+node type was implemented in
+.Fx 4.2 .
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm one2many
+netgraph node (with round-robin algorithm) was written by
+.An Archie Cobbs
+.Aq archie@FreeBSD.org .
+The all algorithm was added by
+.An Rogier R. Mulhuijzen
+.Aq drwilco@drwilco.net .
+.Sh BUGS
+More transmit and link failure algorithms should be supported.
+A good candidate is Cisco's Etherchannel.