Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[201911] [libteam] Backport Missing update to libteam WR patch #11583

Merged
merged 1 commit into from
Aug 8, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 24 additions & 21 deletions src/libteam/patch/0008-libteam-Add-warm_reboot-mode.patch
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
From 113d482704198685fba09cd2597fd93ca9d297c5 Mon Sep 17 00:00:00 2001
From bf2966cbb0f3747c66434fd8f923e69e9fe3774e Mon Sep 17 00:00:00 2001
From: Pavel Shirshov <[email protected]>
Date: Tue, 1 Oct 2019 09:23:23 -0700
Subject: [PATCH 1/1] [libteam]: Reimplement Warm-Reboot procedure
Subject: [PATCH] From 113d482704198685fba09cd2597fd93ca9d297c5 Mon Sep 17
00:00:00 2001 Subject: [PATCH 1/1] [libteam]: Reimplement Warm-Reboot
procedure

---
libteam/ifinfo.c | 6 +-
teamd/teamd.c | 51 +++-
teamd/teamd.c | 51 ++++-
teamd/teamd.h | 6 +
teamd/teamd_events.c | 13 ++
teamd/teamd_per_port.c | 6 +
teamd/teamd_runner_lacp.c | 474 +++++++++++++++++++++++++++++++++++---
6 files changed, 512 insertions(+), 44 deletions(-)
teamd/teamd_runner_lacp.c | 475 ++++++++++++++++++++++++++++++++++++++++++----
6 files changed, 513 insertions(+), 44 deletions(-)

diff --git a/libteam/ifinfo.c b/libteam/ifinfo.c
index 46d56a2..b86d34c 100644
Expand Down Expand Up @@ -220,7 +222,7 @@ index f98a90d..a87e809 100644
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 83c69a5..b57d6aa 100644
--- a/teamd/teamd_runner_lacp.c
+++ b/teamd/teamd_runner_lacp.c
@@ -31,6 +31,7 @@
Expand Down Expand Up @@ -473,7 +475,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;
}

Expand Down Expand Up @@ -523,7 +525,7 @@ index 4016b15..81be5b7 100644
+ /* the port was up before the WR. Trying to restore it */
+ struct lacpdu lacpdu;
+ err = lacpdu_read(lacp_port, &lacpdu);
+ if (err) /* Can't read, so the port will start from scratch */
+ if (err) /* Can't read, so the port will start from scratch */
+ continue;
+ teamd_log_info("WR-mode. State of the LAG member port '%s' was restored.",
+ tdport->ifname);
Expand Down Expand Up @@ -572,7 +574,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);
}

Expand All @@ -591,7 +593,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);
Expand All @@ -600,7 +602,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;
}

Expand All @@ -614,7 +616,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;
}

Expand Down Expand Up @@ -657,7 +659,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 */
Expand Down Expand Up @@ -717,7 +719,7 @@ 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;

Expand All @@ -726,7 +728,7 @@ index 4016b15..81be5b7 100644
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;
}

Expand All @@ -740,7 +742,7 @@ 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;

Expand All @@ -755,7 +757,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);
}

Expand Down Expand Up @@ -810,7 +812,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,36 @@ 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,
Expand All @@ -832,6 +834,7 @@ index 4016b15..81be5b7 100644
+ if (lacp->wr.carrier_up) {
+ teamd_log_info("WR-mode. Starting in WR mode");
+ } else {
+ stop_wr_mode(lacp);
+ teamd_log_info("WR-mode. Starting in normal mode. The LAG interface was down before restart");
+ }
+ ctx->warm_start_mode = lacp->wr.carrier_up;
Expand All @@ -851,7 +854,7 @@ index 4016b15..81be5b7 100644
return 0;
}

@@ -1949,6 +2342,12 @@ static int lacp_init(struct teamd_context *ctx, void *priv)
@@ -1951,6 +2345,12 @@ static int lacp_init(struct teamd_context *ctx, void *priv)
}

lacp->ctx = ctx;
Expand All @@ -864,7 +867,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 +2392,13 @@ static void lacp_fini(struct teamd_context *ctx, void *priv)
{
struct lacp *lacp = priv;

Expand All @@ -880,5 +883,5 @@ index 4016b15..81be5b7 100644

const struct teamd_runner teamd_runner_lacp = {
--
2.17.1.windows.2
2.11.0