ng_one2many(4)
NAME
ng_one2many - packet multiplexing netgraph node type
SYNOPSIS
#include <sys/types.h> #include <netgraph/ng_one2many.h>
DESCRIPTION
- The 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 one, and multiple hooks
- named many0,
many1, etc. Packets received on any of the many hooks are - forwarded out
the one hook. Packets received on the one hook are forward - ed out one or
more of the many hooks; which hook(s) is determined by the - node's configured transmit algorithm. Packets are not altered in any
- way.
- 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. - Before an interface or link can be plumbed into a group, its
- status must
be marked as being ``up''. This is normally setup during - the initial
boot stages by rc.conf(5). It is also possible to change an - interface's
status to ``up'' by using the ifconfig(8) utility.
TRANSMIT ALGORITHMS
- NG_ONE2MANY_XMIT_ROUNDROBIN
- Packets are delivered out the many hooks in sequential
- order. Each
packet goes out on a different many hook. - NG_ONE2MANY_XMIT_ALL
- Packets are delivered out all the many hooks. Each
- packet goes out
each many hook. - In the future other algorithms may be added as well.
LINK FAILURE DETECTION
- The node distinguishes between active and failed links. Da
- ta is sent
only to active links. The following link failure detection - algorithms
are available: - NG_ONE2MANY_FAIL_MANUAL
- The node is explicitly told which of the links are
- up via the
NGM_ONE2MANY_SET_CONFIG control message (see below). - Newly connected links are down until configured otherwise.
- NG_ONE2MANY_FAIL_NOTIFY
- The node listens to flow control message from many
- hooks, and
considers link failed if NGM_LINK_IS_DOWN is re - ceived. If the
NGM_LINK_IS_UP message is received, node considers - link active.
- In the future other algorithms may be added as well.
- When all links are considered failed, node sends the
- NGM_LINK_IS_DOWN
message towards the one hook. When at least one link comes - up, node
sends the NGM_LINK_IS_UP message towards the one hook.
HOOKS
- This node type supports up to NG_ONE2MANY_MAX_LINKS hooks
- named many0,
many1, etc., plus a single hook named one.
CONTROL MESSAGES
- This node type supports the generic control messages, plus
- the following:
- NGM_ONE2MANY_SET_CONFIG
- Sets the node configuration using a struct
- ng_one2many_link_config
as the control message argument: - /* Node configuration structure */
struct ng_one2many_config {u_int32_t xmitAlg; /* how to distributepackets */
u_int32_t failAlg; /* how to detect linkfailure */
u_char enabledLinks[NG_ONE2MANY_MAX_LINKS]; - };
- Currently, the valid settings for the xmitAlg field are
NG_ONE2MANY_XMIT_ROUNDROBIN (default) or - NG_ONE2MANY_XMIT_ALL. The
valid settings for failAlg are NG_ONE2MANY_FAIL_MANUAL - (default) or
NG_ONE2MANY_FAIL_NOTIFY. - NGM_ONE2MANY_GET_CONFIG
- Returns the current node configuration in a struct
ng_one2many_link_config. - NGM_ONE2MANY_GET_STATS
- This command takes a 32 bit link number as an argument
- and returns a
struct ng_one2many_link_stats containing statistics for - the corresponding many link, which may or may not be currently
- connected:
- /* Statistics structure (one for each link) */
struct ng_one2many_link_stats {u_int64_t recvOctets; /* total octets rec'd onlink */
u_int64_t recvPackets; /* total pkts rec'd onlink */
u_int64_t xmitOctets; /* total octets xmit'd onlink */
u_int64_t xmitPackets; /* total pkts xmit'd onlink */ - };
- To access statistics for the one link, use the link
- number -1.
- NGM_ONE2MANY_CLR_STATS
- This command takes a 32 bit link number as an argument
- and clears
the statistics for that link. - NGM_ONE2MANY_GETCLR_STATS
- Same as NGM_ONE2MANY_GET_STATS, but also atomically
- clears the
statistics for the link as well.
SHUTDOWN
- This node shuts down upon receipt of a NGM_SHUTDOWN control
- message, or
when all hooks have been disconnected.
EXAMPLES
- The following commands will set up Ethernet interfaces fxp0
- to deliver
packets alternating over the physical interfaces correspond - ing to networking interfaces fxp0 through fxp3:
# 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
- 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.
SEE ALSO
- netgraph(4), ng_bridge(4), ng_ether(4), ng_hub(4), ifcon
- fig(8), ngctl(8)
HISTORY
The ng_one2many node type was implemented in FreeBSD 4.2.
AUTHORS
- The one2many netgraph node (with round-robin algorithm) was
- written by
Archie Cobbs <archie@FreeBSD.org>. The all algorithm was - added by Rogier
R. Mulhuijzen <drwilco@drwilco.net>.
BUGS
- More transmit and link failure algorithms should be support
- ed. A good
candidate is Cisco's Etherchannel. - BSD February 19, 2006