Skip to content

Commit

Permalink
Fix LAG going down after warm reboot with SONiC neighbors (#17040) (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
mssonicbld authored Nov 8, 2023
1 parent 14934ab commit f64f96e
Showing 1 changed file with 9 additions and 12 deletions.
21 changes: 9 additions & 12 deletions src/libteam/patch/0016-block-retry-count-changes.patch
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ After setting the retry count to some custom value, if a normal LACP
packet comes in without a custom retry count, don't reset it back to
the default retry count for 60 seconds since the last new packet.
---
teamd/teamd_runner_lacp.c | 60 +++++++++++++++++++++++++++++++++++++++------
1 file changed, 52 insertions(+), 8 deletions(-)
teamd/teamd_runner_lacp.c | 58 +++++++++++++++++++++++++++++++++++++++------
1 file changed, 50 insertions(+), 8 deletions(-)

diff --git a/teamd/teamd_runner_lacp.c b/teamd/teamd_runner_lacp.c
index 3e8a0f6..c5dad35 100644
index 3e8a0f6..b6a8647 100644
--- a/teamd/teamd_runner_lacp.c
+++ b/teamd/teamd_runner_lacp.c
@@ -180,6 +180,7 @@ struct lacp {
Expand Down Expand Up @@ -60,7 +60,7 @@ index 3e8a0f6..c5dad35 100644

if (!lacpdu_check(lacpdu)) {
teamd_log_warn("malformed LACP PDU came.");
@@ -1523,17 +1529,55 @@ static int lacpdu_process(struct lacp_port *lacp_port, struct lacpdu* lacpdu)
@@ -1523,14 +1529,38 @@ static int lacpdu_process(struct lacp_port *lacp_port, struct lacpdu* lacpdu)
lacp_port->partner_retry_count,
lacpdu->v2.actor_retry_count);
lacp_port->partner_retry_count = lacpdu->v2.actor_retry_count;
Expand Down Expand Up @@ -104,6 +104,10 @@ index 3e8a0f6..c5dad35 100644
}
}

@@ -1540,10 +1570,21 @@ static int lacpdu_process(struct lacp_port *lacp_port, struct lacpdu* lacpdu)

lacp_port_actor_update(lacp_port);

+ if (lacp_port->last_received_lacpdu_version != lacpdu->version_number) {
+ teamd_log_dbg(lacp_port->ctx, "%s: LACPDU version changed from %u to %u",
+ lacp_port->tdport->ifname,
Expand All @@ -114,15 +118,8 @@ index 3e8a0f6..c5dad35 100644
+ err = lacpdu_send(lacp_port);
+ if (err)
+ return err;
+ } else {
+ lacp_port->last_received_lacpdu_version = lacpdu->version_number;
+ }
+
err = lacp_port_set_state(lacp_port, PORT_STATE_CURRENT);
if (err)
return err;
@@ -1542,8 +1586,7 @@ static int lacpdu_process(struct lacp_port *lacp_port, struct lacpdu* lacpdu)

/* Check if the other side has correct info about us */
if (memcmp(&lacpdu->partner, &lacp_port->actor, sizeof(struct lacpdu_info))
- || (lacpdu->version_number == 0xf1 && lacp_port->lacp->cfg.retry_count != lacpdu->v2.partner_retry_count)
Expand All @@ -131,7 +128,7 @@ index 3e8a0f6..c5dad35 100644
err = lacpdu_send(lacp_port);
if (err)
return err;
@@ -2210,6 +2253,7 @@ static int lacp_state_retry_count_work(struct teamd_context *ctx,
@@ -2210,6 +2251,7 @@ static int lacp_state_retry_count_work(struct teamd_context *ctx,
if (lacp_port_selected(lacp_port)) {
teamd_log_dbg(ctx, "%s: Notifying partner of updated retry count",
lacp_port->tdport->ifname);
Expand Down

0 comments on commit f64f96e

Please sign in to comment.