[networking-guide] master: Adding: Using Channel Bonding (7d3ceba)

stephenw at fedoraproject.org stephenw at fedoraproject.org
Tue Jul 29 07:34:30 UTC 2014


Repository : http://git.fedorahosted.org/cgit/docs/networking-guide.git

On branch  : master

>---------------------------------------------------------------

commit 7d3ceba1922f843919e3b0af7171992d2170b53d
Author: Stephen Wadeley <swadeley at redhat.com>
Date:   Tue Jul 29 09:34:15 2014 +0200

    Adding: Using Channel Bonding
    
    moved here from the SysAdmin Guide


>---------------------------------------------------------------

 en-US/Configure_Network_Bonding.xml |  384 +++++++++++++++++++++++++++++++++++
 1 files changed, 384 insertions(+), 0 deletions(-)

diff --git a/en-US/Configure_Network_Bonding.xml b/en-US/Configure_Network_Bonding.xml
index bf00546..08b4e94 100644
--- a/en-US/Configure_Network_Bonding.xml
+++ b/en-US/Configure_Network_Bonding.xml
@@ -401,6 +401,390 @@ NM_CONTROLLED=no</programlisting>
 
  </section>
 
+ <section
+      id="sec-Using_Channel_Bonding">
+      <title>Using Channel Bonding</title>
+      <indexterm>
+        <primary>kernel module</primary>
+        <secondary>bonding module</secondary>
+        <tertiary>description</tertiary>
+      </indexterm>
+      <indexterm>
+        <primary>channel bonding</primary>
+        <secondary>description</secondary>
+      </indexterm>
+      <indexterm>
+        <primary>bonding</primary>
+        <see>channel bonding</see>
+      </indexterm>
+      <indexterm>
+        <primary>NIC</primary>
+        <secondary>binding into single channel</secondary>
+      </indexterm>
+      <indexterm>
+        <primary>channel bonding interface</primary>
+        <see>kernel module</see>
+      </indexterm>
+
+      <indexterm>
+        <primary>kernel module</primary>
+        <secondary>bonding module</secondary>
+      </indexterm>
+      <indexterm>
+        <primary>channel bonding</primary>
+        <secondary>configuration</secondary>
+        </indexterm>
+     
+          <para>To enhance performance, adjust available module options to ascertain what combination works best. Pay particular attention to the <command>miimon</command> or <command>arp_interval</command> and the <command>arp_ip_target</command> parameters. See <xref
+              linkend="s3-modules-bonding-directives"/> for a list of available options and how to quickly determine the best ones for your bonded interface.</para>
+
+      <section
+        id="s3-modules-bonding-directives">
+        <title>Bonding Module Directives</title>
+        <indexterm>
+          <primary>kernel module</primary>
+          <secondary>bonding module</secondary>
+          <tertiary>parameters to bonded interfaces</tertiary>
+        </indexterm>
+        <indexterm>
+          <primary>kernel module</primary>
+          <secondary>module parameters</secondary>
+          <tertiary>bonding module parameters</tertiary>
+        </indexterm>
+        <indexterm>
+          <primary>channel bonding</primary>
+          <secondary>parameters to bonded interfaces</secondary>
+        </indexterm>
+        <para>It is a good idea to test which channel bonding module parameters work best for your bonded interfaces before adding them to the <parameter
+            class="option">BONDING_OPTS="<replaceable>&lt;bonding parameters&gt;</replaceable>"</parameter> directive in your bonding interface configuration file (<filename>ifcfg-bond0</filename> for example). Parameters to bonded interfaces can be configured without unloading (and reloading) the bonding module by manipulating files in the <systemitem
+            class="filesystem">sysfs</systemitem> file system.</para>
+        <para>
+          <systemitem
+            class="filesystem">sysfs</systemitem> is a virtual file system that represents kernel objects as directories, files and symbolic links. <systemitem
+            class="filesystem">sysfs</systemitem> can be used to query for information about kernel objects, and can also manipulate those objects through the use of normal file system commands. The <systemitem
+            class="filesystem">sysfs</systemitem> virtual file system is mounted under the <filename>/sys/</filename> directory. All bonding interfaces can be configured dynamically by interacting with and manipulating files under the <filename>/sys/class/net/</filename> directory. </para>
+        <para>In order to determine the best parameters for your bonding interface, create a channel bonding interface file such as <filename>ifcfg-bond0</filename> by following the instructions in <xref linkend="sec-Create_a_Channel_Bonding_Interface" />. Insert the <parameter
+            class="option">SLAVE=yes</parameter> and <parameter
+            class="option">MASTER=bond0</parameter> directives in the configuration files for each interface bonded to bond0. Once this is completed, you can proceed to testing the parameters.</para>
+        <para>First, bring up the bond you created by running <command>/usr/sbin/ifup <option>bond<replaceable>&lt;N&gt;</replaceable></option></command> as <systemitem class="username">root</systemitem>:</para>
+        <screen>~]#&nbsp;<command>/usr/sbin/ifup bond0</command></screen>
+        <para>If you have correctly created the <filename>ifcfg-bond0</filename> bonding interface file, you will be able to see <computeroutput>bond0</computeroutput> listed in the output of running <command>ifconfig</command> (without any options):</para>
+        <screen>~]#&nbsp;<command>ifconfig</command>
+bond0     Link encap:Ethernet HWaddr 00:00:00:00:00:00
+          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
+          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
+          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
+          collisions:0 txqueuelen:0
+          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
+eth0      Link encap:Ethernet  HWaddr 52:54:00:26:9E:F1
+          inet addr:192.168.122.251  Bcast:192.168.122.255  Mask:255.255.255.0
+          inet6 addr: fe80::5054:ff:fe26:9ef1/64 Scope:Link
+          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
+          RX packets:207 errors:0 dropped:0 overruns:0 frame:0
+          TX packets:205 errors:0 dropped:0 overruns:0 carrier:0
+          collisions:0 txqueuelen:1000
+          RX bytes:70374 (68.7 KiB)  TX bytes:25298 (24.7 KiB)
+<lineannotation>[output truncated]</lineannotation>
+        </screen>
+        <para>To view all existing bonds, even if they are not up, run:</para>
+        <screen>~]#&nbsp;<command>cat /sys/class/net/bonding_masters</command>
+bond0</screen>
+        <para>You can configure each bond individually by manipulating the files located in the <filename>/sys/class/net/bond<replaceable>&lt;N&gt;</replaceable>/bonding/</filename> directory. First, the bond you are configuring must be taken down:</para>
+        <screen>~]#&nbsp;<command>/usr/sbin/ifdown bond0</command>
+        </screen>
+        <para>As an example, to enable MII monitoring on bond0 with a 1 second interval, run as <systemitem class="username">root</systemitem>:</para>
+        <screen>~]#&nbsp;<command>echo 1000 &gt; /sys/class/net/bond0/bonding/miimon</command>
+        </screen>
+        <para>To configure bond0 for <parameter
+            class="option">balance-alb</parameter> mode, run either:</para>
+        <screen>~]#&nbsp;<command>echo 6 &gt; /sys/class/net/bond0/bonding/mode</command>
+        </screen>
+        <para>...or, using the name of the mode:</para>
+        <screen>~]#&nbsp;<command>echo balance-alb &gt; /sys/class/net/bond0/bonding/mode</command>
+        </screen>
+        <para>After configuring options for the bond in question, you can bring it up and test it by running <command>/usr/sbin/ifup bond<replaceable>&lt;N&gt;</replaceable></command>. If you decide to change the options, take the interface down, modify its parameters using <systemitem class="filesystem">sysfs</systemitem>, bring it back up, and re-test.</para>
+        <para>Once you have determined the best set of parameters for your bond, add those parameters as a space-separated list to the <parameter
+            class="option">BONDING_OPTS=</parameter> directive of the <filename>/etc/sysconfig/network-scripts/ifcfg-bond<replaceable>&lt;N&gt;</replaceable>
+          </filename> file for the bonding interface you are configuring. Whenever that bond is brought up (for example, by the system during the boot sequence if the <parameter
+            class="option">ONBOOT=yes</parameter> directive is set), the bonding options specified in the <parameter
+            class="option">BONDING_OPTS</parameter> will take effect for that bond.</para>
+        <para>The following list provides the names of many of the more common channel bonding parameters, along with a description of what they do. For more information, see the brief descriptions for each <computeroutput>parm</computeroutput> in <command>modinfo bonding</command> output, or for more detailed information, see <ulink url="https://www.kernel.org/doc/Documentation/networking/bonding.txt">https://www.kernel.org/doc/Documentation/networking/bonding.txt</ulink><!--the <filename>bonding.txt</filename> file in the <package>kernel-doc</package> package (see <xref
+            linkend="s1-kernel-modules-additional-resources"/>)-->.</para>
+        <variablelist
+          spacing="compact">
+          <title>Bonding Interface Parameters</title>
+          <varlistentry>
+            <term>
+              <literal>arp_interval=<replaceable>&lt;time_in_milliseconds&gt;</replaceable>
+              </literal>
+            </term>
+            <listitem>
+              <para>Specifies, in milliseconds, how often <systemitem class="protocol">ARP</systemitem> monitoring occurs.</para>
+              <important>
+                <!-- <title>Make sure you specify all required parameters</title> -->
+                <para>It is essential that both <literal>arp_interval</literal> and <literal>arp_ip_target</literal> parameters are specified, or, alternatively, the <literal>miimon</literal> parameter is specified. Failure to do so can cause degradation of network performance in the event that a link fails.</para>
+              </important>
+              <para>If using this setting while in <literal>mode=0</literal> or <literal>mode=1</literal> (the two load-balancing modes), the network switch must be configured to distribute packets evenly across the NICs. For more information on how to accomplish this, see <ulink url="https://www.kernel.org/doc/Documentation/networking/bonding.txt">https://www.kernel.org/doc/Documentation/networking/bonding.txt</ulink><!--<filename>/usr/share/doc/kernel-doc-<replaceable>&lt;kernel_version&gt;</replaceable>/Documentation/networking/bonding.txt</filename>-->.
+              </para>
+              <para>The value is set to <userinput>0</userinput> by default, which disables it.</para>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term>
+              <literal>arp_ip_target=<replaceable>&lt;ip_address&gt;</replaceable><optional>,<replaceable>&lt;ip_address_2&gt;</replaceable>,…<replaceable>&lt;ip_address_16&gt;</replaceable></optional>
+              </literal>
+            </term>
+            <listitem>
+              <para>Specifies the target <systemitem class="protocol">IP</systemitem> address of <systemitem class="protocol">ARP</systemitem> requests when the <literal>arp_interval</literal> parameter is enabled. Up to 16 <systemitem class="protocol">IP</systemitem> addresses can be specified in a comma separated list.</para>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term>
+              <literal>arp_validate=<replaceable>&lt;value&gt;</replaceable>
+              </literal>
+            </term>
+            <listitem>
+              <para>Validate source/distribution of <systemitem class="protocol">ARP</systemitem> probes; default is <userinput>none</userinput>. Other valid values are <userinput>active</userinput>, <userinput>backup</userinput>, and <userinput>all</userinput>.</para>
+            </listitem>
+          </varlistentry>
+          <!-- <varlistentry>
+            <term>
+              <literal>debug=<replaceable>&lt;number&gt;</replaceable>
+              </literal>
+            </term>
+            <listitem>
+              <para>Enables debug messages. Possible values are:</para>
+              <itemizedlist>
+                <listitem>
+                  <para>
+                    <userinput>0</userinput> — Debug messages are disabled. This is the default.</para>
+                </listitem>
+                <listitem>
+                  <para>
+                    <userinput>1</userinput> — Debug messages are enabled.</para>
+                </listitem>
+              </itemizedlist>
+            </listitem>
+          </varlistentry> -->
+          <varlistentry>
+            <term>
+              <literal>downdelay=<replaceable>&lt;time_in_milliseconds&gt;</replaceable>
+              </literal>
+            </term>
+            <listitem>
+              <para>Specifies (in milliseconds) how long to wait after link failure before disabling the link. The value must be a multiple of the value specified in the <literal>miimon</literal> parameter. The value is set to <userinput>0</userinput> by default, which disables it.</para>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term>lacp_rate=<replaceable>&lt;value&gt;</replaceable>
+            </term>
+            <listitem>
+              <para>Specifies the rate at which link partners should transmit LACPDU packets in 802.3ad mode. Possible values are:</para>
+              <itemizedlist>
+                <listitem>
+                  <para>
+                    <userinput>slow</userinput> or <userinput>0</userinput> — Default setting. This specifies that partners should transmit LACPDUs every 30 seconds.</para>
+                </listitem>
+                <listitem>
+                  <para>
+                    <userinput>fast</userinput> or <userinput>1</userinput> — Specifies that partners should transmit LACPDUs every 1 second.</para>
+                </listitem>
+              </itemizedlist>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term>
+              <literal>miimon=<replaceable>&lt;time_in_milliseconds&gt;</replaceable>
+              </literal>
+            </term>
+            <listitem>
+              <para>Specifies (in milliseconds) how often MII link monitoring occurs. This is useful if high availability is required because MII is used to verify that the NIC is active. To verify that the driver for a particular NIC supports the MII tool, type the following command as root:</para>
+              <screen>~]#&nbsp;<command>ethtool <replaceable>&lt;interface_name&gt;</replaceable> | grep "Link detected:"</command>
+              </screen>
+              <para>In this command, replace <replaceable>&lt;interface_name</replaceable>&gt; with the name of the device interface, such as <userinput>eth0</userinput>, not the bond interface. If MII is supported, the command returns:</para>
+              <screen>Link detected: yes</screen>
+              <para>If using a bonded interface for high availability, the module for each NIC must support MII. Setting the value to <userinput>0</userinput> (the default), turns this feature off. When configuring this setting, a good starting point for this parameter is <userinput>100</userinput>.</para>
+              <important>
+                <!-- <title>Make sure you specify all required parameters</title> -->
+                <para>It is essential that both <literal>arp_interval</literal> and <literal>arp_ip_target</literal> parameters are specified, or, alternatively, the <literal>miimon</literal> parameter is specified. Failure to do so can cause degradation of network performance in the event that a link fails.</para>
+              </important>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term>
+              <literal>mode=<replaceable>&lt;value&gt;</replaceable>
+              </literal>
+            </term>
+            <listitem>
+              <para>Allows you to specify the bonding policy. The  <replaceable>&lt;value&gt;</replaceable> can be one of:</para>
+              <itemizedlist>
+                <listitem>
+                  <para>
+                    <userinput>balance-rr</userinput> or <userinput>0</userinput> — Sets a round-robin policy for fault tolerance and load balancing. Transmissions are received and sent out sequentially on each bonded slave interface beginning with the first one available.</para>
+                </listitem>
+                <listitem>
+                  <para>
+                    <userinput>active-backup</userinput> or <userinput>1</userinput> — Sets an active-backup policy for fault tolerance. Transmissions are received and sent out via the first available bonded slave interface. Another bonded slave interface is only used if the active bonded slave interface fails.</para>
+                </listitem>
+                <listitem>
+                  <para>
+                    <userinput>balance-xor</userinput> or <userinput>2</userinput> — Transmissions are based on the selected hash policy. The default is to derive a hash by XOR of the source and destination MAC addresses multiplied by the modulo of the number of slave interfaces. In this mode traffic destined for specific peers will always be sent over the same interface. As the destination is determined by the MAC addresses this method works best for traffic to peers on the same link or local network. If traffic has to pass through a single router then this mode of traffic balancing will be suboptimal.</para>
+                </listitem>
+                <listitem>
+                  <para>
+                    <userinput>broadcast</userinput> or <userinput>3</userinput> — Sets a broadcast policy for fault tolerance. All transmissions are sent on all slave interfaces.</para>
+                </listitem>
+                <listitem>
+                  <para>
+                    <userinput>802.3ad</userinput> or <userinput>4</userinput> — Sets an IEEE 802.3ad dynamic link aggregation policy. Creates aggregation groups that share the same speed and duplex settings. Transmits and receives on all slaves in the active aggregator. Requires a switch that is 802.3ad compliant.</para>
+                </listitem>
+                <listitem>
+                  <para>
+                    <userinput>balance-tlb</userinput> or <userinput>5</userinput> — Sets a Transmit Load Balancing (TLB) policy for fault tolerance and load balancing. The outgoing traffic is distributed according to the current load on each slave interface. Incoming traffic is received by the current slave. If the receiving slave fails, another slave takes over the MAC address of the failed slave. This mode is only suitable for local addresses known to the kernel bonding module and therefore cannot be used behind a bridge with virtual machines.</para>
+                </listitem>
+                <listitem>
+                  <para>
+                    <userinput>balance-alb</userinput> or <userinput>6</userinput> — Sets an Adaptive Load Balancing (ALB) policy for fault tolerance and load balancing. Includes transmit and receive load balancing for <systemitem class="protocol">IPv4</systemitem> traffic. Receive load balancing is achieved through <systemitem class="protocol">ARP</systemitem> negotiation. This mode is only suitable for local addresses known to the kernel bonding module and therefore cannot be used behind a bridge with virtual machines.</para>
+                </listitem>
+              </itemizedlist>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term>
+              <literal>num_unsol_na=<replaceable>&lt;number&gt;</replaceable>
+              </literal>
+            </term>
+            <listitem>
+              <para>Specifies the number of unsolicited <systemitem class="protocol">IPv6</systemitem> Neighbor Advertisements to be issued after a failover event. One unsolicited NA is issued immediately after the failover.</para>
+              <para>The valid range is <userinput>0 - 255</userinput>; the default value is <userinput>1</userinput>. This parameter affects only the active-backup mode.</para>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term>
+              <literal>primary=<replaceable>&lt;interface_name&gt;</replaceable>
+              </literal>
+            </term>
+            <listitem>
+              <para>Specifies the interface name, such as <userinput>eth0</userinput>, of the primary device. The <literal>primary</literal> device is the first of the bonding interfaces to be used and is not abandoned unless it fails. This setting is particularly useful when one NIC in the bonding interface is faster and, therefore, able to handle a bigger load.</para>
+              <para>This setting is only valid when the bonding interface is in <userinput>active-backup</userinput> mode. See <ulink url="https://www.kernel.org/doc/Documentation/networking/bonding.txt">https://www.kernel.org/doc/Documentation/networking/bonding.txt</ulink><!--<filename> /usr/share/doc/kernel-doc-<replaceable>&lt;kernel-version&gt;</replaceable>/Documentation/networking/bonding.txt</filename>--> for more information.</para>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term>
+              <literal>primary_reselect=<replaceable>&lt;value&gt;</replaceable>
+              </literal>
+            </term>
+            <listitem>
+              <para>Specifies the reselection policy for the primary slave. This affects how the primary slave is chosen to become the active slave when failure of the active slave or recovery of the primary slave occurs. This parameter is designed to prevent flip-flopping between the primary slave and other slaves. Possible values are:</para>
+              <itemizedlist>
+                <listitem>
+                  <para>
+                    <userinput>always</userinput> or <userinput>0</userinput> (default) — The primary slave becomes the active slave whenever it comes back up.</para>
+                </listitem>
+                <listitem>
+                  <para>
+                    <userinput>better</userinput> or <userinput>1</userinput> — The primary slave becomes the active slave when it comes back up, if the speed and duplex of the primary slave is better than the speed and duplex of the current active slave.</para>
+                </listitem>
+                <listitem>
+                  <para>
+                    <userinput>failure</userinput> or <userinput>2</userinput> — The primary slave becomes the active slave only if the current active slave fails and the primary slave is up.</para>
+                </listitem>
+              </itemizedlist>
+              <para>The <literal>primary_reselect</literal> setting is ignored in two cases:</para>
+              <itemizedlist>
+                <listitem>
+                  <para>If no slaves are active, the first slave to recover is made the active slave.</para>
+                </listitem>
+                <listitem>
+                  <para>When initially enslaved, the primary slave is always made the active slave.</para>
+                </listitem>
+              </itemizedlist>
+             <!-- <para>If no slaves are active, the first slave to recover is made the active slave.</para>
+              <para>When initially enslaved, the primary slave is always made the active slave.</para>-->
+              <para>Changing the <literal>primary_reselect</literal> policy via <systemitem
+                  class="filesystem">sysfs</systemitem> will cause an immediate selection of the best active slave according to the new policy. This may or may not result in a change of the active slave, depending upon the circumstances</para>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term>
+              <literal>updelay=<replaceable>&lt;time_in_milliseconds&gt;</replaceable>
+              </literal>
+            </term>
+            <listitem>
+              <para>Specifies (in milliseconds) how long to wait before enabling a link. The value must be a multiple of the value specified in the <literal>miimon</literal> parameter. The value is set to <userinput>0</userinput> by default, which disables it.</para>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term>
+              <literal>use_carrier=<replaceable>&lt;number&gt;</replaceable>
+              </literal>
+            </term>
+            <listitem>
+              <para>Specifies whether or not <literal>miimon</literal> should use MII/ETHTOOL ioctls or <function>netif_carrier_ok()</function> to determine the link state. The <function>netif_carrier_ok()</function> function relies on the device driver to maintains its state with <literal>netif_carrier_<replaceable>on/off</replaceable></literal>; most device drivers support this function.</para>
+              <para>The MII/ETHTOOL ioctls tools utilize a deprecated calling sequence within the kernel. However, this is still configurable in case your device driver does not support <literal>netif_carrier_<replaceable>on/off</replaceable></literal>.</para>
+              <para>Valid values are:</para>
+              <itemizedlist>
+                <listitem>
+                  <para>
+                    <userinput>1</userinput> — Default setting. Enables the use of <function>netif_carrier_ok()</function>.</para>
+                </listitem>
+                <listitem>
+                  <para>
+                    <userinput>0</userinput> — Enables the use of MII/ETHTOOL ioctls.</para>
+                </listitem>
+              </itemizedlist>
+              <note>
+                <para>If the bonding interface insists that the link is up when it should not be, it is possible that your network device driver does not support <literal>netif_carrier_<replaceable>on/off</replaceable></literal>.</para>
+              </note>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term>
+              <literal>xmit_hash_policy=<replaceable>&lt;value&gt;</replaceable>
+              </literal>
+            </term>
+            <listitem>
+              <para>Selects the transmit hash policy used for slave selection in <userinput>balance-xor</userinput> and <userinput>802.3ad</userinput> modes. Possible values are:</para>
+              <itemizedlist>
+                <listitem>
+                  <para>
+                    <userinput>0</userinput> or <userinput>layer2</userinput> — Default setting. This parameter uses the XOR of hardware MAC addresses to generate the hash. The formula used is:</para>
+                  <screen>(<replaceable>&lt;source_MAC_address&gt;</replaceable> XOR <replaceable>&lt;destination_MAC&gt;</replaceable>) MODULO <replaceable>&lt;slave_count&gt;</replaceable>
+                  </screen>
+                  <para>This algorithm will place all traffic to a particular network peer on the same slave, and is 802.3ad compliant.</para>
+                </listitem>
+                <listitem>
+                  <para>
+                    <userinput>1</userinput> or <userinput>layer3+4</userinput> — Uses upper layer protocol information (when available) to generate the hash. This allows for traffic to a particular network peer to span multiple slaves, although a single connection will not span multiple slaves.</para>
+                  <para>The formula for unfragmented TCP and UDP packets used is:</para>
+                  <screen>((<replaceable>&lt;source_port&gt;</replaceable> XOR <replaceable>&lt;dest_port&gt;</replaceable>) XOR
+  ((<replaceable>&lt;source_IP&gt;</replaceable> XOR <replaceable>&lt;dest_IP&gt;</replaceable>) AND <constant>0xffff</constant>)
+    MODULO <replaceable>&lt;slave_count&gt;</replaceable>
+                  </screen>
+                  <para>For fragmented TCP or UDP packets and all other <systemitem class="protocol">IP</systemitem> protocol traffic, the source and destination port information is omitted. For non-<systemitem class="protocol">IP</systemitem> traffic, the formula is the same as the <command>layer2</command> transmit hash policy.</para>
+                  <para>This policy intends to mimic the behavior of certain switches; particularly, Cisco switches with PFC2 as well as some Foundry and IBM products.</para>
+                  <para>The algorithm used by this policy is not 802.3ad compliant.</para>
+                </listitem>
+                <listitem>
+                  <para>
+                    <userinput>2</userinput> or <userinput>layer2+3</userinput> — Uses a combination of layer2 and layer3 protocol information to generate the hash.</para>
+                  <para>Uses XOR of hardware MAC addresses and <systemitem class="protocol">IP</systemitem> addresses to generate the hash. The formula is:</para>
+                  <screen>(((<replaceable>&lt;source_IP&gt;</replaceable> XOR <replaceable>&lt;dest_IP&gt;</replaceable>) AND <constant>0xffff</constant>) XOR
+  ( <replaceable>&lt;source_MAC&gt;</replaceable> XOR <replaceable>&lt;destination_MAC&gt;</replaceable> ))
+    MODULO <replaceable>&lt;slave_count&gt;</replaceable>
+                  </screen>
+                  <para>This algorithm will place all traffic to a particular network peer on the same slave.  For non-<systemitem class="protocol">IP</systemitem> traffic, the formula is the same as for the layer2 transmit hash policy.</para>
+                  <para>This policy is intended to provide a more balanced distribution of traffic than layer2 alone, especially in environments where a layer3 gateway device is required to reach most destinations.</para>
+                  <para>This algorithm is 802.3ad compliant.</para>
+                </listitem>
+              </itemizedlist>
+            </listitem>
+          </varlistentry>
+        </variablelist>
+      </section>
+    </section>
+
+
    <section id="sec-Network_Bonding_Using_the_NetworkManager_Command_Line_Tool_nmcli">
      <title>Using the NetworkManager Command Line Tool, nmcli</title>
   <para>



More information about the docs-commits mailing list