[LEDE-DEV] [PATCH netifd] interface: add new "ifup-failed" hotplug event
Martin Schiller
ms at dev.tdt.de
Thu Mar 30 23:31:39 PDT 2017
This hook makes it possible to do some helper work in hotplug scripts
when a connection is not established successfully.
example: try several username/passwords from a pool to establish a
pppoe or wwan connection by replacing the configured values of the
connection in a hotplug script.
Signed-off-by: Martin Schiller <ms at dev.tdt.de>
---
interface-event.c | 2 ++
interface.c | 4 ++++
interface.h | 1 +
3 files changed, 7 insertions(+)
diff --git a/interface-event.c b/interface-event.c
index 4976c2c..86e8f54 100644
--- a/interface-event.c
+++ b/interface-event.c
@@ -33,6 +33,7 @@ static struct uloop_process task = {
static const char * const eventnames[] = {
[IFEV_DOWN] = "ifdown",
[IFEV_UP] = "ifup",
+ [IFEV_UP_FAILED] = "ifup-failed",
[IFEV_UPDATE] = "ifupdate",
[IFEV_FREE] = "free",
[IFEV_RELOAD] = "reload",
@@ -191,6 +192,7 @@ static void interface_event_cb(struct interface_user *dep, struct interface *ifa
switch (ev) {
case IFEV_LINK_UP:
case IFEV_UP:
+ case IFEV_UP_FAILED:
case IFEV_UPDATE:
case IFEV_DOWN:
interface_queue_event(iface, ev);
diff --git a/interface.c b/interface.c
index f150f7d..e04d477 100644
--- a/interface.c
+++ b/interface.c
@@ -241,6 +241,7 @@ interface_event(struct interface *iface, enum interface_event ev)
adev = iface->l3_dev.dev;
/* fall through */
case IFEV_DOWN:
+ case IFEV_UP_FAILED:
alias_notify_device(iface->name, adev);
break;
default:
@@ -268,6 +269,8 @@ mark_interface_down(struct interface *iface)
iface->state = IFS_DOWN;
if (state == IFS_UP)
interface_event(iface, IFEV_DOWN);
+ else
+ interface_event(iface, IFEV_UP_FAILED);
interface_ip_set_enabled(&iface->config_ip, false);
interface_ip_set_enabled(&iface->proto_ip, false);
interface_ip_flush(&iface->proto_ip);
@@ -557,6 +560,7 @@ interface_alias_cb(struct interface_user *dep, struct interface *iface, enum int
interface_set_available(alias, true);
break;
case IFEV_DOWN:
+ case IFEV_UP_FAILED:
interface_set_available(alias, false);
interface_set_main_dev(alias, NULL);
break;
diff --git a/interface.h b/interface.h
index 1472324..c51705c 100644
--- a/interface.h
+++ b/interface.h
@@ -23,6 +23,7 @@ struct interface_proto_state;
enum interface_event {
IFEV_DOWN,
IFEV_UP,
+ IFEV_UP_FAILED,
IFEV_UPDATE,
IFEV_FREE,
IFEV_RELOAD,
--
2.1.4
More information about the Lede-dev
mailing list