From bc252caa54fcfb2e9fd0ddb01ebaa50192e85c38 Mon Sep 17 00:00:00 2001
From: Alex Williamson <alex.williamson@redhat.com>
Date: Wed, 21 Oct 2015 11:18:40 +0200
Subject: Use spec compliant timeouts
Message-id: <20150428212403.31299.29391.stgit@gimli.home>
Patchwork-id: 64951
O-Subject: [RHEL7.2 ipxe PATCH 2/2] [dhcp][RHEL-only] Use spec compliant timeouts
Bugzilla: 1196352
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
RH-Acked-by: Gerd Hoffmann <kraxel@redhat.com>
RH-Acked-by: Laszlo Ersek <lersek@redhat.com>
Use local config to override iPXE's abbreviated DHCP timeouts using
the recommended values for spec compliance. This matches the state
of RHEL6 gPXE DHCP timeouts after bz968474 + bz1206042
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
(cherry picked from commit 7038f41c0131d263de5165b416500009acdbf550)
---
src/config/local/.gitignore | 1 -
src/config/local/dhcp.h | 62 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 62 insertions(+), 1 deletion(-)
delete mode 100644 src/config/local/.gitignore
create mode 100644 src/config/local/dhcp.h
diff --git a/src/config/local/dhcp.h b/src/config/local/dhcp.h
new file mode 100644
index 0000000..83df5b8
--- /dev/null
+++ b/src/config/local/dhcp.h
@@ -0,0 +1,62 @@
+/*
+ * Downstream localization
+ *
+ * For RHEL, use spec compliant DHCP timeouts (bz1196352)
+ */
+
+/*
+ * PXE spec defines timeouts of 4, 8, 16, 32 seconds
+ */
+#undef DHCP_DISC_START_TIMEOUT_SEC
+#define DHCP_DISC_START_TIMEOUT_SEC 4
+#undef DHCP_DISC_END_TIMEOUT_SEC
+#define DHCP_DISC_END_TIMEOUT_SEC 32
+
+/*
+ * Elapsed time used for early break waiting for ProxyDHCP, this therefore
+ * needs to be less than the cumulative time for the first 2 timeouts.
+ */
+#undef DHCP_DISC_PROXY_TIMEOUT_SEC
+#define DHCP_DISC_PROXY_TIMEOUT_SEC 11
+
+/*
+ * Approximate PXE spec requirement using minimum timeout (0.25s) for
+ * timeouts of 0.25, 0.5, 1, 2, 4
+ */
+#undef DHCP_REQ_START_TIMEOUT_SEC
+#define DHCP_REQ_START_TIMEOUT_SEC 0
+#undef DHCP_REQ_END_TIMEOUT_SEC
+#define DHCP_REQ_END_TIMEOUT_SEC 4
+
+/*
+ * Same as normal request phase, except non-fatal, so we extend the timer
+ * to 8 and set the early timeout to an elapsed time value that causes a
+ * break after the 4 second timeout. At least that's what we'd like to do,
+ * but our timer operates at 18Hz and has a minimum resolution of 7 cycles.
+ * Therefore the above quarter-second starting timeout looks more like
+ * 0.39s, 0.78s, 1.56s, 3.11s, 6.22s. If we had an ideal timer, we could
+ * set the timeout to 7s (0.25 + 0.5 + 1 + 2 + 4 = 7.75s) and exit without
+ * failure when the timer rolls over to 8s. With our timer, we get 0.39 +
+ * 0.78 + 1.56 + 3.11 = 5.84s. The next timeout would take us to 12.06s
+ * (+6.22). That seems like a long time to wait for an optional reply, so
+ * we reduce the early timeout to 5s to exit before the timer exceeds the
+ * max and causes a failure. This still adds one extra cycle vs the
+ * upstream defaults.
+ */
+#undef DHCP_PROXY_START_TIMEOUT_SEC
+#define DHCP_PROXY_START_TIMEOUT_SEC 0
+#undef DHCP_PROXY_END_TIMEOUT_SEC
+#define DHCP_PROXY_END_TIMEOUT_SEC 8
+#undef DHCP_REQ_PROXY_TIMEOUT_SEC
+#define DHCP_REQ_PROXY_TIMEOUT_SEC 5
+
+/*
+ * Same as above, retry each server using our approximation of standard
+ * timeouts and exit before timer induced failure.
+ */
+#undef PXEBS_START_TIMEOUT_SEC
+#define PXEBS_START_TIMEOUT_SEC 0
+#undef PXEBS_END_TIMEOUT_SEC
+#define PXEBS_END_TIMEOUT_SEC 8
+#undef PXEBS_MAX_TIMEOUT_SEC
+#define PXEBS_MAX_TIMEOUT_SEC 5
--
1.8.3.1