X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=mqtt-arp.c;h=71d8567e39653ca73b2fc75b5d70eebdc676ca02;hb=e6c7ebbe87ce08a21b3b5d77b82f7a03efa32e88;hp=19da3304117ace9589b3d17cf148cf89484aaaad;hpb=6121bfeaf48b68f62c814ca094f5ffb2d32b7dc2;p=mqtt-arp.git diff --git a/mqtt-arp.c b/mqtt-arp.c index 19da330..71d8567 100644 --- a/mqtt-arp.c +++ b/mqtt-arp.c @@ -197,19 +197,20 @@ void main_loop(struct ma_config *config, struct mosquitto *mosq, int sock) nd->ndm_type); } attr = (struct nlattr *) (nd + 1); - while (attr->nla_len > 0) { - data = (((uint8_t *) attr) + 4); + while (((uint8_t *) attr - buf) < hdr->nlmsg_len) { + data = (((uint8_t *) attr) + NLA_HDRLEN); if (attr->nla_type == NDA_LLADDR && nd->ndm_state == NUD_REACHABLE) { mqtt_mac_presence(config, mosq, data, true); } - attr = (struct nlattr *) - (((uint8_t *) attr) + attr->nla_len); + attr = (struct nlattr *) (((uint8_t *) attr) + + NLA_ALIGN(attr->nla_len)); } break; case RTM_DELNEIGH: case RTM_GETNEIGH: + break; default: printf("Unknown message type: %d\n", hdr->nlmsg_type); }