--- a/arp.c +++ b/arp.c @@ -366,7 +366,7 @@ void *arp(char *ifname) do { pthread_testcancel(); /* Sleep a bit in order not to overload the system */ - usleep(300); + usleep(3000); if (arp_recv(sock, &frame) <= 0) continue; --- a/parprouted.c +++ b/parprouted.c @@ -106,7 +106,7 @@ int route_remove(ARPTAB_ENTRY* cur_entry int success = 1; if (snprintf(routecmd_str, ROUTE_CMD_LEN-1, - "/sbin/ip route del %s/32 metric 50 dev %s scope link", + "/sbin/route del -host %s metric 50 dev %s", inet_ntoa(cur_entry->ipaddr_ia), cur_entry->ifname) > ROUTE_CMD_LEN-1) { syslog(LOG_INFO, "ip route command too large to fit in buffer!"); @@ -136,7 +136,7 @@ int route_add(ARPTAB_ENTRY* cur_entry) int success = 1; if (snprintf(routecmd_str, ROUTE_CMD_LEN-1, - "/sbin/ip route add %s/32 metric 50 dev %s scope link", + "/sbin/route add -host %s metric 50 dev %s", inet_ntoa(cur_entry->ipaddr_ia), cur_entry->ifname) > ROUTE_CMD_LEN-1) { syslog(LOG_INFO, "ip route command too large to fit in buffer!");