summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdummy/netifd-proto.sh7
-rw-r--r--proto-shell.c18
2 files changed, 25 insertions, 0 deletions
diff --git a/dummy/netifd-proto.sh b/dummy/netifd-proto.sh
index a38f9d9..365c433 100755
--- a/dummy/netifd-proto.sh
+++ b/dummy/netifd-proto.sh
@@ -296,6 +296,13 @@ proto_add_host_dependency() {
_proto_notify "$interface" -S
}
+proto_setup_failed() {
+ local interface="$1"
+ json_init
+ json_add_int action 7
+ _proto_notify "$interface"
+}
+
init_proto() {
proto="$1"; shift
cmd="$1"; shift
diff --git a/proto-shell.c b/proto-shell.c
index 6b38ee9..5309a55 100644
--- a/proto-shell.c
+++ b/proto-shell.c
@@ -625,6 +625,22 @@ proto_shell_add_host_dependency(struct proto_shell_state *state, struct blob_att
}
static int
+proto_shell_setup_failed(struct proto_shell_state *state)
+{
+ switch (state->sm) {
+ case S_IDLE:
+ state->proto.proto_event(&state->proto, IFPEV_LINK_LOST);
+ /* fall through */
+ case S_SETUP:
+ proto_shell_handler(&state->proto, PROTO_CMD_TEARDOWN, false);
+ break;
+ default:
+ break;
+ }
+ return 0;
+}
+
+static int
proto_shell_notify(struct interface_proto_state *proto, struct blob_attr *attr)
{
struct proto_shell_state *state;
@@ -651,6 +667,8 @@ proto_shell_notify(struct interface_proto_state *proto, struct blob_attr *attr)
return proto_shell_set_available(state, tb);
case 6:
return proto_shell_add_host_dependency(state, tb);
+ case 7:
+ return proto_shell_setup_failed(state);
default:
return UBUS_STATUS_INVALID_ARGUMENT;
}