xref: /freebsd-src/libexec/bootpd/bootpd.h (revision b3e7694832e81d7a904a10f525f8797b753bf0d3)
144099b7bSPaul Traina /************************************************************************
244099b7bSPaul Traina           Copyright 1988, 1991 by Carnegie Mellon University
344099b7bSPaul Traina 
444099b7bSPaul Traina                           All Rights Reserved
544099b7bSPaul Traina 
644099b7bSPaul Traina Permission to use, copy, modify, and distribute this software and its
744099b7bSPaul Traina documentation for any purpose and without fee is hereby granted, provided
844099b7bSPaul Traina that the above copyright notice appear in all copies and that both that
944099b7bSPaul Traina copyright notice and this permission notice appear in supporting
1044099b7bSPaul Traina documentation, and that the name of Carnegie Mellon University not be used
1144099b7bSPaul Traina in advertising or publicity pertaining to distribution of the software
1244099b7bSPaul Traina without specific, written prior permission.
1344099b7bSPaul Traina 
1444099b7bSPaul Traina CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
1544099b7bSPaul Traina SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
1644099b7bSPaul Traina IN NO EVENT SHALL CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
1744099b7bSPaul Traina DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
1844099b7bSPaul Traina PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
1944099b7bSPaul Traina ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
2044099b7bSPaul Traina SOFTWARE.
2144099b7bSPaul Traina ************************************************************************/
2244099b7bSPaul Traina 
2344099b7bSPaul Traina 
2444099b7bSPaul Traina /*
2544099b7bSPaul Traina  * bootpd.h -- common header file for all the modules of the bootpd program.
2644099b7bSPaul Traina  */
2744099b7bSPaul Traina 
2844099b7bSPaul Traina #include "bptypes.h"
2944099b7bSPaul Traina #include "hash.h"
3044099b7bSPaul Traina #include "hwaddr.h"
3144099b7bSPaul Traina 
3244099b7bSPaul Traina #ifndef TRUE
3344099b7bSPaul Traina #define TRUE	1
3444099b7bSPaul Traina #endif
3544099b7bSPaul Traina #ifndef FALSE
3644099b7bSPaul Traina #define FALSE	0
3744099b7bSPaul Traina #endif
3844099b7bSPaul Traina 
3944099b7bSPaul Traina #ifndef PRIVATE
4044099b7bSPaul Traina #define PRIVATE static
4144099b7bSPaul Traina #endif
4244099b7bSPaul Traina 
4344099b7bSPaul Traina #ifndef SIGUSR1
4444099b7bSPaul Traina #define SIGUSR1			 30	/* From 4.3 <signal.h> */
4544099b7bSPaul Traina #endif
4644099b7bSPaul Traina 
4744099b7bSPaul Traina #define MAXSTRINGLEN		 80	/* Max string length */
4844099b7bSPaul Traina 
4944099b7bSPaul Traina /* Local definitions: */
5044099b7bSPaul Traina #define MAX_MSG_SIZE		(3*512) /* Maximum packet size */
5144099b7bSPaul Traina 
5244099b7bSPaul Traina 
5344099b7bSPaul Traina /*
5444099b7bSPaul Traina  * Return pointer to static string which gives full network error message.
5544099b7bSPaul Traina  */
5644099b7bSPaul Traina #define get_network_errmsg get_errmsg
5744099b7bSPaul Traina 
5844099b7bSPaul Traina 
5944099b7bSPaul Traina /*
6044099b7bSPaul Traina  * Data structure used to hold an arbitrary-lengthed list of IP addresses.
6144099b7bSPaul Traina  * The list may be shared among multiple hosts by setting the linkcount
6244099b7bSPaul Traina  * appropriately.
6344099b7bSPaul Traina  */
6444099b7bSPaul Traina 
6544099b7bSPaul Traina struct in_addr_list {
6644099b7bSPaul Traina     unsigned int	linkcount, addrcount;
6744099b7bSPaul Traina     struct in_addr	addr[1];		/* Dynamically extended */
6844099b7bSPaul Traina };
6944099b7bSPaul Traina 
7044099b7bSPaul Traina 
7144099b7bSPaul Traina /*
7244099b7bSPaul Traina  * Data structures used to hold shared strings and shared binary data.
7344099b7bSPaul Traina  * The linkcount must be set appropriately.
7444099b7bSPaul Traina  */
7544099b7bSPaul Traina 
7644099b7bSPaul Traina struct shared_string {
7744099b7bSPaul Traina     unsigned int	linkcount;
7844099b7bSPaul Traina     char		string[1];		/* Dynamically extended */
7944099b7bSPaul Traina };
8044099b7bSPaul Traina 
8144099b7bSPaul Traina struct shared_bindata {
8244099b7bSPaul Traina     unsigned int	linkcount, length;
8344099b7bSPaul Traina     byte		data[1];		/* Dynamically extended */
8444099b7bSPaul Traina };
8544099b7bSPaul Traina 
8644099b7bSPaul Traina 
8744099b7bSPaul Traina /*
8844099b7bSPaul Traina  * Flag structure which indicates which symbols have been defined for a
8944099b7bSPaul Traina  * given host.  This information is used to determine which data should or
9044099b7bSPaul Traina  * should not be reported in the bootp packet vendor info field.
9144099b7bSPaul Traina  */
9244099b7bSPaul Traina 
9344099b7bSPaul Traina struct flag {
9444099b7bSPaul Traina     unsigned	bootfile	:1,
9544099b7bSPaul Traina 		bootserver	:1,
9644099b7bSPaul Traina 		bootsize	:1,
9744099b7bSPaul Traina 		bootsize_auto	:1,
9844099b7bSPaul Traina 		cookie_server	:1,
9944099b7bSPaul Traina 		domain_server	:1,
10044099b7bSPaul Traina 		gateway		:1,
10144099b7bSPaul Traina 		generic		:1,
10244099b7bSPaul Traina 		haddr		:1,
10344099b7bSPaul Traina 		homedir		:1,
10444099b7bSPaul Traina 		htype		:1,
10544099b7bSPaul Traina 		impress_server	:1,
10644099b7bSPaul Traina 		iaddr		:1,
10744099b7bSPaul Traina 		log_server	:1,
10844099b7bSPaul Traina 		lpr_server	:1,
10944099b7bSPaul Traina 		name_server	:1,
11044099b7bSPaul Traina 		name_switch	:1,
11144099b7bSPaul Traina 		rlp_server	:1,
11244099b7bSPaul Traina 		send_name	:1,
11344099b7bSPaul Traina 		subnet_mask	:1,
11444099b7bSPaul Traina 		tftpdir		:1,
11544099b7bSPaul Traina 		time_offset	:1,
11644099b7bSPaul Traina 		time_server	:1,
11744099b7bSPaul Traina 		dump_file	:1,
11844099b7bSPaul Traina 		domain_name	:1,
11944099b7bSPaul Traina 		swap_server	:1,
12044099b7bSPaul Traina 		root_path	:1,
12144099b7bSPaul Traina 		exten_file	:1,
12244099b7bSPaul Traina 		reply_addr	:1,
12344099b7bSPaul Traina 		nis_domain	:1,
12444099b7bSPaul Traina 		nis_server	:1,
12544099b7bSPaul Traina 		ntp_server	:1,
12644099b7bSPaul Traina 		exec_file	:1,
12744099b7bSPaul Traina 		msg_size	:1,
12844099b7bSPaul Traina 		min_wait	:1,
12944099b7bSPaul Traina 		/* XXX - Add new tags here */
13044099b7bSPaul Traina 		vm_cookie	:1;
13144099b7bSPaul Traina };
13244099b7bSPaul Traina 
13344099b7bSPaul Traina 
13444099b7bSPaul Traina 
13544099b7bSPaul Traina /*
13644099b7bSPaul Traina  * The flags structure contains TRUE flags for all the fields which
13744099b7bSPaul Traina  * are considered valid, regardless of whether they were explicitly
13844099b7bSPaul Traina  * specified or indirectly inferred from another entry.
13944099b7bSPaul Traina  *
14044099b7bSPaul Traina  * The gateway and the various server fields all point to a shared list of
14144099b7bSPaul Traina  * IP addresses.
14244099b7bSPaul Traina  *
14344099b7bSPaul Traina  * The hostname, home directory, and bootfile are all shared strings.
14444099b7bSPaul Traina  *
14544099b7bSPaul Traina  * The generic data field is a shared binary data structure.  It is used to
14644099b7bSPaul Traina  * hold future RFC1048 vendor data until bootpd is updated to understand it.
14744099b7bSPaul Traina  *
14844099b7bSPaul Traina  * The vm_cookie field specifies the four-octet vendor magic cookie to use
14944099b7bSPaul Traina  * if it is desired to always send the same response to a given host.
15044099b7bSPaul Traina  *
15144099b7bSPaul Traina  * Hopefully, the rest is self-explanatory.
15244099b7bSPaul Traina  */
15344099b7bSPaul Traina 
15444099b7bSPaul Traina struct host {
15544099b7bSPaul Traina     unsigned		    linkcount;		/* hash list inserts */
15644099b7bSPaul Traina     struct flag		    flags;		/* ALL valid fields */
15744099b7bSPaul Traina     struct in_addr_list	    *cookie_server,
15844099b7bSPaul Traina 			    *domain_server,
15944099b7bSPaul Traina 			    *gateway,
16044099b7bSPaul Traina 			    *impress_server,
16144099b7bSPaul Traina 			    *log_server,
16244099b7bSPaul Traina 			    *lpr_server,
16344099b7bSPaul Traina 			    *name_server,
16444099b7bSPaul Traina 			    *rlp_server,
16544099b7bSPaul Traina 			    *time_server,
16644099b7bSPaul Traina 			    *nis_server,
16744099b7bSPaul Traina 			    *ntp_server;
16844099b7bSPaul Traina     struct shared_string    *bootfile,
16944099b7bSPaul Traina 			    *hostname,
17044099b7bSPaul Traina 			    *domain_name,
17144099b7bSPaul Traina 			    *homedir,
17244099b7bSPaul Traina 			    *tftpdir,
17344099b7bSPaul Traina 			    *dump_file,
17444099b7bSPaul Traina 			    *exten_file,
17544099b7bSPaul Traina 			    *root_path,
17644099b7bSPaul Traina 			    *nis_domain,
17744099b7bSPaul Traina 			    *exec_file;
17844099b7bSPaul Traina     struct shared_bindata   *generic;
17944099b7bSPaul Traina     byte		    vm_cookie[4],
18044099b7bSPaul Traina 			    htype,  /* RFC826 says this should be 16-bits but
18144099b7bSPaul Traina 				       RFC951 only allocates 1 byte. . . */
18244099b7bSPaul Traina 			    haddr[MAXHADDRLEN];
18344099b7bSPaul Traina     int32		    time_offset;
184*8ef94ce8SMarcel Moolenaar     u_int32		    bootsize,
18544099b7bSPaul Traina 			    msg_size,
18644099b7bSPaul Traina 			    min_wait;
18744099b7bSPaul Traina     struct in_addr	    bootserver,
18844099b7bSPaul Traina 			    iaddr,
18944099b7bSPaul Traina 			    swap_server,
19044099b7bSPaul Traina 			    reply_addr,
19144099b7bSPaul Traina 			    subnet_mask;
19244099b7bSPaul Traina     /* XXX - Add new tags here (or above as appropriate) */
19344099b7bSPaul Traina };
19444099b7bSPaul Traina 
19544099b7bSPaul Traina 
19644099b7bSPaul Traina 
19744099b7bSPaul Traina /*
19844099b7bSPaul Traina  * Variables shared among modules.
19944099b7bSPaul Traina  */
20044099b7bSPaul Traina 
20144099b7bSPaul Traina extern int debug;
20244099b7bSPaul Traina extern char *bootptab;
20344099b7bSPaul Traina extern char *progname;
20444099b7bSPaul Traina 
20544099b7bSPaul Traina extern u_char vm_cmu[4];
20644099b7bSPaul Traina extern u_char vm_rfc1048[4];
20744099b7bSPaul Traina 
20844099b7bSPaul Traina extern hash_tbl *hwhashtable;
20944099b7bSPaul Traina extern hash_tbl *iphashtable;
21044099b7bSPaul Traina extern hash_tbl *nmhashtable;
21144099b7bSPaul Traina 
212