add support for killing running proto-shell tasks with an arbitrary signal and waitin...
[project/netifd.git] / dummy / netifd-proto.sh
index 85e8698..6182ce1 100755 (executable)
@@ -47,11 +47,18 @@ proto_init_update() {
        PROTO_ROUTE=
        PROTO_ROUTE6=
        json_init
+       json_add_int action 0
        json_add_string "ifname" "$ifname"
        json_add_boolean "link-up" "$up"
        [ -n "$3" ] && json_add_boolean "address-external" "$external"
 }
 
+proto_add_dns_server() {
+       local address="$1"
+
+       jshn_append PROTO_DNS "$address"
+}
+
 proto_add_ipv4_address() {
        local address="$1"
        local mask="$2"
@@ -113,6 +120,11 @@ _proto_push_array() {
        json_close_array
 }
 
+_proto_notify() {
+       local interface="$1"
+       ubus call network.interface."$interface" notify_proto "$(json_dump)"
+}
+
 proto_send_update() {
        local interface="$1"
 
@@ -120,7 +132,30 @@ proto_send_update() {
        _proto_push_array "ip6addr" "$PROTO_IP6ADDR" _proto_push_ip
        _proto_push_array "route" "$PROTO_ROUTE" _proto_push_route
        _proto_push_array "route6" "$PROTO_ROUTE6" _proto_push_route
-       ubus call network.interface."$interface" notify_proto "$(json_dump)" &
+       _proto_push_array "dns" "$PROTO_DNS" _proto_push_ip
+       _proto_notify "$interface"
+}
+
+proto_run_command() {
+       local interface="$1"; shift
+
+       json_init
+       json_add_int action 1
+       json_add_array command
+       while [ $# -gt 0 ]; do
+               json_add_string "" "$1"
+               shift
+       done
+       _proto_notify "$interface"
+}
+
+proto_kill_command() {
+       local interface="$1"; shift
+
+       json_init
+       json_add_int action 2
+       [ -n "$1" ] && json_add_int signal "$1"
+       _proto_notify "$interface"
 }
 
 init_proto() {