# Sample udhcpd configuration file (/etc/udhcpd.conf)
# Values shown are defaults

# The start and end of the IP lease block
start		192.168.0.20
end		192.168.0.254

# The interface that udhcpd will use
interface	eth0

# The maximum number of leases (includes addresses reserved
# by OFFER's, DECLINE's, and ARP conflicts). Will be corrected
# if it's bigger than IP lease block, but it ok to make it
# smaller than lease block.
#max_leases	254

# The amount of time that an IP will be reserved (leased to nobody)
# if a DHCP decline message is received (seconds)
#decline_time	3600

# The amount of time that an IP will be reserved
# if an ARP conflict occurs (seconds)
#conflict_time	3600

# How long an offered address is reserved (seconds)
#offer_time	60

# If client asks for lease below this value, it will be rounded up
# to this value (seconds)
#min_lease	60

# The location of the pid file
#pidfile	/var/run/udhcpd.pid

# The location of the leases file
#lease_file	/var/lib/misc/udhcpd.leases

# The time period at which udhcpd will write out leases file.
# If this is 0, udhcpd will never automatically write leases file.
# Specified in seconds.
#auto_time	7200

# Every time udhcpd writes a leases file, the below script will be called
#notify_file			# default: no script
#notify_file	dumpleases	# useful for debugging

# The following are BOOTP specific options
# next server to use in bootstrap
#siaddr		192.168.0.22	# default: 0.0.0.0 (none)
# tftp server name
#sname		zorak		# default: none
# tftp file to download (e.g. kernel image)
#boot_file	/var/nfs_root	# default: none

# NOTE: "boot_file FILE" and "opt bootfile FILE" are conceptually the same,
# but "boot_file" goes into BOOTP-defined fixed-size field in the packet,
# whereas "opt bootfile" goes into DHCP option 0x43.
# Same for "sname HOST" and "opt tftp HOST".

# Static leases map
#static_lease 00:60:08:11:CE:4E 192.168.0.54
#static_lease 00:60:08:11:CE:3E 192.168.0.44 optional_hostname

# The remainder of options are DHCP options and can be specified with the
# keyword 'opt' or 'option'. If an option can take multiple items, such
# as the dns option, they can be listed on the same line, or multiple
# lines.
# Examples:
opt	dns	192.168.10.2 192.168.10.10
option	subnet	255.255.255.0
opt	router	192.168.10.2
opt	wins	192.168.10.10
option	dns	129.219.13.81	# appended to above DNS servers for a total of 3
option	domain	local
option	lease	864000		# default: 10 days
option	msstaticroutes	10.0.0.0/8 10.127.0.1		# single static route
option	staticroutes	10.0.0.0/8 10.127.0.1, 10.11.12.0/24 10.11.12.1
# Arbitrary option in hex or string form:
option	0x08	01020304	# option 8: "cookie server IP addr: 1.2.3.4"
option	14	"dumpfile"

# Currently supported options [hex option value] (for more info, see options.c):
#opt lease      NUM             # [0x33]
#opt subnet     IP              # [0x01]
#opt broadcast  IP              # [0x1c]
#opt router     IP_LIST         # [0x03]
#opt ipttl      NUM             # [0x17]
#opt mtu        NUM             # [0x1a]
#opt hostname   STRING          # [0x0c] client's hostname
#opt domain     STRING          # [0x0f] client's domain suffix
#opt search     STRING_LIST     # [0x77] search domains
#opt nisdomain  STRING          # [0x28]
#opt timezone   NUM             # [0x02] (localtime - UTC_time) in seconds. signed
#opt tftp       STRING          # [0x42] tftp server name
#opt bootfile   STRING          # [0x43] tftp file to download (e.g. kernel image)
#opt bootsize   NUM             # [0x0d] size of that file
#opt rootpath   STRING          # [0x11] (NFS) path to mount as root fs
#opt wpad       STRING          # [0xfc] Web Proxy Auto Discovery Protocol
#opt serverid   IP              # [0x36] default: server's IP
#opt message    STRING          # [0x38] error message (udhcpd sends it on success too)
#opt vlanid     NUM             # [0x84] 802.1P VLAN ID
#opt vlanpriority NUM           # [0x85] 802.1Q VLAN priority
# RFC 5071: PXELINUX Options
#opt 0xd0       F100747E        # [0xd0] magic
#opt pxeconffile STRING         # [0xd1]
#opt pxepathprefix STRING       # [0xd2]
#opt reboottime NUM             # [0xd3] bootstrap timeout
# Options specifying server(s)
#opt dns        IP_LIST         # [0x06]
#opt wins       IP_LIST         # [0x2c]
#opt nissrv     IP_LIST         # [0x29]
#opt ntpsrv     IP_LIST         # [0x2a]
#opt lprsrv     IP_LIST         # [0x09]
#opt swapsrv    IP              # [0x10]
# Options specifying routes
#opt routes     IP_PAIR_LIST    # [0x21]
#opt staticroutes   STATIC_ROUTES # [0x79] RFC 3442 classless static route option
#opt msstaticroutes STATIC_ROUTES # [0xf9] same, using MS option number
# Obsolete options, no longer supported
#opt logsrv     IP_LIST # [0x07] 704/UDP log server (not syslog!)
#opt namesrv    IP_LIST # [0x05] IEN 116 name server, obsolete (August 1979!!!)
#opt cookiesrv  IP_LIST # [0x08] RFC 865 "quote of the day" server, rarely (never?) used
#opt timesrv    IP_LIST # [0x04] RFC 868 time server, rarely (never?) used
# TODO: in development
#opt userclass  STRING          # [0x4d] RFC 3004. set of LASCII strings. "I am a printer" etc
#opt sipsrv     STRING LIST     # [0x78] RFC 3361. flag byte, then: 0: domain names, 1: IP addrs
#opt ip6rd ....                 # [0xd4] IPv6 rapid deployment
