aboutsummaryrefslogtreecommitdiff
path: root/networking/udhcp/arpping.c
diff options
context:
space:
mode:
Diffstat (limited to 'networking/udhcp/arpping.c')
-rw-r--r--networking/udhcp/arpping.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/networking/udhcp/arpping.c b/networking/udhcp/arpping.c
index b43e52e96..fad2283c3 100644
--- a/networking/udhcp/arpping.c
+++ b/networking/udhcp/arpping.c
@@ -39,7 +39,8 @@ int FAST_FUNC arpping(uint32_t test_nip,
const uint8_t *safe_mac,
uint32_t from_ip,
uint8_t *from_mac,
- const char *interface)
+ const char *interface,
+ unsigned timeo)
{
int timeout_ms;
struct pollfd pfd[1];
@@ -48,6 +49,9 @@ int FAST_FUNC arpping(uint32_t test_nip,
struct sockaddr addr; /* for interface name */
struct arpMsg arp;
+ if (!timeo)
+ return 1;
+
s = socket(PF_PACKET, SOCK_PACKET, htons(ETH_P_ARP));
if (s == -1) {
bb_perror_msg(bb_msg_can_not_create_raw_socket);
@@ -83,7 +87,7 @@ int FAST_FUNC arpping(uint32_t test_nip,
}
/* wait for arp reply, and check it */
- timeout_ms = 2000;
+ timeout_ms = (int)timeo;
do {
typedef uint32_t aliased_uint32_t FIX_ALIASING;
int r;
@@ -124,7 +128,7 @@ int FAST_FUNC arpping(uint32_t test_nip,
* this is more under/overflow-resistant
* (people did see overflows here when system time jumps):
*/
- } while ((unsigned)timeout_ms <= 2000);
+ } while ((unsigned)timeout_ms <= timeo);
ret:
close(s);