udhcpsnoop: added ubus 'add_devices' command

Added the new ubus command 'add_devices' which takes the same devies
JSON schema data as the 'config' command does.   This is needed, for
example, to add dynamic VLAN uplink devices once they are created

Signed-off-by: Paul White <paul@shasta.cloud>
This commit is contained in:
Paul White
2024-01-21 05:50:05 +00:00
committed by John Crispin
parent d5ffdffd8c
commit 6fc396682c
3 changed files with 27 additions and 5 deletions

View File

@@ -449,15 +449,19 @@ free:
return;
}
void dhcpsnoop_dev_config_update(struct blob_attr *data)
void dhcpsnoop_dev_config_update(struct blob_attr *data, bool add_only)
{
struct blob_attr *cur;
int rem;
vlist_update(&devices);
if (!add_only)
vlist_update(&devices);
blobmsg_for_each_attr(cur, data, rem)
dhcpsnoop_dev_config_add(cur);
vlist_flush(&devices);
if (!add_only)
vlist_flush(&devices);
}
void dhcpsnoop_dev_check(void)

View File

@@ -16,7 +16,7 @@ int dhcpsnoop_run_cmd(char *cmd, bool ignore_error);
int dhcpsnoop_dev_init(void);
void dhcpsnoop_dev_done(void);
void dhcpsnoop_dev_config_update(struct blob_attr *data);
void dhcpsnoop_dev_config_update(struct blob_attr *data, bool add_only);
void dhcpsnoop_dev_check(void);
void dhcpsnoop_ubus_init(void);

View File

@@ -27,7 +27,7 @@ dhcpsnoop_ubus_config(struct ubus_context *ctx, struct ubus_object *obj,
blobmsg_parse(dhcpsnoop_config_policy, __DS_CONFIG_MAX, tb,
blobmsg_data(msg), blobmsg_len(msg));
dhcpsnoop_dev_config_update(tb[DS_CONFIG_DEVICES]);
dhcpsnoop_dev_config_update(tb[DS_CONFIG_DEVICES], false);
dhcpsnoop_dev_check();
@@ -35,6 +35,23 @@ dhcpsnoop_ubus_config(struct ubus_context *ctx, struct ubus_object *obj,
}
static int
dhcpsnoop_ubus_add_devices(struct ubus_context *ctx, struct ubus_object *obj,
struct ubus_request_data *req, const char *method,
struct blob_attr *msg)
{
struct blob_attr *tb[__DS_CONFIG_MAX];
blobmsg_parse(dhcpsnoop_config_policy, __DS_CONFIG_MAX, tb,
blobmsg_data(msg), blobmsg_len(msg));
dhcpsnoop_dev_config_update(tb[DS_CONFIG_DEVICES], true);
dhcpsnoop_dev_check();
return 0;
}
static int
dhcpsnoop_ubus_check_devices(struct ubus_context *ctx, struct ubus_object *obj,
struct ubus_request_data *req, const char *method,
@@ -61,6 +78,7 @@ dhcpsnoop_ubus_dump(struct ubus_context *ctx, struct ubus_object *obj,
static const struct ubus_method dhcpsnoop_methods[] = {
UBUS_METHOD("config", dhcpsnoop_ubus_config, dhcpsnoop_config_policy),
UBUS_METHOD("add_devices", dhcpsnoop_ubus_add_devices, dhcpsnoop_config_policy),
UBUS_METHOD_NOARG("check_devices", dhcpsnoop_ubus_check_devices),
UBUS_METHOD_NOARG("dump", dhcpsnoop_ubus_dump),
};