diff options
Diffstat (limited to 'patches/dhcpd-never-broadcast.diff')
| -rw-r--r-- | patches/dhcpd-never-broadcast.diff | 88 | 
1 files changed, 88 insertions, 0 deletions
diff --git a/patches/dhcpd-never-broadcast.diff b/patches/dhcpd-never-broadcast.diff new file mode 100644 index 0000000..ac6d24d --- /dev/null +++ b/patches/dhcpd-never-broadcast.diff @@ -0,0 +1,88 @@ +diff -ur isc-dhcp-4.1.1-P1/includes/dhcpd.h isc-dhcp-4.1.1-P1.patched//includes/dhcpd.h +--- isc-dhcp-4.1.1-P1/includes/dhcpd.h	2012-04-04 16:49:44.000000000 +0200 ++++ isc-dhcp-4.1.1-P1.patched//includes/dhcpd.h	2012-04-04 14:56:43.000000000 +0200 +@@ -626,6 +626,7 @@ + #define SV_LIMIT_PREFS_PER_IA		57 + #define SV_DELAYED_ACK			58 + #define SV_MAX_ACK_DELAY		59 ++#define SV_NEVER_BROADCAST		60 +  + #if !defined (DEFAULT_PING_TIMEOUT) + # define DEFAULT_PING_TIMEOUT 1 +diff -ur isc-dhcp-4.1.1-P1/server/bootp.c isc-dhcp-4.1.1-P1.patched//server/bootp.c +--- isc-dhcp-4.1.1-P1/server/bootp.c	2009-07-25 00:04:52.000000000 +0200 ++++ isc-dhcp-4.1.1-P1.patched//server/bootp.c	2012-04-04 14:55:21.000000000 +0200 +@@ -283,6 +283,15 @@ + 					   &lease -> scope, oc, MDL)) + 		raw.flags |= htons (BOOTP_BROADCAST); +  ++	/* The inverse. */ ++	if ((oc = lookup_option (&server_universe, ++				options, SV_NEVER_BROADCAST)) && ++	    evaluate_boolean_option_cache (&ignorep, packet, lease, ++					   (struct client_state *)0, ++					   packet -> options, options, ++					   &lease -> scope, oc, MDL)) ++		raw.flags &= htons (~BOOTP_BROADCAST); ++ + 	/* Figure out the address of the next server. */ + 	memset (&d1, 0, sizeof d1); + 	oc = lookup_option (&server_universe, options, SV_NEXT_SERVER); +diff -ur isc-dhcp-4.1.1-P1/server/dhcp.c isc-dhcp-4.1.1-P1.patched//server/dhcp.c +--- isc-dhcp-4.1.1-P1/server/dhcp.c	2012-04-04 16:48:46.000000000 +0200 ++++ isc-dhcp-4.1.1-P1.patched//server/dhcp.c	2012-04-04 14:55:45.000000000 +0200 +@@ -2482,6 +2482,15 @@ + 					   &lease -> scope, oc, MDL)) + 		state -> bootp_flags |= htons (BOOTP_BROADCAST); +  ++	/* The inverse. */ ++	if ((oc = lookup_option (&server_universe, state -> options, ++				SV_NEVER_BROADCAST)) && ++	    evaluate_boolean_option_cache (&ignorep, packet, lease, ++					   (struct client_state *)0, ++					   packet -> options, state -> options, ++					   &lease -> scope, oc, MDL)) ++		state -> bootp_flags &= htons (~BOOTP_BROADCAST); ++ + 	/* Get the Maximum Message Size option from the packet, if one + 	   was sent. */ + 	oc = lookup_option (&dhcp_universe, packet -> options, +diff -ur isc-dhcp-4.1.1-P1/server/dhcpd.conf.5 isc-dhcp-4.1.1-P1.patched//server/dhcpd.conf.5 +--- isc-dhcp-4.1.1-P1/server/dhcpd.conf.5	2012-04-04 16:48:46.000000000 +0200 ++++ isc-dhcp-4.1.1-P1.patched//server/dhcpd.conf.5	2012-04-04 16:45:44.000000000 +0200 +@@ -1914,6 +1914,24 @@ + .RE + .PP + The ++.I never-broadcast ++statement ++.RS 0.25i ++.PP ++.B never-broadcast \fIflag\fR\fB;\fR ++.PP ++When using DHCP in routed networks, the router has to participate in rewriting ++and sending DHCP replies on to the user.    Unfortunately, some devices, ++in particular Cisco's Nexus series of switches, drop such DHCP reply packets ++with the broadcast bit in the flags field of the DHCP message header set. ++Thi means that some operating systems, in particular Microsoft Windows Vista, ++can have problems getting DHCP to work in such environments.   If you enable ++this flag, the DHCP server will never set the broadcast flags in the replies ++it sends, even if the client set the broadcast flag.   This flag overrides ++the never-broadcast flag if both are set. ++.RE ++.PP ++The + .I always-reply-rfc1048 + statement + .RS 0.25i +diff -ur isc-dhcp-4.1.1-P1/server/stables.c isc-dhcp-4.1.1-P1.patched//server/stables.c +--- isc-dhcp-4.1.1-P1/server/stables.c	2012-04-04 16:49:44.000000000 +0200 ++++ isc-dhcp-4.1.1-P1.patched//server/stables.c	2012-04-04 14:56:43.000000000 +0200 +@@ -203,6 +203,7 @@ + 	{ "always-reply-rfc1048", "f",		&server_universe,  20, 1 }, + 	{ "site-option-space", "X",		&server_universe,  21, 1 }, + 	{ "always-broadcast", "f",		&server_universe,  22, 1 }, ++	{ "never-broadcast", "f",		&server_universe,  60, 1 }, + 	{ "ddns-domainname", "t",		&server_universe,  23, 1 }, + 	{ "ddns-hostname", "t",			&server_universe,  24, 1 }, + 	{ "ddns-rev-domainname", "t",		&server_universe,  25, 1 },  | 
