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,
39 const uint8_t *safe_mac, 39 const uint8_t *safe_mac,
40 uint32_t from_ip, 40 uint32_t from_ip,
41 uint8_t *from_mac, 41 uint8_t *from_mac,
42 const char *interface) 42 const char *interface,
43 unsigned timeo)
43{ 44{
44 int timeout_ms; 45 int timeout_ms;
45 struct pollfd pfd[1]; 46 struct pollfd pfd[1];
@@ -48,6 +49,9 @@ int FAST_FUNC arpping(uint32_t test_nip,
48 struct sockaddr addr; /* for interface name */ 49 struct sockaddr addr; /* for interface name */
49 struct arpMsg arp; 50 struct arpMsg arp;
50 51
52 if (!timeo)
53 return 1;
54
51 s = socket(PF_PACKET, SOCK_PACKET, htons(ETH_P_ARP)); 55 s = socket(PF_PACKET, SOCK_PACKET, htons(ETH_P_ARP));
52 if (s == -1) { 56 if (s == -1) {
53 bb_perror_msg(bb_msg_can_not_create_raw_socket); 57 bb_perror_msg(bb_msg_can_not_create_raw_socket);
@@ -83,7 +87,7 @@ int FAST_FUNC arpping(uint32_t test_nip,
83 } 87 }
84 88
85 /* wait for arp reply, and check it */ 89 /* wait for arp reply, and check it */
86 timeout_ms = 2000; 90 timeout_ms = (int)timeo;
87 do { 91 do {
88 typedef uint32_t aliased_uint32_t FIX_ALIASING; 92 typedef uint32_t aliased_uint32_t FIX_ALIASING;
89 int r; 93 int r;
@@ -124,7 +128,7 @@ int FAST_FUNC arpping(uint32_t test_nip,
124 * this is more under/overflow-resistant 128 * this is more under/overflow-resistant
125 * (people did see overflows here when system time jumps): 129 * (people did see overflows here when system time jumps):
126 */ 130 */
127 } while ((unsigned)timeout_ms <= 2000); 131 } while ((unsigned)timeout_ms <= timeo);
128 132
129 ret: 133 ret:
130 close(s); 134 close(s);