From 893f328e39d72e5e823151dfd606157fe8fc2c65 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 7 May 2019 07:08:53 -0400 Subject: [PATCH] import libteam-1.27-10.el8 --- .gitignore | 1 + .libteam.metadata | 1 + ...se-SWIG_FromCharPtrAndSize-for-Pytho.patch | 34 ++ ...ty-LDFLAGS-before-checking-for-libnl.patch | 51 ++ ...ash-when-trying-to-print-unregistere.patch | 109 ++++ ...team-man-fix-runner.sys_prio-default.patch | 43 ++ ...dd-port_hwaddr_changed-for-ab-runner.patch | 159 +++++ ...-port_hwaddr_changed-for-lacp-runner.patch | 66 +++ ...dd-port_hwaddr_changed-for-lb-runner.patch | 58 ++ ...aster_ifindex_changed-for-teamd_even.patch | 191 ++++++ ...cess-lacpdu-before-the-port-ifinfo-i.patch | 48 ++ ...stdout-return-correctly-in-bond2team.patch | 38 ++ SPECS/libteam.spec | 549 ++++++++++++++++++ 13 files changed, 1348 insertions(+) create mode 100644 .gitignore create mode 100644 .libteam.metadata create mode 100644 SOURCES/libteam-binding-python-use-SWIG_FromCharPtrAndSize-for-Pytho.patch create mode 100644 SOURCES/libteam-configure.ac-Empty-LDFLAGS-before-checking-for-libnl.patch create mode 100644 SOURCES/libteam-libteam-don-t-crash-when-trying-to-print-unregistere.patch create mode 100644 SOURCES/libteam-man-fix-runner.sys_prio-default.patch create mode 100644 SOURCES/libteam-teamd-add-port_hwaddr_changed-for-ab-runner.patch create mode 100644 SOURCES/libteam-teamd-add-port_hwaddr_changed-for-lacp-runner.patch create mode 100644 SOURCES/libteam-teamd-add-port_hwaddr_changed-for-lb-runner.patch create mode 100644 SOURCES/libteam-teamd-add-port_master_ifindex_changed-for-teamd_even.patch create mode 100644 SOURCES/libteam-teamd-do-not-process-lacpdu-before-the-port-ifinfo-i.patch create mode 100644 SOURCES/libteam-utils-check-to_stdout-return-correctly-in-bond2team.patch create mode 100644 SPECS/libteam.spec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8679daf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/libteam-1.27.tar.gz diff --git a/.libteam.metadata b/.libteam.metadata new file mode 100644 index 0000000..9eb55d4 --- /dev/null +++ b/.libteam.metadata @@ -0,0 +1 @@ +2293a6081223ffa85ef3376bb4e6e1e48ed35129 SOURCES/libteam-1.27.tar.gz diff --git a/SOURCES/libteam-binding-python-use-SWIG_FromCharPtrAndSize-for-Pytho.patch b/SOURCES/libteam-binding-python-use-SWIG_FromCharPtrAndSize-for-Pytho.patch new file mode 100644 index 0000000..e00fc8d --- /dev/null +++ b/SOURCES/libteam-binding-python-use-SWIG_FromCharPtrAndSize-for-Pytho.patch @@ -0,0 +1,34 @@ +From d9769b270608654aa7f07ce48a36f084843daf01 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Xin Long +Date: Wed, 25 Jul 2018 16:43:22 +0800 +Subject: [PATCHv2 1/2] binding/python: use SWIG_FromCharPtrAndSize for Python3 + support + +PyString_FromStringAndSize is replaced with PyUnicode_FromStringAndSize +in Python3, and SWIG_FromCharPtrAndSize will choose the right one with +the check "#if PY_VERSION_HEX >= 0x0300000". + +Fixes: 4cb7829debd7 ("add support for hw address manipulation") +Signed-off-by: Xin Long +Signed-off-by: Jiri Pirko +--- + binding/python/team/capi.i.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/binding/python/team/capi.i.in b/binding/python/team/capi.i.in +index 5ce4659..c7a5842 100644 +--- a/binding/python/team/capi.i.in ++++ b/binding/python/team/capi.i.in +@@ -40,7 +40,7 @@ int team_hwaddr_set(struct team_handle *th, uint32_t ifindex, const char *addr, + if ($1) free($1); + } + %typemap(argout) (char *addr, unsigned int addr_len) { +- $result = SWIG_Python_AppendOutput($result, PyString_FromStringAndSize($1,$2)); ++ $result = SWIG_Python_AppendOutput($result, SWIG_FromCharPtrAndSize($1,$2)); + } + %apply char *OUTPUT {char *addr}; + int team_hwaddr_get(struct team_handle *th, uint32_t ifindex, char *addr, unsigned int addr_len); +-- +2.1.0 + diff --git a/SOURCES/libteam-configure.ac-Empty-LDFLAGS-before-checking-for-libnl.patch b/SOURCES/libteam-configure.ac-Empty-LDFLAGS-before-checking-for-libnl.patch new file mode 100644 index 0000000..54a5066 --- /dev/null +++ b/SOURCES/libteam-configure.ac-Empty-LDFLAGS-before-checking-for-libnl.patch @@ -0,0 +1,51 @@ +From 87662455fc6eae38de70fd7b6f758c22ec7a443a Mon Sep 17 00:00:00 2001 +Message-Id: <87662455fc6eae38de70fd7b6f758c22ec7a443a.1526634690.git.lucien.xin@gmail.com> +In-Reply-To: <789591c7318a0423984037b6a8ba3f3925f4eaa7.1526634690.git.lucien.xin@gmail.com> +References: <789591c7318a0423984037b6a8ba3f3925f4eaa7.1526634690.git.lucien.xin@gmail.com> +From: Timothy Redaelli +Date: Tue, 10 Apr 2018 15:54:02 +0200 +Subject: [PATCHv2 2/3] configure.ac: Empty LDFLAGS before checking for libnl3 + +Currently since CFLAGS are dropped if you have LDFLAGS=-pie (default on RHEL) +the rtnl_link_get_phys_port_id, rtnl_link_set_carrier and rtnl_link_get_carrier +tests always fails: + +/usr/bin/ld: /tmp/ccv5GdFD.o: relocation R_X86_64_PC32 against undefined symbol +`rtnl_link_get_carrier@@libnl_3' can not be used when making a shared object; +recompile with -fPIC + +This commits empty LDFLAGS before launching the 3 tests and restores it +after the tests. + +Signed-off-by: Timothy Redaelli +Signed-off-by: Jiri Pirko +--- + configure.ac | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 60657bb..f27c15c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -39,8 +39,10 @@ LT_INIT + + PKG_CHECK_MODULES([LIBNL], [libnl-3.0 libnl-genl-3.0 libnl-route-3.0 libnl-cli-3.0]) + TMP_CFLAGS="$CFLAGS" ++ TMP_LDFLAGS="$LDFLAGS" + TMP_LIBS="$LIBS" + CFLAGS="$CPPFLAGS $LIBNL_CFLAGS" ++ LDFLAGS="" + LIBS="$LIBS $LIBNL_LIBS" + AC_CHECK_LIB([nl-route-3], [rtnl_link_get_phys_port_id], + AC_DEFINE(HAVE_RTNL_LINK_GET_PHYS_ID, [1], [Define to 1 if you have rtnl_link_get_phys_port_id function.])) +@@ -49,6 +51,7 @@ PKG_CHECK_MODULES([LIBNL], [libnl-3.0 libnl-genl-3.0 libnl-route-3.0 libnl-cli-3 + AC_CHECK_LIB([nl-route-3], [rtnl_link_get_carrier], + AC_DEFINE(HAVE_RTNL_LINK_GET_CARRIER, [1], [Define to 1 if you have rtnl_link_get_carrier.])) + CFLAGS="$TMP_CFLAGS" ++ LDFLAGS="$TMP_LDFLAGS" + LIBS="$TMP_LIBS" + + PKG_CHECK_MODULES([LIBDAEMON], [libdaemon]) +-- +2.1.0 + diff --git a/SOURCES/libteam-libteam-don-t-crash-when-trying-to-print-unregistere.patch b/SOURCES/libteam-libteam-don-t-crash-when-trying-to-print-unregistere.patch new file mode 100644 index 0000000..3bc20ef --- /dev/null +++ b/SOURCES/libteam-libteam-don-t-crash-when-trying-to-print-unregistere.patch @@ -0,0 +1,109 @@ +From 05a7a9598fc9e616a1acf19096aeb93f7288bb35 Mon Sep 17 00:00:00 2001 +Message-Id: <05a7a9598fc9e616a1acf19096aeb93f7288bb35.1526634690.git.lucien.xin@gmail.com> +In-Reply-To: <789591c7318a0423984037b6a8ba3f3925f4eaa7.1526634690.git.lucien.xin@gmail.com> +References: <789591c7318a0423984037b6a8ba3f3925f4eaa7.1526634690.git.lucien.xin@gmail.com> +From: Antti Tiainen +Date: Thu, 3 May 2018 20:13:35 +0300 +Subject: [PATCHv2 3/3] libteam: don't crash when trying to print unregistered + device name + +team_port_str() will crash when trying to print port name that was +just unregistered, if dellink event is handled before port removal +event. + +This is regression from Commit 046fb6ba0aec ("libteam: resynchronize +ifinfo after lost RTNLGRP_LINK notifications"), which made it free +all removed interfaces after ifinfo handlers are called. + +Put the ifinfo_destroy_removed() back to dellink/newlink handlers as +it was before that commit. Clean up the ifinfo list after change handlers +only if it refreshed the entire ifinfo list after lost events. + +There's still a rare possibility that dellink event is missed due to +full socket receive buffer, which would cause ifinfo refresh and clearing +removed interfaces. For this, add NULL check to team_port_str() so it +doesn't try to print port device name in this situation. + +Signed-off-by: Antti Tiainen +Signed-off-by: Jiri Pirko +--- + include/team.h | 1 + + libteam/ifinfo.c | 7 ++++++- + libteam/libteam.c | 2 +- + libteam/stringify.c | 3 ++- + 4 files changed, 10 insertions(+), 3 deletions(-) + +diff --git a/include/team.h b/include/team.h +index 9ae517d..b31c8d8 100644 +--- a/include/team.h ++++ b/include/team.h +@@ -223,6 +223,7 @@ enum { + TEAM_PORT_CHANGE = 0x1, + TEAM_OPTION_CHANGE = 0x2, + TEAM_IFINFO_CHANGE = 0x4, ++ TEAM_IFINFO_REFRESH = 0x8, + TEAM_ANY_CHANGE = TEAM_PORT_CHANGE | + TEAM_OPTION_CHANGE | + TEAM_IFINFO_CHANGE, +diff --git a/libteam/ifinfo.c b/libteam/ifinfo.c +index 5c32a9c..46d56a2 100644 +--- a/libteam/ifinfo.c ++++ b/libteam/ifinfo.c +@@ -258,6 +258,8 @@ static void obj_input_newlink(struct nl_object *obj, void *arg, bool event) + uint32_t ifindex; + int err; + ++ ifinfo_destroy_removed(th); ++ + link = (struct rtnl_link *) obj; + + ifindex = rtnl_link_get_ifindex(link); +@@ -294,6 +296,8 @@ static void event_handler_obj_input_dellink(struct nl_object *obj, void *arg) + uint32_t ifindex; + int err; + ++ ifinfo_destroy_removed(th); ++ + link = (struct rtnl_link *) obj; + + ifindex = rtnl_link_get_ifindex(link); +@@ -412,7 +416,8 @@ int get_ifinfo_list(struct team_handle *th) + } + } + +- ret = check_call_change_handlers(th, TEAM_IFINFO_CHANGE); ++ ret = check_call_change_handlers(th, TEAM_IFINFO_CHANGE | ++ TEAM_IFINFO_REFRESH); + if (ret < 0) + err(th, "get_ifinfo_list: check_call_change_handers failed"); + return ret; +diff --git a/libteam/libteam.c b/libteam/libteam.c +index 77a06dd..ce0467e 100644 +--- a/libteam/libteam.c ++++ b/libteam/libteam.c +@@ -236,7 +236,7 @@ int check_call_change_handlers(struct team_handle *th, + break; + } + } +- if (call_type_mask & TEAM_IFINFO_CHANGE) { ++ if (call_type_mask & TEAM_IFINFO_REFRESH) { + ifinfo_destroy_removed(th); + ifinfo_clear_changed(th); + } +diff --git a/libteam/stringify.c b/libteam/stringify.c +index 38f4788..f1faf90 100644 +--- a/libteam/stringify.c ++++ b/libteam/stringify.c +@@ -344,7 +344,8 @@ static bool __team_port_str(struct team_port *port, + team_is_port_removed(port) ? "-" : + team_is_port_changed(port) ? "*" : " ", + ifindex, +- team_get_ifinfo_ifname(ifinfo), ++ ifinfo ? team_get_ifinfo_ifname(ifinfo) : ++ "(removed)", + team_is_port_link_up(port) ? "up": "down", + team_get_port_speed(port), + team_get_port_duplex(port) ? "FD" : "HD"); +-- +2.1.0 + diff --git a/SOURCES/libteam-man-fix-runner.sys_prio-default.patch b/SOURCES/libteam-man-fix-runner.sys_prio-default.patch new file mode 100644 index 0000000..f3497ef --- /dev/null +++ b/SOURCES/libteam-man-fix-runner.sys_prio-default.patch @@ -0,0 +1,43 @@ +From 789591c7318a0423984037b6a8ba3f3925f4eaa7 Mon Sep 17 00:00:00 2001 +Message-Id: <789591c7318a0423984037b6a8ba3f3925f4eaa7.1526634690.git.lucien.xin@gmail.com> +From: Francesco Giudici +Date: Thu, 18 Jan 2018 18:21:52 +0100 +Subject: [PATCHv2 1/3] man: fix runner.sys_prio default + +runner.sys_prio default is 65535, not 255. +255 is actually the default value of ports.PORTIFNAME.lacp_prio. + +Signed-off-by: Francesco Giudici +Signed-off-by: Jiri Pirko +--- + man/teamd.conf.5 | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/man/teamd.conf.5 b/man/teamd.conf.5 +index 0545023..dc5000e 100644 +--- a/man/teamd.conf.5 ++++ b/man/teamd.conf.5 +@@ -229,7 +229,7 @@ System priority, value can be 0 \(en 65535. + .RS 7 + .PP + Default: +-.BR "255" ++.BR "65535" + .RE + .TP + .BR "runner.min_ports " (int) +@@ -269,6 +269,11 @@ Default: + .TP + .BR "ports.PORTIFNAME.lacp_prio " (int) + Port priority according to LACP standard. The lower number means higher priority. ++.RS 7 ++.PP ++Default: ++.BR "255" ++.RE + .TP + .BR "ports.PORTIFNAME.lacp_key " (int) + Port key according to LACP standard. It is only possible to aggregate ports with the same key. +-- +2.1.0 + diff --git a/SOURCES/libteam-teamd-add-port_hwaddr_changed-for-ab-runner.patch b/SOURCES/libteam-teamd-add-port_hwaddr_changed-for-ab-runner.patch new file mode 100644 index 0000000..aff497b --- /dev/null +++ b/SOURCES/libteam-teamd-add-port_hwaddr_changed-for-ab-runner.patch @@ -0,0 +1,159 @@ +From efaa6ae709bb4b59efacb0bb7301be2242b058bc Mon Sep 17 00:00:00 2001 +Message-Id: +From: Xin Long +Date: Fri, 20 Oct 2017 12:35:07 +0800 +Subject: [PATCH 1/3] teamd: add port_hwaddr_changed for ab runner + +This patch to fix an events processing race issue when adding two ports +into one team dev with ab mode with same_all hwaddr policy: + +team0 original hwaddr: 00:00:00:00:00:0a +port1 original hwaddr: 00:00:00:00:00:01 +port2 original hwaddr: 00:00:00:00:00:02 + +There are two sockets in teamd: nl_cli.sock_event for ifinfo updates +and nl_sock_event for ports/options changes. During adding two ports, +the events on these two sockets could be: + +nl_sock_event: + [1] -- [2] -- + +[1]: port1 added event (added by enslaving port1) +[2]: port2 added event (added by enslaving port2) + +nl_cli.sock_event: + [a1] -- [b0] -- [c1] -- [d2] -- [e2] -- [f1] -- + +[a1]: port1 ifinfo event (added by setting port1's master) +[b0]: team0 ifinfo event (added by setting team0's hwaddr) +[c1]: port1 ifinfo event (added by set port1's hwaddr) +[d2]: port2 ifinfo event (added by set port2's master) +[e2]: port2 ifinfo event (added by set port2's hwaddr) +[f1]: port1 ifinfo event (added by set port1's hwaddr) + +teamd can make sure the order for their processing is as above on the +same socket, but not between two sockets. So if these events processing +order is (monitoring team/ports' ifinfo, hwaddr, master): + +[ 1]: team0->ifinfo = 00:00:00:00:00:0a + team0->hwaddr = 00:00:00:00:00:01 + port1->hwaddr = 00:00:00:00:00:0a +[a1]: port1->ifinfo = 00:00:00:00:00:01 + port1->master = team0 +[ 2]: port2->ifinfo = 00:00:00:00:00:02 + port2->hwaddr = 00:00:00:00:00:0a + (team0->ifinfo is not updated, it's still 00:00:00:00:00:0a) +[b0]: team0->ifinfo = 00:00:00:00:00:01 + port1->hwaddr = 00:00:00:00:00:01 + (port2->master is not yet set, port2->hwaddr couldn't be updated) +[c1]: no changes +[d2]: port2->ifinfo = 00:00:00:00:00:0a + port2->master = team0 + (too late !!!) +[e2]: no changes +[f1]: no changes + +Then: +team0 final hwaddr: 00:00:00:00:00:01 +port1 final hwaddr: 00:00:00:00:00:01 +port2 final hwaddr: 00:00:00:00:00:0a <----- issue + +This patch is to add port_hwaddr_changed for ab runner, in [e2] where +we set it's hwaddr with team0 (port2->hwaddr = 00:00:00:00:00:01) IF +port2->hwaddr != team0->ifinfo. + +I think the same issue also exists in lacp and lb mode for which I will +fix them in another patches. + +v1 -> v2: + fix some typos in changelog and couple of style problems in codes + +Reported-by: Jon Nikolakakis +Signed-off-by: Xin Long +Signed-off-by: Jiri Pirko +Signed-off-by: Marcelo Ricardo Leitner +--- + teamd/teamd_runner_activebackup.c | 39 +++++++++++++++++++++++++++++++++++++++ + 1 file changed, 39 insertions(+) + +diff --git a/teamd/teamd_runner_activebackup.c b/teamd/teamd_runner_activebackup.c +index aec3a73d5ff61534c377b935fe0e5bc1f51af79d..8a3447f1a63d71055eb7a8784cbe96381ee2b451 100644 +--- a/teamd/teamd_runner_activebackup.c ++++ b/teamd/teamd_runner_activebackup.c +@@ -39,6 +39,8 @@ struct ab_hwaddr_policy { + const char *name; + int (*hwaddr_changed)(struct teamd_context *ctx, + struct ab *ab); ++ int (*port_hwaddr_changed)(struct teamd_context *ctx, struct ab *ab, ++ struct teamd_port *tdport); + int (*port_added)(struct teamd_context *ctx, struct ab *ab, + struct teamd_port *tdport); + int (*active_set)(struct teamd_context *ctx, struct ab *ab, +@@ -95,6 +97,26 @@ static int ab_hwaddr_policy_same_all_hwaddr_changed(struct teamd_context *ctx, + return 0; + } + ++static int ++ab_hwaddr_policy_same_all_port_hwaddr_changed(struct teamd_context *ctx, ++ struct ab *ab, ++ struct teamd_port *tdport) ++{ ++ int err; ++ ++ if (!memcmp(team_get_ifinfo_hwaddr(tdport->team_ifinfo), ++ ctx->hwaddr, ctx->hwaddr_len)) ++ return 0; ++ ++ err = team_hwaddr_set(ctx->th, tdport->ifindex, ctx->hwaddr, ++ ctx->hwaddr_len); ++ if (err) ++ teamd_log_err("%s: Failed to set port hardware address.", ++ tdport->ifname); ++ ++ return err; ++} ++ + static int ab_hwaddr_policy_same_all_port_added(struct teamd_context *ctx, + struct ab *ab, + struct teamd_port *tdport) +@@ -114,6 +136,7 @@ static int ab_hwaddr_policy_same_all_port_added(struct teamd_context *ctx, + static const struct ab_hwaddr_policy ab_hwaddr_policy_same_all = { + .name = "same_all", + .hwaddr_changed = ab_hwaddr_policy_same_all_hwaddr_changed, ++ .port_hwaddr_changed = ab_hwaddr_policy_same_all_port_hwaddr_changed, + .port_added = ab_hwaddr_policy_same_all_port_added, + }; + +@@ -411,6 +434,21 @@ static int ab_event_watch_hwaddr_changed(struct teamd_context *ctx, void *priv) + return 0; + } + ++static int ab_event_watch_port_hwaddr_changed(struct teamd_context *ctx, ++ struct teamd_port *tdport, ++ void *priv) ++{ ++ struct ab *ab = priv; ++ ++ if (!teamd_port_present(ctx, tdport)) ++ return 0; ++ ++ if (ab->hwaddr_policy->port_hwaddr_changed) ++ return ab->hwaddr_policy->port_hwaddr_changed(ctx, ab, tdport); ++ ++ return 0; ++} ++ + static int ab_port_load_config(struct teamd_context *ctx, + struct ab_port *ab_port) + { +@@ -491,6 +529,7 @@ static int ab_event_watch_prio_option_changed(struct teamd_context *ctx, + + static const struct teamd_event_watch_ops ab_event_watch_ops = { + .hwaddr_changed = ab_event_watch_hwaddr_changed, ++ .port_hwaddr_changed = ab_event_watch_port_hwaddr_changed, + .port_added = ab_event_watch_port_added, + .port_link_changed = ab_event_watch_port_link_changed, + .option_changed = ab_event_watch_prio_option_changed, +-- +2.14.3 + diff --git a/SOURCES/libteam-teamd-add-port_hwaddr_changed-for-lacp-runner.patch b/SOURCES/libteam-teamd-add-port_hwaddr_changed-for-lacp-runner.patch new file mode 100644 index 0000000..4c77bf3 --- /dev/null +++ b/SOURCES/libteam-teamd-add-port_hwaddr_changed-for-lacp-runner.patch @@ -0,0 +1,66 @@ +From c42cc9955a93bc4bed65adf9a506f92b8df290d7 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Xin Long +Date: Tue, 7 Nov 2017 12:33:36 +0800 +Subject: [PATCH 3/3] teamd: add port_hwaddr_changed for lacp runner + +To fix the same issue fixed in commit efaa6ae709bb ("teamd: add +port_hwaddr_changed for ab runner") for lacp runner, this patch +is to add .port_hwaddr_changed for lacp runner as well. + +Signed-off-by: Xin Long +Signed-off-by: Jiri Pirko +Signed-off-by: Marcelo Ricardo Leitner +--- + teamd/teamd_runner_lacp.c | 26 ++++++++++++++++++++++++++ + 1 file changed, 26 insertions(+) + +diff --git a/teamd/teamd_runner_lacp.c b/teamd/teamd_runner_lacp.c +index 1310f6737f6cf37b7d6fef0befb8c803178212bd..7b8f0a783cfd71aa3f8a89276f5b95bce2fc517a 100644 +--- a/teamd/teamd_runner_lacp.c ++++ b/teamd/teamd_runner_lacp.c +@@ -1336,6 +1336,31 @@ static int lacp_event_watch_hwaddr_changed(struct teamd_context *ctx, + return 0; + } + ++static int lacp_event_watch_port_hwaddr_changed(struct teamd_context *ctx, ++ struct teamd_port *tdport, ++ void *priv) ++{ ++ struct lacp_port *lacp_port; ++ struct lacp *lacp = priv; ++ int err; ++ ++ if (!teamd_port_present(ctx, tdport)) ++ return 0; ++ ++ if (!memcmp(team_get_ifinfo_hwaddr(tdport->team_ifinfo), ++ ctx->hwaddr, ctx->hwaddr_len)) ++ return 0; ++ ++ err = lacp_port_set_mac(ctx, tdport); ++ if (err) ++ return err; ++ ++ lacp_port = lacp_port_get(lacp, tdport); ++ lacp_port_actor_system_update(lacp_port); ++ ++ return 0; ++} ++ + static int lacp_event_watch_admin_state_changed(struct teamd_context *ctx, + void *priv) + { +@@ -1389,6 +1414,7 @@ static int lacp_event_watch_port_changed(struct teamd_context *ctx, + + static const struct teamd_event_watch_ops lacp_event_watch_ops = { + .hwaddr_changed = lacp_event_watch_hwaddr_changed, ++ .port_hwaddr_changed = lacp_event_watch_port_hwaddr_changed, + .port_added = lacp_event_watch_port_added, + .port_removed = lacp_event_watch_port_removed, + .port_changed = lacp_event_watch_port_changed, +-- +2.14.3 + diff --git a/SOURCES/libteam-teamd-add-port_hwaddr_changed-for-lb-runner.patch b/SOURCES/libteam-teamd-add-port_hwaddr_changed-for-lb-runner.patch new file mode 100644 index 0000000..95a1188 --- /dev/null +++ b/SOURCES/libteam-teamd-add-port_hwaddr_changed-for-lb-runner.patch @@ -0,0 +1,58 @@ +From 0164b6a460728b3a1fd3feee9e2901f1b810cf24 Mon Sep 17 00:00:00 2001 +Message-Id: <0164b6a460728b3a1fd3feee9e2901f1b810cf24.1518205291.git.mleitner@redhat.com> +In-Reply-To: +References: +From: Xin Long +Date: Tue, 7 Nov 2017 12:33:11 +0800 +Subject: [PATCH 2/3] teamd: add port_hwaddr_changed for lb runner + +To fix the same issue fixed in commit efaa6ae709bb ("teamd: add +port_hwaddr_changed for ab runner") for lb runner, this patch is +to add .port_hwaddr_changed for lb runner as well. + +Signed-off-by: Xin Long +Signed-off-by: Jiri Pirko +Signed-off-by: Marcelo Ricardo Leitner +--- + teamd/teamd_runner_loadbalance.c | 23 +++++++++++++++++++++++ + 1 file changed, 23 insertions(+) + +diff --git a/teamd/teamd_runner_loadbalance.c b/teamd/teamd_runner_loadbalance.c +index a1e21303455fde55763b57b898ac5aaeb21c4b61..b9bfc13895b1a47d3e5cf552e6c720601c475d97 100644 +--- a/teamd/teamd_runner_loadbalance.c ++++ b/teamd/teamd_runner_loadbalance.c +@@ -87,8 +87,31 @@ static int lb_event_watch_hwaddr_changed(struct teamd_context *ctx, void *priv) + return 0; + } + ++static int lb_event_watch_port_hwaddr_changed(struct teamd_context *ctx, ++ struct teamd_port *tdport, ++ void *priv) ++{ ++ int err; ++ ++ if (!teamd_port_present(ctx, tdport)) ++ return 0; ++ ++ if (!memcmp(team_get_ifinfo_hwaddr(tdport->team_ifinfo), ++ ctx->hwaddr, ctx->hwaddr_len)) ++ return 0; ++ ++ err = team_hwaddr_set(ctx->th, tdport->ifindex, ctx->hwaddr, ++ ctx->hwaddr_len); ++ if (err) ++ teamd_log_err("%s: Failed to set port hardware address.", ++ tdport->ifname); ++ ++ return err; ++} ++ + static const struct teamd_event_watch_ops lb_port_watch_ops = { + .hwaddr_changed = lb_event_watch_hwaddr_changed, ++ .port_hwaddr_changed = lb_event_watch_port_hwaddr_changed, + .port_added = lb_event_watch_port_added, + .port_removed = lb_event_watch_port_removed, + .port_link_changed = lb_event_watch_port_link_changed, +-- +2.14.3 + diff --git a/SOURCES/libteam-teamd-add-port_master_ifindex_changed-for-teamd_even.patch b/SOURCES/libteam-teamd-add-port_master_ifindex_changed-for-teamd_even.patch new file mode 100644 index 0000000..a4a0281 --- /dev/null +++ b/SOURCES/libteam-teamd-add-port_master_ifindex_changed-for-teamd_even.patch @@ -0,0 +1,191 @@ +From b6f63db7f3c8eb3119c9449abe9ac6535965e14d Mon Sep 17 00:00:00 2001 +Message-Id: +From: Hangbin Liu +Date: Wed, 8 Aug 2018 16:56:52 +0800 +Subject: [PATCHv2] teamd: add port_master_ifindex_changed for + teamd_event_watch_ops + +When we add port to new active-backup teams with multi threads. After +the port is set to link up and trigger function obj_input_newlink(), +it's possible that there is no master index in rtnl link info. So the +team slave's master_ifindex is not updated. + +On the other hand, the port is up and trigger functions like +- teamd_link_watch_check_link_up() + - teamd_event_port_link_changed() + - ab_event_watch_port_link_changed() + - ab_link_watch_handler() + - teamd_for_each_tdport() + - teamd_get_next_tdport() + - teamd_port_present() + +Here the teamd_port_present() failed as the port master ifindex is not +update to team ifindex yet. Finally we get nothing and no active port +is set. + +Here is the reproducer: + +\#bin/bash +if [ -z $1 ] || [ -z $2 ]; then + echo "Usage: $0 iface1 iface2" + exit 1 +else + iface1=$1 + iface2=$2 +fi + +WAIT=2 +COUNT=0 + +start_team() +{ + local num=$1 + local iface=$2 + teamd -o -n -U -d -t team$num -c '{"runner": {"name": "activebackup"},"link_watch": {"name": "ethtool"}}' -gg + teamdctl team$num port add $iface +} + +while :; do + echo "-----------------------------------------------------------" + let "COUNT++" + echo "Loop $COUNT" + + teamd -k -t team1 + teamd -k -t team2 + sleep "$WAIT" + start_team 1 $iface1 & + start_team 2 $iface2 & + sleep "$WAIT" + + if teamdctl team1 state | grep -q "active port: $iface1" && \ + teamdctl team2 state | grep -q "active port: $iface2"; then + echo "Pass" + else + echo "FAIL" + exit 1 + fi +done + +Failure as follows: + +]# teamdctl teamX state dump + "runner": { + "active_port": "" + }, + +Currently we only reproduced this with active-backup mode(I could reproduce it +in VM easily, but hard to reproduce it on physical machines). + +Fix it by adding a new teamd_event_watch_ops port_master_ifindex_changed for +active-backup mode. + +V2: update commit description from Jamie Bainbridge's reply. +v3: update description and reproducer. + +Signed-off-by: Hangbin Liu +Signed-off-by: Jiri Pirko +--- + teamd/teamd.h | 5 +++++ + teamd/teamd_events.c | 19 +++++++++++++++++++ + teamd/teamd_ifinfo_watch.c | 5 +++++ + teamd/teamd_runner_activebackup.c | 8 ++++++++ + 4 files changed, 37 insertions(+) + +diff --git a/teamd/teamd.h b/teamd/teamd.h +index 5dbfb9b..3934fc2 100644 +--- a/teamd/teamd.h ++++ b/teamd/teamd.h +@@ -189,6 +189,9 @@ struct teamd_event_watch_ops { + struct teamd_port *tdport, void *priv); + int (*port_ifname_changed)(struct teamd_context *ctx, + struct teamd_port *tdport, void *priv); ++ int (*port_master_ifindex_changed)(struct teamd_context *ctx, ++ struct teamd_port *tdport, ++ void *priv); + int (*option_changed)(struct teamd_context *ctx, + struct team_option *option, void *priv); + char *option_changed_match_name; +@@ -208,6 +211,8 @@ int teamd_event_ifinfo_hwaddr_changed(struct teamd_context *ctx, + struct team_ifinfo *ifinfo); + int teamd_event_ifinfo_ifname_changed(struct teamd_context *ctx, + struct team_ifinfo *ifinfo); ++int teamd_event_ifinfo_master_ifindex_changed(struct teamd_context *ctx, ++ struct team_ifinfo *ifinfo); + int teamd_event_ifinfo_admin_state_changed(struct teamd_context *ctx, + struct team_ifinfo *ifinfo); + int teamd_events_init(struct teamd_context *ctx); +diff --git a/teamd/teamd_events.c b/teamd/teamd_events.c +index 1a95974..65aa46a 100644 +--- a/teamd/teamd_events.c ++++ b/teamd/teamd_events.c +@@ -167,6 +167,25 @@ int teamd_event_ifinfo_ifname_changed(struct teamd_context *ctx, + return 0; + } + ++int teamd_event_ifinfo_master_ifindex_changed(struct teamd_context *ctx, ++ struct team_ifinfo *ifinfo) ++{ ++ struct event_watch_item *watch; ++ uint32_t ifindex = team_get_ifinfo_ifindex(ifinfo); ++ struct teamd_port *tdport = teamd_get_port(ctx, ifindex); ++ int err; ++ ++ list_for_each_node_entry(watch, &ctx->event_watch_list, list) { ++ if (watch->ops->port_master_ifindex_changed && tdport) { ++ err = watch->ops->port_master_ifindex_changed(ctx, tdport, ++ watch->priv); ++ if (err) ++ return err; ++ } ++ } ++ return 0; ++} ++ + int teamd_event_ifinfo_admin_state_changed(struct teamd_context *ctx, + struct team_ifinfo *ifinfo) + { +diff --git a/teamd/teamd_ifinfo_watch.c b/teamd/teamd_ifinfo_watch.c +index f334ff6..6a19532 100644 +--- a/teamd/teamd_ifinfo_watch.c ++++ b/teamd/teamd_ifinfo_watch.c +@@ -59,6 +59,11 @@ static int ifinfo_change_handler_func(struct team_handle *th, void *priv, + if (err) + return err; + } ++ if (team_is_ifinfo_master_ifindex_changed(ifinfo)) { ++ err = teamd_event_ifinfo_master_ifindex_changed(ctx, ifinfo); ++ if (err) ++ return err; ++ } + } + return 0; + } +diff --git a/teamd/teamd_runner_activebackup.c b/teamd/teamd_runner_activebackup.c +index 8a3447f..f92d341 100644 +--- a/teamd/teamd_runner_activebackup.c ++++ b/teamd/teamd_runner_activebackup.c +@@ -520,6 +520,13 @@ static int ab_event_watch_port_link_changed(struct teamd_context *ctx, + return ab_link_watch_handler(ctx, priv); + } + ++static int ab_event_watch_port_master_ifindex_changed(struct teamd_context *ctx, ++ struct teamd_port *tdport, ++ void *priv) ++{ ++ return ab_link_watch_handler(ctx, priv); ++} ++ + static int ab_event_watch_prio_option_changed(struct teamd_context *ctx, + struct team_option *option, + void *priv) +@@ -532,6 +539,7 @@ static const struct teamd_event_watch_ops ab_event_watch_ops = { + .port_hwaddr_changed = ab_event_watch_port_hwaddr_changed, + .port_added = ab_event_watch_port_added, + .port_link_changed = ab_event_watch_port_link_changed, ++ .port_master_ifindex_changed = ab_event_watch_port_master_ifindex_changed, + .option_changed = ab_event_watch_prio_option_changed, + .option_changed_match_name = "priority", + }; +-- +2.1.0 + diff --git a/SOURCES/libteam-teamd-do-not-process-lacpdu-before-the-port-ifinfo-i.patch b/SOURCES/libteam-teamd-do-not-process-lacpdu-before-the-port-ifinfo-i.patch new file mode 100644 index 0000000..1c24d0e --- /dev/null +++ b/SOURCES/libteam-teamd-do-not-process-lacpdu-before-the-port-ifinfo-i.patch @@ -0,0 +1,48 @@ +From 45912ded9cb5166d8286a6a4fb53bfe9fffcd8a9 Mon Sep 17 00:00:00 2001 +Message-Id: <45912ded9cb5166d8286a6a4fb53bfe9fffcd8a9.1518009078.git.mleitner@redhat.com> +From: Xin Long +Date: Wed, 11 Oct 2017 14:17:38 +0800 +Subject: [PATCH] teamd: do not process lacpdu before the port ifinfo is set + +Now the port ifinfo will be set in obj_input_newlink when a RTM_NEWLINK +event is received. + +But when a port is being added, if a lacpdu gets received on this port +before the RTM_NEWLINK event, lacpdu_recv will process the packet with +incorrect port ifinfo. + +In Patrick's case, as ifinfo->master_ifindex was 0, it would skip this +port in teamd_for_each_tdport, which caused lacp_port->agg_lead not to +be updated in lacp_switch_agg_lead. Later the lacp_port actor would go +to a unexpected state. + +This patch is to avoid it by checking teamd_port_present in lacpdu_recv +so that it would not process lacpdu before the port ifinfo is set. + +Reported-by: Patrick Talbert +Tested-by: Patrick Talbert +Signed-off-by: Xin Long +Reviewed-by: Marcelo Ricardo Leitner +Signed-off-by: Jiri Pirko +Signed-off-by: Marcelo Ricardo Leitner +--- + teamd/teamd_runner_lacp.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/teamd/teamd_runner_lacp.c b/teamd/teamd_runner_lacp.c +index 5601278696a9f263f6bfe71642b2db971c9314b9..1310f6737f6cf37b7d6fef0befb8c803178212bd 100644 +--- a/teamd/teamd_runner_lacp.c ++++ b/teamd/teamd_runner_lacp.c +@@ -1075,6 +1075,9 @@ static int lacpdu_recv(struct lacp_port *lacp_port) + if (err <= 0) + return err; + ++ if (!teamd_port_present(lacp_port->ctx, lacp_port->tdport)) ++ return 0; ++ + if (!lacpdu_check(&lacpdu)) { + teamd_log_warn("malformed LACP PDU came."); + return 0; +-- +2.14.3 + diff --git a/SOURCES/libteam-utils-check-to_stdout-return-correctly-in-bond2team.patch b/SOURCES/libteam-utils-check-to_stdout-return-correctly-in-bond2team.patch new file mode 100644 index 0000000..0510959 --- /dev/null +++ b/SOURCES/libteam-utils-check-to_stdout-return-correctly-in-bond2team.patch @@ -0,0 +1,38 @@ +From eb3b18e87be7aab31bdfa51a882210b24596dc9d Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: +References: +From: Xin Long +Date: Fri, 27 Jul 2018 17:07:47 +0800 +Subject: [PATCHv2 2/2] utils: check to_stdout return correctly in bond2team + +to_stdout is a function, not a string, so fix the check on +its return in bond2team. + +v1->v2: + improve the coding style as Flavio suggested. + +Fixes: d5a1c8ee9e36 ("utils: add bond2team conversion tool") +Signed-off-by: Xin Long +Acked-by: Flavio Leitner +Signed-off-by: Jiri Pirko +--- + utils/bond2team | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/utils/bond2team b/utils/bond2team +index f8d46ef..fc81c4b 100755 +--- a/utils/bond2team ++++ b/utils/bond2team +@@ -623,7 +623,7 @@ team_ifcfg_write() + team_ifcfg_deliver() + { + pr_dbg "${FUNCNAME} $*" +- if [ ! to_stdout ]; then ++ if ! to_stdout; then + return 0 + fi + +-- +2.1.0 + diff --git a/SPECS/libteam.spec b/SPECS/libteam.spec new file mode 100644 index 0000000..e181176 --- /dev/null +++ b/SPECS/libteam.spec @@ -0,0 +1,549 @@ +Name: libteam +Version: 1.27 +Release: 10%{?dist} +Summary: Library for controlling team network device +Group: System Environment/Libraries +License: LGPLv2+ +URL: http://www.libteam.org +Source: http://www.libteam.org/files/libteam-%{version}.tar.gz +Patch1: libteam-teamd-do-not-process-lacpdu-before-the-port-ifinfo-i.patch +Patch2: libteam-teamd-add-port_hwaddr_changed-for-ab-runner.patch +Patch3: libteam-teamd-add-port_hwaddr_changed-for-lb-runner.patch +Patch4: libteam-teamd-add-port_hwaddr_changed-for-lacp-runner.patch +Patch5: libteam-man-fix-runner.sys_prio-default.patch +Patch6: libteam-configure.ac-Empty-LDFLAGS-before-checking-for-libnl.patch +Patch7: libteam-libteam-don-t-crash-when-trying-to-print-unregistere.patch +Patch8: libteam-binding-python-use-SWIG_FromCharPtrAndSize-for-Pytho.patch +Patch9: libteam-utils-check-to_stdout-return-correctly-in-bond2team.patch +Patch10: libteam-teamd-add-port_master_ifindex_changed-for-teamd_even.patch +BuildRequires: jansson-devel +BuildRequires: libdaemon-devel +BuildRequires: libnl3-devel +BuildRequires: python3-devel +BuildRequires: dbus-devel +BuildRequires: swig +BuildRequires: doxygen +BuildRequires: autoconf automake libtool +BuildRequires: systemd-units + +%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 +Group: Development/Libraries +Summary: Libraries and header files for libteam development +Requires: libteam = %{version}-%{release} + +%package doc +Group: Documentation +Summary: API documentation for libteam and libteamd +Requires: libteam = %{version}-%{release} + +%description doc +This package contains libteam and libteamd API documentation + +%package -n teamd +Group: System Environment/Daemons +Summary: Team network device control daemon +Requires: libteam = %{version}-%{release} + +%package -n teamd-devel +Group: Development/Libraries +Summary: Libraries and header files for teamd development +Requires: teamd = %{version}-%{release} + +%package -n python3-libteam +%{?python_provide:%python_provide python3-libteam} +Group: Development/Libraries +Summary: Team network device library bindings +Requires: libteam = %{version}-%{release} + +%package -n network-scripts-team +Group: Development/Libraries +Summary: libteam legacy network service support +Requires: network-scripts +Supplements: (teamd 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 python3-libteam +The team-python package contains a module that permits applications +written in the Python programming language to use the interface +supplied by team network device library. + +This package should be installed if you want to develop Python +programs that will manipulate team network devices. + +%description -n network-scripts-team +This provides the ifup and ifdown scripts for libteam use with the legacy +network service. + +%prep +%autosetup -p1 +autoreconf --force --install -I m4 + +# prepare example dir for -devel +mkdir -p _tmpdoc1/examples +cp -p examples/*.c _tmpdoc1/examples +# prepare example dir for team-python +mkdir -p _tmpdoc2/examples +cp -p examples/python/*.py _tmpdoc2/examples +chmod -x _tmpdoc2/examples/*.py + +%build +%configure --disable-static +make %{?_smp_mflags} +make html +cd binding/python +%py3_build + +%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 +cd binding/python +%py3_install + +%post -p /sbin/ldconfig + +%postun -p /sbin/ldconfig + +%files +%doc COPYING +%{_libdir}/libteam.so.* +%{_bindir}/teamnl +%{_mandir}/man8/teamnl.8* + +%files devel +%doc COPYING _tmpdoc1/examples +%{_includedir}/team.h +%{_libdir}/libteam.so +%{_libdir}/pkgconfig/libteam.pc + +%files doc +%doc COPYING doc/api + +%files -n teamd +%doc COPYING 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 +%{_mandir}/man8/teamd.8* +%{_mandir}/man8/teamdctl.8* +%{_mandir}/man5/teamd.conf.5* +%{_mandir}/man1/bond2team.1* + +%files -n teamd-devel +%doc COPYING +%{_includedir}/teamdctl.h +%{_libdir}/libteamdctl.so +%{_libdir}/pkgconfig/libteamdctl.pc + +%files -n python3-libteam +%doc COPYING _tmpdoc2/examples +%{python3_sitearch}/* + +%files -n network-scripts-team +%{_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 +* Thu Jan 10 2019 Xin Long - 1.27-10 +- add new package network-scripts-team [1659846] + +* Mon Aug 20 2018 Xin Long - 1.27-9 +- Added patch to fix the issue that no active port is set [1618710] + +* Fri Aug 03 2018 Xin Long - 1.27-8 +- Add fix to only process LACPDU after port ifinfo is set +- Add port_hwaddr_changed for ab, lb and lacp runners +- Add patch to fix runner.sys_prio default in man docs +- Add patch to empty LDFLAGS before checking for libnl3 in configure.ac +- Add patch to not crash when trying to print unregistered device name +- Add patch to use SWIG_FromCharPtrAndSize for Python3 support +- Add patch to check to_stdout return correctly in bond2team in bond2team +- Add 'BuildRequires: systemd-units' in libteam.spec to fix building errors +- Add 'autoreconf --force --install -I m4' in libteam.sepc to regenerate configure +- Remove ifup/ifdown scripts installation in libteam.sepc + +* Tue Jun 26 2018 Charalampos Stratakis - 1.27-7 +- Change the python bindings to Python 3 + +* Wed Feb 07 2018 Fedora Release Engineering - 1.27-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Tue Jan 09 2018 Iryna Shcherbina - 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 - 1.27-4 +- Python 2 binary package renamed to python2-libteam + See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3 + +* Thu Aug 03 2017 Fedora Release Engineering - 1.27-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 1.27-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Mon Jun 05 2017 Jiri Pirko - 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 - 1.26-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Fri Aug 26 2016 Jiri Pirko - 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 - 1.25-2 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Fri May 20 2016 Jiri Pirko - 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 - 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 - 1.23-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Dec 17 2015 Jiri Pirko - 1.23-1 +- 1.23 release +- dbus: don't do in template dbus s. f. +- libteam: retry on NLE_DUMP_INTR error + +* Tue Nov 03 2015 Jiri Pirko - 1.22-1 +- 1.22 release +- dbus: don't do 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 - 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 - 1.20-1 +- 1.20 release +- libteam: fix compile error with newer libnl + +* Mon Oct 05 2015 Jiri Pirko - 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 - 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 - 1.17-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Thu Apr 02 2015 Jiri Pirko - 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 - 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 - 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 - 1.15-1 +- 1.15 release +- teamd: ignore SIGPIPE +- libteamdctl: Fix a typo in DBus method name + +* Wed Nov 05 2014 Jiri Pirko - 1.14-1 +- 1.14 release +- teamd: lw_arp_ping: make buf static and avoid returning local pointer + +* Wed Nov 05 2014 Jiri Pirko - 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 - 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 - 1.11-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Thu Jun 26 2014 Jiri Pirko - 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 - 1.10-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Mon Mar 31 2014 Jiri Pirko - 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 - 1.9-2 +- fix multilib + +* Tue Nov 12 2013 Jiri Pirko - 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 - 1.8-1 +- Update to 1.8 + +* Mon Aug 12 2013 Jiri Pirko - 1.7-1 +- Update to 1.7 + +* Thu Aug 08 2013 Jiri Pirko - 1.6-1 +- Update to 1.6 + +* Tue Jul 30 2013 Jiri Pirko - 1.5-1 +- Update to 1.5 + +* Tue Jun 11 2013 Jiri Pirko - 1.3-1 +- Update to 1.3 + +* Wed May 29 2013 Jiri Pirko - 1.2-1 +- Update to 1.2 + +* Thu May 16 2013 Jiri Pirko - 1.1-1 +- Update to 1.1 + +* Thu Jan 31 2013 Jiri Pirko - 1.0-1 +- Update to 1.0 + +* Sun Jan 20 2013 Jiri Pirko - 0.1-27.20130110gitf16805c +- Rebuilt for libnl3 + +* Sun Jan 20 2013 Kalev Lember - 0.1-26.20130110gitf16805c +- Rebuilt for libnl3 + +* Thu Jan 10 2013 Jiri Pirko - 0.1-25.20130110gitf16805c +- Rebase to git commit f16805c + +* Wed Dec 12 2012 Jiri Pirko - 0.1-24.20121212git01fe4bd +- Rebase to git commit 01fe4bd + +* Thu Dec 06 2012 Jiri Pirko - 0.1-23.20121206git659a848 +- Rebase to git commit 659a848 + +* Thu Nov 22 2012 Jiri Pirko - 0.1-22.20121122git18b6701 +- Rebase to git commit 18b6701 + +* Thu Nov 15 2012 Jiri Pirko - 0.1-21.20121115gitffb5267 +- Rebase to git commit ffb5267 + +* Mon Nov 05 2012 Jiri Pirko - 0.1-20.20121105git3b95b34 +- Rebase to git commit 3b95b34 + +* Thu Oct 25 2012 Jiri Pirko - 0.1-19.20121025git7fe7c72 +- Rebase to git commit 7fe7c72 + +* Fri Oct 19 2012 Jiri Pirko - 0.1-18.20121019git1a91059 +- Rebase to git commit 1a91059 + +* Sun Oct 07 2012 Jiri Pirko - 0.1-17.20121007git6f48751 +- Rebase to git commit 6f48751 + +* Tue Sep 25 2012 Jiri Pirko - 0.1-16.20120925gitcc5cddc +- Rebase to git commit cc5cddc + +* Sun Sep 23 2012 Jiri Pirko - 0.1-15.20120923git8448186 +- Rebase to git commit 8448186 + +* Tue Sep 04 2012 Jiri Pirko - 0.1-14.20120904gitbdcf72c +- Rebase to git commit bdcf72c + +* Wed Aug 22 2012 Jiri Pirko - 0.1-13.20120822gitc0d943d +- Rebase to git commit c0d943d + +* Tue Aug 07 2012 Jiri Pirko - 0.1-12.20120807git9fa4a96 +- Rebase to git commit 9fa4a96 + +* Thu Jul 19 2012 Fedora Release Engineering - 0.1-11.20120628gitca7b526 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Thu Jun 28 2012 Jiri Pirko - 0.1-10.20120628gitca7b526 +- Rebase to git commit ca7b526 + +* Wed Jun 27 2012 Jiri Pirko - 0.1-9.20120627git96569f8 +- Rebase to git commit 96569f8 + +* Wed Jun 27 2012 Jiri Pirko - 0.1-8.20120627gitcd6b557 +- Rebase to git commit cd6b557 + +* Wed Jun 20 2012 Jiri Pirko - 0.1-7.20120620gita88fabf +- Rebase to git commit a88fabf + +* Fri May 04 2012 Jiri Pirko - 0.1-6.20120504git11e234a +- Rebase to git commit 11e234a + +* Thu Apr 05 2012 Jiri Pirko - 0.1-5.20120405gita82f8ac +- Rebase to git commit a82f8ac + +* Tue Feb 21 2012 Jiri Pirko - 0.1-4.20120221gitfe97f63 +- Rebase to git commit fe97f63 + +* Mon Jan 30 2012 Jiri Pirko - 0.1-3.20120130gitb5cf2a8 +- Rebase to git commit b5cf2a8 + +* Wed Jan 25 2012 Jiri Pirko - 0.1-2.20120125gita1718f8 +- Rebase to git commit a1718f8 + +* Wed Jan 18 2012 Jiri Pirko - 0.1-1.20120113git302672e +- Initial build.