]> git.ipfire.org Git - ipfire-3.x.git/blobdiff - dhcp/patches/dhcp-4.2.5-next-server.patch
dhcp: Update to 4.2.5.
[ipfire-3.x.git] / dhcp / patches / dhcp-4.2.5-next-server.patch
diff --git a/dhcp/patches/dhcp-4.2.5-next-server.patch b/dhcp/patches/dhcp-4.2.5-next-server.patch
new file mode 100644 (file)
index 0000000..c903bd1
--- /dev/null
@@ -0,0 +1,72 @@
+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
+--- a/client/dhclient.c
++++ b/client/dhclient.c
+@@ -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
+--- a/includes/dhcpd.h
++++ b/includes/dhcpd.h
+@@ -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
+