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