1*7c478bd9Sstevel@tonic-gate# 2*7c478bd9Sstevel@tonic-gate# CDDL HEADER START 3*7c478bd9Sstevel@tonic-gate# 4*7c478bd9Sstevel@tonic-gate# The contents of this file are subject to the terms of the 5*7c478bd9Sstevel@tonic-gate# Common Development and Distribution License, Version 1.0 only 6*7c478bd9Sstevel@tonic-gate# (the "License"). You may not use this file except in compliance 7*7c478bd9Sstevel@tonic-gate# with the License. 8*7c478bd9Sstevel@tonic-gate# 9*7c478bd9Sstevel@tonic-gate# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*7c478bd9Sstevel@tonic-gate# or http://www.opensolaris.org/os/licensing. 11*7c478bd9Sstevel@tonic-gate# See the License for the specific language governing permissions 12*7c478bd9Sstevel@tonic-gate# and limitations under the License. 13*7c478bd9Sstevel@tonic-gate# 14*7c478bd9Sstevel@tonic-gate# When distributing Covered Code, include this CDDL HEADER in each 15*7c478bd9Sstevel@tonic-gate# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*7c478bd9Sstevel@tonic-gate# If applicable, add the following below this CDDL HEADER, with the 17*7c478bd9Sstevel@tonic-gate# fields enclosed by brackets "[]" replaced with your own identifying 18*7c478bd9Sstevel@tonic-gate# information: Portions Copyright [yyyy] [name of copyright owner] 19*7c478bd9Sstevel@tonic-gate# 20*7c478bd9Sstevel@tonic-gate# CDDL HEADER END 21*7c478bd9Sstevel@tonic-gate# 22*7c478bd9Sstevel@tonic-gateCopyright (c) 2001 by Sun Microsystems, Inc. 23*7c478bd9Sstevel@tonic-gateAll rights reserved. 24*7c478bd9Sstevel@tonic-gate 25*7c478bd9Sstevel@tonic-gateInittab Purpose, Goals, and Functionality 26*7c478bd9Sstevel@tonic-gatePeter Memishian 27*7c478bd9Sstevel@tonic-gateident "%Z%%M% %I% %E% SMI" 28*7c478bd9Sstevel@tonic-gate 29*7c478bd9Sstevel@tonic-gatePROBLEM STATEMENT 30*7c478bd9Sstevel@tonic-gate================= 31*7c478bd9Sstevel@tonic-gate 32*7c478bd9Sstevel@tonic-gateCurrently, each DHCP-related utility that needs to handle DHCP options 33*7c478bd9Sstevel@tonic-gateuses ad-hoc methods for learning and using them, ranging from using 34*7c478bd9Sstevel@tonic-gatehard-coded internal tables to providing published (but distinct) 35*7c478bd9Sstevel@tonic-gateconfiguration files describing these options. 36*7c478bd9Sstevel@tonic-gate 37*7c478bd9Sstevel@tonic-gateOriginally, when only the DHCP server needed to be concerned with DHCP 38*7c478bd9Sstevel@tonic-gateoptions, not having a standard API for managing and parsing DHCP 39*7c478bd9Sstevel@tonic-gateoptions was understandable. Now, with four consumers of DHCP options 40*7c478bd9Sstevel@tonic-gatein core Solaris (in.dhcpd, dhcpinfo, snoop, and dhcpmgr), the 41*7c478bd9Sstevel@tonic-gatesituation has spiraled out of control. In addition to the obvious 42*7c478bd9Sstevel@tonic-gatemaintenance headache caused by the redundant code, it has also become 43*7c478bd9Sstevel@tonic-gatea burden to our customers, who already have to cope with multiple 44*7c478bd9Sstevel@tonic-gateplaces where DHCP option information is stored (dhcptags(4), 45*7c478bd9Sstevel@tonic-gatedhcptab(4)). 46*7c478bd9Sstevel@tonic-gate 47*7c478bd9Sstevel@tonic-gateThe inittab API is designed to reduce the confusion, both for the 48*7c478bd9Sstevel@tonic-gatecustomer and the application developer. Its goal is to provide a 49*7c478bd9Sstevel@tonic-gatesingle configuration for applications to receive their DHCP option 50*7c478bd9Sstevel@tonic-gateknowledge from and general routines for encoding and decoding DHCP 51*7c478bd9Sstevel@tonic-gateoptions. 52*7c478bd9Sstevel@tonic-gate 53*7c478bd9Sstevel@tonic-gateINITTAB 54*7c478bd9Sstevel@tonic-gate======= 55*7c478bd9Sstevel@tonic-gate 56*7c478bd9Sstevel@tonic-gateThe inittab file contains information regarding the syntax and (to 57*7c478bd9Sstevel@tonic-gatesome degree) the semantics of DHCP options. It is primarily a 58*7c478bd9Sstevel@tonic-gateread-only file (like /etc/termcap) and should not need to be changed 59*7c478bd9Sstevel@tonic-gateby users. Experienced sysadmins may need to update this file to add 60*7c478bd9Sstevel@tonic-gatenew DHCP options, but this should be rare. 61*7c478bd9Sstevel@tonic-gate 62*7c478bd9Sstevel@tonic-gateThe inittab file consists of inittab records, each being one line long 63*7c478bd9Sstevel@tonic-gateand describing a particular option. The format is based heavily on 64*7c478bd9Sstevel@tonic-gatethe format for defining symbols in dhcptab(4). Each line has the 65*7c478bd9Sstevel@tonic-gatefollowing syntax: 66*7c478bd9Sstevel@tonic-gate 67*7c478bd9Sstevel@tonic-gate option_name category, code, type, granularity, maximum, consumers 68*7c478bd9Sstevel@tonic-gate 69*7c478bd9Sstevel@tonic-gatewhere: 70*7c478bd9Sstevel@tonic-gate 71*7c478bd9Sstevel@tonic-gate `option_name' is user-interpretable name of the option (for use with 72*7c478bd9Sstevel@tonic-gate dhcpinfo(1M) for instance). This field should at least be per- 73*7c478bd9Sstevel@tonic-gate category unique and ideally should be unique across all categories. 74*7c478bd9Sstevel@tonic-gate Of particular note is that options names in the STANDARD, SITE, and 75*7c478bd9Sstevel@tonic-gate VENDOR spaces should not overlap, or the behavior is undefined. 76*7c478bd9Sstevel@tonic-gate 77*7c478bd9Sstevel@tonic-gate `category' is one of STANDARD, SITE, VENDOR, FIELD, or INTERNAL and 78*7c478bd9Sstevel@tonic-gate identifies the namespace in which the option falls. 79*7c478bd9Sstevel@tonic-gate 80*7c478bd9Sstevel@tonic-gate `code' is the code of this option when it is sent over the 81*7c478bd9Sstevel@tonic-gate wire. (note: in most cases, `code' uniquely identifies the 82*7c478bd9Sstevel@tonic-gate option, without a category. however, in the case of internal 83*7c478bd9Sstevel@tonic-gate categories like FIELD or INTERNAL, `code' may be used for 84*7c478bd9Sstevel@tonic-gate other purposes and thus may not be globally unique). This field 85*7c478bd9Sstevel@tonic-gate should be per-category unique and the STANDARD and SITE fields 86*7c478bd9Sstevel@tonic-gate should not have overlapping code fields or the behavior is 87*7c478bd9Sstevel@tonic-gate undefined. 88*7c478bd9Sstevel@tonic-gate 89*7c478bd9Sstevel@tonic-gate `type' describes the payload associated with this option. Valid 90*7c478bd9Sstevel@tonic-gate types are IP, ASCII, OCTET, NUMBER, BOOL, UNUMBER8, UNUMBER16, 91*7c478bd9Sstevel@tonic-gate UNUMBER32, SNUMBER8, SNUMBER16, and SNUMBER32. For numbers, 92*7c478bd9Sstevel@tonic-gate a preceding `U' or `S' indicates whether the number is unsigned 93*7c478bd9Sstevel@tonic-gate or signed, and the trailing number indicates the number of bits 94*7c478bd9Sstevel@tonic-gate in the number. 95*7c478bd9Sstevel@tonic-gate 96*7c478bd9Sstevel@tonic-gate `granularity' describes how many units of `type' payload make 97*7c478bd9Sstevel@tonic-gate up a whole value for this option. In the case of `NUMBER', 98*7c478bd9Sstevel@tonic-gate granularity describes the number of bytes in the number. Note 99*7c478bd9Sstevel@tonic-gate that `NUMBER' is preserved for compatibility, but the more 100*7c478bd9Sstevel@tonic-gate descriptive [SU]NUMBER{8,16,32,64} types should preferred. 101*7c478bd9Sstevel@tonic-gate 102*7c478bd9Sstevel@tonic-gate `maximum' describes how many whole values are allowed for this 103*7c478bd9Sstevel@tonic-gate option. 0 indicates an infinite number. 104*7c478bd9Sstevel@tonic-gate 105*7c478bd9Sstevel@tonic-gate `consumers' describe which programs make use of this information. 106*7c478bd9Sstevel@tonic-gate (`i' for dhcpinfo, `s' for snoop, `d' for in.dhcpd, and 107*7c478bd9Sstevel@tonic-gate `m' for dhcpmgr). 108*7c478bd9Sstevel@tonic-gate 109*7c478bd9Sstevel@tonic-gateA sample entry would be 110*7c478bd9Sstevel@tonic-gate 111*7c478bd9Sstevel@tonic-gate StaticRt STANDARD, 33, IP, 2, 0, isdm 112*7c478bd9Sstevel@tonic-gate 113*7c478bd9Sstevel@tonic-gatewhich describes an option named `StaticRt', that is in the STANDARD 114*7c478bd9Sstevel@tonic-gatecategory (i.e., defined by the DHCP standard), and is option code 115*7c478bd9Sstevel@tonic-gate33, which is of type `IP Address', consisting of a potentially 116*7c478bd9Sstevel@tonic-gateinfinite number of pairs of IP addresses. Lastly, the consumers of 117*7c478bd9Sstevel@tonic-gateoption are dhcpinfo, snoop, in.dhcpd and dhcpmgr. 118*7c478bd9Sstevel@tonic-gate 119*7c478bd9Sstevel@tonic-gateComments in the inittab file begin with `#', and end with a newline. 120*7c478bd9Sstevel@tonic-gateComments need not start at the beginning of a line. Lines cannot be 121*7c478bd9Sstevel@tonic-gatecontinued (with `\' for instance). 122*7c478bd9Sstevel@tonic-gate 123*7c478bd9Sstevel@tonic-gateThe inittab file becomes the authoritative source for all DHCP options 124*7c478bd9Sstevel@tonic-gatefor all DHCP option consumers, with the following exceptions and notes: 125*7c478bd9Sstevel@tonic-gate 126*7c478bd9Sstevel@tonic-gate o The DHCP agent and DHCP server both have their core protocol- 127*7c478bd9Sstevel@tonic-gate related functionality hardcoded into them, so changes to the 128*7c478bd9Sstevel@tonic-gate inittab file do not generally affect their inner workings. 129*7c478bd9Sstevel@tonic-gate 130*7c478bd9Sstevel@tonic-gate o A program can specify which entries it wants from the inittab. 131*7c478bd9Sstevel@tonic-gate This means that some DHCP options will never be used by some 132*7c478bd9Sstevel@tonic-gate programs, even if they are listed as a `consumer' of the given 133*7c478bd9Sstevel@tonic-gate option. An example of this is that the DHCP server never 134*7c478bd9Sstevel@tonic-gate requests any fields with the VENDOR category. (VENDOR information 135*7c478bd9Sstevel@tonic-gate for the DHCP server comes from dhcptab(4) instead). 136*7c478bd9Sstevel@tonic-gate 137*7c478bd9Sstevel@tonic-gate o In general, changing provided information in a released inittab 138*7c478bd9Sstevel@tonic-gate file is ill-advised. Adding new entries should be the extent 139*7c478bd9Sstevel@tonic-gate of the modifications that are performed. 140*7c478bd9Sstevel@tonic-gate 141*7c478bd9Sstevel@tonic-gate o The inittab C API also provides functions which allow programs 142*7c478bd9Sstevel@tonic-gate to verify that a given entry in the inittab file is correct 143*7c478bd9Sstevel@tonic-gate (which it does by consulting a compiled-in database of current 144*7c478bd9Sstevel@tonic-gate options). In general, this functionality is only used where 145*7c478bd9Sstevel@tonic-gate absolutely necessary, since it nullifies some of the advantages 146*7c478bd9Sstevel@tonic-gate of having an inittab. 147*7c478bd9Sstevel@tonic-gate 148*7c478bd9Sstevel@tonic-gate o Where a symbol is defined both in the inittab and in dhcptab(4), 149*7c478bd9Sstevel@tonic-gate inittab is authoritative. EXTEND symbol definitions in 150*7c478bd9Sstevel@tonic-gate dhcptab(4) will be deprecated in a future release of Solaris. 151*7c478bd9Sstevel@tonic-gate 152*7c478bd9Sstevel@tonic-gateC-LEVEL API 153*7c478bd9Sstevel@tonic-gate=========== 154*7c478bd9Sstevel@tonic-gate 155*7c478bd9Sstevel@tonic-gateEach inittab entry describes a specific DHCP option and is defined as 156*7c478bd9Sstevel@tonic-gatea dhcp_symbol_t (as defined in usr/src/lib/libdhcputil/common/dhcp_symbol.h). 157*7c478bd9Sstevel@tonic-gate 158*7c478bd9Sstevel@tonic-gateIn general, it is expected that inittab entries are acquired via 159*7c478bd9Sstevel@tonic-gateinittab_load(), inittab_getbyname(), or inittab_getbycode() and passed 160*7c478bd9Sstevel@tonic-gateas needed to the remaining inittab_XXX functions. If consumers need 161*7c478bd9Sstevel@tonic-gateto convert the inittab entries into a different format, then the 162*7c478bd9Sstevel@tonic-gatefields inside the inittab entry may be read directly. Some inittab 163*7c478bd9Sstevel@tonic-gatefunctions return dynamically allocated parameters; all such parameters 164*7c478bd9Sstevel@tonic-gatecan be freed with free(3c). 165*7c478bd9Sstevel@tonic-gate 166*7c478bd9Sstevel@tonic-gateTo get an inittab entry, one of the following API's must be used: 167*7c478bd9Sstevel@tonic-gate 168*7c478bd9Sstevel@tonic-gate dhcp_symbol_t * 169*7c478bd9Sstevel@tonic-gate inittab_load(uchar_t categories, char consumer, size_t *n_entries); 170*7c478bd9Sstevel@tonic-gate 171*7c478bd9Sstevel@tonic-gate dhcp_symbol_t * 172*7c478bd9Sstevel@tonic-gate inittab_getbyname(uchar_t categories, char consumer, const char *name); 173*7c478bd9Sstevel@tonic-gate 174*7c478bd9Sstevel@tonic-gate dhcp_symbol_t * 175*7c478bd9Sstevel@tonic-gate inittab_getbycode(uchar_t categories, char consumer, unsigned int code); 176*7c478bd9Sstevel@tonic-gate 177*7c478bd9Sstevel@tonic-gatewhere the `categories' parameter consists of the following values OR'd 178*7c478bd9Sstevel@tonic-gatetogether: 179*7c478bd9Sstevel@tonic-gate 180*7c478bd9Sstevel@tonic-gate #define ITAB_CAT_STANDARD 0x01 181*7c478bd9Sstevel@tonic-gate #define ITAB_CAT_FIELD 0x02 182*7c478bd9Sstevel@tonic-gate #define ITAB_CAT_INTERNAL 0x04 183*7c478bd9Sstevel@tonic-gate #define ITAB_CAT_VENDOR 0x08 184*7c478bd9Sstevel@tonic-gate #define ITAB_CAT_SITE 0x10 185*7c478bd9Sstevel@tonic-gate 186*7c478bd9Sstevel@tonic-gateand the `consumer' field consists of one of the following: 187*7c478bd9Sstevel@tonic-gate 188*7c478bd9Sstevel@tonic-gate #define ITAB_CONS_INFO 'i' 189*7c478bd9Sstevel@tonic-gate #define ITAB_CONS_SERVER 'd' 190*7c478bd9Sstevel@tonic-gate #define ITAB_CONS_SNOOP 's' 191*7c478bd9Sstevel@tonic-gate #define ITAB_CONS_MANAGER 'm' 192*7c478bd9Sstevel@tonic-gate 193*7c478bd9Sstevel@tonic-gateinittab_load() creates and returns an array of dhcp_symbol_t's made 194*7c478bd9Sstevel@tonic-gateup of all the entries of the specified categories that are available 195*7c478bd9Sstevel@tonic-gateto the provided consumer. Note that there is no specified order to 196*7c478bd9Sstevel@tonic-gatethe entries returned. The array is dynamically allocated, and the 197*7c478bd9Sstevel@tonic-gatenumber of items in the array is returned in the `n_entries' parameter. 198*7c478bd9Sstevel@tonic-gate 199*7c478bd9Sstevel@tonic-gateinittab_getbyname()/inittab_getbycode() return an dhcp_symbol_t 200*7c478bd9Sstevel@tonic-gatematching the given name or code for the provided category and the 201*7c478bd9Sstevel@tonic-gateprovided consumer. The dhcp_symbol_t is dynamically allocated. 202*7c478bd9Sstevel@tonic-gate 203*7c478bd9Sstevel@tonic-gateSome inittab consumers may need to make sure that a given inittab 204*7c478bd9Sstevel@tonic-gateentry has not been corrupted in the inittab file. For those cases, 205*7c478bd9Sstevel@tonic-gateinittab_verify() can be used to validate an inittab_entry against an 206*7c478bd9Sstevel@tonic-gateinternal table compiled into the inittab API: 207*7c478bd9Sstevel@tonic-gate 208*7c478bd9Sstevel@tonic-gate int 209*7c478bd9Sstevel@tonic-gate inittab_verify(dhcp_symbol_t *inittab_ent, 210*7c478bd9Sstevel@tonic-gate dhcp_symbol_t *internal_ent); 211*7c478bd9Sstevel@tonic-gate 212*7c478bd9Sstevel@tonic-gatewhere `inittab_ent' is an dhcp_symbol_t previously returned from 213*7c478bd9Sstevel@tonic-gateinittab_load() or inittab_getbyX(). inittab_verify() returns 214*7c478bd9Sstevel@tonic-gateITAB_SUCCESS if `inittab_ent' is verified to be correct, ITAB_FAILURE 215*7c478bd9Sstevel@tonic-gateif `inittab_ent' is incorrect, and ITAB_UNKNOWN if inittab_verify() 216*7c478bd9Sstevel@tonic-gatedoesn't know. If `internal_ent' is non-NULL, it is filled in with the 217*7c478bd9Sstevel@tonic-gatevalue of the option known internally to the inittab API. Entries are 218*7c478bd9Sstevel@tonic-gateverified using the `ds_category' and `ds_code' fields from the 219*7c478bd9Sstevel@tonic-gatedhcp_symbol_t. For ITAB_SUCCESS to be returned, the entry passed in 220*7c478bd9Sstevel@tonic-gateand the internal entry both must have the same ds_gran, ds_max, and 221*7c478bd9Sstevel@tonic-gateds_type values. 222*7c478bd9Sstevel@tonic-gate 223*7c478bd9Sstevel@tonic-gateTo perform encoding and decoding of DHCP options, the following 224*7c478bd9Sstevel@tonic-gateroutines are provided: 225*7c478bd9Sstevel@tonic-gate 226*7c478bd9Sstevel@tonic-gate uchar_t * 227*7c478bd9Sstevel@tonic-gate inittab_encode(dhcp_symbol_t *inittab_ent, const char *data, 228*7c478bd9Sstevel@tonic-gate uint16_t *lengthp, boolean_t just_payload); 229*7c478bd9Sstevel@tonic-gate 230*7c478bd9Sstevel@tonic-gate const char * 231*7c478bd9Sstevel@tonic-gate inittab_decode(dhcp_symbol_t *inittab_ent, uchar_t *data, 232*7c478bd9Sstevel@tonic-gate uint16_t length, boolean_t just_payload); 233*7c478bd9Sstevel@tonic-gate 234*7c478bd9Sstevel@tonic-gateBoth of these routines take an `inittab_ent' that was previously 235*7c478bd9Sstevel@tonic-gatereturned from inittab_load() or inittab_getbyX(). 236*7c478bd9Sstevel@tonic-gate 237*7c478bd9Sstevel@tonic-gateFor inittab_encode(), `data' is an ASCII string to encode, and a 238*7c478bd9Sstevel@tonic-gatepointer to a dynamically allocated byte-array representing the encoded 239*7c478bd9Sstevel@tonic-gateoption is returned. The size of the resulting data returned is stored 240*7c478bd9Sstevel@tonic-gatein `lengthp'. Note that if the `just_payload' option is set, then 241*7c478bd9Sstevel@tonic-gateonly the payload of the option is returned (i.e., the option code and 242*7c478bd9Sstevel@tonic-gateoption length is left off the returned data). To encode multiple 243*7c478bd9Sstevel@tonic-gateitems of a given type, separate the items by spaces, such as 244*7c478bd9Sstevel@tonic-gate"109.108.21.1 148.232.2.1". Octal data should be of the form "0xNN" 245*7c478bd9Sstevel@tonic-gatewhere NN is a hexadecimal digit representing the byte. 246*7c478bd9Sstevel@tonic-gate 247*7c478bd9Sstevel@tonic-gateFor inittab_decode(), `data' is a byte-array representing an encoded 248*7c478bd9Sstevel@tonic-gateoption, which is `length' bytes long. A pointer to a dynamically 249*7c478bd9Sstevel@tonic-gateallocated string representing the option's value in ASCII is returned. 250*7c478bd9Sstevel@tonic-gateNote that if the `data' byte-array consists of just the payload of the 251*7c478bd9Sstevel@tonic-gateoption, then the `just_payload' option should be set. 252*7c478bd9Sstevel@tonic-gate 253*7c478bd9Sstevel@tonic-gateIn addition, the following routines return extended error information 254*7c478bd9Sstevel@tonic-gatefor reporting parsing errors: 255*7c478bd9Sstevel@tonic-gate 256*7c478bd9Sstevel@tonic-gate uchar_t * 257*7c478bd9Sstevel@tonic-gate inittab_encode_e(dhcp_symbol_t *inittab_ent, const char *data, 258*7c478bd9Sstevel@tonic-gate uint16_t *lengthp, boolean_t just_payload, int *eerrno); 259*7c478bd9Sstevel@tonic-gate 260*7c478bd9Sstevel@tonic-gate const char * 261*7c478bd9Sstevel@tonic-gate inittab_decode_e(dhcp_symbol_t *inittab_ent, uchar_t *data, 262*7c478bd9Sstevel@tonic-gate uint16_t length, boolean_t just_payload, int *eerrno); 263*7c478bd9Sstevel@tonic-gate 264*7c478bd9Sstevel@tonic-gate 265*7c478bd9Sstevel@tonic-gateThe extended codes: 266*7c478bd9Sstevel@tonic-gate 267*7c478bd9Sstevel@tonic-gate/* 268*7c478bd9Sstevel@tonic-gate * DHCP Extended error codes 269*7c478bd9Sstevel@tonic-gate */ 270*7c478bd9Sstevel@tonic-gate#define ITAB_SYNTAX_ERROR (-1) 271*7c478bd9Sstevel@tonic-gate#define ITAB_BAD_IPADDR (-2) 272*7c478bd9Sstevel@tonic-gate#define ITAB_BAD_STRING (-3) 273*7c478bd9Sstevel@tonic-gate#define ITAB_BAD_OCTET (-4) 274*7c478bd9Sstevel@tonic-gate#define ITAB_BAD_NUMBER (-5) 275*7c478bd9Sstevel@tonic-gate#define ITAB_BAD_BOOLEAN (-6) 276*7c478bd9Sstevel@tonic-gate#define ITAB_NOT_ENOUGH_IP (-7) 277*7c478bd9Sstevel@tonic-gate#define ITAB_BAD_GRAN (-8) 278*7c478bd9Sstevel@tonic-gate 279*7c478bd9Sstevel@tonic-gate 280*7c478bd9Sstevel@tonic-gateENVIRONMENT VARIABLES 281*7c478bd9Sstevel@tonic-gate===================== 282*7c478bd9Sstevel@tonic-gate 283*7c478bd9Sstevel@tonic-gateIn order to aid in debugging inittab-related problems, two environment 284*7c478bd9Sstevel@tonic-gatevariables, DHCP_INITTAB_DEBUG, and DHCP_INITTAB_PATH, can be set 285*7c478bd9Sstevel@tonic-gatebefore starting a program which uses the inittab API. 286*7c478bd9Sstevel@tonic-gate 287*7c478bd9Sstevel@tonic-gateIf DHCP_INITTAB_DEBUG is an exported environment variable, then the 288*7c478bd9Sstevel@tonic-gateinittab API will print useful diagnostic messages handy in tracking 289*7c478bd9Sstevel@tonic-gatedown problems in the inittab file. If DHCP_INITTAB_PATH is an 290*7c478bd9Sstevel@tonic-gateexported environment variable, then its value is used as the location 291*7c478bd9Sstevel@tonic-gateof the inittab file, instead of /etc/dhcp/inittab. 292*7c478bd9Sstevel@tonic-gate 293*7c478bd9Sstevel@tonic-gate-- 294*7c478bd9Sstevel@tonic-gatePeter Memishian, Internet Engineering, Solaris Software (meem@east.sun.com) 295