From: Dax Kelson
To: Etherboot users list
Subject: [Etherboot-users] Example ISC DHCP v3 dhcpd.conf using conditional operations
Date: Wed, 13 Jun 2001 20:22:21 -0600

Hopefully someone will find this useful.  I spent a long time tracking
down and figuring out all the pieces.  To the powers that be, feel free to
stick this in contrib if you like it.

Goal:  Use the vendor-class-identifier and ISC DHCP v3 "match" option to
conditionally send proper options only when the DHCP discover/request from
etherboot comes in.  We use static-MAC-to-IP mappings for classroom
computers, and dynamic dhcp ranges for other clients (student laptops,
etc).

I used Etherboot 5.0.1 and the patch (required) in this email:

http://www.geocrawler.com/lists/3/SourceForge/5299/0/5952625/

Furture versions of Etherboot will likely already have this patch
included.

Dax Kelson
Guru Labs

######### Begin ISC DHCP v3 dhcpd.conf #############

ddns-update-style ad-hoc;

# Global default, can be overridden
filename "/exports/kickstart/class1-rh7.1.ks";

# Define options for Etherboot
# There are more, these are just the ones I'm using
option ebootmagic code 128 = string;
option cmdline code 129 = string;
option menudflts code 160 = string;
option menuline1 code 192 = string;
option menuline2 code 193 = string;
option menuline3 code 194 = string;
option menuline4 code 195 = string;
option menuline5 code 196 = string;
option menuline6 code 197 = string;
option menuline7 code 198 = string;
option menuline8 code 199 = string;
option menuline9 code 200 = string;
option menuline10 code 201 = string;
option menuline11 code 202 = string;
option menuline12 code 203 = string;
option menuline13 code 204 = string;
option menuline14 code 205 = string;
option menuline15 code 206 = string;
option menuline16 code 207 = string;
option motdline1 code 184 = string;

class "Etherboot" {
    match if substring (option vendor-class-identifier, 0, 9) = "Etherboot";

        option ebootmagic  = E4:45:74:68:00:00;

# We don't use this here, because different menu items require
# different cmdlines.  In our ".nbi" files we specify the cmdlines

#        option cmdline  = "ks initrd=initrd.img lang= devfs=nomount";

        option motdline1  = "Welcome to Guru Labs classroom";

        option menudflts  = "timeout=30:default=192";

        option menuline1  = "Boot from Hard Drive (Default):::/dev/hda:::";
        option menuline2  = "Boot from Floppy:::/dev/fd0:::";
        option menuline3  = "Boot from CDROM::::::";
        option menuline4  = "Kickstart install Red Hat 7.1:::rh71-ks-etherboot.nbi:::";
        option menuline5  = "Red Hat 7.1 network rescue:::rh71-rescue-etherboot.nbi:::";
        option menuline6  = "Boot Win98SE startup floppy:::win98se-startupdisk.nbi:::";
        option menuline7  = "Jumpstart install Solaris 8 (not working yet):::/dev/hda:::";
        option menuline8  = "Install Windows 98 SE (not working yet):::/dev/hda:::";
        option menuline9  = "Install Windows 2000 (not working yet):::/dev/hda:::";
        option menuline10  = "Install FreeBSD 4.3 (not working yet):::/dev/hda:::";
        option menuline11  = "Install OpenBSD 2.9 (not working yet):::/dev/hda:::";

	# This is a hidden menu item, it should be password protected too
        option menuline12  = "^[[3D^[[K^[[1A^M:::/dev/hda:::";

# We are using the menu, with different bootfiles.  So we don't use this.
# If you weren't using a menu, you could use this override the global
# default "filename" setting.

#        filename "rh71-ks-etherboot";

# Use the following if etherboot compiled with -DREQUIRE_VCI_ETHERBOOT

        option vendor-encapsulated-options 3c:09:45:74:68:65:72:62:6f:6f:74:ff;

}

subnet 10.100.0.0 netmask 255.255.255.0 {
        authoritative;
        option routers                  10.100.0.254;
        option subnet-mask              255.255.255.0;
        option domain-name              "example.com";
        option domain-name-servers      10.100.0.254;
        option time-offset              -7; # US/Mountain
        option ntp-servers              10.100.0.254;
        range dynamic-bootp 10.100.0.175 10.100.0.250;
        default-lease-time 21600;
        max-lease-time 43200;
        option netbios-name-servers     10.100.0.254;
        option netbios-node-type 2;
        use-host-decl-names on;
        next-server server1.example.com;

}

host station1 {
        hardware ethernet 00:01:03:de:57:e2;
        fixed-address 10.100.0.1;
}
host station2 {
        hardware ethernet 00:01:03:de:57:e7;
        fixed-address 10.100.0.2;
}
host station3 {
        hardware ethernet 00:01:03:de:57:b4;
        fixed-address 10.100.0.3;
}
host station4 {
        hardware ethernet 00:01:03:de:57:38;
        fixed-address 10.100.0.4;
}
host station5 {
        hardware ethernet 00:01:03:de:58:3d;
        fixed-address 10.100.0.5;
}

#
# Etc, etc
#

############## End ISC DHCP v3 dhcpd.conf #############
