]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
netdev bond: add support to configure tlb_dynamic_lb
authorSusant Sahani <ssahani@gmail.com>
Thu, 13 Dec 2018 09:23:07 +0000 (14:53 +0530)
committerSusant Sahani <ssahani@gmail.com>
Sat, 15 Dec 2018 12:45:16 +0000 (18:15 +0530)
Closes https://github.com/systemd/systemd/issues/11135

Add test for bond : tlb_dynamic_lb

man/systemd.netdev.xml
src/libsystemd/sd-netlink/netlink-types.c
src/network/netdev/bond.c
src/network/netdev/bond.h
src/network/netdev/netdev-gperf.gperf
test/fuzz/fuzz-netdev-parser/directives.netdev
test/test-network/conf/25-bond-balanced-tlb.netdev [new file with mode: 0644]
test/test-network/systemd-networkd-tests.py

index 67ccc66dd8ed09ffd17378504c23b6140453ece9..e17c1e3fbefe0db6f238199813e7ca199c735346 100644 (file)
         </listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><varname>DynamicTransmitLoadBalancing=</varname></term>
+        <listitem>
+          <para>Takes a boolean. Specifies if dynamic shuffling of flows is enabled. Applies only
+          for balance-tlb mode. Defaults to unset.
+          </para>
+        </listitem>
+      </varlistentry>
+
       <varlistentry>
         <term><varname>MinLinks=</varname></term>
         <listitem>
index 64ab386df3f1c0a7378a62254976c79f0a34bc3e..cd5cdcc6e55c58a9770f8af003a3ab260ed0d5d3 100644 (file)
@@ -227,6 +227,7 @@ static const NLType rtnl_link_info_data_bond_types[] = {
         [IFLA_BOND_AD_ACTOR_SYS_PRIO]   = { .type = NETLINK_TYPE_U16 },
         [IFLA_BOND_AD_USER_PORT_KEY]    = { .type = NETLINK_TYPE_U16 },
         [IFLA_BOND_AD_ACTOR_SYSTEM]     = { .type = NETLINK_TYPE_ETHER_ADDR },
+        [IFLA_BOND_TLB_DYNAMIC_LB]      = { .type = NETLINK_TYPE_U8 },
 };
 
 static const NLType rtnl_link_info_data_iptun_types[] = {
index 70d314bc7949019652a2814fb61da06c10371954..550a7f89145ccf96edfad4979564e1c06167e51f 100644 (file)
@@ -307,6 +307,12 @@ static int netdev_bond_fill_message_create(NetDev *netdev, Link *link, sd_netlin
         if (r < 0)
                 return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_ALL_SLAVES_ACTIVE attribute: %m");
 
+        if (b->tlb_dynamic_lb >= 0) {
+                r = sd_netlink_message_append_u8(m, IFLA_BOND_TLB_DYNAMIC_LB, b->tlb_dynamic_lb);
+                if (r < 0)
+                        return log_netdev_error_errno(netdev, r, "Could not append IFLA_BOND_TLB_DYNAMIC_LB attribute: %m");
+        }
+
         if (b->arp_interval > 0)  {
                 if (b->n_arp_ip_targets > 0) {
 
@@ -534,6 +540,7 @@ static void bond_init(NetDev *netdev) {
         b->primary_reselect = _NETDEV_BOND_PRIMARY_RESELECT_INVALID;
 
         b->all_slaves_active = false;
+        b->tlb_dynamic_lb = -1;
 
         b->resend_igmp = RESEND_IGMP_DEFAULT;
         b->packets_per_slave = PACKETS_PER_SLAVE_DEFAULT;
index 99ef25d0d34257b56c18278f511d473ccbd8da08..31b922b03279e98c924553c915866347eef28b8d 100644 (file)
@@ -99,6 +99,8 @@ typedef struct Bond {
         BondArpAllTargets arp_all_targets;
         BondPrimaryReselect primary_reselect;
 
+        int tlb_dynamic_lb;
+
         bool all_slaves_active;
 
         unsigned resend_igmp;
index fbc7a59e9e8ca3749947b14ff0fd8be20d63b232..39b26b842c582e5a809e40d61ff40f44c1262b68 100644 (file)
@@ -141,6 +141,7 @@ Bond.ResendIGMP,                   config_parse_unsigned,                0,
 Bond.PacketsPerSlave,              config_parse_unsigned,                0,                             offsetof(Bond, packets_per_slave)
 Bond.GratuitousARP,                config_parse_unsigned,                0,                             offsetof(Bond, num_grat_arp)
 Bond.AllSlavesActive,              config_parse_unsigned,                0,                             offsetof(Bond, all_slaves_active)
+Bond.DynamicTransmitLoadBalancing, config_parse_tristate,                0,                             offsetof(Bond, tlb_dynamic_lb)
 Bond.MinLinks,                     config_parse_unsigned,                0,                             offsetof(Bond, min_links)
 Bond.MIIMonitorSec,                config_parse_sec,                     0,                             offsetof(Bond, miimon)
 Bond.UpDelaySec,                   config_parse_sec,                     0,                             offsetof(Bond, updelay)
index 5a8d41eb68385e2949940b80752062eb4207e492..cd7c3aadedb29925f064a4fd1545879baa84f136 100644 (file)
@@ -129,6 +129,7 @@ MinLinks=
 LACPTransmitRate=
 ARPIntervalSec=
 AllSlavesActive=
+DynamicTransmitLoadBalancing=
 [FooOverUDP]
 Protocol=
 Port=
diff --git a/test/test-network/conf/25-bond-balanced-tlb.netdev b/test/test-network/conf/25-bond-balanced-tlb.netdev
new file mode 100644 (file)
index 0000000..439ddf2
--- /dev/null
@@ -0,0 +1,7 @@
+[NetDev]
+Name=bond99
+Kind=bond
+
+[Bond]
+Mode=balance-tlb
+DynamicTransmitLoadBalancing=true
index 65cc43e8b6b2b3bbed5454b9b878d9090b63da35..19572be1514ad097caa386dd7f86be4d026e7180 100755 (executable)
@@ -213,6 +213,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
         '21-vlan.network',
         '25-6rd-tunnel.netdev',
         '25-bond.netdev',
+        '25-bond-balanced-tlb.netdev',
         '25-bridge.netdev',
         '25-erspan-tunnel.netdev',
         '25-geneve.netdev',
@@ -300,6 +301,15 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
         self.assertEqual('811',               self.read_link_attr('bond99', 'bonding', 'ad_user_port_key'))
         self.assertEqual('00:11:22:33:44:55', self.read_link_attr('bond99', 'bonding', 'ad_actor_system'))
 
+    def test_bond_balanced_tlb(self):
+        self.copy_unit_to_networkd_unit_path('25-bond-balanced-tlb.netdev')
+        self.start_networkd()
+
+        self.assertTrue(self.link_exits('bond99'))
+
+        self.assertEqual('balance-tlb 5', self.read_link_attr('bond99', 'bonding', 'mode'))
+        self.assertEqual('1',             self.read_link_attr('bond99', 'bonding', 'tlb_dynamic_lb'))
+
     def test_vlan(self):
         self.copy_unit_to_networkd_unit_path('21-vlan.netdev', '11-dummy.netdev', '21-vlan.network')
         self.start_networkd()