ng_bridge(4)
NAME
ng_bridge - Ethernet bridging netgraph node type
SYNOPSIS
#include <sys/types.h> #include <netgraph/ng_bridge.h>
DESCRIPTION
- The bridge node type performs Ethernet bridging over one or
- more links. Each link (represented by a connected hook) is used to
- transmit and receive raw Ethernet frames. As packets are received, the
- node learns which link each host resides on. Packets unicast to a known
- host are directed out the appropriate link only, and other links are
- spared the traffic. This behavior is in contrast to a hub, which al
- ways forwards every received packet to every other link.
LOOP DETECTION
- The bridge node incorporates a simple loop detection algo
- rithm. A loop is when two ports are connected to the same physical medium.
- Loops are important to avoid because of packet storms, which severely
- degrade performance. A packet storm results when the same packet is
- sent and received over and over again. If a host is detected on link
- A, and is then detected on link B within a certain time period after
- first being detected on link A, then link B is considered to be a looped
- back link. The time period is called the minimum stable time.
- A looped back link will be temporarily muted, i.e., all
- traffic received on that link is ignored.
IPFW PROCESSING
- Processing of IP packets via the ipfirewall(4) mechanism on
- a per-link basis is not yet implemented.
HOOKS
- This node type supports up to NG_BRIDGE_MAX_LINKS hooks.
- Each connected hook represents a bridged link. The hooks are named link0,
- link1, etc. Typically these hooks are connected to the lower hooks of
- one or more ng_ether(4) nodes. To connect the host machine to a bridged
- network, simply connect the upper hook of an ng_ether(4) node to the
- bridge node.
CONTROL MESSAGES
- This node type supports the generic control messages, plus
- the following:
- NGM_BRIDGE_SET_CONFIG
- Set the node configuration. This command takes a
- struct ng_bridge_config as an argument:
- /* Node configuration structure */
struct ng_bridge_config {
u_char ipfw[NG_BRIDGE_MAX_LINKS]; /* enable ipfw*/ u_char debugLevel; /* debug level */ u_int32_t loopTimeout; /* link loopbackmute time */ u_int32_t maxStaleness; /* max host age before nuking */ u_int32_t minStableAge; /* min time for astable host */
- };
- The ipfw array enables ipfirewall(4) processing of IP
- packets received on the corresponding links. The debugLevel
- field sets the debug level on the node. At level of 2 or greater, de
- tected loops are logged. The default level is 1.
- The loopTimeout determines how long (in seconds) a
- looped link is muted. The default is 60 seconds. The maxStaleness
- parameter determines how long a period of inactivity before a
- host's entry is forgotten. The default is 15 minutes. The minSta
- bleAge determines how quickly a host must jump from one link to another
- before we declare a loopback condition. The default is one sec
- ond.
- NGM_BRIDGE_GET_CONFIG
- Returns the current configuration as a struct
- ng_bridge_config.
- NGM_BRIDGE_RESET
- Causes the node to forget all hosts and unmute all
- links. The node configuration is not changed.
- NGM_BRIDGE_GET_STATS
- This command takes a four byte link number as an argu
- ment and returns a struct ng_bridge_link_stats containing
- statistics for the corresponding link, which must be currently connected:
- /* Statistics structure (one for each link) */
struct ng_bridge_link_stats {
u_int64_t recvOctets; /* total octets rec'd onlink */ u_int64_t recvPackets; /* total pkts rec'd onlink */ u_int64_t recvMulticasts; /* multicast pkts rec'don link */ u_int64_t recvBroadcasts; /* broadcast pkts rec'don link */ u_int64_t recvUnknown; /* pkts rec'd with unknown dest addr */ u_int64_t recvRunts; /* pkts rec'd less than14 bytes */ u_int64_t recvInvalid; /* pkts rec'd with bogussource addr */ u_int64_t xmitOctets; /* total octets xmit'd onlink */ u_int64_t xmitPackets; /* total pkts xmit'd onlink */ u_int64_t xmitMulticasts; /* multicast pkts xmit'don link */ u_int64_t xmitBroadcasts; /* broadcast pkts xmit'don link */ u_int64_t loopDrops; /* pkts dropped due toloopback */ u_int64_t loopDetects; /* number of loop detections */ u_int64_t memoryFailures; /* times couldn't get memor mbuf */
- };
- NGM_BRIDGE_CLR_STATS
- This command takes a four byte link number as an argu
- ment and clears the statistics for that link.
- NGM_BRIDGE_GETCLR_STATS
- Same as NGM_BRIDGE_GET_STATS, but also atomically
- clears the statistics as well.
- NGM_BRIDGE_GET_TABLE
- Returns the current host mapping table used to direct
- packets, in a struct ng_bridge_host_ary.
SHUTDOWN
- This node shuts down upon receipt of a NGM_SHUTDOWN control
- message, or when all hooks have been disconnected.
FILES
- /usr/share/examples/netgraph/ether.bridge
- Example script showing how to set up a bridging
- network
SEE ALSO
HISTORY
The ng_bridge node type was implemented in FreeBSD 4.2.
AUTHORS
- Archie Cobbs <archie@FreeBSD.org>
- BSD August 31, 2000