X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fodhcpd.git;a=blobdiff_plain;f=src%2Fndp.c;fp=src%2Fndp.c;h=8488fc57ca8278c7c0f91f06bbb9c0ebe67653a2;hp=b68626276daecddccea5906cf5630090759bca4f;hb=5dad295c283a8ab8101d58ec3d8ead49a3a62a19;hpb=3e4c8ad1a33abfb5f0e5886353ca4e3f2dbfedc1 diff --git a/src/ndp.c b/src/ndp.c index b686262..8488fc5 100644 --- a/src/ndp.c +++ b/src/ndp.c @@ -352,9 +352,9 @@ static int prefixcmp(const void *va, const void *vb) // Check address update static void check_addr_updates(struct interface *iface) { - struct odhcpd_ipaddr addr[RELAYD_MAX_ADDRS] = {{IN6ADDR_ANY_INIT, 0, 0, 0, 0}}; + struct odhcpd_ipaddr *addr = NULL; time_t now = odhcpd_time(); - ssize_t len = odhcpd_get_interface_addresses(iface->ifindex, addr, ARRAY_SIZE(addr)); + ssize_t len = odhcpd_get_interface_addresses(iface->ifindex, &addr); if (len < 0) return; @@ -380,7 +380,8 @@ static void check_addr_updates(struct interface *iface) if (change) dhcpv6_ia_preupdate(iface); - memcpy(iface->ia_addr, addr, len * sizeof(*addr)); + free(iface->ia_addr); + iface->ia_addr = addr; iface->ia_addr_len = len; if (change)