| From f113ad7822fcd691e72f61cab7412595951222db Mon Sep 17 00:00:00 2001 |
| From: Tomas Hozza <thozza@redhat.com> |
| Date: Wed, 3 Apr 2013 10:20:18 +0200 |
| Subject: [PATCH] Expose next-server DHCPv4 option to dhclient script |
| |
| Currently dhclient does not exposes next-server option |
| to the dhclient script. this patch fixes this. |
| |
| Signed-off-by: Tomas Hozza <thozza@redhat.com> |
| |
| client/dhclient.c | 14 +++++++++++--- |
| includes/dhcpd.h | 2 +- |
| 2 files changed, 12 insertions(+), 4 deletions(-) |
| |
| diff --git a/client/dhclient.c b/client/dhclient.c |
| index 551ccbf..e8df320 100644 |
| |
| |
| @@ -993,7 +993,7 @@ void state_selecting (cpp) |
| client -> state = S_REQUESTING; |
| |
| /* Bind to the address we received. */ |
| - bind_lease (client); |
| + bind_lease (client, NULL); |
| return; |
| } |
| |
| @@ -1183,11 +1183,12 @@ void dhcpack (packet) |
| if (client -> new -> rebind < cur_time) |
| client -> new -> rebind = TIME_MAX; |
| |
| - bind_lease (client); |
| + bind_lease (client, &packet -> raw -> siaddr); |
| } |
| |
| -void bind_lease (client) |
| +void bind_lease (client, siaddr) |
| struct client_state *client; |
| + struct in_addr *siaddr; |
| { |
| struct timeval tv; |
| |
| @@ -1209,6 +1210,13 @@ void bind_lease (client) |
| if (client -> alias) |
| script_write_params (client, "alias_", client -> alias); |
| |
| + if (siaddr) { |
| + char buf[INET_ADDRSTRLEN]; |
| + |
| + if (inet_ntop (AF_INET, (void *) siaddr, buf, sizeof (buf))) |
| + client_envadd (client, "new_", "next_server", "%s", buf); |
| + } |
| + |
| /* If the BOUND/RENEW code detects another machine using the |
| offered address, it exits nonzero. We need to send a |
| DHCPDECLINE and toss the lease. */ |
| diff --git a/includes/dhcpd.h b/includes/dhcpd.h |
| index 12ed2ba..4e93e68 100644 |
| |
| |
| @@ -2712,7 +2712,7 @@ void state_bound (void *); |
| void state_stop (void *); |
| void state_panic (void *); |
| |
| -void bind_lease (struct client_state *); |
| +void bind_lease (struct client_state *, struct in_addr *); |
| |
| void make_client_options (struct client_state *, |
| struct client_lease *, u_int8_t *, |
| -- |
| 1.8.1.4 |
| |