projects
/
project
/
netifd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
wireless: load and then ignore disabled devices
[project/netifd.git]
/
proto-shell.c
diff --git
a/proto-shell.c
b/proto-shell.c
index
d383cbf
..
1a69c19
100644
(file)
--- a/
proto-shell.c
+++ b/
proto-shell.c
@@
-16,7
+16,6
@@
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
-#include <unistd.h>
#include <signal.h>
#include <arpa/inet.h>
#include <signal.h>
#include <arpa/inet.h>
@@
-42,22
+41,22
@@
enum proto_shell_sm {
struct proto_shell_handler {
struct list_head list;
struct proto_handler proto;
struct proto_shell_handler {
struct list_head list;
struct proto_handler proto;
- struct uci_blob_param_list config;
char *config_buf;
char *config_buf;
+ char *script_name;
bool init_available;
bool init_available;
- char script_name[];
+
+ struct uci_blob_param_list config;
};
struct proto_shell_dependency {
struct list_head list;
};
struct proto_shell_dependency {
struct list_head list;
+ char *interface;
struct proto_shell_state *proto;
struct interface_user dep;
union if_addr host;
bool v6;
struct proto_shell_state *proto;
struct interface_user dep;
union if_addr host;
bool v6;
-
- char interface[];
};
struct proto_shell_state {
};
struct proto_shell_state {
@@
-480,15
+479,15
@@
proto_shell_update_link(struct proto_shell_state *state, struct blob_attr *data,
if ((cur = tb[NOTIFY_DNS_SEARCH]))
interface_add_dns_search_list(&iface->proto_ip, cur);
if ((cur = tb[NOTIFY_DNS_SEARCH]))
interface_add_dns_search_list(&iface->proto_ip, cur);
+ if ((cur = tb[NOTIFY_DATA]))
+ proto_shell_parse_data(state->proto.iface, cur);
+
interface_update_complete(state->proto.iface);
if (!keep)
state->proto.proto_event(&state->proto, IFPEV_UP);
state->sm = S_IDLE;
interface_update_complete(state->proto.iface);
if (!keep)
state->proto.proto_event(&state->proto, IFPEV_UP);
state->sm = S_IDLE;
- if ((cur = tb[NOTIFY_DATA]))
- proto_shell_parse_data(state->proto.iface, cur);
-
return 0;
}
return 0;
}
@@
-619,13
+618,14
@@
proto_shell_add_host_dependency(struct proto_shell_state *state, struct blob_att
{
struct proto_shell_dependency *dep;
struct blob_attr *host = tb[NOTIFY_HOST];
{
struct proto_shell_dependency *dep;
struct blob_attr *host = tb[NOTIFY_HOST];
- struct blob_attr *ifname = tb[NOTIFY_IFNAME];
- size_t ifnamelen = (ifname) ? blobmsg_data_len(ifname) : 1;
+ struct blob_attr *ifname_a = tb[NOTIFY_IFNAME];
+ const char *ifname_str = ifname_a ? blobmsg_data(ifname_a) : "";
+ char *ifname;
if (!host)
return UBUS_STATUS_INVALID_ARGUMENT;
if (!host)
return UBUS_STATUS_INVALID_ARGUMENT;
- dep = calloc
(1, sizeof(*dep) + ifnamelen
);
+ dep = calloc
_a(sizeof(*dep), &ifname, strlen(ifname_str) + 1
);
if (inet_pton(AF_INET, blobmsg_data(host), &dep->host) < 1) {
if (inet_pton(AF_INET6, blobmsg_data(host), &dep->host) < 1) {
free(dep);
if (inet_pton(AF_INET, blobmsg_data(host), &dep->host) < 1) {
if (inet_pton(AF_INET6, blobmsg_data(host), &dep->host) < 1) {
free(dep);
@@
-636,10
+636,7
@@
proto_shell_add_host_dependency(struct proto_shell_state *state, struct blob_att
}
dep->proto = state;
}
dep->proto = state;
- if (ifname)
- memcpy(dep->interface, blobmsg_data(ifname), ifnamelen);
- else
- dep->interface[0] = 0;
+ dep->interface = strcpy(ifname, ifname_str);
dep->dep.cb = proto_shell_if_up_cb;
interface_add_user(&dep->dep, NULL);
dep->dep.cb = proto_shell_if_up_cb;
interface_add_user(&dep->dep, NULL);
@@
-734,52
+731,36
@@
error:
return NULL;
}
return NULL;
}
-static inline json_object *
-get_field(json_object *obj, const char *name, json_type type)
-{
- return json_check_type(json_object_object_get(obj, name), type);
-}
-
static void
static void
-proto_shell_add_handler(const char *script, json_object *obj)
+proto_shell_add_handler(const char *script,
const char *name,
json_object *obj)
{
struct proto_shell_handler *handler;
struct proto_handler *proto;
json_object *config, *tmp;
{
struct proto_shell_handler *handler;
struct proto_handler *proto;
json_object *config, *tmp;
- const char *name;
- char *str;
-
- if (!json_check_type(obj, json_type_object))
- return;
-
- tmp = get_field(obj, "name", json_type_string);
- if (!tmp)
- return;
-
- name = json_object_get_string(tmp);
+ char *proto_name, *script_name;
- handler = calloc_a(sizeof(*handler) + strlen(script) + 1,
- &str, strlen(name) + 1);
+ handler = calloc_a(sizeof(*handler),
+ &proto_name, strlen(name) + 1,
+ &script_name, strlen(script) + 1);
if (!handler)
return;
if (!handler)
return;
- strcpy(handler->script_name, script);
- strcpy(str, name);
+ handler->script_name = strcpy(script_name, script);
proto = &handler->proto;
proto = &handler->proto;
- proto->name = str;
+ proto->name = str
cpy(proto_name, name)
;
proto->config_params = &handler->config;
proto->attach = proto_shell_attach;
proto->config_params = &handler->config;
proto->attach = proto_shell_attach;
- tmp = get_field(obj, "no-device", json_type_boolean);
+ tmp =
json_
get_field(obj, "no-device", json_type_boolean);
if (tmp && json_object_get_boolean(tmp))
handler->proto.flags |= PROTO_FLAG_NODEV;
if (tmp && json_object_get_boolean(tmp))
handler->proto.flags |= PROTO_FLAG_NODEV;
- tmp = get_field(obj, "available", json_type_boolean);
+ tmp =
json_
get_field(obj, "available", json_type_boolean);
if (tmp && json_object_get_boolean(tmp))
handler->proto.flags |= PROTO_FLAG_INIT_AVAILABLE;
if (tmp && json_object_get_boolean(tmp))
handler->proto.flags |= PROTO_FLAG_INIT_AVAILABLE;
- config = get_field(obj, "config", json_type_array);
+ config =
json_
get_field(obj, "config", json_type_array);
if (config)
handler->config_buf = netifd_handler_parse_config(&handler->config, config);
if (config)
handler->config_buf = netifd_handler_parse_config(&handler->config, config);