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