#
# Enable proxyDHCP operation.
#
dhcpd-operation normal;

#
# BootServer is turned on
#
bootserver-operation on;

ddns-update-style ad-hoc;

#
# if this dhcpd server is not "master"
#
not authoritative;

#-------------------------------------------------------------
# For each of the 3 servers (builtin) define the DHCPD option
# tags we are interested in.
#-------------------------------------------------------------

#
# Define DHCPD request option tags
#

#
# This option is used to determine the client boot-time binary runtime
# environment.
#
option client-architecture code 93 =
	unsigned integer 16;

#
# Now go to the DHCPD proxy option tags
#
option space proxy;

option proxy.boot-prompt code 10 =
	{ unsigned integer 8, text };

option proxy.boot-menu code 9 = array of
	{ unsigned integer 16, unsigned integer 8, text };

option proxy.boot-servers code 8 = array of
	{ unsigned integer 16, unsigned integer 8, array of ip-address };

option proxy.discovery-control code 6 = unsigned integer 8;

#
# Now go to the PXE Bootserver options
#
option space bs;

option bs.boot-item code 71 =
	{ unsigned integer 16, unsigned integer 16 };

#-------------------------------------------------------------
# Actual configuration
#-------------------------------------------------------------

subnet 192.168.2.0 netmask 255.255.255.0 {
#
# In this section define regular DHCPD options
#

	#
	# Here we show settings with fixed addresses, but dynamic 
	# allocation is possible as well
	#
	host test1 {
		hardware ethernet 00:d0:b7:c7:fb:f8;
		fixed-address 192.168.2.10;
	}
	host test2 {
		hardware ethernet 00:d0:b7:aa:f0:e3;
		fixed-address 192.168.2.11;
	}

	#
	# Now we look at options for every possible type of requests
	#


	#
	#
	# If requets was received by the ProxyDHCPD
	if proxy {

		#
		# Provide proxyDHCP information for Intel ia64
		# architecture machines.
		# 
		if option client-architecture = 00:02 {
			#
			# Notify of PXE aware server
			#
			option vendor-class-identifier "PXEClient";
	
			#
			# Force unicast
			#
			option proxy.discovery-control 3;

			#
			# Print a nice boot menu
			#
			# ServerTypes:
			# 14 -> means Redhat install 
			# 13 -> means Redhat Boot 
			# 23 & 26 are length of string following. 
			#
			option proxy.boot-menu
			14 23 "Remote Redhat/ia64 boot",
			13 26 "Remote Redhat/ia64 install";

			#
			# list of possible bootservers for a ServerType
			#
			# Currently not possible to define more than one type
			#
			option proxy.boot-servers
			14 1 192.168.2.32;

			#
			# A boot prompt
			# 30 is timeout in seconds
			#
			option proxy.boot-prompt
			30 "Press <F8> or <M> for menu. Press <Esc> to local boot.";

			#
			#
			vendor-option-space proxy;
		}
	} else if bootserver {

		if option client-architecture = 00:02 {
			#
			# Now analyze bootserver request option tags
			#


			# ELILO Layering:
			#	Layer 0: bootloader binary (elilo.efi)
			#	Layer 1: elilo configuration file (elilo.conf)
			#	Layer 2: Linux/ia64 kernel

			if substring(option bs.boot-item, 2, 2) = 00:00 {

				filename "/tftpboot/elilo.efi";
	
				#
				# identify reply layer & server type
				#
				option bs.boot-item 14 0;

			} else if substring(option bs.boot-item, 2, 2) = 00:01 {

				filename "/tftpboot/elilo.conf";

				#
				# identify reply layer & server type
				#
				option bs.boot-item 14 1;

			} else if substring(option bs.boot-item, 2, 3) = 00:02 {

				filename "/tftpboot/vmlinux";

				#
				# identify reply layer & server type
				#
				option bs.boot-item 14 2;
			}
			#
			#
			vendor-option-space bs;

			option vendor-class-identifier "PXEClient";
		}
	} else {
		#
		# notify of PXE aware DHCPD server
		#
		option vendor-class-identifier "PXEClient";
	}
}
