Ah, yes - I see the issue now. I'll update that when I get back. And I apologize for the top posting! My phone's email client doesn't do inline too well...
Sent from my Verizon, Samsung Galaxy smartphone -------- Original message -------- From: Sven Eckelmann <s...@narfation.org> Date: 10/25/18 3:42 AM (GMT-07:00) To: b.a.t.m.a.n@lists.open-mesh.org Cc: Jonathan Haws <jh...@sdl.usu.edu>, guohuizou2...@sina.com Subject: Re: [B.A.T.M.A.N.] [PATCH v2] alfred: Request MAC resolution for IPv4 address not in ARP cache On Mittwoch, 24. Oktober 2018 13:21:28 CEST Jonathan Haws wrote: [...] > > + while (retries-- && !(arpreq.arp_flags & ATF_COM)) { > + ipv4_request_mac_resolve(addr); > + usleep(200000); > + > + if (ioctl(interface->netsock, SIOCGARP, &arpreq) < 0) > + return -1; > + } > + > if (arpreq.arp_flags & ATF_COM) { > memcpy(mac, arpreq.arp_ha.sa_data, sizeof(*mac)); > } else { According to gary [1], this doesn't work because the ioctl fails for him and then the function returns immediately (before the while loop). Please adjust your patch - but please don't use his code - it looks rather ugly and also doesn't work for multiple retries. You most likely want to drop the if-ioctl completely and then put everything in your while loop: while (ioctl(interface->netsock, SIOCGARP, &arpreq) < 0 || !(arpreq.arp_flags & ATF_COM)) { if (retries-- <= 0) break; ipv4_request_mac_resolve(addr); usleep(200000); } But feel to propose a different (cleaner) approach. Kind regards, Sven [1] https://lists.open-mesh.org/pipermail/b.a.t.m.a.n/2018-October/018195.html