NOTIFY_IP6ADDR,
NOTIFY_ROUTES,
NOTIFY_ROUTES6,
+ NOTIFY_DNS,
__NOTIFY_LAST
};
[NOTIFY_IP6ADDR] = { .name = "ip6addr", .type = BLOBMSG_TYPE_ARRAY },
[NOTIFY_ROUTES] = { .name = "routes", .type = BLOBMSG_TYPE_ARRAY },
[NOTIFY_ROUTES6] = { .name = "routes6", .type = BLOBMSG_TYPE_ARRAY },
+ [NOTIFY_DNS] = { .name = "dns", .type = BLOBMSG_TYPE_ARRAY },
};
static int
return UBUS_STATUS_INVALID_ARGUMENT;
up = blobmsg_get_bool(tb[NOTIFY_LINK_UP]);
- if (up) {
- if (!tb[NOTIFY_IFNAME])
- return UBUS_STATUS_INVALID_ARGUMENT;
-
- if (!state->l3_dev.dev) {
- device_add_user(&state->l3_dev,
- device_get(blobmsg_data(tb[NOTIFY_IFNAME]), true));
- device_claim(&state->l3_dev);
- state->proto.iface->l3_dev = &state->l3_dev;
- }
- state->proto.proto_event(&state->proto, IFPEV_UP);
- } else {
+ if (!up) {
state->proto.proto_event(&state->proto, IFPEV_LINK_LOST);
+ return 0;
+ }
+
+ if (!tb[NOTIFY_IFNAME])
+ return UBUS_STATUS_INVALID_ARGUMENT;
+
+ if (!state->l3_dev.dev) {
+ device_add_user(&state->l3_dev,
+ device_get(blobmsg_data(tb[NOTIFY_IFNAME]), true));
+ device_claim(&state->l3_dev);
+ state->proto.iface->l3_dev = &state->l3_dev;
}
+ interface_ip_update_start(state->proto.iface);
+
if ((cur = tb[NOTIFY_ADDR_EXT]) != NULL)
addr_ext = blobmsg_get_bool(cur);
if ((cur = tb[NOTIFY_ROUTES6]) != NULL)
proto_shell_parse_route_list(state->proto.iface, cur, true);
+ if ((cur = tb[NOTIFY_DNS]) != NULL)
+ interface_add_dns_server_list(state->proto.iface, cur);
+
+ interface_ip_update_complete(state->proto.iface);
+
+ state->proto.proto_event(&state->proto, IFPEV_UP);
+
return 0;
}