diff --git a/src/neigh.c b/src/neigh.c index cc99ae2e026e6ee0fb0e1d8ac4b2c65b04d79630..fe05a51d2b74d84b55b7e8da0c48cc9c1ef7d29f 100644 --- a/src/neigh.c +++ b/src/neigh.c @@ -493,14 +493,20 @@ static void neigh_probing_timer_run(atimer_t *t) getcurrtime(&now); list_for_each_entry(x, &e->iplist, list) { + char mifname[16] = {0}; char cmd[256] = {0}; char ipbuf[46] = {0}; + int mifindex = 0; if (x->ip.family != AF_INET) continue; inet_ntop(x->ip.family, &x->ip.addr, ipbuf, sizeof(ipbuf)); - snprintf(cmd, 255, "arping -q -I %s -c 1 -w 1 -f %s &", e->ifname, ipbuf); + mifindex = if_isbridge_interface(e->ifname); + if (mifindex > 0 && if_indextoname(mifindex, mifname)) + snprintf(cmd, 255, "arping -q -I %s -c 1 -w 1 -f %s &", mifname, ipbuf); + else + snprintf(cmd, 255, "arping -q -I %s -c 1 -w 1 -f %s &", e->ifname, ipbuf); dbg("[%jd.%jd] %s\n", (uintmax_t)now.tv_sec, (uintmax_t)now.tv_usec, cmd); runCmd(cmd); /* Flawfinder: ignore */ }