// 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;
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)
case RTM_NEWADDR:
add = true;
+ /* fall through */
case RTM_DELADDR: {
struct ifaddrmsg *ifa = nlmsg_data(hdr);
struct nlattr *nla[__IFA_MAX];
case RTM_NEWNEIGH:
add = true;
+ /* fall through */
case RTM_DELNEIGH: {
struct ndmsg *ndm = nlmsg_data(hdr);
struct nlattr *nla[__NDA_MAX];