229 lines
5.6 KiB
C
229 lines
5.6 KiB
C
|
#ifndef _BLURB_
|
|||
|
#define _BLURB_
|
|||
|
/************************************************************************
|
|||
|
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.
|
|||
|
************************************************************************/
|
|||
|
#endif /* _BLURB_ */
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* bootpd.h -- common header file for all the modules of the bootpd program.
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
#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 MAXHTYPES 7 /* Number of htypes defined */
|
|||
|
#define MAXHADDRLEN 6 /* Max hw address length in bytes */
|
|||
|
#define MAXSTRINGLEN 80 /* Max string length */
|
|||
|
|
|||
|
/*
|
|||
|
* Return the length in bytes of a hardware address of the given type.
|
|||
|
* Return the canonical name of the network of the given type.
|
|||
|
*/
|
|||
|
#define haddrlength(type) ((hwinfolist[(int) (type)]).hlen)
|
|||
|
#define netname(type) ((hwinfolist[(int) (type)]).name)
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Return pointer to static string which gives full network error message.
|
|||
|
*/
|
|||
|
#define get_network_errmsg get_errmsg
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Variables shared among modules.
|
|||
|
*/
|
|||
|
|
|||
|
extern int debug;
|
|||
|
extern char *bootptab;
|
|||
|
|
|||
|
extern struct hwinfo hwinfolist[];
|
|||
|
|
|||
|
extern hash_tbl *hwhashtable;
|
|||
|
extern hash_tbl *iphashtable;
|
|||
|
extern hash_tbl *nmhashtable;
|
|||
|
extern unsigned char vm_cmu[4];
|
|||
|
extern unsigned char vm_rfc1048[4];
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Functions shared among modules
|
|||
|
*/
|
|||
|
|
|||
|
extern void report();
|
|||
|
extern char *get_errmsg();
|
|||
|
extern char *haddrtoa();
|
|||
|
extern int readtab();
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Nice typedefs. . .
|
|||
|
*/
|
|||
|
|
|||
|
typedef int boolean;
|
|||
|
typedef unsigned char byte;
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* This structure holds information about a specific network type. The
|
|||
|
* length of the network hardware address is stored in "hlen".
|
|||
|
* The string pointed to by "name" is the cononical name of the network.
|
|||
|
*/
|
|||
|
struct hwinfo {
|
|||
|
unsigned hlen;
|
|||
|
char *name;
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* 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 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 linkcount;
|
|||
|
char string[1]; /* Dynamically extended */
|
|||
|
};
|
|||
|
|
|||
|
struct shared_bindata {
|
|||
|
unsigned 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,
|
|||
|
timeoff_auto :1,
|
|||
|
time_server :1,
|
|||
|
vendor_magic :1,
|
|||
|
dumpfile :1,
|
|||
|
domainname :1,
|
|||
|
swap_server :1,
|
|||
|
rootpath :1,
|
|||
|
vm_auto :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 {
|
|||
|
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;
|
|||
|
struct shared_string *bootfile,
|
|||
|
*hostname,
|
|||
|
*domainname,
|
|||
|
*homedir,
|
|||
|
*tftpdir,
|
|||
|
*dumpfile,
|
|||
|
*rootpath;
|
|||
|
struct shared_bindata *generic;
|
|||
|
byte vm_cookie[4],
|
|||
|
htype, /* RFC826 says this should be 16-bits but
|
|||
|
RFC951 only allocates 1 byte. . . */
|
|||
|
haddr[MAXHADDRLEN];
|
|||
|
long time_offset;
|
|||
|
unsigned int bootsize;
|
|||
|
struct in_addr bootserver,
|
|||
|
iaddr,
|
|||
|
swapserver,
|
|||
|
subnet_mask;
|
|||
|
};
|