Some clients have a very short timeout for sending the DHCP DISCOVER, shorter than the arpping timeout of 2000 milliseconds that udhcpd uses by default.
This patch allows tweaking the timeout, or disabling of arpping altogether, at the risk of handing out addresses which are already in use. Signed-off-by: Michel Stam <m.s...@fugro.nl> --- package/utils/busybox/Config-defaults.in | 6 ++ .../busybox/config/networking/udhcp/Config.in | 20 ++++++ .../utils/busybox/patches/245-udhcp_arpping.patch | 73 ++++++++++++++++++++++ 3 files changed, 99 insertions(+) create mode 100644 package/utils/busybox/patches/245-udhcp_arpping.patch diff --git a/package/utils/busybox/Config-defaults.in b/package/utils/busybox/Config-defaults.in index 5f5bdd0..dfed895 100644 --- a/package/utils/busybox/Config-defaults.in +++ b/package/utils/busybox/Config-defaults.in @@ -2221,6 +2221,9 @@ config BUSYBOX_DEFAULT_FEATURE_UDHCPD_WRITE_LEASES_EARLY config BUSYBOX_DEFAULT_FEATURE_UDHCPD_BASE_IP_ON_MAC bool default n +config BUSYBOX_DEFAULT_FEATURE_UDHCPD_ARPPING + bool + default y config BUSYBOX_DEFAULT_DHCPD_LEASES_FILE string default "" @@ -2236,6 +2239,9 @@ config BUSYBOX_DEFAULT_FEATURE_UDHCP_PORT config BUSYBOX_DEFAULT_UDHCP_DEBUG int default 0 +config BUSYBOX_DEFAULT_UDHCP_ARPPING_TIMEOUT + int + default 2000 config BUSYBOX_DEFAULT_FEATURE_UDHCP_RFC3397 bool default y diff --git a/package/utils/busybox/config/networking/udhcp/Config.in b/package/utils/busybox/config/networking/udhcp/Config.in index 576a01a..b6f84d1 100644 --- a/package/utils/busybox/config/networking/udhcp/Config.in +++ b/package/utils/busybox/config/networking/udhcp/Config.in @@ -61,6 +61,16 @@ config BUSYBOX_CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC for the same client to (almost always) contain the same IP address. +config BUSYBOX_CONFIG_FEATURE_UDHCPD_ARPPING + bool "arpping addresses before offering" + default BUSYBOX_DEFAULT_FEATURE_UDHCPD_ARPPING + depends on BUSYBOX_CONFIG_UDHCPD + help + If selected, udhcpd will perform an arpping before offering an + address for a lease. + + This increases server response time. + config BUSYBOX_CONFIG_DHCPD_LEASES_FILE string "Absolute path to lease file" default BUSYBOX_DEFAULT_DHCPD_LEASES_FILE @@ -110,6 +120,16 @@ config BUSYBOX_CONFIG_UDHCP_DEBUG Bigger values result in bigger code. Levels above 1 are very verbose and useful for debugging only. +config BUSYBOX_CONFIG_UDHCP_ARPPING_TIMEOUT + int "Timeout in msec for arppings sent" + default BUSYBOX_DEFAULT_UDHCP_ARPPING_TIMEOUT + depends on BUSYBOX_CONFIG_FEATURE_UDHCPC_ARPING || BUSYBOX_CONFIG_FEATURE_UDHCPD_ARPPING + help + Set the number of milliseconds to wait for arppings + to timeout. + + Bigger values result in an increase in response time. + config BUSYBOX_CONFIG_FEATURE_UDHCP_RFC3397 bool "Support for RFC3397 domain search (experimental)" default BUSYBOX_DEFAULT_FEATURE_UDHCP_RFC3397 diff --git a/package/utils/busybox/patches/245-udhcp_arpping.patch b/package/utils/busybox/patches/245-udhcp_arpping.patch new file mode 100644 index 0000000..91f86ee --- /dev/null +++ b/package/utils/busybox/patches/245-udhcp_arpping.patch @@ -0,0 +1,73 @@ +diff -r -U 3 -p busybox-1.19.4/networking/udhcp/Config.src busybox-1.19.4/networking/udhcp/Config.src +--- busybox-1.19.4/networking/udhcp/Config.src 2012-02-04 20:24:55.000000000 +0100 ++++ busybox-1.19.4/networking/udhcp/Config.src 2014-05-02 14:22:49.389127249 +0200 +@@ -55,6 +55,16 @@ config FEATURE_UDHCPD_BASE_IP_ON_MAC + for the same client to (almost always) contain the same + IP address. + ++config FEATURE_UDHCPD_ARPPING ++ bool "arpping addresses before offering" ++ default y ++ depends on UDHCPD ++ help ++ If selected, udhcpd will perform an arpping before offering an ++ address for a lease. ++ ++ This increases server response time. ++ + config DHCPD_LEASES_FILE + string "Absolute path to lease file" + default "/var/lib/misc/udhcpd.leases" +@@ -104,6 +114,16 @@ config UDHCP_DEBUG + Bigger values result in bigger code. Levels above 1 + are very verbose and useful for debugging only. + ++config UDHCP_ARPPING_TIMEOUT ++ int "Timeout in msec for arppings sent" ++ default 2000 ++ depends on FEATURE_UDHCPC_ARPPING || FEATURE_UDHCPD_ARPPING ++ help ++ Set the number of milliseconds to wait for arppings ++ to timeout. ++ ++ Bigger values result in an increase in response time. ++ + config FEATURE_UDHCP_RFC3397 + bool "Support for RFC3397 domain search (experimental)" + default y +diff -r -U 3 -p busybox-1.19.4/networking/udhcp/arpping.c busybox-1.19.4/networking/udhcp/arpping.c +--- busybox-1.19.4/networking/udhcp/arpping.c 2012-02-04 20:24:55.000000000 +0100 ++++ busybox-1.19.4/networking/udhcp/arpping.c 2014-05-02 14:22:49.389127249 +0200 +@@ -83,7 +83,7 @@ int FAST_FUNC arpping(uint32_t test_nip, + } + + /* wait for arp reply, and check it */ +- timeout_ms = 2000; ++ timeout_ms = CONFIG_UDHCP_ARPPING_TIMEOUT; + do { + typedef uint32_t aliased_uint32_t FIX_ALIASING; + int r; +diff -r -U 3 -p busybox-1.19.4/networking/udhcp/leases.c busybox-1.19.4/networking/udhcp/leases.c +--- busybox-1.19.4/networking/udhcp/leases.c 2012-02-04 20:24:55.000000000 +0100 ++++ busybox-1.19.4/networking/udhcp/leases.c 2014-05-02 14:23:51.000957796 +0200 +@@ -112,8 +112,9 @@ struct dyn_lease* FAST_FUNC find_lease_b + } + + /* Check if the IP is taken; if it is, add it to the lease table */ +-static int nobody_responds_to_arp(uint32_t nip, const uint8_t *safe_mac) ++static int nobody_responds_to_arp(uint32_t nip, const uint8_t *safe_mac UNUSED_PARAM) + { ++#if ENABLE_FEATURE_UDHCPD_ARPPING + struct in_addr temp; + int r; + +@@ -129,6 +130,9 @@ static int nobody_responds_to_arp(uint32 + inet_ntoa(temp), (unsigned)server_config.conflict_time); + add_lease(NULL, nip, server_config.conflict_time, NULL, 0); + return 0; ++#else ++ return 1; ++#endif + } + + /* Find a new usable (we think) address */ -- 1.7.12.1 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel