Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
F
FFS Gluon
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Container registry
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
0x4A6F
FFS Gluon
Commits
9a0aeb9b
Commit
9a0aeb9b
authored
8 years ago
by
Jan-Philipp Litza
Browse files
Options
Downloads
Patches
Plain Diff
netifd: Fix triggering of interface update event
This fixes excessively frequent calls to some init scripts.
parent
b7eeef9b
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
patches/openwrt/0097-netifd-Fix-triggering-of-interface-update-event.patch
+122
-0
122 additions, 0 deletions
...097-netifd-Fix-triggering-of-interface-update-event.patch
with
122 additions
and
0 deletions
patches/openwrt/0097-netifd-Fix-triggering-of-interface-update-event.patch
0 → 100644
+
122
−
0
View file @
9a0aeb9b
From: Jan-Philipp Litza <janphilipp@litza.de>
Date: Fri, 10 Mar 2017 00:21:24 +0100
Subject: netifd: Fix triggering of interface update event
In case the keep flag is set in proto_shell_update_link no interface
update event is triggered when IPv4/6 addresses/routes/... are updated
as the proto_event callback is not called due to keep being set.
Unconditionally call the proto_event callback handler in proto_shell_update_link
but let the proto_event callback handler; in this case interface_proto_event_cb,
decide which actions need to be taken dependant on the interface state.
In case the interface is already in the up state trigger an update event
only if the interface updated flag actually indicates either an IP address/
route/data change; before interface update events were actually sent wihtout
any parameter change.
Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
diff --git a/package/network/config/netifd/patches/001-interface-fix-triggering-of-interface-update-event.patch b/package/network/config/netifd/patches/001-interface-fix-triggering-of-interface-update-event.patch
new file mode 100644
index 0000000000000000000000000000000000000000..9eda2f59ea016cbbd370ad5d3589891c1ac7d18b
--- /dev/null
+++ b/package/network/config/netifd/patches/001-interface-fix-triggering-of-interface-update-event.patch
@@ -0,0 +1,97 @@
+From b8ef742bd04ebef324ae11aee56c6e1d2cb7e0ad Mon Sep 17 00:00:00 2001
+From: Hans Dedecker <dedeckeh@gmail.com>
+Date: Wed, 2 Nov 2016 09:22:10 +0100
+Subject: [PATCH] interface: Fix triggering of interface update event
+
+In case the keep flag is set in proto_shell_update_link no interface
+update event is triggered when IPv4/6 addresses/routes/... are updated
+as the proto_event callback is not called due to keep being set.
+
+Unconditionally call the proto_event callback handler in proto_shell_update_link
+but let the proto_event callback handler; in this case interface_proto_event_cb,
+decide which actions need to be taken dependant on the interface state.
+
+In case the interface is already in the up state trigger an update event
+only if the interface updated flag actually indicates either an IP address/
+route/data change; before interface update events were actually sent wihtout
+any parameter change.
+
+Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
+---
+ interface.c | 9 ++++++---
+ interface.h | 2 +-
+ proto-shell.c | 7 +++----
+ 3 files changed, 10 insertions(+), 8 deletions(-)
+
+diff --git a/interface.c b/interface.c
+index 5870422..a014111 100644
+--- a/interface.c
++++ b/interface.c
+@@ -693,7 +693,8 @@ interface_proto_event_cb(struct interface_proto_state *state, enum interface_pro
+ switch (ev) {
+ case IFPEV_UP:
+ if (iface->state != IFS_SETUP) {
+- interface_event(iface, IFEV_UPDATE);
++ if (iface->state == IFS_UP && iface->updated)
++ interface_event(iface, IFEV_UPDATE);
+ return;
+ }
+
+@@ -1091,10 +1092,12 @@ set_config_state(struct interface *iface, enum interface_config_state s)
+ }
+
+ void
+-interface_update_start(struct interface *iface)
++interface_update_start(struct interface *iface, const bool keep_old)
+ {
+ iface->updated = 0;
+- interface_ip_update_start(&iface->proto_ip);
++
++ if (!keep_old)
++ interface_ip_update_start(&iface->proto_ip);
+ }
+
+ void
+diff --git a/interface.h b/interface.h
+index aa2085d..7d5b309 100644
+--- a/interface.h
++++ b/interface.h
+@@ -199,7 +199,7 @@ void interface_add_error(struct interface *iface, const char *subsystem,
+ int interface_add_data(struct interface *iface, const struct blob_attr *data);
+ int interface_parse_data(struct interface *iface, const struct blob_attr *attr);
+
+-void interface_update_start(struct interface *iface);
++void interface_update_start(struct interface *iface, const bool keep_old);
+ void interface_update_complete(struct interface *iface);
+
+ void interface_start_pending(void);
+diff --git a/proto-shell.c b/proto-shell.c
+index 998a44c..ef56aa8 100644
+--- a/proto-shell.c
++++ b/proto-shell.c
+@@ -538,10 +538,10 @@ proto_shell_update_link(struct proto_shell_state *state, struct blob_attr *data,
+ return UBUS_STATUS_UNKNOWN_ERROR;
+
+ device_set_present(dev, true);
+-
+- interface_update_start(iface);
+ }
+
++ interface_update_start(iface, keep);
++
+ proto_apply_ip_settings(iface, data, addr_ext);
+
+ if ((cur = tb[NOTIFY_ROUTES]) != NULL)
+@@ -562,8 +562,7 @@ proto_shell_update_link(struct proto_shell_state *state, struct blob_attr *data,
+ interface_update_complete(state->proto.iface);
+
+ if ((state->sm != S_SETUP_ABORT) && (state->sm != S_TEARDOWN)) {
+- if (!keep)
+- state->proto.proto_event(&state->proto, IFPEV_UP);
++ state->proto.proto_event(&state->proto, IFPEV_UP);
+ state->sm = S_IDLE;
+ }
+
+--
+2.1.4
+
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment