proto-shell: add a notify command for setting interface availability
authorFelix Fietkau <nbd@openwrt.org>
Thu, 27 Oct 2011 08:39:13 +0000 (10:39 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Thu, 27 Oct 2011 08:39:13 +0000 (10:39 +0200)
dummy/netifd-proto.sh
proto-shell.c

index e61de463a823d2593e933e4e1560ac0fefb45b8c..11337c239e0c421337879e92961534f46b68d6f8 100755 (executable)
@@ -206,6 +206,15 @@ proto_block_restart() {
        _proto_notify "$interface"
 }
 
+proto_set_available() {
+       local interface="$1"
+       local state="$2"
+       json_init
+       json_add_int action 5
+       json_add_boolean available "$state"
+       _proto_notify "$interface"
+}
+
 init_proto() {
        proto="$1"; shift
        cmd="$1"; shift
index 3582319cb39ebb52f8e952f8f76d50a63acb9017..b40b456987c72744c336db4ac97b38201b127234 100644 (file)
@@ -220,6 +220,7 @@ enum {
        NOTIFY_COMMAND,
        NOTIFY_ENV,
        NOTIFY_SIGNAL,
+       NOTIFY_AVAILABLE,
        NOTIFY_LINK_UP,
        NOTIFY_IFNAME,
        NOTIFY_ADDR_EXT,
@@ -238,6 +239,7 @@ static const struct blobmsg_policy notify_attr[__NOTIFY_LAST] = {
        [NOTIFY_COMMAND] = { .name = "command", .type = BLOBMSG_TYPE_ARRAY },
        [NOTIFY_ENV] = { .name = "env", .type = BLOBMSG_TYPE_ARRAY },
        [NOTIFY_SIGNAL] = { .name = "signal", .type = BLOBMSG_TYPE_INT32 },
+       [NOTIFY_AVAILABLE] = { .name = "available", .type = BLOBMSG_TYPE_BOOL },
        [NOTIFY_LINK_UP] = { .name = "link-up", .type = BLOBMSG_TYPE_BOOL },
        [NOTIFY_IFNAME] = { .name = "ifname", .type = BLOBMSG_TYPE_STRING },
        [NOTIFY_ADDR_EXT] = { .name = "address-external", .type = BLOBMSG_TYPE_BOOL },
@@ -426,6 +428,16 @@ proto_shell_block_restart(struct proto_shell_state *state, struct blob_attr **tb
        return 0;
 }
 
+static int
+proto_shell_set_available(struct proto_shell_state *state, struct blob_attr **tb)
+{
+       if (!tb[NOTIFY_AVAILABLE])
+               return UBUS_STATUS_INVALID_ARGUMENT;
+
+       interface_set_available(state->proto.iface, blobmsg_get_bool(tb[NOTIFY_AVAILABLE]));
+       return 0;
+}
+
 static int
 proto_shell_notify(struct interface_proto_state *proto, struct blob_attr *attr)
 {
@@ -449,6 +461,8 @@ proto_shell_notify(struct interface_proto_state *proto, struct blob_attr *attr)
                return proto_shell_notify_error(state, tb);
        case 4:
                return proto_shell_block_restart(state, tb);
+       case 5:
+               return proto_shell_set_available(state, tb);
        default:
                return UBUS_STATUS_INVALID_ARGUMENT;
        }