Browse Source

initial package creation

Signed-off-by: Toshaan Bharvani <toshaan@powerel.org>
master
Toshaan Bharvani 2 years ago
commit
6e9ba05095
  1. 339
      SOURCES/0001-team-add-a-tool-for-team-to-bonding-config-migration.patch
  2. 67
      SOURCES/0002-team2bond-fix-min_ports-format-and-add-lacp_key.patch
  3. 79
      SOURCES/0003-utils-team2bond-add-cautions-for-the-script.patch
  4. 99
      SOURCES/0004-man-add-team2bond-man-doc.patch
  5. 54
      SOURCES/0005-Revert-teamd-Disregard-current-state-when-considerin.patch
  6. 616
      SPECS/libteam.spec

339
SOURCES/0001-team-add-a-tool-for-team-to-bonding-config-migration.patch

@ -0,0 +1,339 @@ @@ -0,0 +1,339 @@
From 7a2260a85cb14c58792273753e4f58cca358c548 Mon Sep 17 00:00:00 2001
From: Hangbin Liu <haliu@redhat.com>
Date: Tue, 30 Mar 2021 17:06:42 +0800
Subject: [PATCH] team: add a tool for team to bonding config migration

Since we will deprecate team on RHEL9 and remove it on RHEL10, add a tool
for team to bonding config migration.

Signed-off-by: Hangbin Liu <haliu@redhat.com>
---
man/teamd.8 | 2 +
utils/team2bond | 302 ++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 304 insertions(+)
create mode 100755 utils/team2bond

