[LEDE-DEV] [PATCH netifd] interface: add new "ifup-failed" hotplug event

Martin Schiller ms at dev.tdt.de
Fri May 5 04:44:59 PDT 2017


Are there any comments about this patch?
I still want to get this feature into netifd.

On 2017-03-31 08:31, Martin Schiller wrote:
> 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,




More information about the Lede-dev mailing list