#error Cannot compile this plugin on systems where 'struct sockaddr' has no sa_len member.
#endif
+/** properly align sockaddrs */
+#define SA_ALIGN 4
+#define SA_LEN(len) ((len) > 0 ? (((len)+SA_ALIGN-1) & ~(SA_ALIGN-1)) : SA_ALIGN)
+
/** delay before firing roam events (ms) */
#define ROAM_DELAY 100
this->types &= ~type;
*addr = this->addr;
*xtype = i;
- this->remaining -= this->addr->sa_len;
- this->addr = (void*)this->addr + this->addr->sa_len;
+ this->remaining -= SA_LEN(this->addr->sa_len);
+ this->addr = (char*)this->addr + SA_LEN(this->addr->sa_len);
return TRUE;
}
}
len = *addr->get_sockaddr_len(addr);
memcpy((char*)hdr + hdr->rtm_msglen, addr->get_sockaddr(addr), len);
- hdr->rtm_msglen += len;
+ hdr->rtm_msglen += SA_LEN(len);
hdr->rtm_addrs |= type;
}
}
{
memcpy(sdl.sdl_data, name, sdl.sdl_nlen);
memcpy((char*)hdr + hdr->rtm_msglen, &sdl, sdl.sdl_len);
- hdr->rtm_msglen += sdl.sdl_len;
+ hdr->rtm_msglen += SA_LEN(sdl.sdl_len);
hdr->rtm_addrs |= type;
}
}