X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fodhcpd.git;a=blobdiff_plain;f=src%2Fubus.c;h=973ae5a8b19ed23c30a582f6921afc27ed112ca9;hp=2ffa4e319075d2b87ca17eddfbe7f90d60a39433;hb=HEAD;hpb=f66103ef4e100b4c3d375553cb916cb924cc40e5 diff --git a/src/ubus.c b/src/ubus.c index 2ffa4e3..973ae5a 100644 --- a/src/ubus.c +++ b/src/ubus.c @@ -45,6 +45,7 @@ static int handle_dhcpv4_leases(struct ubus_context *ctx, _unused struct ubus_ob blobmsg_add_string_buffer(&b); blobmsg_add_string(&b, "hostname", (c->hostname) ? c->hostname : ""); + blobmsg_add_u8(&b, "accept-reconf-nonce", c->accept_fr_nonce); m = blobmsg_open_array(&b, "flags"); if (c->flags & OAF_BOUND) @@ -54,8 +55,8 @@ static int handle_dhcpv4_leases(struct ubus_context *ctx, _unused struct ubus_ob blobmsg_add_string(&b, NULL, "static"); blobmsg_close_array(&b, m); - buf = blobmsg_alloc_string_buffer(&b, "ip", INET_ADDRSTRLEN); - struct in_addr addr = {htonl(c->addr)}; + buf = blobmsg_alloc_string_buffer(&b, "address", INET_ADDRSTRLEN); + struct in_addr addr = {.s_addr = c->addr}; inet_ntop(AF_INET, &addr, buf, INET_ADDRSTRLEN); blobmsg_add_string_buffer(&b); @@ -79,7 +80,7 @@ static void dhcpv6_blobmsg_ia_addr(struct in6_addr *addr, int prefix, uint32_t p uint32_t valid, _unused void *arg) { void *a = blobmsg_open_table(&b, NULL); - char *buf = blobmsg_alloc_string_buffer(&b, NULL, INET6_ADDRSTRLEN); + char *buf = blobmsg_alloc_string_buffer(&b, "address", INET6_ADDRSTRLEN); inet_ntop(AF_INET6, addr, buf, INET6_ADDRSTRLEN); blobmsg_add_string_buffer(&b); @@ -310,6 +311,25 @@ static const struct blobmsg_policy obj_attrs[OBJ_ATTR_MAX] = { [OBJ_ATTR_PATH] = { .name = "path", .type = BLOBMSG_TYPE_STRING }, }; +void ubus_bcast_dhcp_event(const char *type, const uint8_t *mac, + const size_t mlen, const struct in_addr *addr, const char *name, + const char *interface) +{ + if (!ubus || !main_object.has_subscribers) + return; + + blob_buf_init(&b, 0); + if (mac) + blobmsg_add_string(&b, "mac", odhcpd_print_mac(mac, mlen)); + if (addr) + blobmsg_add_string(&b, "ip", inet_ntoa(*addr)); + if (name) + blobmsg_add_string(&b, "name", name); + if (interface) + blobmsg_add_string(&b, "interface", interface); + + ubus_notify(ubus, &main_object, type, b.head, -1); +} static void handle_event(_unused struct ubus_context *ctx, _unused struct ubus_event_handler *ev, _unused const char *type, struct blob_attr *msg) @@ -389,10 +409,10 @@ bool ubus_has_prefix(const char *name, const char *ifname) } -int init_ubus(void) +int ubus_init(void) { if (!(ubus = ubus_connect(NULL))) { - syslog(LOG_ERR, "Unable to connect to ubus: %s", strerror(errno)); + syslog(LOG_ERR, "Unable to connect to ubus: %m"); return -1; }