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

[teamd]: lacp runner will send a lacp update right after it received SIGINT #969

Merged
merged 1 commit into from
Sep 21, 2017
Merged
Show file tree
Hide file tree
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
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

1 change: 1 addition & 0 deletions src/libteam/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% :
# Apply patch
git apply ../0001-libteam-Add-team_get_port_enabled-function.patch
git apply ../0002-libteam-Temporarily-remove-redundant-debug-mes.patch
git apply ../0003-teamd-lacp-runner-will-send-lacp-update-right-after-.patch
popd

# Obtain debian packaging
Expand Down