diff --git a/man/teamd.8 b/man/teamd.8
index 3d27eae..652111b 100644
--- a/man/teamd.8
+++ b/man/teamd.8
@@ -32,6 +32,8 @@ teamd \(em team network device control daemon
.br
.B teamd
.BR \-h | \-V
+.SH NOTE
+Teaming is deprecated on RHEL9 and will be removed on RHEL10! For replacement please use bonding.
.SH DESCRIPTION
.PP
teamd is a daemon to control a given team network device, during runtime,
diff --git a/utils/team2bond b/utils/team2bond
new file mode 100755
index 0000000..6ac9d52
--- /dev/null
+++ b/utils/team2bond
@@ -0,0 +1,302 @@
+#!/bin/env python3
+# vim: sts=4 ts=4 sw=4 expandtab :
+
+from optparse import OptionParser
+import subprocess
+import json
+import sys
+
+def handle_cmd_line():
+ parser = OptionParser()
+ parser.add_option('--config', dest='config', default = '',
+ help = "convert the team JSON format configuration file " \
+ + "to NetworkManager connection profile, please use " \
+ + "'teamdctl TEAM config dump' to dump the config file." \
+ + " Note the script only convert config file. IP " \
+ + "address configurations still need to be set manually.")
+ parser.add_option('--rename', dest='rename', default = '',
+ help = "rename the default team interface name." \
+ + " Careful: firewall rules, aliases interfaces, etc., " \
+ + "will break after the renaming because the tool " \
+ + "will only change the config file, nothing else.")
+ parser.add_option('--exec-cmd', dest='exec_cmd', action='store_true', default = False,
+ help = "exec nmcli and add the connections directly " \
+ + "instead of printing the nmcli cmd to screen. " \
+ + "This parameter is NOT recommend, it would be good " \
+ + "to double check the cmd before apply.")
+
+ (options, args) = parser.parse_args()
+
+ if subprocess.run(['nmcli', '-v'], stdout=subprocess.DEVNULL,
+ stderr=subprocess.DEVNULL).returncode != 0:
+ print("Warn: NetworkManager is needed for this script!");
+ sys.exit(1)
+
+ return options
+
+def convert_runner_opts(runner_opts):
+ bond_opts = ""
+
+ if runner_opts['name'] == 'broadcast':
+ bond_opts = "mode=broadcast"
+ elif runner_opts['name'] == 'roundrobin':
+ bond_opts = "mode=balance-rr"
+ elif runner_opts['name'] == 'activebackup':
+ bond_opts = "mode=active-backup"
+ if 'hwaddr_policy' in runner_opts:
+ if runner_opts['hwaddr_policy'] == 'same_all':
+ bond_opts += ",fail_over_mac=none"
+ elif runner_opts['hwaddr_policy'] == 'by_active':
+ bond_opts += ",fail_over_mac=active"
+ elif runner_opts['hwaddr_policy'] == 'only_active':
+ bond_opts += ",fail_over_mac=follow"
+ else:
+ print("# Warn: invalid runner.hwaddr_policy: " + runner_opts['hwaddr_policy'])
+ elif runner_opts['name'] == 'loadbalance':
+ bond_opts = "mode=balance-tlb"
+ elif runner_opts['name'] == 'lacp':
+ bond_opts = "mode=802.3ad"
+ if 'active' in runner_opts:
+ print("# Warn: option runner.active: %r is not supported by bonding" % runner_opts['active'])
+ if 'fast_rate' in runner_opts:
+ if runner_opts['fast_rate']:
+ bond_opts += ",lacp_rate=1"
+ else:
+ bond_opts += ",lacp_rate=0"
+ if 'sys_prio' in runner_opts:
+ bond_opts += ",ad_actor_sys_prio=" + str(runner_opts['sys_prio'])
+ if 'min_ports' in runner_opts:
+ bond_opts += ",min_links=" + runner_opts['min_ports']
+ if 'agg_select_policy' in runner_opts:
+ if runner_opts['agg_select_policy'] == 'bandwidth':
+ bond_opts += ",ad_select=bandwidth"
+ elif runner_opts['agg_select_policy'] == 'count':
+ bond_opts += ",ad_select=count"
+ else:
+ print("# Warn: Option runner.agg_select_policy: %s is not supported by bonding" %
+ runner_opts['agg_select_policy'])
+ sys.exit(1)
+ else:
+ print("Error: Unsupported runner.name: %s for bonding" % runner_opts['name'])
+ sys.exit(1)
+
+ if 'tx_hash' in runner_opts:
+ print("# Warn: tx_hash ipv4, ipv6, tcp, udp, sctp are not supported by bonding")
+ if 'vlan' in runner_opts['tx_hash']:
+ bond_opts +=",xmit_hash_policy=vlan+srcmac"
+ if 'eth' in runner_opts['tx_hash']:
+ bond_opts +=",xmit_hash_policy=layer2"
+ if 'l3' in runner_opts['tx_hash'] or 'ip' in runner_opts['tx_hash']:
+ bond_opts +="+3"
+ elif ('l3' in runner_opts['tx_hash'] or 'ip' in runner_opts['tx_hash']) \
+ and 'l4' in runner_opts['tx_hash']:
+ bond_opts +=",xmit_hash_policy=layer3+4"
+
+ if 'tx_balancer' in runner_opts:
+ if 'name' in runner_opts['tx_balancer']:
+ if runner_opts['tx_balancer']['name'] == 'basic':
+ bond_opts += ",tlb_dynamic_lb=1"
+ if 'balancing_interval' in runner_opts['tx_balancer']:
+ print("# Warn: option runner.tx_balancer.balancing_interval: %d is not supported by bonding" %
+ runner_opts['tx_balancer']['balancing_interval'])
+
+ return bond_opts
+
+# arp_target is used to store multi targets
+# exist_opts is used to check if there are duplicated arp_intervals
+def convert_link_watch(link_watch_opts, arp_target, exist_opts):
+ bond_opts=""
+ if 'name' not in link_watch_opts:
+ print("Error: no link_watch.name in team config file!")
+ sys.exit(1)
+
+ if link_watch_opts['name'] == 'ethtool':
+ bond_opts += ",miimon=100"
+ if 'delay_up' in link_watch_opts:
+ bond_opts += ",updelay=" + str(link_watch_opts['delay_up'])
+ if 'delay_down' in link_watch_opts:
+ bond_opts += ",downdelay=" + str(link_watch_opts['delay_down'])
+ elif link_watch_opts['name'] == 'arp_ping':
+ if 'interval' in link_watch_opts:
+ if exist_opts.find('arp_interval') > 0:
+ print("# Warn: duplicated arp_interval detected, bonding supports only one.")
+ else:
+ bond_opts += ",arp_interval=" + str(link_watch_opts['interval'])
+ if 'target_host' in link_watch_opts:
+ arp_target.append(link_watch_opts['target_host'])
+
+ if 'validate_active' in link_watch_opts and link_watch_opts['validate_active'] and \
+ 'validate_inactive' in link_watch_opts and link_watch_opts['validate_inactive']:
+ if exist_opts.find('arp_validate') > 0:
+ print("# Warn: duplicated arp_validate detected, bonding supports only one.")
+ else:
+ bond_opts += ",arp_validate=all"
+ elif 'validate_active' in link_watch_opts and link_watch_opts['validate_active']:
+ if exist_opts.find('arp_validate') > 0:
+ print("# Warn: duplicated arp_validate detected, bonding supports only one.")
+ else:
+ bond_opts += ",arp_validate=active"
+ elif 'validate_inactive' in link_watch_opts and link_watch_opts['validate_inactive']:
+ if exist_opts.find('arp_validate') > 0:
+ print("# Warn: duplicated arp_validate detected, bonding supports only one.")
+ else:
+ bond_opts += ",arp_validate=backup"
+
+ if 'init_wait' in link_watch_opts:
+ print("# Warn: option link_watch.init_wait: %d is not supported by bonding" % link_watch_opts['init_wait'])
+ if 'missed_max' in link_watch_opts:
+ print("# Warn: option link_watch.missed_max: %d is not supported by bonding" % link_watch_opts['missed_max'])
+ if 'source_host' in link_watch_opts:
+ print("# Warn: option link_watch.source_host: %s is not supported by bonding" % link_watch_opts['source_host'])
+ if 'vlanid' in link_watch_opts:
+ print("# Warn: option link_watch.vlanid: %d is not supported by bonding" % link_watch_opts['vlanid'])
+ if 'send_always' in link_watch_opts:
+ print("# Warn: option link_watch.send_always: %r is not supported by bonding" % link_watch_opts['send_always'])
+ else:
+ print("# Error: Option link_watch.name: %s is not supported by bonding" %
+ link_watch_opts['name'])
+ sys.exit(1)
+
+ return bond_opts
+
+def convert_opts(bond_name, team_opts, exec_cmd):
+ bond_opts = ""
+
+ # Check runner/mode first
+ if 'runner' in team_opts:
+ bond_opts = convert_runner_opts(team_opts['runner'])
+ else:
+ print("Error: No runner in team config file!")
+ sys.exit(1)
+
+ if 'hwaddr' in team_opts:
+ print("# Warn: option hwaddr: %s is not supported by bonding" % team_opts['hwaddr'])
+
+ if 'notify_peers' in team_opts:
+ if 'count' in team_opts['notify_peers']:
+ bond_opts += ",num_grat_arp=" + str(team_opts['notify_peers']['count'])
+ bond_opts += ",num_unsol_na=" + str(team_opts['notify_peers']['count'])
+ if 'interval' in team_opts['notify_peers']:
+ bond_opts += ",peer_notif_delay=" + str(team_opts['notify_peers']['interval'])
+ if 'mcast_rejoin' in team_opts:
+ if 'count' in team_opts['mcast_rejoin']:
+ bond_opts += ",resend_igmp=" + str(team_opts['mcast_rejoin']['count'])
+ if 'interval' in team_opts['mcast_rejoin']:
+ print("# Warn: option mcast_rejoin.interval: %d is not supported by bonding" % team_opts['mcast_rejoin']['count'])
+
+ # The link_watch maybe a dict or list
+ arp_target = list()
+ if 'link_watch' in team_opts:
+ if isinstance(team_opts['link_watch'], list):
+ for link_watch_opts in team_opts['link_watch']:
+ bond_opts += convert_link_watch(link_watch_opts, arp_target, bond_opts)
+ elif isinstance(team_opts['link_watch'], dict):
+ bond_opts += convert_link_watch(team_opts['link_watch'], arp_target, bond_opts)
+ # Check link watch in team ports if we don't have global link_watch
+ elif 'ports' in team_opts:
+ for iface in team_opts['ports']:
+ if 'link_watch' in team_opts['ports'][iface]:
+ bond_opts += convert_link_watch(team_opts['ports'][iface]['link_watch'], arp_target, bond_opts)
+ else:
+ print("Warn: No link_watch in team config file, use miimon=100 by default")
+ bond_opts += ",miimon=100"
+
+ if arp_target:
+ bond_opts += ",arp_ip_target=" + " ".join(arp_target)
+
+ if exec_cmd:
+ subprocess.run(['nmcli', 'con', 'add', 'type', 'bond', 'ifname',
+ bond_name, 'bond.options', bond_opts])
+ else:
+ print('nmcli con add type bond ifname ' + bond_name \
+ + ' bond.options "' + bond_opts + '"')
+
+def setup_ports(bond_name, team_opts, exec_cmd):
+ primary = {'name': "", 'prio': -2**63, 'sticky': False}
+ bond_ports = []
+ prio = 0
+
+ if 'ports' in team_opts:
+ for iface in team_opts['ports']:
+ bond_ports.append(iface)
+ if 'link_watch' in team_opts['ports'][iface] and \
+ 'link_watch' in team_opts:
+ print("# Warn: Option link_watch in interface %s will be ignored as we have global link_watch set!" % iface)
+ if 'queue_id' in team_opts['ports'][iface]:
+ print("# Warn: Option queue_id: %d on interface %s is not supported by NM yet, please see rhbz:1949127" %
+ (team_opts['ports'][iface]['queue_id'], iface))
+ if 'lacp_prio' in team_opts['ports'][iface]:
+ print("# Warn: Option lacp_prio: %d on interface %s is not supported by bonding" %
+ (team_opts['ports'][iface]['lacp_prio'], iface))
+ if 'prio' in team_opts['ports'][iface]:
+ prio = int(team_opts['ports'][iface]['prio'])
+ if prio > primary['prio'] and primary['sticky'] is False:
+ primary['name'] = iface
+ primary['prio'] = prio
+ if 'sticky' in team_opts['ports'][iface] and \
+ team_opts['ports'][iface]['sticky']:
+ primary['name'] = iface
+ primary['sticky'] = True
+
+ for port in bond_ports:
+ ret = subprocess.run(['nmcli', '-g', 'general.type', 'dev', 'show', port],
+ stderr=subprocess.PIPE, stdout=subprocess.PIPE)
+ if ret.returncode != 0:
+ print("# Warn: Get dev %s type failed, will use type ethernet by default" % port)
+ if_type = 'ethernet'
+ elif ret.stdout.find(b'ethernet') != 0:
+ print("# Warn: %s is not a ethernet device, please make sure the type is correct" % port)
+ if_type = str(ret.stdout, 'utf-8').strip()
+ else:
+ if_type = str(ret.stdout, 'utf-8').strip()
+
+ if exec_cmd:
+ subprocess.run(['nmcli', 'con', 'add', 'type', if_type,
+ 'ifname', port, 'master', bond_name])
+ else:
+ print('nmcli con add type %s ifname %s master %s' % (if_type, port, bond_name))
+
+ if primary['name']:
+ if exec_cmd:
+ subprocess.run(['nmcli', 'con', 'mod', 'bond-' + bond_name,
+ '+bond.options', "primary=" + primary['name']])
+ else:
+ print('nmcli con mod bond-' + bond_name \
+ + ' +bond.options "primary=' + primary['name'] + '"')
+
+def main():
+ options = handle_cmd_line()
+ team_opts = dict()
+
+ if options.config:
+ try:
+ with open(options.config, 'r') as f:
+ team_opts = json.load(f)
+ except OSError as e:
+ print(e)
+ sys.exit(1)
+ else:
+ print("Error: Please supply a team config file")
+ sys.exit(1)
+
+ if not team_opts['device']:
+ print("Error: No team device name in team config file")
+ sys.exit(1)
+
+ if not options.exec_cmd:
+ print("### These are the commands to configure a bond interface " +
+ "similar to this team config:")
+
+ if options.rename:
+ bond_name = options.rename
+ else:
+ bond_name = team_opts['device']
+
+ convert_opts(bond_name, team_opts, options.exec_cmd)
+ setup_ports(bond_name, team_opts, options.exec_cmd)
+
+ if not options.exec_cmd:
+ print("### After this, IP addresses, routes and so need to be reconfigured.")
+
+if __name__ == '__main__':
+ main()
--
2.26.3

67
SOURCES/0002-team2bond-fix-min_ports-format-and-add-lacp_key.patch

@ -0,0 +1,67 @@ @@ -0,0 +1,67 @@
From f961dbffb5ca769c2a87a6f1e2548e63d2a0a169 Mon Sep 17 00:00:00 2001
From: Hangbin Liu <haliu@redhat.com>
Date: Mon, 24 May 2021 12:58:02 +0800
Subject: [PATCH 2/2] team2bond: fix min_ports format and add lacp_key

Should set to str when add min_ports to bond config.
Also add missed lacp_key config.

Signed-off-by: Hangbin Liu <haliu@redhat.com>
---
utils/team2bond | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/utils/team2bond b/utils/team2bond
index 6ac9d52..265bc79 100755
--- a/utils/team2bond
+++ b/utils/team2bond
@@ -66,7 +66,7 @@ def convert_runner_opts(runner_opts):
if 'sys_prio' in runner_opts:
bond_opts += ",ad_actor_sys_prio=" + str(runner_opts['sys_prio'])
if 'min_ports' in runner_opts:
- bond_opts += ",min_links=" + runner_opts['min_ports']
+ bond_opts += ",min_links=" + str(runner_opts['min_ports'])
if 'agg_select_policy' in runner_opts:
if runner_opts['agg_select_policy'] == 'bandwidth':
bond_opts += ",ad_select=bandwidth"
@@ -214,6 +214,7 @@ def convert_opts(bond_name, team_opts, exec_cmd):
def setup_ports(bond_name, team_opts, exec_cmd):
primary = {'name': "", 'prio': -2**63, 'sticky': False}
bond_ports = []
+ lacp_key = 0
prio = 0
if 'ports' in team_opts:
@@ -228,6 +229,15 @@ def setup_ports(bond_name, team_opts, exec_cmd):
if 'lacp_prio' in team_opts['ports'][iface]:
print("# Warn: Option lacp_prio: %d on interface %s is not supported by bonding" %
(team_opts['ports'][iface]['lacp_prio'], iface))
+ if 'lacp_key' in team_opts['ports'][iface]:
+ if lacp_key == 0:
+ lacp_key = team_opts['ports'][iface]['lacp_key']
+ if lacp_key < 0 or lacp_key > 1023:
+ lacp_key = 0
+ print("# Warn: Option lacp_key: Invalid value %d for port %s" % (lacp_key, iface))
+ else:
+ print("# Warn: Option lacp_key: already has one key %d, ignore the new one %d" %
+ (lacp_key, team_opts['ports'][iface]['lacp_key']))
if 'prio' in team_opts['ports'][iface]:
prio = int(team_opts['ports'][iface]['prio'])
if prio > primary['prio'] and primary['sticky'] is False:
@@ -256,6 +266,13 @@ def setup_ports(bond_name, team_opts, exec_cmd):
else:
print('nmcli con add type %s ifname %s master %s' % (if_type, port, bond_name))
+ if lacp_key != 0:
+ if exec_cmd:
+ subprocess.run(['nmcli', 'con', 'mod', 'bond-' + bond_name,
+ '+bond.options', "ad_user_port_key=" + str(lacp_key)])
+ else:
+ print('nmcli con mod bond-' + bond_name \
+ + ' +bond.options "ad_user_port_key=' + str(lacp_key) + '"')
if primary['name']:
if exec_cmd:
subprocess.run(['nmcli', 'con', 'mod', 'bond-' + bond_name,
--
2.26.3

79
SOURCES/0003-utils-team2bond-add-cautions-for-the-script.patch

@ -0,0 +1,79 @@ @@ -0,0 +1,79 @@
From ad9cf008dfed4918e3d1e521647e5f44f46bfc91 Mon Sep 17 00:00:00 2001
From: Hangbin Liu <haliu@redhat.com>
Date: Wed, 21 Jul 2021 14:23:55 +0800
Subject: [PATCH 3/4] utils/team2bond: add cautions for the script

Split the exec-cmd to Dangerous groups and add cautions to let customer
know they need to remove old team device. Also fix a typo.

Add parameter "actual" when dump team config.

Signed-off-by: Hangbin Liu <haliu@redhat.com>
---
utils/team2bond | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/utils/team2bond b/utils/team2bond
index 265bc79..118f38b 100755
--- a/utils/team2bond
+++ b/utils/team2bond
@@ -1,7 +1,7 @@
#!/bin/env python3
# vim: sts=4 ts=4 sw=4 expandtab :
-from optparse import OptionParser
+from optparse import OptionParser, OptionGroup
import subprocess
import json
import sys
@@ -11,7 +11,7 @@ def handle_cmd_line():
parser.add_option('--config', dest='config', default = '',
help = "convert the team JSON format configuration file " \
+ "to NetworkManager connection profile, please use " \
- + "'teamdctl TEAM config dump' to dump the config file." \
+ + "'teamdctl TEAM config dump [actual]' to dump the config file." \
+ " Note the script only convert config file. IP " \
+ "address configurations still need to be set manually.")
parser.add_option('--rename', dest='rename', default = '',
@@ -19,11 +19,17 @@ def handle_cmd_line():
+ " Careful: firewall rules, aliases interfaces, etc., " \
+ "will break after the renaming because the tool " \
+ "will only change the config file, nothing else.")
- parser.add_option('--exec-cmd', dest='exec_cmd', action='store_true', default = False,
+
+ group = OptionGroup(parser, 'Dangerous Options',
+ "Caution: You need to dump the team configuration " \
+ "file first and then delete old team device to avoid " \
+ "device name conflicts.")
+ group.add_option('--exec-cmd', dest='exec_cmd', action='store_true', default = False,
help = "exec nmcli and add the connections directly " \
+ "instead of printing the nmcli cmd to screen. " \
- + "This parameter is NOT recommend, it would be good " \
+ + "This parameter is NOT recommended, it would be good " \
+ "to double check the cmd before apply.")
+ parser.add_option_group(group)
(options, args) = parser.parse_args()
@@ -302,7 +308,8 @@ def main():
if not options.exec_cmd:
print("### These are the commands to configure a bond interface " +
- "similar to this team config:")
+ "similar to this team config (remember to remove the old team " +
+ "device before exec the following cmds):")
if options.rename:
bond_name = options.rename
@@ -313,7 +320,7 @@ def main():
setup_ports(bond_name, team_opts, options.exec_cmd)
if not options.exec_cmd:
- print("### After this, IP addresses, routes and so need to be reconfigured.")
+ print("### After this, IP addresses, routes, and so on, need to be configured.")
if __name__ == '__main__':
main()
--
2.31.1

99
SOURCES/0004-man-add-team2bond-man-doc.patch

@ -0,0 +1,99 @@ @@ -0,0 +1,99 @@
From ff20b5982cf674e8a0a7267645963a79d2e46729 Mon Sep 17 00:00:00 2001
From: Hangbin Liu <haliu@redhat.com>
Date: Wed, 21 Jul 2021 17:31:59 +0800
Subject: [PATCH 4/4] man: add team2bond man doc

Signed-off-by: Hangbin Liu <haliu@redhat.com>
---
man/Makefile.am | 2 +-
man/team2bond.1 | 69 +++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 70 insertions(+), 1 deletion(-)
create mode 100644 man/team2bond.1

diff --git a/man/Makefile.am b/man/Makefile.am
index 4c63629..52f0fb9 100644
--- a/man/Makefile.am
+++ b/man/Makefile.am
@@ -1,3 +1,3 @@
dist_man8_MANS = teamd.8 teamdctl.8 teamnl.8
dist_man5_MANS = teamd.conf.5
-dist_man1_MANS = bond2team.1
+dist_man1_MANS = bond2team.1 team2bond.1
diff --git a/man/team2bond.1 b/man/team2bond.1
new file mode 100644
index 0000000..f47aba4
--- /dev/null
+++ b/man/team2bond.1
@@ -0,0 +1,69 @@
+.TH TEAM2BOND 1 "2021-07-20" "libteam" "Team to Bonding conversion tool"
+.SH NAME
+team2bond \(em Converts a team configuration to a NetworkManager bond configuration
+.SH SYNOPSIS
+.B team2bond
+.RB [options]
+.SH DESCRIPTION
+.PP
+team2bond is a tool to convert team options to bonding options. During the conversion, team2bond tries to create a bond configuration that has the same or similar functionality as the team.
+.PP
+This tool converts a team JSON format configuration file to NetworkManager nmcli commands that you can use to set up a network bonding device. After verifying the commands and deleting the corresponding team device, run the nmcli commands manually or with parameter
+.B \-\-exec
+to create the NetworkManager connection profile.
+.PP
+.B Important:
+Note that deleting the team device makes this connection unavailable until you recreated the bond.
+.SH OPTIONS
+.TP
+.B "\-\-config <team json config file>"
+Specifies the team JSON format configuration file to convert. Use the 'teamdctl <TEAMNAME> config dump [actual]' command to create the JSON file.
+.TP
+.B "\-\-rename <interface>"
+This is a convenient option to replace the original interface name with the specified name. For example, use \-\-rename bond0 to change the interface name to bond0. Note, firewall rules, alias interfaces, and so on, that are tied to the original interface name can break after the renaming an interface because the tool only changes the NetworkManager profile.
+.TP
+.B "\-\-help"
+Print a help text to console and exit.
+.SH DANGEROUS OPTION
+.TP
+.B "\-\-exec"
+Executes the generated nmcli commands and adds the connections directly instead of printing then to the screen. This parameter is NOT recommended. Double-check the generated commands before you apply them.
+.SH EXAMPLE STEPS
+.TP
+1. Save the current 'team0' ip addresses, firewall rules, alias, etc.
+.TP
+2. Dump the current 'team0' configuration to a JSON file. Using the 'actual' option, team2bond dumps the actual config instead of the initial config:
+.TP
+.RS 1
+# teamdctl team0 config dump actual > team0.json
+.RE
+.TP
+3. Run the team2bond utility in dry-run mode to display nmcli commands that set up a network bond with similar settings as the team device:
+.TP
+.RS 1
+# team2bond \%--config team0.json
+.RE
+.TP
+To convert the current 'team0' configuration to bonding connection profile and rename the interface name to 'bond0':
+.TP
+.RS 1
+# team2bond \%--config team0.json \%--rename bond0
+.RE
+.TP
+4. Examine these generated nmcli commands, and make sure all parameters are correct.
+.TP
+5. Delete the team0 device by using the teamd or nmcli utility to avoid a device conflict. Then execute the commands the team2bond utility displayed in the previous step manually or use the \-\-exec option:
+.TP
+.RS 1
+# team2bond \%--config team0.json \%--rename bond0 \%--exec
+.RE
+.SH CAVEATS
+.PP
+The tool will not convert any other configuration which might be tied to the current setup. For instance, IP addresses, firewall rules, alias interfaces, bridges, and so on.
+.SH AUTHOR
+.PP
+Hangbin Liu <haliu@redhat.com>
+.SH SEE ALSO
+.BR nmcli (1),
+.BR teamdctl (8),
+.BR teamd.conf (5).
--
2.31.1

54
SOURCES/0005-Revert-teamd-Disregard-current-state-when-considerin.patch

@ -0,0 +1,54 @@ @@ -0,0 +1,54 @@
From 61efd6de2fbb8ee077863ee5a355ac3dfd9365b9 Mon Sep 17 00:00:00 2001
From: Xin Long <lucien.xin@gmail.com>
Date: Tue, 1 Sep 2020 13:59:27 +0800
Subject: [PATCH] Revert "teamd: Disregard current state when considering port
enablement"

This reverts commit deadb5b715227429a1879b187f5906b39151eca9.

As Patrick noticed, with that commit, teamd_port_check_enable()
would set the team port to the new state unconditionally, which
triggers another change message from kernel to userspace, then
teamd_port_check_enable() is called again to set the team port
to the new state.

This would go around and around to update the team port state,
and even cause teamd to consume 100% cpu.

As the issue caused by that commit is serious, it has to be
reverted. As for the issued fixed by that commit, I would
propose a new fix later.

Signed-off-by: Jiri Pirko <jiri@nvidia.com>
---
teamd/teamd_per_port.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/teamd/teamd_per_port.c b/teamd/teamd_per_port.c
index 166da57..d429753 100644
--- a/teamd/teamd_per_port.c
+++ b/teamd/teamd_per_port.c
@@ -442,14 +442,18 @@ int teamd_port_check_enable(struct teamd_context *ctx,
bool should_enable, bool should_disable)
{
bool new_enabled_state;
+ bool curr_enabled_state;
int err;
if (!teamd_port_present(ctx, tdport))
return 0;
+ err = teamd_port_enabled(ctx, tdport, &curr_enabled_state);
+ if (err)
+ return err;
- if (should_enable)
+ if (!curr_enabled_state && should_enable)
new_enabled_state = true;
- else if (should_disable)
+ else if (curr_enabled_state && should_disable)
new_enabled_state = false;
else
return 0;
--
2.27.0

616
SPECS/libteam.spec

@ -0,0 +1,616 @@ @@ -0,0 +1,616 @@
Name: libteam
Version: 1.31
Release: 11%{?dist}
Summary: Library for controlling team network device
License: LGPLv2+
URL: http://www.libteam.org
Source: http://www.libteam.org/files/libteam-%{version}.tar.gz

Patch1: 0001-team-add-a-tool-for-team-to-bonding-config-migration.patch
Patch2: 0002-team2bond-fix-min_ports-format-and-add-lacp_key.patch
Patch3: 0003-utils-team2bond-add-cautions-for-the-script.patch
Patch4: 0004-man-add-team2bond-man-doc.patch
Patch5: 0005-Revert-teamd-Disregard-current-state-when-considerin.patch

BuildRequires: gcc
BuildRequires: jansson-devel
BuildRequires: libdaemon-devel
BuildRequires: libnl3-devel
BuildRequires: dbus-devel
BuildRequires: systemd
BuildRequires: swig
BuildRequires: doxygen
BuildRequires: make
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: libtool

%description
This package contains a library which is a user-space
counterpart for team network driver. It provides an API
to control team network devices.

%package devel
Summary: Libraries and header files for libteam development
Requires: %{name}%{?_isa} = %{version}-%{release}

%package doc
Summary: API documentation for libteam and libteamd
Requires: %{name}%{?_isa} = %{version}-%{release}

%description doc
This package contains libteam and libteamd API documentation

%package -n teamd
Summary: Team network device control daemon
Requires: %{name}%{?_isa} = %{version}-%{release}

%package -n teamd-devel
Summary: Libraries and header files for teamd development
Requires: %{name}%{?_isa} = %{version}-%{release}

%package -n network-scripts-teamd
Summary: teamd legacy network service support
Requires: network-scripts
Supplements: (%{name} and network-scripts)

%description devel
The libteam-devel package contains the header files and libraries
necessary for developing programs using libteam.

%description -n teamd
The teamd package contains team network device control daemon.

%description -n teamd-devel
The teamd-devel package contains the header files and libraries
necessary for developing programs using libteamdctl.

%description -n network-scripts-teamd
This provides the ifup and ifdown scripts for use with the legacy network
service.

%prep
%autosetup -p1
autoreconf --force --install -I m4

# prepare example dir for -devel
mkdir -p _tmpdoc1/examples
rm examples/python/*.py
cp -p examples/*.c _tmpdoc1/examples

%build
%configure --disable-static
make %{?_smp_mflags}
make html

%install
make install DESTDIR=$RPM_BUILD_ROOT INSTALL="install -p"
find $RPM_BUILD_ROOT -name \*.la -delete
rm -rf $RPM_BUILD_ROOT/%{_bindir}/team_*
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/dbus-1/system.d
install -p teamd/dbus/teamd.conf $RPM_BUILD_ROOT%{_sysconfdir}/dbus-1/system.d/
mkdir -p $RPM_BUILD_ROOT%{_unitdir}
install -p teamd/redhat/systemd/teamd@.service $RPM_BUILD_ROOT%{_unitdir}
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/network-scripts
install -p -m 755 teamd/redhat/initscripts_systemd/network-scripts/ifup-Team $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/network-scripts
install -p -m 755 teamd/redhat/initscripts_systemd/network-scripts/ifdown-Team $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/network-scripts
install -p -m 755 teamd/redhat/initscripts_systemd/network-scripts/ifup-TeamPort $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/network-scripts
install -p -m 755 teamd/redhat/initscripts_systemd/network-scripts/ifdown-TeamPort $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/network-scripts
install -p -m 755 utils/bond2team $RPM_BUILD_ROOT%{_bindir}/bond2team
install -p -m 755 utils/team2bond $RPM_BUILD_ROOT%{_bindir}/team2bond

%ldconfig_scriptlets

%files
%license COPYING
%{_libdir}/libteam.so.*
%{_bindir}/teamnl
%{_mandir}/man8/teamnl.8*

%files devel
%doc _tmpdoc1/examples
%{_includedir}/team.h
%{_libdir}/libteam.so
%{_libdir}/pkgconfig/libteam.pc

%files doc
%doc doc/api

%files -n teamd
%doc teamd/example_configs teamd/redhat/example_ifcfgs/
%config(noreplace) %attr(644,root,root) %{_sysconfdir}/dbus-1/system.d/teamd.conf
%config(noreplace) %attr(644,root,root) %{_unitdir}/teamd@.service
%{_libdir}/libteamdctl.so.*
%{_bindir}/teamd
%{_bindir}/teamdctl
%{_bindir}/bond2team
%{_bindir}/team2bond
%{_mandir}/man8/teamd.8*
%{_mandir}/man8/teamdctl.8*
%{_mandir}/man5/teamd.conf.5*
%{_mandir}/man1/bond2team.1*
%{_mandir}/man1/team2bond.1*

%files -n teamd-devel
%{_includedir}/teamdctl.h
%{_libdir}/libteamdctl.so
%{_libdir}/pkgconfig/libteamdctl.pc

%files -n network-scripts-teamd
%{_sysconfdir}/sysconfig/network-scripts/ifup-Team
%{_sysconfdir}/sysconfig/network-scripts/ifdown-Team
%{_sysconfdir}/sysconfig/network-scripts/ifup-TeamPort
%{_sysconfdir}/sysconfig/network-scripts/ifdown-TeamPort

%changelog
* Mon Nov 15 2021 Xin Long <lxin@redhat.com> - 1.31-11
- Revert "teamd: Disregard current state when considering port enablement" [1894546]

* Mon Aug 16 2021 Hangbin Liu <haliu@redhat.com> - 1.31-10
- Remove an extra line in spec file

* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 1.31-9
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688

* Wed Jul 28 2021 Hangbin Liu <haliu@redhat.com> - 1.31-8
- Build util team2bond in teamd rpm [1986788]
- Add some cautions to util team2bond [1986788]
- Add team2bond man doc [1986788]

* Thu Jun 17 2021 Xin Long <lxin@redhat.com> - 1.31-7
- gating: fix the wrong link of openvswitch for RHEL-9 [1970175]

* Mon May 24 2021 Hangbin Liu <haliu@redhat.com> - 1.31-6
- team2bond: fix min_ports format and add lacp_key [1937155]

* Wed May 12 2021 Hangbin Liu <haliu@redhat.com> - 1.31-5
- team: add a tool for team to bonding config migration [1937155]

* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 1.31-4
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937

* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.31-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild

* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.31-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild

* Sun Jul 26 2020 Jiri Pirko <jiri@resnulli.us> - 1.31-1
1.31 release
utils/bond2team: remove TYPE in ifcfg file
utils/bond2team: keep delivering config to file if stdout not supplied
teamd/lacp: silence ignore none LACP frames
teamd: fix ctx->hwaddr value assignment
Send LACP PDU right after the Actor state has been changed
Skip setting the same hwaddr to a lag port if not needed
Make all netlink socket RCVBUF sizes configurable
Don't return an error when timerfd socket return 0
Fix ifinfo_link_with_port race condition with newlink
teamd: fix possible race in master ifname callback

* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.30-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild

* Thu Jan 09 2020 Jiri Pirko <jiri@resnulli.us> - 1.30-1
- 1.30 release
- teamd/lacp: fix segfault due to NULL pointer dereference
- teamd: fix build error in expansion of macro teamd_log_dbgx
- teamd: update ctx->hwaddr after setting team dev to new hwaddr
- libteam: wapper teamd_log_dbg with teamd_log_dbgx
- teamd: Disregard current state when considering port enablement
- man teamd.conf: update some parameter default values

* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.29-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild

* Wed Jul 03 2019 Jiri Pirko <jiri@resnulli.us> - 1.29-1
- 1.29 release
- teamd: improve the error output for non-integer port prio
- teamd: return 0 if tdport doesn't exist in teamd_config_port_set
- teamd: add port_master_ifindex_changed for link_watch_port_watch_ops
- initscripts: fix if/fi align
- teamd: fix a json object memleak in get_port_obj()
- libteam: set netlink event socket as non-blocking
- libteam: double NETLINK_RCVBUF to fix -ENOMEM error
- teamd: add a default value 1000 for link_watch.interval
- teamd: use enabled option_changed to sync enabled to link_up for lb runner
- teamd: tdport has to exist if item->per_port is set in __find_by_item_path
- teamd: remove port if adding fails
- teamd: lacp: update port state according to partner's sync bit
- man: fix runner.min_ports default value
- teamd: lw: nsna_ping: only send ns on enabled port
- teamd: lw: arp_ping: only check arp reply message
- teamd: config: update local prio to kernel
- teamnl: update help message

* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.28-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild

* Sun Dec 09 2018 Jiri Pirko <jiri@resnulli.us> - 1.28-1
- 1.28 release
- teamd: lacp: send LACPDU when port state transitions from DEFAULT to CURRENT
- man teamd.conf: Document ARP Ping link_watch.vlanid option
- man teamd.conf: fix indentation of link_watch.send_always
- libteam/options: fix s32/u32 data storage on big endian
- teamd: add an option to force log output to stdout, stderr or syslog
- teamd: add port_master_ifindex_changed for teamd_event_watch_ops
- utils: check to_stdout return correctly in bond2team
- binding/python: use SWIG_FromCharPtrAndSize for Python3 support
- man: add 'random' to the list of available runners
- libteam: don't crash when trying to print unregistered device name
- configure.ac: Empty LDFLAGS before checking for libnl3
- man: fix runner.sys_prio default
- examples: fix duplex comparison against best port
- teamd: add port_hwaddr_changed for lacp runner
- teamd: add port_hwaddr_changed for lb runner
- teamd: add port_hwaddr_changed for ab runner
- teamd: do not process lacpdu before the port ifinfo is set

* Tue Sep 18 2018 Miro Hrončok <mhroncok@redhat.com> - 1.27-11
- Remove Python 2 subpackage (#1627333)

* Thu Aug 2 2018 Peter Robinson <pbrobinson@fedoraproject.org> 1.27-10
- Properly move network-scripts dep to right package

* Thu Aug 2 2018 Peter Robinson <pbrobinson@fedoraproject.org> 1.27-9
- Move legacy network scripts into network-scripts-teamd sub package

* Sun Jul 22 2018 Peter Robinson <pbrobinson@fedoraproject.org> 1.27-8
- Cleanup spec, fix deps

* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.27-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild

* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.27-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild

* Tue Jan 09 2018 Iryna Shcherbina <ishcherb@redhat.com> - 1.27-5
- Update Python 2 dependency declarations to new packaging standards
(See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3)

* Sat Aug 19 2017 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 1.27-4
- Python 2 binary package renamed to python2-libteam
See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3

* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.27-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild

* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.27-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild

* Mon Jun 05 2017 Jiri Pirko <jiri@resnulli.us> - 1.27-1
- 1.27 release
- teamd: check target host with nap.nah.nd_na_target
- teamd: check ipv6 packet only with the 4 bits version
- teamd: set correct bits for standby ports
- libteam: Add team_get_port_enabled function
- teamd: check port link_up when a port is added with loadbalance runner
- libteam: resynchronize ifinfo after lost RTNLGRP_LINK notifications
- SubmittingPatches: add checkpatch note
- README: add note regarding pull requests
- teamd: escape some sensitive characters in ifname with double quotation marks

* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.26-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild

* Fri Aug 26 2016 Jiri Pirko <jiri@resnulli.us> - 1.26-1
- 1.26 release
- teamd: lacp: Do not unselect port if it changes state to "expired"
- man: in lacp it's 'port_config', not 'port_options'
- teamd: fix the issue that network blocks when systemctl stop teamd
- teamd: change to Before=network-pre.target in systemd service file
- man teamd.conf: fix indentation
- misc: fix an out-of-bound write with zero-length hardware address
- teamd: LACP runner does not set Agg bit on first slave

* Tue Jul 19 2016 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.25-2
- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages

* Fri May 20 2016 Jiri Pirko <jiri@resnulli.us> - 1.25-1
- 1.25 release
- teamd: handle vlan 0 packets
- libteam: fix TEAM_OPTION_TYPE_BOOL type for big endian architectures

* Fri Apr 15 2016 Jiri Pirko <jiri@resnulli.us> - 1.24-1
- 1.24 release
- teamd: lacp: use original hwaddr as source address in lacpdus
- teamd: do correct l3/l4 tx hashing with vlans
- libteam: Fix broken links

* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.23-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild

* Thu Dec 17 2015 Jiri Pirko <jiri@resnulli.us> - 1.23-1
- 1.23 release
- dbus: don't do <deny send_interface="..." /> in template dbus s. f.
- libteam: retry on NLE_DUMP_INTR error

* Tue Nov 03 2015 Jiri Pirko <jiri@resnulli.us> - 1.22-1
- 1.22 release
- dbus: don't do <deny send_interface="..." /> in dbus service file
- teamd: Fix member port state change on master team admin UP.
- teamd: add CAP_NET_RAW capability for LACP packet sockets
- add teamd.conf.in to EXTRA_DIST

* Mon Oct 05 2015 Jiri Pirko <jiri@resnulli.us> - 1.21-1
- 1.21 release
- libteam: add missing "static inline" in nl_updates
- libteam: check for definition of NLA_PUT_S* separatelly

* Mon Oct 05 2015 Jiri Pirko <jiri@resnulli.us> - 1.20-1
- 1.20 release
- libteam: fix compile error with newer libnl

* Mon Oct 05 2015 Jiri Pirko <jiri@resnulli.us> - 1.19-1
- 1.19 release
- teamd: add Before=network.target to systemd service file
- teamd: lacp: update actor state before sending LACP frames
- regenerate dbus policy file from template when user changed
- drop privileges to usr/grp specified at build time
- make teamd's run directory configurable
- create run directory at teamd program start
- teamd: fix cut&paste issue on delay_up
- Add stamp-h1 artifact to .gitignore
- Reduce usock file permissions to 700.
- Do not fail teamd_add_ports() when one port is missing
- Add missing prototypes for admin_state functions
- teamd: lacp: Don't send LACP frames when master team device is down.
- libteam, teamd: Track admin state of team device and add handlers to watch for changes.
- teamd: loadbalance mode lacks a .hwaddr_changed in teamd_event_watch_ops
- libteamdctl: fix timeval value for select

* Fri Aug 21 2015 Jiri Pirko <jiri@resnulli.us> - 1.18-1
- 1.18 release
- teamd: lacp: change actor system value on team mac change
- Fix sending duplicate LACP frames at the start of establishing a logical channel.
- Fix teamd memory corruption issues seen by missing port unlink in ifinfo_destroy()
- libteam: Add check to disallow creating device names longer than 15 chars.

* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.17-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild

* Thu Apr 02 2015 Jiri Pirko <jpirko@redhat.com> - 1.17-1
- 1.17 release
- update copyright dates
- man: teamdctl: add entry for item set of debug_level
- teamd: lw: nsna_ping: fix na rx handling
- teamd: lw: arp_ping: fix arp rx handling
- libteam: ifinfo: fix rtnl dellink handling

* Tue Mar 24 2015 Jiri Pirko <jpirko@redhat.com> - 1.16-1
- 1.16 release
- teamd: events: update ctx->hwaddr_len before calling hwaddr_changed handlers
- teamd: do not change ctx->hwaddr pointer
- teamd: lacp: change port mac address when team mac address is changed
- teamdctl: show port link down count in state output
- teamd: lw: count how many times has been the port down
- init unitialized value to 0/NULL to silence gcc warnings instead of x=x
- libteamdctl: rename recvmsg variable to recv_message
- teamd: check retval of malloc in lw_tipc_link_state_change
- teamd: fix potential memory leak in __set_sockaddr error path
- libteamdctl: fix typo in warning message in cli_zmq_recv
- libteam: check phys_port_id_len in update_phys_port_id
- teamnl: fix potential memory leak in run_cmd_getoption

* Sat Feb 21 2015 Till Maas <opensource@till.name> - 1.15-2
- Rebuilt for Fedora 23 Change
https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code

* Wed Dec 17 2014 Jiri Pirko <jpirko@redhat.com> - 1.15-1
- 1.15 release
- teamd: ignore SIGPIPE
- libteamdctl: Fix a typo in DBus method name

* Wed Nov 05 2014 Jiri Pirko <jpirko@redhat.com> - 1.14-1
- 1.14 release
- teamd: lw_arp_ping: make buf static and avoid returning local pointer

* Wed Nov 05 2014 Jiri Pirko <jpirko@redhat.com> - 1.13-1
- 1.13 release
- teamd: fix coding style a bit after previous commit
- teamd: Don't ever kill PID 0
- teamd: tipc: topology-aware failover
- teamd: tipc: fix team port removal bugs
- zmq: remove unused my_free_msg
- libteamdctl: zmq: remove include of teamd.h
- teamd: add teamd_zmq_common.h to noinst headers

* Tue Aug 19 2014 Jiri Pirko <jpirko@redhat.com> - 1.12-1
- 1.12 release
- teamd: teamd_state_val_dump move TEAMD_BUG_ON so it can be actually triggered
- teamd: fix coverity error in teamd_sriov_physfn_addr
- libteamdctl: adjust doc comments to be processed by doxygen
- remove forgotten src dir
- libteam: stringify.c adjust doc comments to be processed by doxygen
- libteam: ports.c adjust doc comments to be processed by doxygen
- libteam: options.c adjust doc comments to be processed by doxygen
- libteam: ifinfo.c adjust doc comments to be processed by doxygen
- libteam: libteam.c adjust doc comments to be processed by doxygen
- add doxygen html doc generation into autoconf
- teamd: tipc: use TIPC_MAX_*_NAME for buffers and check len
- fix strncmp len in ifname2ifindex
- teamd: fix incorrect usage of sizeof in __str_sockaddr

* Sun Aug 17 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.11-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild

* Thu Jun 26 2014 Jiri Pirko <jpirko@redhat.com> - 1.11-1
- 1.11 release
- teamd: add forgotten teamd_link_watch.h to noinst_HEADERS
- teamd: add tipc.h kernel header
- teamd: Add support for TIPC link watcher
- teamd: add TIPC link watcher
- teamd: move icmp6 NS/NA ping link watcher to a separate file
- teamd: move arp ping link watcher to a separate file
- teamd: move psr template link watcher to a separate file
- teamd: move ethtool link watcher to a separate file
- teamd_dbus: add PortConfigDump to introspection
- teamd: allow restart on failure through systemd
- teamd: distinguish exit code between init error and runtime error
- man teamd.conf: remove "mandatory" since the options are no longer mandatory
- teamd: add "debug_level" config option
- teamd: allow to change debug level during run
- teamd: register debug callback at the start of callbacks list
- libteam: add team_change_handler_register_head function
- teamd: lacp: update partner info before setting state
- teamd: lacp: do not check SYNCHRO flag before enable of port
- teamd: lacp: "expired" port is not selectable, only "current"
- teamd: lacp: update actor system (mac) before sending lacpdu
- teamd: respect currently set user linkup for created linkwatches
- teamd: split --take-over option into --no-quit-destroy
- teamd: fix port removal when using take_over
- libteam: add SubmittingPatches doc
- libteam: Use u8 for put/get TEAM_ATTR_OPTION_TYPE

* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.10-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild

* Mon Mar 31 2014 Jiri Pirko <jpirko@redhat.com> - 1.10-1
- Update to 1.10
- teamd: quit when our team device is removed from outside
- libteam: ifinfo: watch for dellink messages and call change handlers for that
- initscripts: make ifup/ifdown scripts usable by ifup/ifdown-eth scripts
- teamdctl: unmess check_teamd_team_devname and fix double free there
- man: correct type of "*_host" options
- teamd_link_watch: specify "missed_max" option default value
- bond2team: do not guess source_host option
- teamd_link_watch: allow to send ARP probes if no source_host is specified
- initscripts: do not try to re-add port if it is already there
- teamdctl: add command for easy port presention checking
- Fix potential small memory leak
- usock: accept multiline message string parameters
- libteamdctl: add notice for caller to do not modify or free certain strings
- teamd: do not remove ports from team dev in case of take over mode
- teamd: look for existing ports before adding new ones
- libteam: introduce ream_refresh
- teamd: fixed couple comments.
- teamd: update hwaddr when changing team's macaddr
- redhat: fix boolean types in example 2
- initscripts: fix port up before master and port down after master
- lb: enable/disable port according to linkwatch state
- fix comment typo in ifdown-Team scripts
- man teamd.conf: Minor improvements to style and language
- man teamdctl: Minor improvements to style and language

* Thu Jan 23 2014 Jiri Pirko <jpirko@redhat.com> - 1.9-2
- fix multilib

* Tue Nov 12 2013 Jiri Pirko <jpirko@redhat.com> - 1.9-1
- Update to 1.9
- libteamdctl: remove false lib dependencies
- teamdctl: use new port config get function
- libteamdctl: introduce support for port config get
- libteamdctl: cache reply strings into list
- teamd: introduce PortConfigDump control method
- teamd: make teamd_get_port_by_ifname ifname argument const
- Minor improvements to style and language.
- do not install example binaries
- minor man page(s) correction(s) and lintianisation
- teamdctl: print error message if ifindex cannot be obtained
- fix cflags path in pc files

* Tue Aug 13 2013 Jiri Pirko <jpirko@redhat.com> - 1.8-1
- Update to 1.8

* Mon Aug 12 2013 Jiri Pirko <jpirko@redhat.com> - 1.7-1
- Update to 1.7

* Thu Aug 08 2013 Jiri Pirko <jpirko@redhat.com> - 1.6-1
- Update to 1.6

* Tue Jul 30 2013 Jiri Pirko <jpirko@redhat.com> - 1.5-1
- Update to 1.5

* Tue Jun 11 2013 Jiri Pirko <jpirko@redhat.com> - 1.3-1
- Update to 1.3

* Wed May 29 2013 Jiri Pirko <jpirko@redhat.com> - 1.2-1
- Update to 1.2

* Thu May 16 2013 Jiri Pirko <jpirko@redhat.com> - 1.1-1
- Update to 1.1

* Thu Jan 31 2013 Jiri Pirko <jpirko@redhat.com> - 1.0-1
- Update to 1.0

* Sun Jan 20 2013 Jiri Pirko <jpirko@redhat.com> - 0.1-27.20130110gitf16805c
- Rebuilt for libnl3

* Sun Jan 20 2013 Kalev Lember <kalevlember@gmail.com> - 0.1-26.20130110gitf16805c
- Rebuilt for libnl3

* Thu Jan 10 2013 Jiri Pirko <jpirko@redhat.com> - 0.1-25.20130110gitf16805c
- Rebase to git commit f16805c

* Wed Dec 12 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-24.20121212git01fe4bd
- Rebase to git commit 01fe4bd

* Thu Dec 06 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-23.20121206git659a848
- Rebase to git commit 659a848

* Thu Nov 22 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-22.20121122git18b6701
- Rebase to git commit 18b6701

* Thu Nov 15 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-21.20121115gitffb5267
- Rebase to git commit ffb5267

* Mon Nov 05 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-20.20121105git3b95b34
- Rebase to git commit 3b95b34

* Thu Oct 25 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-19.20121025git7fe7c72
- Rebase to git commit 7fe7c72

* Fri Oct 19 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-18.20121019git1a91059
- Rebase to git commit 1a91059

* Sun Oct 07 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-17.20121007git6f48751
- Rebase to git commit 6f48751

* Tue Sep 25 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-16.20120925gitcc5cddc
- Rebase to git commit cc5cddc

* Sun Sep 23 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-15.20120923git8448186
- Rebase to git commit 8448186

* Tue Sep 04 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-14.20120904gitbdcf72c
- Rebase to git commit bdcf72c

* Wed Aug 22 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-13.20120822gitc0d943d
- Rebase to git commit c0d943d

* Tue Aug 07 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-12.20120807git9fa4a96
- Rebase to git commit 9fa4a96

* Thu Jul 19 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.1-11.20120628gitca7b526
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild

* Thu Jun 28 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-10.20120628gitca7b526
- Rebase to git commit ca7b526

* Wed Jun 27 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-9.20120627git96569f8
- Rebase to git commit 96569f8

* Wed Jun 27 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-8.20120627gitcd6b557
- Rebase to git commit cd6b557

* Wed Jun 20 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-7.20120620gita88fabf
- Rebase to git commit a88fabf

* Fri May 04 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-6.20120504git11e234a
- Rebase to git commit 11e234a

* Thu Apr 05 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-5.20120405gita82f8ac
- Rebase to git commit a82f8ac

* Tue Feb 21 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-4.20120221gitfe97f63
- Rebase to git commit fe97f63

* Mon Jan 30 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-3.20120130gitb5cf2a8
- Rebase to git commit b5cf2a8

* Wed Jan 25 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-2.20120125gita1718f8
- Rebase to git commit a1718f8

* Wed Jan 18 2012 Jiri Pirko <jpirko@redhat.com> - 0.1-1.20120113git302672e
- Initial build.
Loading…
Cancel
Save