import libteam-1.27-10.el8

This commit is contained in:
CentOS Sources 2019-05-07 07:08:53 -04:00 committed by Andrew Lukoshko
commit 893f328e39
13 changed files with 1348 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
SOURCES/libteam-1.27.tar.gz

1
.libteam.metadata Normal file
View File

@ -0,0 +1 @@
2293a6081223ffa85ef3376bb4e6e1e48ed35129 SOURCES/libteam-1.27.tar.gz

View File

@ -0,0 +1,34 @@
From d9769b270608654aa7f07ce48a36f084843daf01 Mon Sep 17 00:00:00 2001
Message-Id: <d9769b270608654aa7f07ce48a36f084843daf01.1533278517.git.lucien.xin@gmail.com>
From: Xin Long <lucien.xin@gmail.com>
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 <lucien.xin@gmail.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
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

View File

@ -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 <tredaelli@redhat.com>
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 <tredaelli@redhat.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
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

View File

@ -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 <atiainen@forcepoint.com>
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 <atiainen@forcepoint.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
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

View File

@ -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 <fgiudici@redhat.com>
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 <fgiudici@redhat.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
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

View File

@ -0,0 +1,159 @@
From efaa6ae709bb4b59efacb0bb7301be2242b058bc Mon Sep 17 00:00:00 2001
Message-Id: <efaa6ae709bb4b59efacb0bb7301be2242b058bc.1518205291.git.mleitner@redhat.com>
From: Xin Long <lucien.xin@gmail.com>
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 <jnikolak@redhat.com>
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Marcelo Ricardo Leitner <mleitner@redhat.com>
---
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

View File

@ -0,0 +1,66 @@
From c42cc9955a93bc4bed65adf9a506f92b8df290d7 Mon Sep 17 00:00:00 2001
Message-Id: <c42cc9955a93bc4bed65adf9a506f92b8df290d7.1518205291.git.mleitner@redhat.com>
In-Reply-To: <efaa6ae709bb4b59efacb0bb7301be2242b058bc.1518205291.git.mleitner@redhat.com>
References: <efaa6ae709bb4b59efacb0bb7301be2242b058bc.1518205291.git.mleitner@redhat.com>
From: Xin Long <lucien.xin@gmail.com>
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 <lucien.xin@gmail.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Marcelo Ricardo Leitner <mleitner@redhat.com>
---
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

View File

@ -0,0 +1,58 @@
From 0164b6a460728b3a1fd3feee9e2901f1b810cf24 Mon Sep 17 00:00:00 2001
Message-Id: <0164b6a460728b3a1fd3feee9e2901f1b810cf24.1518205291.git.mleitner@redhat.com>
In-Reply-To: <efaa6ae709bb4b59efacb0bb7301be2242b058bc.1518205291.git.mleitner@redhat.com>
References: <efaa6ae709bb4b59efacb0bb7301be2242b058bc.1518205291.git.mleitner@redhat.com>
From: Xin Long <lucien.xin@gmail.com>
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 <lucien.xin@gmail.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Marcelo Ricardo Leitner <mleitner@redhat.com>
---
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

View File

@ -0,0 +1,191 @@
From b6f63db7f3c8eb3119c9449abe9ac6535965e14d Mon Sep 17 00:00:00 2001
Message-Id: <b6f63db7f3c8eb3119c9449abe9ac6535965e14d.1534505146.git.lucien.xin@gmail.com>
From: Hangbin Liu <liuhangbin@gmail.com>
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 <liuhangbin@gmail.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
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

View File

@ -0,0 +1,48 @@
From 45912ded9cb5166d8286a6a4fb53bfe9fffcd8a9 Mon Sep 17 00:00:00 2001
Message-Id: <45912ded9cb5166d8286a6a4fb53bfe9fffcd8a9.1518009078.git.mleitner@redhat.com>
From: Xin Long <lucien.xin@gmail.com>
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 <ptalbert@redhat.com>
Tested-by: Patrick Talbert <ptalbert@redhat.com>
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Reviewed-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Marcelo Ricardo Leitner <mleitner@redhat.com>
---
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

View File

@ -0,0 +1,38 @@
From eb3b18e87be7aab31bdfa51a882210b24596dc9d Mon Sep 17 00:00:00 2001
Message-Id: <eb3b18e87be7aab31bdfa51a882210b24596dc9d.1533278517.git.lucien.xin@gmail.com>
In-Reply-To: <d9769b270608654aa7f07ce48a36f084843daf01.1533278517.git.lucien.xin@gmail.com>
References: <d9769b270608654aa7f07ce48a36f084843daf01.1533278517.git.lucien.xin@gmail.com>
From: Xin Long <lucien.xin@gmail.com>
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 <lucien.xin@gmail.com>
Acked-by: Flavio Leitner <fbl@sysclose.org>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
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

549
SPECS/libteam.spec Normal file
View File

@ -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 <lxin@redhat.com> - 1.27-10
- add new package network-scripts-team [1659846]
* Mon Aug 20 2018 Xin Long <lxin@redhat.com> - 1.27-9
- Added patch to fix the issue that no active port is set [1618710]
* Fri Aug 03 2018 Xin Long <lxin@redhat.com> - 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 <cstratak@redhat.com> - 1.27-7
- Change the python bindings to Python 3
* 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.