xref: /netbsd-src/usr.sbin/bootp/common/bootpd.h (revision c8f61d2b509f78f0f05810afbf0d6e317b3b8fa4)
1*c8f61d2bSxtraeme /*	$NetBSD: bootpd.h,v 1.5 2008/05/02 19:22:10 xtraeme Exp $	*/
23fe138c1Sperry 
35e9d01f2Sgwr /************************************************************************
45e9d01f2Sgwr           Copyright 1988, 1991 by Carnegie Mellon University
55e9d01f2Sgwr 
65e9d01f2Sgwr                           All Rights Reserved
75e9d01f2Sgwr 
85e9d01f2Sgwr Permission to use, copy, modify, and distribute this software and its
95e9d01f2Sgwr documentation for any purpose and without fee is hereby granted, provided
105e9d01f2Sgwr that the above copyright notice appear in all copies and that both that
115e9d01f2Sgwr copyright notice and this permission notice appear in supporting
125e9d01f2Sgwr documentation, and that the name of Carnegie Mellon University not be used
135e9d01f2Sgwr in advertising or publicity pertaining to distribution of the software
145e9d01f2Sgwr without specific, written prior permission.
155e9d01f2Sgwr 
165e9d01f2Sgwr CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
175e9d01f2Sgwr SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
185e9d01f2Sgwr IN NO EVENT SHALL CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
195e9d01f2Sgwr DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
205e9d01f2Sgwr PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
215e9d01f2Sgwr ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
225e9d01f2Sgwr SOFTWARE.
235e9d01f2Sgwr ************************************************************************/
245e9d01f2Sgwr 
255e9d01f2Sgwr 
265e9d01f2Sgwr /*
275e9d01f2Sgwr  * bootpd.h -- common header file for all the modules of the bootpd program.
285e9d01f2Sgwr  */
295e9d01f2Sgwr 
305e9d01f2Sgwr #include "bptypes.h"
315e9d01f2Sgwr #include "hash.h"
325e9d01f2Sgwr #include "hwaddr.h"
335e9d01f2Sgwr 
345e9d01f2Sgwr #ifndef TRUE
355e9d01f2Sgwr #define TRUE	1
365e9d01f2Sgwr #endif
375e9d01f2Sgwr #ifndef FALSE
385e9d01f2Sgwr #define FALSE	0
395e9d01f2Sgwr #endif
405e9d01f2Sgwr 
415e9d01f2Sgwr #ifndef PRIVATE
425e9d01f2Sgwr #define PRIVATE static
435e9d01f2Sgwr #endif
445e9d01f2Sgwr 
455e9d01f2Sgwr #ifndef SIGUSR1
465e9d01f2Sgwr #define SIGUSR1			 30	/* From 4.3 <signal.h> */
475e9d01f2Sgwr #endif
485e9d01f2Sgwr 
495e9d01f2Sgwr #define MAXSTRINGLEN		 80	/* Max string length */
505e9d01f2Sgwr 
51bcb13babSgwr /* Local definitions: */
52bcb13babSgwr #define MAX_MSG_SIZE		(3*512) /* Maximum packet size */
53bcb13babSgwr 
545e9d01f2Sgwr 
555e9d01f2Sgwr /*
565e9d01f2Sgwr  * Return pointer to static string which gives full network error message.
575e9d01f2Sgwr  */
585e9d01f2Sgwr #define get_network_errmsg get_errmsg
595e9d01f2Sgwr 
605e9d01f2Sgwr 
615e9d01f2Sgwr /*
625e9d01f2Sgwr  * Data structure used to hold an arbitrary-lengthed list of IP addresses.
635e9d01f2Sgwr  * The list may be shared among multiple hosts by setting the linkcount
645e9d01f2Sgwr  * appropriately.
655e9d01f2Sgwr  */
665e9d01f2Sgwr 
675e9d01f2Sgwr struct in_addr_list {
685e9d01f2Sgwr     unsigned int	linkcount, addrcount;
695e9d01f2Sgwr     struct in_addr	addr[1];		/* Dynamically extended */
705e9d01f2Sgwr };
715e9d01f2Sgwr 
725e9d01f2Sgwr 
735e9d01f2Sgwr /*
745e9d01f2Sgwr  * Data structures used to hold shared strings and shared binary data.
755e9d01f2Sgwr  * The linkcount must be set appropriately.
765e9d01f2Sgwr  */
775e9d01f2Sgwr 
785e9d01f2Sgwr struct shared_string {
795e9d01f2Sgwr     unsigned int	linkcount;
805e9d01f2Sgwr     char		string[1];		/* Dynamically extended */
815e9d01f2Sgwr };
825e9d01f2Sgwr 
835e9d01f2Sgwr struct shared_bindata {
845e9d01f2Sgwr     unsigned int	linkcount, length;
855e9d01f2Sgwr     byte		data[1];		/* Dynamically extended */
865e9d01f2Sgwr };
875e9d01f2Sgwr 
885e9d01f2Sgwr 
895e9d01f2Sgwr /*
905e9d01f2Sgwr  * Flag structure which indicates which symbols have been defined for a
915e9d01f2Sgwr  * given host.  This information is used to determine which data should or
925e9d01f2Sgwr  * should not be reported in the bootp packet vendor info field.
935e9d01f2Sgwr  */
945e9d01f2Sgwr 
955e9d01f2Sgwr struct flag {
965e9d01f2Sgwr     unsigned	bootfile	:1,
975e9d01f2Sgwr 		bootserver	:1,
985e9d01f2Sgwr 		bootsize	:1,
995e9d01f2Sgwr 		bootsize_auto	:1,
1005e9d01f2Sgwr 		cookie_server	:1,
1015e9d01f2Sgwr 		domain_server	:1,
1025e9d01f2Sgwr 		gateway		:1,
1035e9d01f2Sgwr 		generic		:1,
1045e9d01f2Sgwr 		haddr		:1,
1055e9d01f2Sgwr 		homedir		:1,
1065e9d01f2Sgwr 		htype		:1,
1075e9d01f2Sgwr 		impress_server	:1,
1085e9d01f2Sgwr 		iaddr		:1,
1095e9d01f2Sgwr 		log_server	:1,
1105e9d01f2Sgwr 		lpr_server	:1,
1115e9d01f2Sgwr 		name_server	:1,
1125e9d01f2Sgwr 		name_switch	:1,
1135e9d01f2Sgwr 		rlp_server	:1,
1145e9d01f2Sgwr 		send_name	:1,
1155e9d01f2Sgwr 		subnet_mask	:1,
1165e9d01f2Sgwr 		tftpdir		:1,
1175e9d01f2Sgwr 		time_offset	:1,
1185e9d01f2Sgwr 		time_server	:1,
1195e9d01f2Sgwr 		dump_file	:1,
1205e9d01f2Sgwr 		domain_name	:1,
1215e9d01f2Sgwr 		swap_server	:1,
1225e9d01f2Sgwr 		root_path	:1,
1235e9d01f2Sgwr 		exten_file	:1,
1245e9d01f2Sgwr 		reply_addr	:1,
1255e9d01f2Sgwr 		nis_domain	:1,
1265e9d01f2Sgwr 		nis_server	:1,
1275e9d01f2Sgwr 		ntp_server	:1,
1285e9d01f2Sgwr 		exec_file	:1,
129bcb13babSgwr 		msg_size	:1,
130bcb13babSgwr 		min_wait	:1,
1315e9d01f2Sgwr 		/* XXX - Add new tags here */
1325e9d01f2Sgwr 		vm_cookie	:1;
1335e9d01f2Sgwr };
1345e9d01f2Sgwr 
1355e9d01f2Sgwr 
1365e9d01f2Sgwr 
1375e9d01f2Sgwr /*
1385e9d01f2Sgwr  * The flags structure contains TRUE flags for all the fields which
1395e9d01f2Sgwr  * are considered valid, regardless of whether they were explicitly
1405e9d01f2Sgwr  * specified or indirectly inferred from another entry.
1415e9d01f2Sgwr  *
1425e9d01f2Sgwr  * The gateway and the various server fields all point to a shared list of
1435e9d01f2Sgwr  * IP addresses.
1445e9d01f2Sgwr  *
1455e9d01f2Sgwr  * The hostname, home directory, and bootfile are all shared strings.
1465e9d01f2Sgwr  *
1475e9d01f2Sgwr  * The generic data field is a shared binary data structure.  It is used to
1485e9d01f2Sgwr  * hold future RFC1048 vendor data until bootpd is updated to understand it.
1495e9d01f2Sgwr  *
1505e9d01f2Sgwr  * The vm_cookie field specifies the four-octet vendor magic cookie to use
1515e9d01f2Sgwr  * if it is desired to always send the same response to a given host.
1525e9d01f2Sgwr  *
1535e9d01f2Sgwr  * Hopefully, the rest is self-explanatory.
1545e9d01f2Sgwr  */
1555e9d01f2Sgwr 
1565e9d01f2Sgwr struct host {
1575e9d01f2Sgwr     unsigned		    linkcount;		/* hash list inserts */
1585e9d01f2Sgwr     struct flag		    flags;		/* ALL valid fields */
1595e9d01f2Sgwr     struct in_addr_list	    *cookie_server,
1605e9d01f2Sgwr 			    *domain_server,
1615e9d01f2Sgwr 			    *gateway,
1625e9d01f2Sgwr 			    *impress_server,
1635e9d01f2Sgwr 			    *log_server,
1645e9d01f2Sgwr 			    *lpr_server,
1655e9d01f2Sgwr 			    *name_server,
1665e9d01f2Sgwr 			    *rlp_server,
1675e9d01f2Sgwr 			    *time_server,
1685e9d01f2Sgwr 			    *nis_server,
1695e9d01f2Sgwr 			    *ntp_server;
1705e9d01f2Sgwr     struct shared_string    *bootfile,
1715e9d01f2Sgwr 			    *hostname,
1725e9d01f2Sgwr 			    *domain_name,
1735e9d01f2Sgwr 			    *homedir,
1745e9d01f2Sgwr 			    *tftpdir,
1755e9d01f2Sgwr 			    *dump_file,
1765e9d01f2Sgwr 			    *exten_file,
1775e9d01f2Sgwr 			    *root_path,
1785e9d01f2Sgwr 			    *nis_domain,
1795e9d01f2Sgwr 			    *exec_file;
1805e9d01f2Sgwr     struct shared_bindata   *generic;
1815e9d01f2Sgwr     byte		    vm_cookie[4],
1825e9d01f2Sgwr 			    htype,  /* RFC826 says this should be 16-bits but
1835e9d01f2Sgwr 				       RFC951 only allocates 1 byte. . . */
1845e9d01f2Sgwr 			    haddr[MAXHADDRLEN];
1855e9d01f2Sgwr     int32		    time_offset;
186e08ec6dbScgd     u_int32		    bootsize,
187bcb13babSgwr 			    msg_size,
188bcb13babSgwr 			    min_wait;
1895e9d01f2Sgwr     struct in_addr	    bootserver,
1905e9d01f2Sgwr 			    iaddr,
1915e9d01f2Sgwr 			    swap_server,
1925e9d01f2Sgwr 			    reply_addr,
1935e9d01f2Sgwr 			    subnet_mask;
1945e9d01f2Sgwr     /* XXX - Add new tags here (or above as appropriate) */
1955e9d01f2Sgwr };
1965e9d01f2Sgwr 
1975e9d01f2Sgwr 
1985e9d01f2Sgwr 
1995e9d01f2Sgwr /*
2005e9d01f2Sgwr  * Variables shared among modules.
2015e9d01f2Sgwr  */
2025e9d01f2Sgwr 
2035e9d01f2Sgwr extern int debug;
204*c8f61d2bSxtraeme extern const char *bootptab;
205*c8f61d2bSxtraeme extern const char *progname;
2065e9d01f2Sgwr 
2075e9d01f2Sgwr extern u_char vm_cmu[4];
2085e9d01f2Sgwr extern u_char vm_rfc1048[4];
2095e9d01f2Sgwr 
2105e9d01f2Sgwr extern hash_tbl *hwhashtable;
2115e9d01f2Sgwr extern hash_tbl *iphashtable;
2125e9d01f2Sgwr extern hash_tbl *nmhashtable;
2135e9d01f2Sgwr 
214