1994-06-28 01:25:48 +04:00
|
|
|
|
/************************************************************************
|
|
|
|
|
Copyright 1988, 1991 by Carnegie Mellon University
|
|
|
|
|
|
|
|
|
|
All Rights Reserved
|
|
|
|
|
|
|
|
|
|
Permission to use, copy, modify, and distribute this software and its
|
|
|
|
|
documentation for any purpose and without fee is hereby granted, provided
|
|
|
|
|
that the above copyright notice appear in all copies and that both that
|
|
|
|
|
copyright notice and this permission notice appear in supporting
|
|
|
|
|
documentation, and that the name of Carnegie Mellon University not be used
|
|
|
|
|
in advertising or publicity pertaining to distribution of the software
|
|
|
|
|
without specific, written prior permission.
|
|
|
|
|
|
|
|
|
|
CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
|
|
|
|
|
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
|
|
|
|
|
IN NO EVENT SHALL CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
|
|
|
|
|
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
|
|
|
|
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
|
|
|
|
ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
|
|
|
|
SOFTWARE.
|
|
|
|
|
************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* bootpd.h -- common header file for all the modules of the bootpd program.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include "bptypes.h"
|
|
|
|
|
#include "hash.h"
|
|
|
|
|
#include "hwaddr.h"
|
|
|
|
|
|
|
|
|
|
#ifndef TRUE
|
|
|
|
|
#define TRUE 1
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef FALSE
|
|
|
|
|
#define FALSE 0
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef PRIVATE
|
|
|
|
|
#define PRIVATE static
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef SIGUSR1
|
|
|
|
|
#define SIGUSR1 30 /* From 4.3 <signal.h> */
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#define MAXSTRINGLEN 80 /* Max string length */
|
|
|
|
|
|
1994-08-23 02:14:32 +04:00
|
|
|
|
/* Local definitions: */
|
|
|
|
|
#define MAX_MSG_SIZE (3*512) /* Maximum packet size */
|
|
|
|
|
|
1994-06-28 01:25:48 +04:00
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Return pointer to static string which gives full network error message.
|
|
|
|
|
*/
|
|
|
|
|
#define get_network_errmsg get_errmsg
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Data structure used to hold an arbitrary-lengthed list of IP addresses.
|
|
|
|
|
* The list may be shared among multiple hosts by setting the linkcount
|
|
|
|
|
* appropriately.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
struct in_addr_list {
|
|
|
|
|
unsigned int linkcount, addrcount;
|
|
|
|
|
struct in_addr addr[1]; /* Dynamically extended */
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Data structures used to hold shared strings and shared binary data.
|
|
|
|
|
* The linkcount must be set appropriately.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
struct shared_string {
|
|
|
|
|
unsigned int linkcount;
|
|
|
|
|
char string[1]; /* Dynamically extended */
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct shared_bindata {
|
|
|
|
|
unsigned int linkcount, length;
|
|
|
|
|
byte data[1]; /* Dynamically extended */
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Flag structure which indicates which symbols have been defined for a
|
|
|
|
|
* given host. This information is used to determine which data should or
|
|
|
|
|
* should not be reported in the bootp packet vendor info field.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
struct flag {
|
|
|
|
|
unsigned bootfile :1,
|
|
|
|
|
bootserver :1,
|
|
|
|
|
bootsize :1,
|
|
|
|
|
bootsize_auto :1,
|
|
|
|
|
cookie_server :1,
|
|
|
|
|
domain_server :1,
|
|
|
|
|
gateway :1,
|
|
|
|
|
generic :1,
|
|
|
|
|
haddr :1,
|
|
|
|
|
homedir :1,
|
|
|
|
|
htype :1,
|
|
|
|
|
impress_server :1,
|
|
|
|
|
iaddr :1,
|
|
|
|
|
log_server :1,
|
|
|
|
|
lpr_server :1,
|
|
|
|
|
name_server :1,
|
|
|
|
|
name_switch :1,
|
|
|
|
|
rlp_server :1,
|
|
|
|
|
send_name :1,
|
|
|
|
|
subnet_mask :1,
|
|
|
|
|
tftpdir :1,
|
|
|
|
|
time_offset :1,
|
|
|
|
|
time_server :1,
|
|
|
|
|
dump_file :1,
|
|
|
|
|
domain_name :1,
|
|
|
|
|
swap_server :1,
|
|
|
|
|
root_path :1,
|
|
|
|
|
exten_file :1,
|
|
|
|
|
reply_addr :1,
|
|
|
|
|
nis_domain :1,
|
|
|
|
|
nis_server :1,
|
|
|
|
|
ntp_server :1,
|
|
|
|
|
exec_file :1,
|
1994-08-23 02:14:32 +04:00
|
|
|
|
msg_size :1,
|
|
|
|
|
min_wait :1,
|
1994-06-28 01:25:48 +04:00
|
|
|
|
/* XXX - Add new tags here */
|
|
|
|
|
vm_cookie :1;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* The flags structure contains TRUE flags for all the fields which
|
|
|
|
|
* are considered valid, regardless of whether they were explicitly
|
|
|
|
|
* specified or indirectly inferred from another entry.
|
|
|
|
|
*
|
|
|
|
|
* The gateway and the various server fields all point to a shared list of
|
|
|
|
|
* IP addresses.
|
|
|
|
|
*
|
|
|
|
|
* The hostname, home directory, and bootfile are all shared strings.
|
|
|
|
|
*
|
|
|
|
|
* The generic data field is a shared binary data structure. It is used to
|
|
|
|
|
* hold future RFC1048 vendor data until bootpd is updated to understand it.
|
|
|
|
|
*
|
|
|
|
|
* The vm_cookie field specifies the four-octet vendor magic cookie to use
|
|
|
|
|
* if it is desired to always send the same response to a given host.
|
|
|
|
|
*
|
|
|
|
|
* Hopefully, the rest is self-explanatory.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
struct host {
|
|
|
|
|
unsigned linkcount; /* hash list inserts */
|
|
|
|
|
struct flag flags; /* ALL valid fields */
|
|
|
|
|
struct in_addr_list *cookie_server,
|
|
|
|
|
*domain_server,
|
|
|
|
|
*gateway,
|
|
|
|
|
*impress_server,
|
|
|
|
|
*log_server,
|
|
|
|
|
*lpr_server,
|
|
|
|
|
*name_server,
|
|
|
|
|
*rlp_server,
|
|
|
|
|
*time_server,
|
|
|
|
|
*nis_server,
|
|
|
|
|
*ntp_server;
|
|
|
|
|
struct shared_string *bootfile,
|
|
|
|
|
*hostname,
|
|
|
|
|
*domain_name,
|
|
|
|
|
*homedir,
|
|
|
|
|
*tftpdir,
|
|
|
|
|
*dump_file,
|
|
|
|
|
*exten_file,
|
|
|
|
|
*root_path,
|
|
|
|
|
*nis_domain,
|
|
|
|
|
*exec_file;
|
|
|
|
|
struct shared_bindata *generic;
|
|
|
|
|
byte vm_cookie[4],
|
|
|
|
|
htype, /* RFC826 says this should be 16-bits but
|
|
|
|
|
RFC951 only allocates 1 byte. . . */
|
|
|
|
|
haddr[MAXHADDRLEN];
|
|
|
|
|
int32 time_offset;
|
1994-08-23 02:14:32 +04:00
|
|
|
|
unsigned int32 bootsize,
|
|
|
|
|
msg_size,
|
|
|
|
|
min_wait;
|
1994-06-28 01:25:48 +04:00
|
|
|
|
struct in_addr bootserver,
|
|
|
|
|
iaddr,
|
|
|
|
|
swap_server,
|
|
|
|
|
reply_addr,
|
|
|
|
|
subnet_mask;
|
|
|
|
|
/* XXX - Add new tags here (or above as appropriate) */
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Variables shared among modules.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
extern int debug;
|
|
|
|
|
extern char *bootptab;
|
|
|
|
|
extern char *progname;
|
|
|
|
|
|
|
|
|
|
extern u_char vm_cmu[4];
|
|
|
|
|
extern u_char vm_rfc1048[4];
|
|
|
|
|
|
|
|
|
|
extern hash_tbl *hwhashtable;
|
|
|
|
|
extern hash_tbl *iphashtable;
|
|
|
|
|
extern hash_tbl *nmhashtable;
|
|
|
|
|
|