netifd: Fix printf calls + function declarations.
[project/netifd.git] / proto-shell.c
index 25dec00..ef56aa8 100644 (file)
@@ -44,7 +44,6 @@ struct proto_shell_handler {
        char *config_buf;
        char *script_name;
        bool init_available;
-       bool no_proto_task;
 
        struct uci_blob_param_list config;
 };
@@ -306,7 +305,7 @@ proto_shell_task_finish(struct proto_shell_state *state,
                        if (state->renew_pending)
                                proto_shell_handler(&state->proto,
                                                    PROTO_CMD_RENEW, false);
-                       else if (!state->handler->no_proto_task &&
+                       else if (!(state->handler->proto.flags & PROTO_FLAG_NO_TASK) &&
                                 !state->proto_task.uloop.pending &&
                                 state->sm == S_SETUP)
                                proto_shell_handler(&state->proto,
@@ -539,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)
@@ -563,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;
        }
 
@@ -892,7 +890,8 @@ proto_shell_add_handler(const char *script, const char *name, json_object *obj)
                handler->proto.flags |= PROTO_FLAG_NODEV;
 
        tmp = json_get_field(obj, "no-proto-task", json_type_boolean);
-       handler->no_proto_task = tmp && json_object_get_boolean(tmp);
+       if (tmp && json_object_get_boolean(tmp))
+               handler->proto.flags |= PROTO_FLAG_NO_TASK;
 
        tmp = json_get_field(obj, "available", json_type_boolean);
        if (tmp && json_object_get_boolean(tmp))
@@ -906,6 +905,10 @@ proto_shell_add_handler(const char *script, const char *name, json_object *obj)
        if (tmp && json_object_get_boolean(tmp))
                handler->proto.flags |= PROTO_FLAG_LASTERROR;
 
+       tmp = json_get_field(obj, "teardown-on-l3-link-down", json_type_boolean);
+       if (tmp && json_object_get_boolean(tmp))
+               handler->proto.flags |= PROTO_FLAG_TEARDOWN_ON_L3_LINK_DOWN;
+
        config = json_get_field(obj, "config", json_type_array);
        if (config)
                handler->config_buf = netifd_handler_parse_config(&handler->config, config);