From 6eed0fbbaa4a68cc76f608ce418a2cc8b0d4841d Mon Sep 17 00:00:00 2001 From: "Alan T. DeKok" Date: Fri, 11 Apr 2014 14:19:22 -0400 Subject: [PATCH] Allow DHCP NAKs to be delayed via response:FreeRADIUS-Response-Delay --- share/dictionary.freeradius.internal | 4 ++++ src/include/radius.h | 2 ++ src/modules/proto_dhcp/dhcpd.c | 14 ++++++++++++++ 3 files changed, 20 insertions(+) diff --git a/share/dictionary.freeradius.internal b/share/dictionary.freeradius.internal index 9b1203b..37b8926 100644 --- a/share/dictionary.freeradius.internal +++ b/share/dictionary.freeradius.internal @@ -247,6 +247,10 @@ ATTRIBUTE EAP-Session-Id 1146 octets ATTRIBUTE Acct-Input-Octets64 1148 integer64 ATTRIBUTE Acct-Output-Octets64 1149 integer64 +# 1150 and 1151 are defined above, as FreeRADIUS-Client-... + +ATTRIBUTE FreeRADIUS-Response-Delay 1152 integer + # # Range: 1200-1279 # EAP-SIM (and other EAP type) weirdness. diff --git a/src/include/radius.h b/src/include/radius.h index f36713f..44a18d7 100644 --- a/src/include/radius.h +++ b/src/include/radius.h @@ -259,6 +259,8 @@ typedef enum { #define PW_OTP_CHALLENGE 1145 #define PW_EAP_SESSION_ID 1146 +#define PW_FREERADIUS_RESPONSE_DELAY 1152 + /* * Integer Translations */ diff --git a/src/modules/proto_dhcp/dhcpd.c b/src/modules/proto_dhcp/dhcpd.c index 7b08ceb4..861718a 100644 --- a/src/modules/proto_dhcp/dhcpd.c +++ b/src/modules/proto_dhcp/dhcpd.c @@ -418,6 +418,20 @@ static int dhcp_process(REQUEST *request) vp->vp_integer = 2; /* BOOTREPLY */ /* + * Allow NAKs to be delayed for a short period of time. + */ + if (request->reply->code == PW_DHCP_NAK) { + vp = pairfind(request->reply->vps, PW_FREERADIUS_RESPONSE_DELAY, 0, TAG_ANY); + if (vp) { + if (vp->vp_integer <= 10) { + request->response_delay = vp->vp_integer; + } else { + request->response_delay = 10; + } + } + } + + /* * Prepare the reply packet for sending through dhcp_socket_send() */ request->reply->dst_ipaddr.af = AF_INET; -- 2.1.4