X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fodhcpd.git;a=blobdiff_plain;f=src%2Fdhcpv6.c;h=e092c1076b73b9df0bf4e292a49128e51388996a;hp=b94e84dae42601b5cbbc6f571787b4aacb591a37;hb=7aa2594c5a127d92fa8f04328ac7b43e595bcaa7;hpb=5dfb716333ad12b86312ef5d8c824ea1ed3df26b diff --git a/src/dhcpv6.c b/src/dhcpv6.c index b94e84d..e092c10 100644 --- a/src/dhcpv6.c +++ b/src/dhcpv6.c @@ -53,8 +53,7 @@ int dhcpv6_setup_interface(struct interface *iface, bool enable) if (enable && iface->dhcpv6) { int sock = socket(AF_INET6, SOCK_DGRAM | SOCK_CLOEXEC, IPPROTO_UDP); if (sock < 0) { - syslog(LOG_ERR, "Failed to create DHCPv6 server socket: %s", - strerror(errno)); + syslog(LOG_ERR, "Failed to create DHCPv6 server socket: %m"); return -1; } @@ -76,8 +75,7 @@ int dhcpv6_setup_interface(struct interface *iface, bool enable) 0, IN6ADDR_ANY_INIT, 0}; if (bind(sock, (struct sockaddr*)&bind_addr, sizeof(bind_addr))) { - syslog(LOG_ERR, "Failed to open DHCPv6 server socket: %s", - strerror(errno)); + syslog(LOG_ERR, "Failed to open DHCPv6 server socket: %m"); return -1; } @@ -331,12 +329,12 @@ static void handle_client_request(void *addr, void *data, size_t len, if (IN6_IS_ADDR_UNSPECIFIED(&cerid.addr)) { struct odhcpd_ipaddr *addrs; - ssize_t len = odhcpd_get_interface_addresses(0, true, &addrs); + ssize_t len = netlink_get_interface_addrs(0, true, &addrs); for (ssize_t i = 0; i < len; ++i) if (IN6_IS_ADDR_UNSPECIFIED(&cerid.addr) || memcmp(&addrs[i].addr, &cerid.addr, sizeof(cerid.addr)) < 0) - cerid.addr = addrs[i].addr; + cerid.addr = addrs[i].addr.in6; free(addrs); } @@ -483,17 +481,17 @@ static struct odhcpd_ipaddr *relay_link_address(struct interface *iface) struct odhcpd_ipaddr *addr = NULL; time_t now = odhcpd_time(); - for (size_t i = 0; i < iface->ia_addr_len; i++) { - if (iface->ia_addr[i].valid <= (uint32_t)now) + for (size_t i = 0; i < iface->addr6_len; i++) { + if (iface->addr6[i].valid <= (uint32_t)now) continue; - if (iface->ia_addr[i].preferred > (uint32_t)now) { - addr = &iface->ia_addr[i]; + if (iface->addr6[i].preferred > (uint32_t)now) { + addr = &iface->addr6[i]; break; } - if (!addr || (iface->ia_addr[i].valid > addr->valid)) - addr = &iface->ia_addr[i]; + if (!addr || (iface->addr6[i].valid > addr->valid)) + addr = &iface->addr6[i]; } return addr;