udhcpc: Wrong lease time is passed to the --script (PATCH)
Markus Gothe
nietzsche at lysator.liu.se
Wed Jul 15 19:15:53 UTC 2020
Hi Karel,
nice patch.
There are two different standpoints here; one is to do like you
suggests. The other is to pass what the server actually provides to the
script.
My personal opinion is to fix-up this in the script itself if necessary,
else it will introduce an unexpected behavior.
BR,
Markus
On 2020-07-15 18:15, Karel Dolezal wrote:
> Hi,
>
> I've noticed udhcpc was not attempting to renew the address in time,
> in case the server offered
> only 30s lease time. The reason ended up being the "--script" which I
> use to install the address.
> It was still getting the 30s value, whereas udhcpc internally corrects
> the 30s value into 122s.
>
> Please see the proposed patch below.
>
> Best regards
> Karel
>
>
>
> Fixes DHCP lease time passed from udhcpc into the "--script"
>
> For unusually short leases, udhcpc enforces a minimum lease time to avoid
> excessive network traffic.
>
> The original, unadjusted value, was however still being passed to the dhcp
> event script, which was making it install the obtained IP address with a
> lifetime shorter than the udhcpc's renewal period. As a result, the address
> aged out and was removed without udhcpc attempting a renewal for some time.
>
> This patch writes the corrected value back to the packet variable, from which
> the script's environment is populated.
>
> Signed-off-by: Karel Dolezal <karel.dolezal at ui.com>
>
> --- a/networking/udhcp/dhcpc.c 2020-07-10 11:11:43.229706806 +0200
> +++ b/networking/udhcp/dhcpc.c 2020-07-10 11:17:30.366254882 +0200
> @@ -1867,16 +1867,21 @@ int udhcpc_main(int argc UNUSED_PARAM, c
> lease_seconds = 60 * 60;
> } else {
> /* it IS unaligned sometimes, don't "optimize" */
> move_from_unaligned32(lease_seconds, temp);
> lease_seconds = ntohl(lease_seconds);
> /* paranoia: must not be too small and not prone to overflows */
> /* timeout > 60 - ensures at least one unicast renew attempt */
> - if (lease_seconds < 2 * 61)
> + if (lease_seconds < 2 * 61) {
> lease_seconds = 2 * 61;
> + /* The --script reads from the &packet variable itself. */
> + /* Write the adjusted value back there, to give script */
> + /* the same lease time as we'll use internally. */
> + move_to_unaligned32(temp, htonl(lease_seconds));
> + }
> //if (lease_seconds > 0x7fffffff)
> // lease_seconds = 0x7fffffff;
> //^^^not necessary since "timeout = lease_seconds / 2"
> //does not overflow even for 0xffffffff.
> }
> #if ENABLE_FEATURE_UDHCPC_ARPING
> if (opt & OPT_a) {
> _______________________________________________
> busybox mailing list
> busybox at busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
More information about the busybox
mailing list