summaryrefslogtreecommitdiff
path: root/proto-shell.c
diff options
context:
space:
mode:
Diffstat (limited to 'proto-shell.c')
-rw-r--r--proto-shell.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/proto-shell.c b/proto-shell.c
index 47a9568..07ec21a 100644
--- a/proto-shell.c
+++ b/proto-shell.c
@@ -414,6 +414,23 @@ proto_shell_parse_route_list(struct interface *iface, struct blob_attr *attr,
}
static void
+proto_shell_parse_neighbor_list(struct interface *iface, struct blob_attr *attr,
+ bool v6)
+{
+ struct blob_attr *cur;
+ int rem;
+
+ blobmsg_for_each_attr(cur, attr, rem) {
+ if (blobmsg_type(cur) != BLOBMSG_TYPE_TABLE) {
+ DPRINTF("Ignore wrong neighbor type: %d\n", blobmsg_type(cur));
+ continue;
+ }
+
+ interface_ip_add_neighbor(iface, cur, v6);
+ }
+}
+
+static void
proto_shell_parse_data(struct interface *iface, struct blob_attr *attr)
{
struct blob_attr *cur;
@@ -456,6 +473,8 @@ enum {
NOTIFY_HOST,
NOTIFY_DNS,
NOTIFY_DNS_SEARCH,
+ NOTIFY_NEIGHBORS,
+ NOTIFY_NEIGHBORS6,
__NOTIFY_LAST
};
@@ -477,6 +496,8 @@ static const struct blobmsg_policy notify_attr[__NOTIFY_LAST] = {
[NOTIFY_HOST] = { .name = "host", .type = BLOBMSG_TYPE_STRING },
[NOTIFY_DNS] = { .name = "dns", .type = BLOBMSG_TYPE_ARRAY },
[NOTIFY_DNS_SEARCH] = { .name = "dns_search", .type = BLOBMSG_TYPE_ARRAY },
+ [NOTIFY_NEIGHBORS]= {.name = "neighbor", .type = BLOBMSG_TYPE_ARRAY},
+ [NOTIFY_NEIGHBORS6]= {.name = "neighbor6", .type = BLOBMSG_TYPE_ARRAY},
};
static int
@@ -546,6 +567,12 @@ proto_shell_update_link(struct proto_shell_state *state, struct blob_attr *data,
if ((cur = tb[NOTIFY_ROUTES6]) != NULL)
proto_shell_parse_route_list(state->proto.iface, cur, true);
+ if ((cur = tb[NOTIFY_NEIGHBORS]) != NULL)
+ proto_shell_parse_neighbor_list(state->proto.iface, cur, false);
+
+ if ((cur = tb[NOTIFY_NEIGHBORS6]) != NULL)
+ proto_shell_parse_neighbor_list(state->proto.iface, cur, true);
+
if ((cur = tb[NOTIFY_DNS]))
interface_add_dns_server_list(&iface->proto_ip, cur);