[PATCH 1/2] dhcpc: Use client IP address as source address for DHCP renew/rebind messages

Denys Vlasenko vda.linux at googlemail.com
Thu Mar 3 01:19:42 UTC 2016


Applied, thanks!

On Thu, Feb 18, 2016 at 12:27 PM, Hans Dedecker <dedeckeh at gmail.com> wrote:
> RFC2131 paragraph 4.1 states DHCP messages broadcast by a client prior to
> that client obtaining its IP address must have the source IP address
> field in the header set to 0.
> Request messages transmitted in renewing and rebinding state need to use
> the obtained IP address as source IP address in the header; this behavior
> lines up with other implementations like ISC dhcp client.
>
> Signed-off-by: Hans Dedecker <dedeckeh at gmail.com>
> ---
>  networking/udhcp/dhcpc.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
> index 48097bc..431f807 100644
> --- a/networking/udhcp/dhcpc.c
> +++ b/networking/udhcp/dhcpc.c
> @@ -675,10 +675,10 @@ static void add_client_options(struct dhcp_packet *packet)
>   * client reverts to using the IP broadcast address.
>   */
>
> -static int raw_bcast_from_client_config_ifindex(struct dhcp_packet *packet)
> +static int raw_bcast_from_client_config_ifindex(struct dhcp_packet *packet, uint32_t src_nip)
>  {
>         return udhcp_send_raw_packet(packet,
> -               /*src*/ INADDR_ANY, CLIENT_PORT,
> +               /*src*/ src_nip, CLIENT_PORT,
>                 /*dst*/ INADDR_BROADCAST, SERVER_PORT, MAC_BCAST_ADDR,
>                 client_config.ifindex);
>  }
> @@ -689,7 +689,7 @@ static int bcast_or_ucast(struct dhcp_packet *packet, uint32_t ciaddr, uint32_t
>                 return udhcp_send_kernel_packet(packet,
>                         ciaddr, CLIENT_PORT,
>                         server, SERVER_PORT);
> -       return raw_bcast_from_client_config_ifindex(packet);
> +       return raw_bcast_from_client_config_ifindex(packet, ciaddr);
>  }
>
>  /* Broadcast a DHCP discover packet to the network, with an optionally requested IP */
> @@ -715,7 +715,7 @@ static NOINLINE int send_discover(uint32_t xid, uint32_t requested)
>         add_client_options(&packet);
>
>         bb_info_msg("Sending discover...");
> -       return raw_bcast_from_client_config_ifindex(&packet);
> +       return raw_bcast_from_client_config_ifindex(&packet, INADDR_ANY);
>  }
>
>  /* Broadcast a DHCP request message */
> @@ -759,7 +759,7 @@ static NOINLINE int send_select(uint32_t xid, uint32_t server, uint32_t requeste
>
>         addr.s_addr = requested;
>         bb_info_msg("Sending select for %s...", inet_ntoa(addr));
> -       return raw_bcast_from_client_config_ifindex(&packet);
> +       return raw_bcast_from_client_config_ifindex(&packet, INADDR_ANY);
>  }
>
>  /* Unicast or broadcast a DHCP renew message */
> @@ -827,7 +827,7 @@ static NOINLINE int send_decline(/*uint32_t xid,*/ uint32_t server, uint32_t req
>         udhcp_add_simple_option(&packet, DHCP_SERVER_ID, server);
>
>         bb_info_msg("Sending decline...");
> -       return raw_bcast_from_client_config_ifindex(&packet);
> +       return raw_bcast_from_client_config_ifindex(&packet, INADDR_ANY);
>  }
>  #endif
>
> --
> 1.9.1
>
> _______________________________________________
> busybox mailing list
> busybox at busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox


More information about the busybox mailing list