-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
lacp runner will send lacp update right after it received SIGINT (#969)
- Loading branch information
1 parent
763205f
commit e0513d2
Showing
2 changed files
with
99 additions
and
0 deletions.
There are no files selected for viewing
98 changes: 98 additions & 0 deletions
98
src/libteam/0003-teamd-lacp-runner-will-send-lacp-update-right-after-.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
From 417e9dfdccbbee2cf86e46e994e8ece3433b46a4 Mon Sep 17 00:00:00 2001 | ||
From: Pavel Shirshov <pavelsh@microsoft.com> | ||
Date: Wed, 20 Sep 2017 00:34:07 +0000 | ||
Subject: [PATCH] [teamd] lacp runner will send lacp update right after it | ||
received SIGINT signal | ||
|
||
--- | ||
teamd/teamd.c | 1 + | ||
teamd/teamd.h | 3 +++ | ||
teamd/teamd_events.c | 13 +++++++++++++ | ||
teamd/teamd_runner_lacp.c | 10 ++++++++++ | ||
4 files changed, 27 insertions(+) | ||
|
||
diff --git a/teamd/teamd.c b/teamd/teamd.c | ||
index aac2511..c987333 100644 | ||
--- a/teamd/teamd.c | ||
+++ b/teamd/teamd.c | ||
@@ -386,6 +386,7 @@ static int teamd_run_loop_run(struct teamd_context *ctx) | ||
case 'q': | ||
if (quit_in_progress) | ||
return -EBUSY; | ||
+ teamd_refresh_ports(ctx); | ||
err = teamd_flush_ports(ctx); | ||
if (err) | ||
return err; | ||
diff --git a/teamd/teamd.h b/teamd/teamd.h | ||
index 5dbfb9b..ef0fb1c 100644 | ||
--- a/teamd/teamd.h | ||
+++ b/teamd/teamd.h | ||
@@ -189,11 +189,14 @@ 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); | ||
+ void (*refresh)(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; | ||
}; | ||
|
||
+void teamd_refresh_ports(struct teamd_context *ctx); | ||
int teamd_event_port_added(struct teamd_context *ctx, | ||
struct teamd_port *tdport); | ||
void teamd_event_port_removed(struct teamd_context *ctx, | ||
diff --git a/teamd/teamd_events.c b/teamd/teamd_events.c | ||
index 1a95974..5c2ef56 100644 | ||
--- a/teamd/teamd_events.c | ||
+++ b/teamd/teamd_events.c | ||
@@ -34,6 +34,19 @@ struct event_watch_item { | ||
void *priv; | ||
}; | ||
|
||
+void teamd_refresh_ports(struct teamd_context *ctx) | ||
+{ | ||
+ struct teamd_port *tdport; | ||
+ struct event_watch_item *watch; | ||
+ | ||
+ teamd_for_each_tdport(tdport, ctx) { | ||
+ list_for_each_node_entry(watch, &ctx->event_watch_list, list) { | ||
+ if (!watch->ops->refresh) continue; | ||
+ watch->ops->refresh(ctx, tdport, watch->priv); | ||
+ } | ||
+ } | ||
+} | ||
+ | ||
int teamd_event_port_added(struct teamd_context *ctx, | ||
struct teamd_port *tdport) | ||
{ | ||
diff --git a/teamd/teamd_runner_lacp.c b/teamd/teamd_runner_lacp.c | ||
index 9c77fae..e38c291 100644 | ||
--- a/teamd/teamd_runner_lacp.c | ||
+++ b/teamd/teamd_runner_lacp.c | ||
@@ -1383,12 +1383,22 @@ static int lacp_event_watch_port_changed(struct teamd_context *ctx, | ||
return lacp_port_link_update(lacp_port); | ||
} | ||
|
||
+static void lacp_event_watch_refresh(struct teamd_context *ctx, struct teamd_port *tdport, void *priv) | ||
+{ | ||
+ struct lacp *lacp = priv; | ||
+ | ||
+ struct lacp_port *lacp_port = lacp_port_get(lacp, tdport); | ||
+ if (lacp_port_selected(lacp_port)) | ||
+ (void) lacpdu_send(lacp_port); | ||
+} | ||
+ | ||
static const struct teamd_event_watch_ops lacp_event_watch_ops = { | ||
.hwaddr_changed = lacp_event_watch_hwaddr_changed, | ||
.port_added = lacp_event_watch_port_added, | ||
.port_removed = lacp_event_watch_port_removed, | ||
.port_changed = lacp_event_watch_port_changed, | ||
.admin_state_changed = lacp_event_watch_admin_state_changed, | ||
+ .refresh = lacp_event_watch_refresh, | ||
}; | ||
|
||
static int lacp_carrier_init(struct teamd_context *ctx, struct lacp *lacp) | ||
-- | ||
2.7.4 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters