diff --git a/rules/libteam.mk b/rules/libteam.mk index 75e8f5db6..02cdcbe03 100644 --- a/rules/libteam.mk +++ b/rules/libteam.mk @@ -1,6 +1,6 @@ # libteam packages -LIBTEAM_VERSION = 1.28-1 +LIBTEAM_VERSION = 1.30-1 export LIBTEAM_VERSION diff --git a/src/libteam/Makefile b/src/libteam/Makefile index b1ef12375..9fd5f582e 100644 --- a/src/libteam/Makefile +++ b/src/libteam/Makefile @@ -15,7 +15,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : rm -rf ./libteam git clone https://github.com/jpirko/libteam.git pushd ./libteam - git checkout -b teamd -f 8c7614abf5993d92e332a800f244bdebd7c9a2c8 + git checkout -b teamd -f c7237377dead39ae4a711297203bacf7edb9fa41 # Apply patch series stg init @@ -25,7 +25,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Obtain debian packaging git clone https://salsa.debian.org/debian/libteam.git tmp pushd ./tmp - git checkout -f 7188c361 # v1.28-1 + git checkout -f debian/1.30-1 popd mv tmp/debian libteam/ diff --git a/src/libteam/patch/0001-libteam-Temporarily-remove-redundant-debug-messages.patch b/src/libteam/patch/0001-libteam-Temporarily-remove-redundant-debug-messages.patch index d922c91c4..bd5f2857c 100644 --- a/src/libteam/patch/0001-libteam-Temporarily-remove-redundant-debug-messages.patch +++ b/src/libteam/patch/0001-libteam-Temporarily-remove-redundant-debug-messages.patch @@ -1,25 +1,25 @@ -From 10602c2b1184aa0c6907b5a7f06fcba8a7141148 Mon Sep 17 00:00:00 2001 -From: Shuotian Cheng -Date: Mon, 27 Feb 2017 14:21:09 -0800 -Subject: [PATCH 1/8] libteam: Temporarily remove redundant debug messages +From fa8c4604e739abde29278b403a1a1d502337c21b Mon Sep 17 00:00:00 2001 +From: Pavel Shirshov +Date: Tue, 3 Mar 2020 12:47:32 -0800 +Subject: [PATCH] libteam: Temporarily remove redundant debug messages --- teamd/teamd_runner_lacp.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/teamd/teamd_runner_lacp.c b/teamd/teamd_runner_lacp.c -index d292d69..7c91aed 100644 +index ec01237..2d5a823 100644 --- a/teamd/teamd_runner_lacp.c +++ b/teamd/teamd_runner_lacp.c @@ -929,8 +929,6 @@ static void lacp_port_actor_update(struct lacp_port *lacp_port) state |= INFO_STATE_DEFAULTED; if (teamd_port_count(lacp_port->ctx) > 0) state |= INFO_STATE_AGGREGATION; -- teamd_log_dbg("%s: lacp info state: 0x%02X.", lacp_port->tdport->ifname, -- state); +- teamd_log_dbg(lacp_port->ctx, "%s: lacp info state: 0x%02X.", +- lacp_port->tdport->ifname, state); lacp_port->actor.state = state; } -- -2.7.4 +2.17.1.windows.2 diff --git a/src/libteam/patch/0002-teamd-lacp-runner-will-send-lacp-update-right-after-.patch b/src/libteam/patch/0002-teamd-lacp-runner-will-send-lacp-update-right-after-.patch index c4e782571..00b4badce 100644 --- a/src/libteam/patch/0002-teamd-lacp-runner-will-send-lacp-update-right-after-.patch +++ b/src/libteam/patch/0002-teamd-lacp-runner-will-send-lacp-update-right-after-.patch @@ -1,11 +1,9 @@ -From 0ce56490a44191c4b17a75cc21aa6a5bdc535f1d Mon Sep 17 00:00:00 2001 -From: yorke -Date: Mon, 3 Jun 2019 11:58:19 +0800 -Subject: [PATCH 2/8] [teamd] lacp runner will send lacp update right after it - received SIGINT signal From: Pavel Shirshov - Date: Wed, 20 Sep 2017 00:34:07 +0000 +From 9e697b0c9fbd01f024acfea8aa25334816425c2b Mon Sep 17 00:00:00 2001 +From: Pavel Shirshov +Date: Tue, 3 Mar 2020 12:50:23 -0800 +Subject: [PATCH] [teamd] lacp runner will send lacp update right after it + received SIGINT signal -Signed-off-by: yorke --- teamd/teamd.c | 1 + teamd/teamd.h | 3 +++ @@ -14,7 +12,7 @@ Signed-off-by: yorke 4 files changed, 28 insertions(+) diff --git a/teamd/teamd.c b/teamd/teamd.c -index 6c47312..58d4fc8 100644 +index e035ac5..dc46a62 100644 --- a/teamd/teamd.c +++ b/teamd/teamd.c @@ -392,6 +392,7 @@ static int teamd_run_loop_run(struct teamd_context *ctx) @@ -26,7 +24,7 @@ index 6c47312..58d4fc8 100644 if (err) return err; diff --git a/teamd/teamd.h b/teamd/teamd.h -index 01bd022..e71a5dc 100644 +index f94c918..01ebc84 100644 --- a/teamd/teamd.h +++ b/teamd/teamd.h @@ -193,11 +193,14 @@ struct teamd_event_watch_ops { @@ -69,7 +67,7 @@ index 65aa46a..221803e 100644 struct teamd_port *tdport) { diff --git a/teamd/teamd_runner_lacp.c b/teamd/teamd_runner_lacp.c -index 7c91aed..4dbd015 100644 +index 2d5a823..7592b01 100644 --- a/teamd/teamd_runner_lacp.c +++ b/teamd/teamd_runner_lacp.c @@ -1421,6 +1421,16 @@ static int lacp_event_watch_port_changed(struct teamd_context *ctx, @@ -98,5 +96,5 @@ index 7c91aed..4dbd015 100644 static int lacp_carrier_init(struct teamd_context *ctx, struct lacp *lacp) -- -2.7.4 +2.17.1.windows.2 diff --git a/src/libteam/patch/0003-libteam-Add-fallback-support-for-single-member-port-.patch b/src/libteam/patch/0003-libteam-Add-fallback-support-for-single-member-port-.patch index e1234c294..742db5fc6 100644 --- a/src/libteam/patch/0003-libteam-Add-fallback-support-for-single-member-port-.patch +++ b/src/libteam/patch/0003-libteam-Add-fallback-support-for-single-member-port-.patch @@ -1,16 +1,14 @@ -commit f475746f56602a40861b8d94eac5f0979c4703f3 -Author: yorke -Date: Mon Jun 3 12:02:36 2019 +0800 +From 4696acb51172dbe486d175073bdce8c94817f422 Mon Sep 17 00:00:00 2001 +From: Pavel Shirshov +Date: Tue, 3 Mar 2020 12:52:28 -0800 +Subject: [PATCH] [libteam] Add fallback support for single-member-port LAG - From 9b40af58575a89d06be51cfbb5a2265a59826110 Mon Sep 17 00:00:00 2001 - Subject: [PATCH 3/8] [libteam] Add fallback support for single-member-port LAG - From: Haiyang Zheng Date: Fri, 15 Dec - 2017 21:07:53 -0800 - - Signed-off-by: yorke +--- + teamd/teamd_runner_lacp.c | 48 +++++++++++++++++++++++++++++++++++---- + 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/teamd/teamd_runner_lacp.c b/teamd/teamd_runner_lacp.c -index 4dbd015..f8a9e16 100644 +index 7592b01..2062bf2 100644 --- a/teamd/teamd_runner_lacp.c +++ b/teamd/teamd_runner_lacp.c @@ -138,6 +138,8 @@ struct lacp { @@ -24,12 +22,12 @@ index 4dbd015..f8a9e16 100644 enum lacp_agg_select_policy agg_select_policy; @@ -272,6 +274,11 @@ static int lacp_load_config(struct teamd_context *ctx, struct lacp *lacp) lacp->cfg.fast_rate = LACP_CFG_DFLT_FAST_RATE; - teamd_log_dbg("Using fast_rate \"%d\".", lacp->cfg.fast_rate); + teamd_log_dbg(ctx, "Using fast_rate \"%d\".", lacp->cfg.fast_rate); + err = teamd_config_bool_get(ctx, &lacp->cfg.fallback, "$.runner.fallback"); + if (err) + lacp->cfg.fallback = LACP_CFG_DFLT_FALLBACK; -+ teamd_log_dbg("Using fallback \"%d\".", lacp->cfg.fallback); ++ teamd_log_dbg(ctx, "Using fallback \"%d\".", lacp->cfg.fallback); + err = teamd_config_int_get(ctx, &tmp, "$.runner.min_ports"); if (err) { @@ -45,7 +43,7 @@ index 4dbd015..f8a9e16 100644 + */ +static bool is_lacp_fallback_eligible(struct lacp_port *lacp_port) +{ -+ teamd_log_dbg("%s fallback eligible state \"%d \" cfg \"%d\".", ++ teamd_log_dbg(lacp_port->ctx, "%s fallback eligible state \"%d \" cfg \"%d\".", + lacp_port->tdport->ifname, lacp_port->state, + lacp_port->lacp->cfg.fallback); + return lacp_port->state == PORT_STATE_DEFAULTED && @@ -107,15 +105,18 @@ index 4dbd015..f8a9e16 100644 static int lacp_state_select_policy_get(struct teamd_context *ctx, struct team_state_gsc *gsc, void *priv) -@@ -1529,6 +1564,11 @@ static const struct teamd_state_val lacp_state_vals[] = { +@@ -1528,6 +1563,11 @@ static const struct teamd_state_val lacp_state_vals[] = { + .type = TEAMD_STATE_ITEM_TYPE_BOOL, .getter = lacp_state_fast_rate_get, }, - { ++ { + .subpath = "fallback", + .type = TEAMD_STATE_ITEM_TYPE_BOOL, + .getter = lacp_state_fallback_get, + }, -+ { + { .subpath = "select_policy", .type = TEAMD_STATE_ITEM_TYPE_STRING, - .getter = lacp_state_select_policy_get, +-- +2.17.1.windows.2 + diff --git a/src/libteam/patch/0004-Skip-setting-the-same-hwaddr-to-lag-port-to-avoid-di.patch b/src/libteam/patch/0004-Skip-setting-the-same-hwaddr-to-lag-port-to-avoid-di.patch index 3d99132b9..8f3a85928 100644 --- a/src/libteam/patch/0004-Skip-setting-the-same-hwaddr-to-lag-port-to-avoid-di.patch +++ b/src/libteam/patch/0004-Skip-setting-the-same-hwaddr-to-lag-port-to-avoid-di.patch @@ -1,17 +1,14 @@ -From e18cbe5a6c76366923a8ace830c89056a1542745 Mon Sep 17 00:00:00 2001 -From: yorke -Date: Mon, 3 Jun 2019 12:06:00 +0800 -Subject: [PATCH 4/8] Skip setting the same hwaddr to lag port to avoid - disrupting From: Jipan Yang Date: Sun, - 24 Feb 2019 00:04:15 -0800 +From 09af7e3106720c871cdbadff9f661685aa1bdb16 Mon Sep 17 00:00:00 2001 +From: Pavel Shirshov +Date: Tue, 3 Mar 2020 12:54:09 -0800 +Subject: [PATCH] Skip setting the same hwaddr to lag port to avoid disrupting -Signed-off-by: yorke --- teamd/teamd.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/teamd/teamd.c b/teamd/teamd.c -index 58d4fc8..9dc85b5 100644 +index dc46a62..bf42347 100644 --- a/teamd/teamd.c +++ b/teamd/teamd.c @@ -834,7 +834,15 @@ static int teamd_set_hwaddr(struct teamd_context *ctx) @@ -22,7 +19,7 @@ index 58d4fc8..9dc85b5 100644 + + if(!memcmp(hwaddr, ctx->hwaddr, hwaddr_len)) { + err = 0; -+ teamd_log_dbg("Skip setting same hwaddr string: \"%s\".", hwaddr_str); ++ teamd_log_dbg(ctx, "Skip setting same hwaddr string: \"%s\".", hwaddr_str); + } + else{ + err = team_hwaddr_set(ctx->th, ctx->ifindex, hwaddr, hwaddr_len); @@ -32,5 +29,5 @@ index 58d4fc8..9dc85b5 100644 ctx->hwaddr_explicit = true; free_hwaddr: -- -2.7.4 +2.17.1.windows.2 diff --git a/src/libteam/patch/0005-Increase-default-buffer-size-from-98304-to-983040.patch b/src/libteam/patch/0005-Increase-default-buffer-size-from-98304-to-983040.patch index 517b86992..ac86c549b 100644 --- a/src/libteam/patch/0005-Increase-default-buffer-size-from-98304-to-983040.patch +++ b/src/libteam/patch/0005-Increase-default-buffer-size-from-98304-to-983040.patch @@ -1,11 +1,8 @@ -From 39e5b0a15bf276dffa6b8c61594ee945248a4e27 Mon Sep 17 00:00:00 2001 -From: yorke -Date: Mon, 3 Jun 2019 12:32:33 +0800 -Subject: [PATCH 5/8] Increase default buffer size from 98304 to 983040 - From: Pavel Shirshov - https://github.com/Azure/sonic-buildimage/pull/2822 +From fcb9932bdb9212e9b18302de4ffb4d64003e93ab Mon Sep 17 00:00:00 2001 +From: Pavel Shirshov +Date: Tue, 3 Mar 2020 12:55:50 -0800 +Subject: [PATCH] Increase default buffer size from 98304 to 983040 -Signed-off-by: yorke --- libteam/libteam.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) @@ -27,5 +24,5 @@ index 9c9c93a..2cc80ca 100644 /** * @param th libteam library context -- -2.7.4 +2.17.1.windows.2 diff --git a/src/libteam/patch/0006-teamd-Administratively-shutdown-port-channel-has-mem.patch b/src/libteam/patch/0006-teamd-Administratively-shutdown-port-channel-has-mem.patch index 344dbc8d2..7cc4e52c8 100644 --- a/src/libteam/patch/0006-teamd-Administratively-shutdown-port-channel-has-mem.patch +++ b/src/libteam/patch/0006-teamd-Administratively-shutdown-port-channel-has-mem.patch @@ -1,20 +1,18 @@ -From f1eec95dd0475591897a781eba15d8d8ce370a6a Mon Sep 17 00:00:00 2001 -From: yorke -Date: Mon, 3 Jun 2019 13:21:07 +0800 -Subject: [PATCH 6/8] [teamd]: Administratively shutdown port channel has - member ports in deselected state and traffic is not forwarded From: - phanindra-tv https://github.com/Azure/sonic-buildimage/pull/2882 +From b188ed48f9ea6873a2c9263d5e036a3634c0f4ba Mon Sep 17 00:00:00 2001 +From: Pavel Shirshov +Date: Tue, 3 Mar 2020 12:59:09 -0800 +Subject: [PATCH] [teamd]: Administratively shutdown port channel has member + ports in deselected state and traffic is not forwarded -Signed-off-by: yorke --- teamd/teamd_runner_lacp.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/teamd/teamd_runner_lacp.c b/teamd/teamd_runner_lacp.c -index 9836824..7bf3700 100644 +index 2062bf2..fa732ba 100644 --- a/teamd/teamd_runner_lacp.c +++ b/teamd/teamd_runner_lacp.c -@@ -1101,12 +1101,17 @@ static int lacpdu_recv(struct lacp_port *lacp_port) +@@ -1103,12 +1103,17 @@ static int lacpdu_recv(struct lacp_port *lacp_port) struct lacpdu lacpdu; struct sockaddr_ll ll_from; int err; @@ -33,5 +31,5 @@ index 9836824..7bf3700 100644 return 0; -- -2.7.4 +2.17.1.windows.2 diff --git a/src/libteam/patch/0007-Send-LACP-PDU-immediately-if-our-state-changed.patch b/src/libteam/patch/0007-Send-LACP-PDU-immediately-if-our-state-changed.patch index d26e2a74e..f4af9169a 100644 --- a/src/libteam/patch/0007-Send-LACP-PDU-immediately-if-our-state-changed.patch +++ b/src/libteam/patch/0007-Send-LACP-PDU-immediately-if-our-state-changed.patch @@ -1,20 +1,17 @@ -From b82da0dc94ca34b039396328a8c2fcb61aa73c0f Mon Sep 17 00:00:00 2001 -From: yorke -Date: Mon, 3 Jun 2019 13:27:26 +0800 -Subject: [PATCH 7/8] Send LACP PDU immediately if our state changed From: - Pavel Shirshov Date: Wed, 29 May 2019 19:15:20 - +0000 +From 780cc967a5544d3ab6f43cba4076b5e0dbb48395 Mon Sep 17 00:00:00 2001 +From: Pavel Shirshov +Date: Tue, 3 Mar 2020 13:01:14 -0800 +Subject: [PATCH] Send LACP PDU immediately if our state changed -Signed-off-by: yorke --- teamd/teamd_runner_lacp.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/teamd/teamd_runner_lacp.c b/teamd/teamd_runner_lacp.c -index 7bf3700..4016b15 100644 +index fa732ba..55abe88 100644 --- a/teamd/teamd_runner_lacp.c +++ b/teamd/teamd_runner_lacp.c -@@ -1017,8 +1017,7 @@ static int lacp_port_set_state(struct lacp_port *lacp_port, +@@ -1019,8 +1019,7 @@ static int lacp_port_set_state(struct lacp_port *lacp_port, return err; lacp_port_actor_update(lacp_port); @@ -24,7 +21,7 @@ index 7bf3700..4016b15 100644 return lacpdu_send(lacp_port); } -@@ -1136,9 +1135,10 @@ static int lacpdu_recv(struct lacp_port *lacp_port) +@@ -1138,9 +1137,10 @@ static int lacpdu_recv(struct lacp_port *lacp_port) if (err) return err; @@ -38,5 +35,5 @@ index 7bf3700..4016b15 100644 err = lacpdu_send(lacp_port); if (err) -- -2.7.4 +2.17.1.windows.2 diff --git a/src/libteam/patch/0008-libteam-Add-warm_reboot-mode.patch b/src/libteam/patch/0008-libteam-Add-warm_reboot-mode.patch index 3f428bbec..440d351a8 100644 --- a/src/libteam/patch/0008-libteam-Add-warm_reboot-mode.patch +++ b/src/libteam/patch/0008-libteam-Add-warm_reboot-mode.patch @@ -1,7 +1,7 @@ -From 113d482704198685fba09cd2597fd93ca9d297c5 Mon Sep 17 00:00:00 2001 +From a4ab4de68134f6425f704a2ddcda33a4930645de Mon Sep 17 00:00:00 2001 From: Pavel Shirshov -Date: Tue, 1 Oct 2019 09:23:23 -0700 -Subject: [PATCH 1/1] [libteam]: Reimplement Warm-Reboot procedure +Date: Tue, 3 Mar 2020 13:04:57 -0800 +Subject: [PATCH] [libteam]: Reimplement Warm-Reboot procedure' --- libteam/ifinfo.c | 6 +- @@ -35,7 +35,7 @@ index 46d56a2..b86d34c 100644 } } diff --git a/teamd/teamd.c b/teamd/teamd.c -index 9dc85b5..17221a9 100644 +index bf42347..221d71d 100644 --- a/teamd/teamd.c +++ b/teamd/teamd.c @@ -117,7 +117,9 @@ static void print_help(const struct teamd_context *ctx) { @@ -139,7 +139,7 @@ index 9dc85b5..17221a9 100644 } return 0; } -@@ -1531,7 +1574,7 @@ static int teamd_start(struct teamd_context *ctx, enum teamd_exit_code *p_ret) +@@ -1533,7 +1576,7 @@ static int teamd_start(struct teamd_context *ctx, enum teamd_exit_code *p_ret) return -errno; } @@ -149,7 +149,7 @@ index 9dc85b5..17221a9 100644 daemon_retval_send(errno); err = -errno; diff --git a/teamd/teamd.h b/teamd/teamd.h -index e71a5dc..418214d 100644 +index 01ebc84..701a6a4 100644 --- a/teamd/teamd.h +++ b/teamd/teamd.h @@ -126,6 +126,9 @@ struct teamd_context { @@ -203,7 +203,7 @@ index 221803e..bd4dcc1 100644 struct teamd_port *tdport) { diff --git a/teamd/teamd_per_port.c b/teamd/teamd_per_port.c -index f98a90d..a87e809 100644 +index 166da57..03f8d63 100644 --- a/teamd/teamd_per_port.c +++ b/teamd/teamd_per_port.c @@ -350,6 +350,12 @@ static int teamd_port_remove(struct teamd_context *ctx, @@ -211,16 +211,16 @@ index f98a90d..a87e809 100644 int err; + if (ctx->keep_ports) { -+ teamd_log_dbg("%s: Keeping port (found ifindex \"%d\").", ++ teamd_log_dbg(ctx, "%s: Keeping port (found ifindex \"%d\").", + tdport->ifname, tdport->ifindex); + return 0; + } + - teamd_log_dbg("%s: Removing port (found ifindex \"%d\").", + teamd_log_dbg(ctx, "%s: Removing port (found ifindex \"%d\").", tdport->ifname, tdport->ifindex); err = team_port_remove(ctx->th, tdport->ifindex); diff --git a/teamd/teamd_runner_lacp.c b/teamd/teamd_runner_lacp.c -index 4016b15..81be5b7 100644 +index 55abe88..f225fb2 100644 --- a/teamd/teamd_runner_lacp.c +++ b/teamd/teamd_runner_lacp.c @@ -31,6 +31,7 @@ @@ -345,7 +345,7 @@ index 4016b15..81be5b7 100644 + char filename[PATH_MAX]; + int err, nitems; + -+ teamd_log_dbg("WR-mode. function lacpdu_read(): %s", lacp_port->tdport->ifname); ++ teamd_log_dbg(lacp_port->ctx, "WR-mode. function lacpdu_read(): %s", lacp_port->tdport->ifname); + + generate_path(lacp_port->ctx, filename, lacp_port->tdport->ifname); + @@ -423,7 +423,7 @@ index 4016b15..81be5b7 100644 + FILE *fp; + int data1, data2, i, err; + -+ teamd_log_dbg("WR-mode. function lacp_state_load()"); ++ teamd_log_dbg(ctx, "WR-mode. function lacp_state_load()"); + + generate_path(ctx, filename, ctx->team_devname); + @@ -473,7 +473,7 @@ index 4016b15..81be5b7 100644 static struct lacp_port *lacp_port_get(struct lacp *lacp, struct teamd_port *tdport) { -@@ -486,20 +697,95 @@ static int lacp_set_carrier(struct lacp *lacp, bool carrier_up) +@@ -488,20 +699,95 @@ static int lacp_set_carrier(struct lacp *lacp, bool carrier_up) return 0; } @@ -489,7 +489,7 @@ index 4016b15..81be5b7 100644 int err; + if (lacp->ctx->warm_start_mode) { -+ teamd_log_dbg("WR-mode. function lacp_update_carrier()"); ++ teamd_log_dbg(lacp->ctx, "WR-mode. function lacp_update_carrier()"); + } + ports_enabled = 0; @@ -561,7 +561,7 @@ index 4016b15..81be5b7 100644 + } + + if (ports_enabled >= lacp->cfg.min_ports) { -+ teamd_log_dbg("Enable carrier. Number of enabled ports %d >= configured min_ports %d", ++ teamd_log_dbg(lacp->ctx, "Enable carrier. Number of enabled ports %d >= configured min_ports %d", + ports_enabled, lacp->cfg.min_ports); + return lacp_set_carrier(lacp, true); + } @@ -572,7 +572,7 @@ index 4016b15..81be5b7 100644 } return lacp_set_carrier(lacp, false); -@@ -919,6 +1205,18 @@ static void lacp_port_actor_system_update(struct lacp_port *lacp_port) +@@ -921,6 +1207,18 @@ static void lacp_port_actor_system_update(struct lacp_port *lacp_port) memcpy(actor->system, lacp_port->ctx->hwaddr, ETH_ALEN); } @@ -591,7 +591,7 @@ index 4016b15..81be5b7 100644 static void lacp_port_actor_init(struct lacp_port *lacp_port) { struct lacpdu_info *actor = &lacp_port->actor; -@@ -926,7 +1224,7 @@ static void lacp_port_actor_init(struct lacp_port *lacp_port) +@@ -928,7 +1226,7 @@ static void lacp_port_actor_init(struct lacp_port *lacp_port) actor->system_priority = htons(lacp_port->lacp->cfg.sys_prio); actor->key = htons(lacp_port->cfg.lacp_key); actor->port_priority = htons(lacp_port->cfg.lacp_prio); @@ -600,7 +600,7 @@ index 4016b15..81be5b7 100644 lacp_port_actor_system_update(lacp_port); } -@@ -1006,6 +1304,13 @@ static int lacp_port_set_state(struct lacp_port *lacp_port, +@@ -1008,6 +1306,13 @@ static int lacp_port_set_state(struct lacp_port *lacp_port, break; } @@ -614,7 +614,7 @@ index 4016b15..81be5b7 100644 teamd_log_info("%s: Changed port state: \"%s\" -> \"%s\"", lacp_port->tdport->ifname, lacp_port_state_name[lacp_port->state], -@@ -1095,34 +1400,23 @@ static int lacpdu_send(struct lacp_port *lacp_port) +@@ -1097,34 +1402,23 @@ static int lacpdu_send(struct lacp_port *lacp_port) return err; } @@ -657,7 +657,7 @@ index 4016b15..81be5b7 100644 err = lacp_port_partner_update(lacp_port); if (err) return err; -@@ -1138,21 +1432,56 @@ static int lacpdu_recv(struct lacp_port *lacp_port) +@@ -1140,21 +1434,56 @@ static int lacpdu_recv(struct lacp_port *lacp_port) lacp_port_actor_update(lacp_port); /* Check if the other side has correct info about us */ @@ -717,16 +717,16 @@ index 4016b15..81be5b7 100644 static int lacp_callback_timeout(struct teamd_context *ctx, int events, void *priv) { -@@ -1258,6 +1587,8 @@ static int lacp_port_added(struct teamd_context *ctx, +@@ -1260,6 +1589,8 @@ static int lacp_port_added(struct teamd_context *ctx, struct lacp *lacp = creator_priv; int err; -+ teamd_log_dbg("function lacp_port_added(): %s", tdport->ifname); ++ teamd_log_dbg(ctx, "function lacp_port_added(): %s", tdport->ifname); + lacp_port->ctx = ctx; lacp_port->tdport = tdport; lacp_port->lacp = lacp; -@@ -1304,6 +1635,13 @@ static int lacp_port_added(struct teamd_context *ctx, +@@ -1306,6 +1637,13 @@ static int lacp_port_added(struct teamd_context *ctx, goto periodic_callback_del; } @@ -740,12 +740,12 @@ index 4016b15..81be5b7 100644 /* Newly added ports are disabled */ err = team_set_port_enabled(ctx->th, tdport->ifindex, false); if (err) { -@@ -1341,7 +1679,13 @@ static void lacp_port_removed(struct teamd_context *ctx, +@@ -1343,7 +1681,13 @@ static void lacp_port_removed(struct teamd_context *ctx, { struct lacp_port *lacp_port = priv; - lacp_port_set_state(lacp_port, PORT_STATE_DISABLED); -+ teamd_log_dbg("function lacp_port_removed(): %s", tdport->ifname); ++ teamd_log_dbg(lacp_port->ctx, "function lacp_port_removed(): %s", tdport->ifname); + + if (!lacp_port->ctx->keep_ports) { + /* Don't transition into DISABLED state, @@ -755,7 +755,7 @@ index 4016b15..81be5b7 100644 teamd_loop_callback_del(ctx, LACP_TIMEOUT_CB_NAME, lacp_port); teamd_loop_callback_del(ctx, LACP_PERIODIC_CB_NAME, lacp_port); teamd_loop_callback_del(ctx, LACP_SOCKET_CB_NAME, lacp_port); -@@ -1449,16 +1793,51 @@ static int lacp_event_watch_port_changed(struct teamd_context *ctx, +@@ -1451,16 +1795,51 @@ static int lacp_event_watch_port_changed(struct teamd_context *ctx, return lacp_port_link_update(lacp_port); } @@ -810,7 +810,7 @@ index 4016b15..81be5b7 100644 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, -@@ -1467,21 +1846,35 @@ static const struct teamd_event_watch_ops lacp_event_watch_ops = { +@@ -1469,21 +1848,35 @@ static const struct teamd_event_watch_ops lacp_event_watch_ops = { .port_changed = lacp_event_watch_port_changed, .admin_state_changed = lacp_event_watch_admin_state_changed, .refresh = lacp_event_watch_refresh, @@ -826,7 +826,7 @@ index 4016b15..81be5b7 100644 + lacp->carrier_up = false; + + if (ctx->warm_start_mode) { -+ teamd_log_dbg("WR-mode. function lacp_carrier_init()"); ++ teamd_log_dbg(ctx, "WR-mode. function lacp_carrier_init()"); + + /* Disable WR start mode if LAG interface was down */ + if (lacp->wr.carrier_up) { @@ -851,7 +851,7 @@ index 4016b15..81be5b7 100644 return 0; } -@@ -1949,6 +2342,12 @@ static int lacp_init(struct teamd_context *ctx, void *priv) +@@ -1951,6 +2344,12 @@ static int lacp_init(struct teamd_context *ctx, void *priv) } lacp->ctx = ctx; @@ -864,7 +864,7 @@ index 4016b15..81be5b7 100644 err = teamd_hash_func_set(ctx); if (err) return err; -@@ -1990,10 +2389,13 @@ static void lacp_fini(struct teamd_context *ctx, void *priv) +@@ -1992,10 +2391,13 @@ static void lacp_fini(struct teamd_context *ctx, void *priv) { struct lacp *lacp = priv; diff --git a/src/libteam/patch/0009-Fix-ifinfo_link_with_port-race-condition-with-newlink.patch b/src/libteam/patch/0009-Fix-ifinfo_link_with_port-race-condition-with-newlink.patch index bab3a9108..e2193345f 100644 --- a/src/libteam/patch/0009-Fix-ifinfo_link_with_port-race-condition-with-newlink.patch +++ b/src/libteam/patch/0009-Fix-ifinfo_link_with_port-race-condition-with-newlink.patch @@ -1,6 +1,6 @@ -From 9a27e9b85afbbf6235e61c2426481e49a2139219 Mon Sep 17 00:00:00 2001 -From: Shu0T1an ChenG -Date: Tue, 15 Jan 2019 12:23:02 -0800 +From a678d9087b05aaf6947e15f0cc9a93ace299466f Mon Sep 17 00:00:00 2001 +From: Pavel Shirshov +Date: Tue, 3 Mar 2020 13:14:13 -0800 Subject: [PATCH] Fix ifinfo_link_with_port race condition with newlink The race condition could happen like this: @@ -18,17 +18,15 @@ to be added into the team handler's port list. This fix adds a condition to check if ifinfo_link_with_port is linking ifinfo to a port or to the team interface itself. If it is a port, ifinfo_find_create function is used to fix the race condition. - -Signed-off-by: Shu0T1an ChenG --- libteam/ifinfo.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libteam/ifinfo.c b/libteam/ifinfo.c -index 44de4ca..444e0cd 100644 +index b86d34c..e48193e 100644 --- a/libteam/ifinfo.c +++ b/libteam/ifinfo.c -@@ -429,7 +429,10 @@ int ifinfo_link_with_port(struct team_handle *th, uint32_t ifindex, +@@ -451,7 +451,10 @@ int ifinfo_link_with_port(struct team_handle *th, uint32_t ifindex, { struct team_ifinfo *ifinfo; @@ -41,5 +39,5 @@ index 44de4ca..444e0cd 100644 return -ENOENT; if (ifinfo->linked) -- -2.1.4 +2.17.1.windows.2 diff --git a/src/libteam/patch/0010-When-read-of-timerfd-returned-0-don-t-consider-this-.patch b/src/libteam/patch/0010-When-read-of-timerfd-returned-0-don-t-consider-this-.patch index e703d73e0..37eb10d20 100644 --- a/src/libteam/patch/0010-When-read-of-timerfd-returned-0-don-t-consider-this-.patch +++ b/src/libteam/patch/0010-When-read-of-timerfd-returned-0-don-t-consider-this-.patch @@ -1,6 +1,6 @@ -From 038bed6fe3970dc829dbf9a282f7bea7198e7826 Mon Sep 17 00:00:00 2001 -From: Pavel Shirshov -Date: Wed, 28 Aug 2019 16:39:35 -0700 +From e6cd756eac31e3818afb32662469ddf7797c71df Mon Sep 17 00:00:00 2001 +From: Pavel Shirshov +Date: Tue, 3 Mar 2020 13:19:28 -0800 Subject: [PATCH] When read of timerfd returned 0, don't consider this an error Just skip this event. @@ -9,7 +9,7 @@ Just skip this event. 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/teamd/teamd.c b/teamd/teamd.c -index 96794e8..a5ce745 100644 +index 221d71d..530302b 100644 --- a/teamd/teamd.c +++ b/teamd/teamd.c @@ -285,6 +285,10 @@ static int handle_period_fd(int fd) @@ -35,5 +35,5 @@ index 96794e8..a5ce745 100644 } err = lcb->func(ctx, events, lcb->priv); -- -2.7.4 +2.17.1.windows.2 diff --git a/src/libteam/patch/0011-teamd-fix-possible-race-in-master-ifname-callback.patch b/src/libteam/patch/0011-teamd-fix-possible-race-in-master-ifname-callback.patch deleted file mode 100644 index 9203cd17c..000000000 --- a/src/libteam/patch/0011-teamd-fix-possible-race-in-master-ifname-callback.patch +++ /dev/null @@ -1,101 +0,0 @@ -From c0eb9e4bfe1c6a0e77f02b1459d91498c1a3dcff Mon Sep 17 00:00:00 2001 -From: Pavel Shirshov -Date: Tue, 4 Feb 2020 09:39:08 -0800 -Subject: [PATCH 1/1] teamd: fix possible race in master ifname callback - ---- - teamd/teamd.h | 2 ++ - teamd/teamd_link_watch.c | 13 ++++++++++--- - teamd/teamd_per_port.c | 24 +++++++++++++++++++----- - 3 files changed, 31 insertions(+), 8 deletions(-) - -diff --git a/teamd/teamd.h b/teamd/teamd.h -index 418214d..1ce120e 100644 ---- a/teamd/teamd.h -+++ b/teamd/teamd.h -@@ -334,6 +334,8 @@ int teamd_port_remove_all(struct teamd_context *ctx); - void teamd_port_obj_remove_all(struct teamd_context *ctx); - int teamd_port_enabled(struct teamd_context *ctx, struct teamd_port *tdport, - bool *enabled); -+int teamd_port_enabled_check(struct teamd_context *ctx, -+ struct teamd_port *tdport, bool *enabled); - int teamd_port_prio(struct teamd_context *ctx, struct teamd_port *tdport); - int teamd_port_check_enable(struct teamd_context *ctx, - struct teamd_port *tdport, -diff --git a/teamd/teamd_link_watch.c b/teamd/teamd_link_watch.c -index 62f8267..e4b3d3f 100644 ---- a/teamd/teamd_link_watch.c -+++ b/teamd/teamd_link_watch.c -@@ -423,9 +423,16 @@ static int link_watch_refresh_forced_send(struct teamd_context *ctx) - int err; - - teamd_for_each_tdport(tdport, ctx) { -- err = teamd_port_enabled(ctx, tdport, &port_enabled); -- if (err) -- return err; -+ err = teamd_port_enabled_check(ctx, tdport, &port_enabled); -+ if (err) { -+ /* Looks like the options are not ready for this port. -+ * This can happen when called from -+ * link_watch_port_master_ifindex_changed(). Skip this -+ * for now, let it be handled by future call of -+ * link_watch_enabled_option_changed(). -+ */ -+ continue; -+ } - __set_forced_send_for_port(tdport, port_enabled); - if (port_enabled) - enabled_port_count++; -diff --git a/teamd/teamd_per_port.c b/teamd/teamd_per_port.c -index a87e809..d10cfb2 100644 ---- a/teamd/teamd_per_port.c -+++ b/teamd/teamd_per_port.c -@@ -395,19 +395,21 @@ int teamd_port_remove_ifname(struct teamd_context *ctx, const char *port_name) - return teamd_port_remove(ctx, tdport); - } - --int teamd_port_enabled(struct teamd_context *ctx, struct teamd_port *tdport, -- bool *enabled) -+int __teamd_port_enabled(struct teamd_context *ctx, struct teamd_port *tdport, -+ bool *enabled, bool may_fail) - { - struct team_option *option; - - option = team_get_option(ctx->th, "np", "enabled", tdport->ifindex); - if (!option) { -- teamd_log_err("%s: Failed to find \"enabled\" option.", -- tdport->ifname); -+ if (!may_fail) -+ teamd_log_err("%s: Failed to find \"enabled\" option.", -+ tdport->ifname); - return -ENOENT; - } - if (team_get_option_type(option) != TEAM_OPTION_TYPE_BOOL) { -- teamd_log_err("Unexpected type of \"enabled\" option."); -+ if (!may_fail) -+ teamd_log_err("Unexpected type of \"enabled\" option."); - return -EINVAL; - } - -@@ -415,6 +417,18 @@ int teamd_port_enabled(struct teamd_context *ctx, struct teamd_port *tdport, - return 0; - } - -+int teamd_port_enabled(struct teamd_context *ctx, struct teamd_port *tdport, -+ bool *enabled) -+{ -+ return __teamd_port_enabled(ctx, tdport, enabled, false); -+} -+ -+int teamd_port_enabled_check(struct teamd_context *ctx, -+ struct teamd_port *tdport, bool *enabled) -+{ -+ return __teamd_port_enabled(ctx, tdport, enabled, true); -+} -+ - int teamd_port_prio(struct teamd_context *ctx, struct teamd_port *tdport) - { - int prio; --- -2.17.1.windows.2 - diff --git a/src/libteam/patch/series b/src/libteam/patch/series index 62c39e780..7be69525d 100644 --- a/src/libteam/patch/series +++ b/src/libteam/patch/series @@ -8,4 +8,3 @@ 0008-libteam-Add-warm_reboot-mode.patch 0009-Fix-ifinfo_link_with_port-race-condition-with-newlink.patch 0010-When-read-of-timerfd-returned-0-don-t-consider-this-.patch -0011-teamd-fix-possible-race-in-master-ifname-callback.patch