#ifndef DEFAULTS_H_
#define DEFAULTS_H_

/* Default values for file and directory locations used by the server,
   and for some features.  You may edit this before running 'make'
   to change those defaults and enable/disable some features.  */

/**********************************************************************/
/* You may want to change these, since you can't override them from   */
/* the commandline.                                                   */

/* We log to the LOG_DAEMON syslog facility.
   See syslog(3) for other possible facility names */
#define LOG_FACILITY LOG_DAEMON

/* Absolute path to private snmp community strings file.
   Only used by the optional 'dhcpcmd' command
   Don't bother fiddling with this if you aren't going to use the 'dhcpcmd' command */
#define PRIV_FILE "/etc/snmpd.private"


/* Number of hash buckets for all hash tables.
   This should be a prime number.

   The server uses a number of hash tables keyed on IP addresses, hardware addresses, and
   client identifiers, and does a great deal of lookups, insertions, and deletions. 
   Most of these tables are in-memory.  One of them ('lastbindings') is also flushed to disk
   to preserve client bindings across server runs and across server re-reads of bootptab
   and dhcpd.conf files.

   The default value of 257 is probably far too small for all but the smallest environments,
   as it will result in hash tables with many entries per bucket, reducing performance.

   If this is a first-time install, increasing this to a much higher number is recommended.

   If you are upgrading an existing install, and wish to retain your bindings directory,
   you must continue to use the original value.  If you are willing to erase
   your bindings directory (i.e. discard all existing bindings), then increasing this
   value is recommended.

   Note that if you stick with the original hash function (see below), increases in the
   HASHTABLESIZE will not provide as much benefit as you might expect, as the original
   hash function does not produce data as smooth as one might wish.

   E.g. for my 21000 clients, I set HASHTABLESIZE to 12503.

   to be around 50000, and want to keep the hash buckets averaging 4 elements per bucket,
   then choose the smallest prime number greater than 50000/4.
   This constant is something to tune before you start providing production service, because 
   changing it requires that you discard all bindings.
   I.e. to change it, you must stop the server, recompile, erase the contents of
   the bindings directory, then restart the server.
   (You can't keep the binding dir contents because the filenames in that dir
   represent hash codes based on HASHTABLESIZE.)
*/
#define HASHTABLESIZE 257


/* If you wish to use one of the alternate hash functions, uncomment one
   of the following.  Leave all commented out if you want to use the default
   hash function.
   
   The original hash fn provides the worst (lumpiest) hash tables of the three.
   It also does not take advantage of values of HASHTABLESIZE much over a thousand
   when hashing IP addresses.

   Alternate hash fn 1 and 2 provide much smoother tables, with neither showing
   a clear advantage over the other for most values of HASHTABLESIZE, but
   alt fn 2 does look between with some larger table sizes when hashing IP addresses.

   Both the original fn and alt fn 2 cost about the same to compute.
   alt fn 1 costs about 27% more to compute than either of the others.

   Based on these, the best overall choice appears to be alt hash function 2.

   If this is a first-time install of the software, the use of ALT_HASHFN_2 is recommended.

   If you are upgrading an existing install, and wish to retain your bindings directory,
   you must continue to use the original hash function.  If you are willing to erase
   your bindings directory (i.e. discard all existing bindings), then switching
   to ALT_HASHFN_2 is recommended.
*/
/* #define ALT_HASHFN_1 */
/* #define ALT_HASHFN_2 */


/* Maximum number of delay values that may be used for the
	"Client Steering" feature.
	Can be safely increased.
*/
#define CLIENT_STEERING_DELAY_SECS_NUM_MAX 16


/*                                                                    */
/**********************************************************************/



/**********************************************************************/
/* Unless you are doing server development, leave these alone.        */

/* Define DEBUG only if you want the debugging code added.  That's not 
   the same as the normall debugging output you get with the -d option;
   the code added by DEBUG is low-level stuff, to help track down bugs
   in the server itself.   You should normally leave it out, since the 
   code added by DEBUG isn't cheap. */
/* #define DEBUG */

/*                                                                    */
/**********************************************************************/



/**********************************************************************/
/* You probably shouldn't need to change any of these, since you may  */
/* override each of them from the commandline.                        */

/* Absolute path to pidfile. */ 
#define PID_FILE "/etc/dhcpd.pid"

/* Absolute path to bootptab file. */
#define TAB_FILE "/etc/bootptab"

/* Absolute path to dhcpd.conf file. */ 
#define CONFIG_FILE "/etc/dhcpd.conf"

/* Absolute path to bindings directory. */ 
#define LASTBINDDIR "/etc/bindings"

/* Absolute path to bootptab dump file. */ 
#define DUMPTAB_FILE "/tmp/bootpd.dump"

/* Absolute path to bindings dump file. */ 
#define DUMPBIND_FILE "/tmp/bind.dump"

/* Absolute path to statistics file. */ 
#define DUMPSTATS_FILE "/tmp/dhcpd.statistics"

/* Absolute path to working directory. */ 
#define CHDIR_PATH "/"

/* Whether or not the "Check File Access" feature is enabled.
  If the "Check File Access" feature is enabled, then when we receive
  a BOOTPREQUEST with a non-null 'file' field, we check to verify the
  file exists and is accessible on the server.  (If 'file' is a relative
  pathname, it is taken relative to our current working directory.)  If
  the file does not exist, or is not accessible, we will not respond to
  the client.)  If you store bootfiles on servers other than the one
  running dhcpd, then you should disable the Check Files Access feature.
  If CHECK_FILE_ACCESS is defined, the "Check File Access" feature is enabled.
  Comment the next line out to disable the feature. */
#define CHECK_FILE_ACCESS

/* By default, main.c will attempt to add a host route to 255.255.255.255.
   This route seems to be necessary on some systems to allow us to send
   broadcast packets to that IP address.  The code that adds that route
   has some portability problems.  If it won't compile on your system,
   exclude that code by uncommenting the definition below.    Once you
   do this, if your platform needs that route to work right, you'll need
   to add the route manually before starting the daemon. */
/* #define NOBROADCAST */

/*                                                                    */
/**********************************************************************/



/**********************************************************************/
/* Other stuff you shouldn't need to change                           */

/* An old (undocumented?) feature to record requests from unknown hw addrs */
#define UNKNOWN
/*                                                                    */
/**********************************************************************/

#endif /* DEFAULTS_H_ */
