Difference between revisions of "Unit DHCP"
From Ultibo.org
(Created page with "Return to Unit Reference === Description === ---- ''To be documented'' === Constants === ---- ''To be documented'' === Type definitions === ---- ''To...") |
|||
(16 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
---- | ---- | ||
− | '' | + | '''Ultibo DHCP/BOOTP Protocol Client unit''' |
=== Constants === | === Constants === | ||
---- | ---- | ||
− | '' | + | |
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''DHCP specific constants''' <code> BOOTP_* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>BOOTP_DELAY = 1000;</code> | ||
+ | | (Previously 0) | ||
+ | |- | ||
+ | | <code>BOOTP_TIMEOUT = 8000;</code> | ||
+ | | (Previously 4000) We wait for 8 seconds for a BOOTP reply | ||
+ | |- | ||
+ | | <code>BOOTP_RETRIES = 6;</code> | ||
+ | | (Previously 4) Try the request 6 times | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>BOOTP_MIN_DELAY = 0;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>BOOTP_MAX_DELAY = 10000;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>BOOTP_MIN_TIMEOUT = 500;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>BOOTP_MAX_TIMEOUT = 15000;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>BOOTP_MIN_RETRIES = 1;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>BOOTP_MAX_RETRIES = 100;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>DHCP_DELAY = 1000;</code> | ||
+ | | (Previously 0) | ||
+ | |- | ||
+ | | <code>DHCP_TIMEOUT = 8000;</code> | ||
+ | | (Previously 4000) We wait for 8 seconds for a DHCP reply | ||
+ | |- | ||
+ | | <code>DHCP_RETRIES = 6;</code> | ||
+ | | (Previously 4) Try the request 6 times | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>DHCP_MIN_DELAY = 0;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_MAX_DELAY = 10000;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_MIN_TIMEOUT = 500;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_MAX_TIMEOUT = 15000;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_MIN_RETRIES = 1;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_MAX_RETRIES = 100;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>BOOTP_VENDOR_SIZE = 64;</code> | ||
+ | | Size of the Vendor area | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>DHCP_OPTIONS_SIZE = 312;</code> | ||
+ | | Size of the Options area | ||
+ | |- | ||
+ | | <code>DHCP_MESSAGE_SIZE = 576;</code> | ||
+ | | Size of the max message | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''BOOTP/DHCP request''' <code> BOOTP_REQUEST* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>BOOTP_REQUEST = 1;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>BOOTP_REPLY = 2;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''DHCP message''' <code> DHCP_* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>DHCP_DISCOVER = 1;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>DHCP_OFFER = 2;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_REQUEST = 3;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_DECLINE = 4;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_ACK = 5;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_NAK = 6;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_RELEASE = 7;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_INFORM = 8;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>DHCP_RENEWAL_TO = 1;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_REBIND_TO = 2;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''BOOTP/DHCP options'''</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>PAD_OPT = 0;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>END_OPT = 255;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>SUBNET_MASK = 1;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>TIME_OFFSET = 2;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>ROUTERS_ON_SNET = 3;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>TIME_SRV = 4;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>NAME_SRV = 5;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DNS_SRV = 6;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>LOG_SRV = 7;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>COOKIE_SRV = 8;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>LPR_SRV = 9;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>IMPRESS_SRV = 10;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>RES_LOCATION_SRV = 11;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>HOST_NAME = 12;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>BOOT_FSIZE = 13;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>MERIT_DUMPFILE = 14;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DOMAIN_NAME = 15;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>SWAP_SRV = 16;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>ROOT_PATH = 17;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>EXTENTIONS_PATH = 18;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>IP_FORWARDING = 19;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>NON_LOCAL_SRC_ROUTE = 20;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>POLICY_FILTER = 21;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>MAX_DGRAM_REASM_SIZE = 22;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>IP_DEFAULT_TTL = 23;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>PATH_MTU_AGING_TIMEOUT = 24;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>PATH_MTU_PLATEAU_TABLE = 25;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>IF_MTU = 26;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>ALL_SUBNETS_LOCAL = 27;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>BROADCAST_ADDR = 28;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>PERFORM_MASK_DISCOVERY = 29;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>MASK_SUPPLIER = 30;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>PERFORM_ROUTER_DISCOVERY = 31;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>ROUTER_SOLICITATION_ADDR = 32;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>STATIC_ROUTE = 33;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>TRAILER_ENCAPSULATION = 34;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>ARP_CACHE_TIMEOUT = 35;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>ETHERNET_ENCAPSULATION = 36;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>TCP_DEFAULT_TTL = 37;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>TCP_KEEPALIVE_INTERVAL = 38;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>TCP_KEEPALIVE_GARBAGE = 39;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>NIS_DOMAIN_NAME = 40;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>NIS_SRVS = 41;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>NTP_SRVS = 42;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>VENDOR_SPECIFIC_INFO = 43;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>NBIOS_NAME_SRV = 44;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>NBIOS_DGRAM_DIST_SRV = 45;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>NBIOS_NODE_TYPE = 46;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>NBIOS_SCOPE = 47;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>XFONT_SRV = 48;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>XDISPLAY_MANAGER = 49;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|''DHCP Options'' | ||
+ | |- | ||
+ | | <code>DHCP_REQUESTED_IP_ADDR = 50;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_IP_ADDR_LEASE_TIME = 51;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_OPT_OVERLOAD = 52;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_MSG_TYPE = 53;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_SRV_IDENTIFIER = 54;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_PARAM_REQUEST = 55;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_MSG = 56;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_MAX_MSG_SIZE = 57;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_T1_VALUE = 58;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_T2_VALUE = 59;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_CLASS_ID = 60;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_CLIENT_ID = 61;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_NIS_DOMAIN_OPT = 64;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_NIS_SRV_OPT = 65;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_TFTP_SERVER = 66;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_BOOT_FILENAME = 67;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_MOBIP_HOME_AGENTS = 68;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_SMTP_SRVS = 69;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_POP3_SRVS = 70;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_NNTP_SRVS = 71;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_WWW_SRVS = 72;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_FINGER_SRVS = 73;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_IRC_SRVS = 74;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_STREET_TALK_SRVS = 75;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>DHCP_STDA_SRVS = 76;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''DHCP flag''' <code> DHCP_FLAG_* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>DHCP_FLAG_BROADCAST = $8000;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''ARP configuration''' <code> ARP_CONFIG_* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>ARP_CONFIG_START = $C0A86401;</code> | ||
+ | | 192.168.100.1 | ||
+ | |- | ||
+ | | <code>ARP_CONFIG_STOP = $C0A864FE;</code> | ||
+ | | 192.168.100.254 | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
=== Type definitions === | === Type definitions === | ||
---- | ---- | ||
− | '' | + | |
+ | '''DHCP specific types''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PBOOTPHeader = ^TBOOTPHeader;</code> | ||
+ | |||
+ | <code>TBOOTPHeader = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>Opcode:Byte;</code> | ||
+ | | packet op code/message type | ||
+ | |- | ||
+ | | <code>HardwareType:Byte;</code> | ||
+ | | hardware address type, 1 = 10 mb ethernet | ||
+ | |- | ||
+ | | <code>HardwareLength:Byte;</code> | ||
+ | | hardware address len, eg '6' for 10mb eth | ||
+ | |- | ||
+ | | <code>Hops:Byte;</code> | ||
+ | | client sets to zero, optionally used by gateways in cross-gateway booting | ||
+ | |- | ||
+ | | <code>Identifier:LongWord;</code> | ||
+ | | transaction Id, a random number | ||
+ | |- | ||
+ | | <code>Seconds:Word;</code> | ||
+ | | filled in by client, seconds elapsed since client started trying to boot | ||
+ | |- | ||
+ | | <code>Reserved:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>ClientIP:TInAddr;</code> | ||
+ | | client IP address filled in by client if known | ||
+ | |- | ||
+ | | <code>YourIP:TInAddr;</code> | ||
+ | | 'your' (client) IP address filled by server if client doesn't know | ||
+ | |- | ||
+ | | <code>ServerIP:TInAddr;</code> | ||
+ | | server IP address returned in bootreply | ||
+ | |- | ||
+ | | <code>GatewayIP:TInAddr;</code> | ||
+ | | gateway IP address, used in optional cross-gateway booting | ||
+ | |- | ||
+ | | <code>ClientHardware:array[0..15] of Byte;</code> | ||
+ | | client hardware address, filled by client | ||
+ | |- | ||
+ | | <code>ClientHardware:THardwareAddress;</code> | ||
+ | | client hardware address, filled by client | ||
+ | |- | ||
+ | | <code>DummyData:array[0..9] of Byte;</code> | ||
+ | | dummy to fill out remaining bytes of above | ||
+ | |- | ||
+ | | <code>ServerName:array[0..63] of Byte;</code> | ||
+ | | optional server host name, null terminated | ||
+ | |- | ||
+ | | <code>FileName:array[0..127] of Byte;</code> | ||
+ | | boot file name, null terminated string 'generic' name or null in bootrequest, fully qualified directory-path name in bootreply | ||
+ | |- | ||
+ | | <code>VendorData:array[0..63] of Byte;</code> | ||
+ | | optional vendor-specific area | ||
+ | |- | ||
+ | | <code>VendorData:array[0..BOOTP_VENDOR_SIZE - 1] of Byte;</code> | ||
+ | | optional vendor-specific area | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''DHCP header''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PDHCPHeader = ^TDHCPHeader;</code> | ||
+ | |||
+ | <code>TDHCPHeader = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>Opcode:Byte;</code> | ||
+ | | packet op code/message type | ||
+ | |- | ||
+ | | <code>HardwareType:Byte;</code> | ||
+ | | hardware address type, 1 = 10 mb ethernet | ||
+ | |- | ||
+ | | <code>HardwareLength:Byte;</code> | ||
+ | | hardware address len, eg '6' for 10mb eth | ||
+ | |- | ||
+ | | <code>Hops:Byte;</code> | ||
+ | | client sets to zero, optionally used by gateways in cross-gateway booting | ||
+ | |- | ||
+ | | <code>Identifier:LongWord;</code> | ||
+ | | transaction Id, a random number | ||
+ | |- | ||
+ | | <code>Seconds:Word;</code> | ||
+ | | filled in by client, seconds elapsed since client started trying to boot | ||
+ | |- | ||
+ | | <code>Flags:Word;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>ClientIP:TInAddr;</code> | ||
+ | | client IP address filled in by client if known | ||
+ | |- | ||
+ | | <code>YourIP:TInAddr;</code> | ||
+ | | 'your' (client) IP address filled by server if client doesn't know | ||
+ | |- | ||
+ | | <code>ServerIP:TInAddr;</code> | ||
+ | | server IP address returned in bootreply | ||
+ | |- | ||
+ | | <code>GatewayIP:TInAddr;</code> | ||
+ | | gateway IP address, used in optional cross-gateway booting | ||
+ | |- | ||
+ | | <code>ClientHardware:array[0..15] of Byte;</code> | ||
+ | | client hardware address, filled by client | ||
+ | |- | ||
+ | | <code>ClientHardware:THardwareAddress;</code> | ||
+ | | client hardware address, filled by client | ||
+ | |- | ||
+ | | <code>DummyData:array[0..9] of Byte;</code> | ||
+ | | dummy to fill out remaining bytes of above | ||
+ | |- | ||
+ | | <code>ServerName:array[0..63] of Byte;</code> | ||
+ | | optional server host name, null terminated | ||
+ | |- | ||
+ | | <code>FileName:array[0..127] of Byte;</code> | ||
+ | | boot file name, null terminated string 'generic' name or null in bootrequest, fully qualified directory-path name in bootreply | ||
+ | |- | ||
+ | | <code>Options:array[0..311] of Byte;</code> | ||
+ | | DHCP options area (minimum 312 bytes) | ||
+ | |- | ||
+ | | <code>Options:array[0..DHCP_OPTIONS_SIZE - 1] of Byte;</code> | ||
+ | | DHCP options area (minimum 312 bytes) | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''DHCP client Id''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PDHCPClientId = ^TDHCPClientId;</code> | ||
+ | |||
+ | <code>TDHCPClientId = packed record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>Tag:Byte;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>Hardware:THardwareAddress;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | |||
+ | === Class definitions === | ||
+ | ---- | ||
+ | |||
+ | |||
+ | '''DHCP specific classes''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TDHCPConfigTransport|<code>TDHCPConfigTransport = class(TConfigTransport)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TDHCPConfig|<code>TDHCPConfig = class(TNetworkConfig)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TBOOTPConfigTransport|<code>TBOOTPConfigTransport = class(TConfigTransport)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TBOOTPConfig|<code>TBOOTPConfig = class(TNetworkConfig)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TARPConfigTransport|<code>TARPConfigTransport = class(TConfigTransport)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TARPConfig|<code>TARPConfig = class(TNetworkConfig)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TRARPConfigTransport|<code>TRARPConfigTransport = class(TConfigTransport)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TRARPConfig|<code>TRARPConfig = class(TNetworkConfig)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TStaticConfigTransport|<code>TStaticConfigTransport = class(TConfigTransport)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TStaticConfig|<code>TStaticConfig = class(TNetworkConfig)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TLoopbackConfigTransport|<code>TLoopbackConfigTransport = class(TConfigTransport)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | [[TLoopbackConfig|<code>TLoopbackConfig = class(TNetworkConfig)</code>]] | ||
+ | |- | ||
+ | |} | ||
+ | <br /> | ||
=== Public variables === | === Public variables === | ||
---- | ---- | ||
− | '' | + | ''None defined'' |
=== Function declarations === | === Function declarations === | ||
---- | ---- | ||
− | |||
+ | '''Initialization functions''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">procedure DHCPInit;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Initialize the DHCP unit and create the Loopback, Static, DHCP, BOOTP, RARP and ARP configuration handlers</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | Called only during system startup | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
Return to [[Unit_Reference|Unit Reference]] | Return to [[Unit_Reference|Unit Reference]] |
Latest revision as of 05:20, 31 August 2021
Return to Unit Reference
Contents
Description
Ultibo DHCP/BOOTP Protocol Client unit
Constants
DHCP specific constants
BOOTP_*
BOOTP_DELAY = 1000;
|
(Previously 0) |
BOOTP_TIMEOUT = 8000;
|
(Previously 4000) We wait for 8 seconds for a BOOTP reply |
BOOTP_RETRIES = 6;
|
(Previously 4) Try the request 6 times |
BOOTP_MIN_DELAY = 0;
|
|
BOOTP_MAX_DELAY = 10000;
|
|
BOOTP_MIN_TIMEOUT = 500;
|
|
BOOTP_MAX_TIMEOUT = 15000;
|
|
BOOTP_MIN_RETRIES = 1;
|
|
BOOTP_MAX_RETRIES = 100;
|
|
DHCP_DELAY = 1000;
|
(Previously 0) |
DHCP_TIMEOUT = 8000;
|
(Previously 4000) We wait for 8 seconds for a DHCP reply |
DHCP_RETRIES = 6;
|
(Previously 4) Try the request 6 times |
DHCP_MIN_DELAY = 0;
|
|
DHCP_MAX_DELAY = 10000;
|
|
DHCP_MIN_TIMEOUT = 500;
|
|
DHCP_MAX_TIMEOUT = 15000;
|
|
DHCP_MIN_RETRIES = 1;
|
|
DHCP_MAX_RETRIES = 100;
|
|
BOOTP_VENDOR_SIZE = 64;
|
Size of the Vendor area |
DHCP_OPTIONS_SIZE = 312;
|
Size of the Options area |
DHCP_MESSAGE_SIZE = 576;
|
Size of the max message |
BOOTP/DHCP request
BOOTP_REQUEST*
BOOTP_REQUEST = 1;
|
|
BOOTP_REPLY = 2;
|
DHCP message
DHCP_*
DHCP_DISCOVER = 1;
|
|
DHCP_OFFER = 2;
|
|
DHCP_REQUEST = 3;
|
|
DHCP_DECLINE = 4;
|
|
DHCP_ACK = 5;
|
|
DHCP_NAK = 6;
|
|
DHCP_RELEASE = 7;
|
|
DHCP_INFORM = 8;
|
|
DHCP_RENEWAL_TO = 1;
|
|
DHCP_REBIND_TO = 2;
|
BOOTP/DHCP options
PAD_OPT = 0;
|
|
END_OPT = 255;
|
|
SUBNET_MASK = 1;
|
|
TIME_OFFSET = 2;
|
|
ROUTERS_ON_SNET = 3;
|
|
TIME_SRV = 4;
|
|
NAME_SRV = 5;
|
|
DNS_SRV = 6;
|
|
LOG_SRV = 7;
|
|
COOKIE_SRV = 8;
|
|
LPR_SRV = 9;
|
|
IMPRESS_SRV = 10;
|
|
RES_LOCATION_SRV = 11;
|
|
HOST_NAME = 12;
|
|
BOOT_FSIZE = 13;
|
|
MERIT_DUMPFILE = 14;
|
|
DOMAIN_NAME = 15;
|
|
SWAP_SRV = 16;
|
|
ROOT_PATH = 17;
|
|
EXTENTIONS_PATH = 18;
|
|
IP_FORWARDING = 19;
|
|
NON_LOCAL_SRC_ROUTE = 20;
|
|
POLICY_FILTER = 21;
|
|
MAX_DGRAM_REASM_SIZE = 22;
|
|
IP_DEFAULT_TTL = 23;
|
|
PATH_MTU_AGING_TIMEOUT = 24;
|
|
PATH_MTU_PLATEAU_TABLE = 25;
|
|
IF_MTU = 26;
|
|
ALL_SUBNETS_LOCAL = 27;
|
|
BROADCAST_ADDR = 28;
|
|
PERFORM_MASK_DISCOVERY = 29;
|
|
MASK_SUPPLIER = 30;
|
|
PERFORM_ROUTER_DISCOVERY = 31;
|
|
ROUTER_SOLICITATION_ADDR = 32;
|
|
STATIC_ROUTE = 33;
|
|
TRAILER_ENCAPSULATION = 34;
|
|
ARP_CACHE_TIMEOUT = 35;
|
|
ETHERNET_ENCAPSULATION = 36;
|
|
TCP_DEFAULT_TTL = 37;
|
|
TCP_KEEPALIVE_INTERVAL = 38;
|
|
TCP_KEEPALIVE_GARBAGE = 39;
|
|
NIS_DOMAIN_NAME = 40;
|
|
NIS_SRVS = 41;
|
|
NTP_SRVS = 42;
|
|
VENDOR_SPECIFIC_INFO = 43;
|
|
NBIOS_NAME_SRV = 44;
|
|
NBIOS_DGRAM_DIST_SRV = 45;
|
|
NBIOS_NODE_TYPE = 46;
|
|
NBIOS_SCOPE = 47;
|
|
XFONT_SRV = 48;
|
|
XDISPLAY_MANAGER = 49;
|
|
DHCP Options | |
DHCP_REQUESTED_IP_ADDR = 50;
|
|
DHCP_IP_ADDR_LEASE_TIME = 51;
|
|
DHCP_OPT_OVERLOAD = 52;
|
|
DHCP_MSG_TYPE = 53;
|
|
DHCP_SRV_IDENTIFIER = 54;
|
|
DHCP_PARAM_REQUEST = 55;
|
|
DHCP_MSG = 56;
|
|
DHCP_MAX_MSG_SIZE = 57;
|
|
DHCP_T1_VALUE = 58;
|
|
DHCP_T2_VALUE = 59;
|
|
DHCP_CLASS_ID = 60;
|
|
DHCP_CLIENT_ID = 61;
|
|
DHCP_NIS_DOMAIN_OPT = 64;
|
|
DHCP_NIS_SRV_OPT = 65;
|
|
DHCP_TFTP_SERVER = 66;
|
|
DHCP_BOOT_FILENAME = 67;
|
|
DHCP_MOBIP_HOME_AGENTS = 68;
|
|
DHCP_SMTP_SRVS = 69;
|
|
DHCP_POP3_SRVS = 70;
|
|
DHCP_NNTP_SRVS = 71;
|
|
DHCP_WWW_SRVS = 72;
|
|
DHCP_FINGER_SRVS = 73;
|
|
DHCP_IRC_SRVS = 74;
|
|
DHCP_STREET_TALK_SRVS = 75;
|
|
DHCP_STDA_SRVS = 76;
|
DHCP flag
DHCP_FLAG_*
DHCP_FLAG_BROADCAST = $8000;
|
ARP configuration
ARP_CONFIG_*
ARP_CONFIG_START = $C0A86401;
|
192.168.100.1 |
ARP_CONFIG_STOP = $C0A864FE;
|
192.168.100.254 |
Type definitions
DHCP specific types
PBOOTPHeader = ^TBOOTPHeader;
TBOOTPHeader = packed record
Opcode:Byte;
|
packet op code/message type |
HardwareType:Byte;
|
hardware address type, 1 = 10 mb ethernet |
HardwareLength:Byte;
|
hardware address len, eg '6' for 10mb eth |
Hops:Byte;
|
client sets to zero, optionally used by gateways in cross-gateway booting |
Identifier:LongWord;
|
transaction Id, a random number |
Seconds:Word;
|
filled in by client, seconds elapsed since client started trying to boot |
Reserved:Word;
|
|
ClientIP:TInAddr;
|
client IP address filled in by client if known |
YourIP:TInAddr;
|
'your' (client) IP address filled by server if client doesn't know |
ServerIP:TInAddr;
|
server IP address returned in bootreply |
GatewayIP:TInAddr;
|
gateway IP address, used in optional cross-gateway booting |
ClientHardware:array[0..15] of Byte;
|
client hardware address, filled by client |
ClientHardware:THardwareAddress;
|
client hardware address, filled by client |
DummyData:array[0..9] of Byte;
|
dummy to fill out remaining bytes of above |
ServerName:array[0..63] of Byte;
|
optional server host name, null terminated |
FileName:array[0..127] of Byte;
|
boot file name, null terminated string 'generic' name or null in bootrequest, fully qualified directory-path name in bootreply |
VendorData:array[0..63] of Byte;
|
optional vendor-specific area |
VendorData:array[0..BOOTP_VENDOR_SIZE - 1] of Byte;
|
optional vendor-specific area |
DHCP header
PDHCPHeader = ^TDHCPHeader;
TDHCPHeader = packed record
Opcode:Byte;
|
packet op code/message type |
HardwareType:Byte;
|
hardware address type, 1 = 10 mb ethernet |
HardwareLength:Byte;
|
hardware address len, eg '6' for 10mb eth |
Hops:Byte;
|
client sets to zero, optionally used by gateways in cross-gateway booting |
Identifier:LongWord;
|
transaction Id, a random number |
Seconds:Word;
|
filled in by client, seconds elapsed since client started trying to boot |
Flags:Word;
|
|
ClientIP:TInAddr;
|
client IP address filled in by client if known |
YourIP:TInAddr;
|
'your' (client) IP address filled by server if client doesn't know |
ServerIP:TInAddr;
|
server IP address returned in bootreply |
GatewayIP:TInAddr;
|
gateway IP address, used in optional cross-gateway booting |
ClientHardware:array[0..15] of Byte;
|
client hardware address, filled by client |
ClientHardware:THardwareAddress;
|
client hardware address, filled by client |
DummyData:array[0..9] of Byte;
|
dummy to fill out remaining bytes of above |
ServerName:array[0..63] of Byte;
|
optional server host name, null terminated |
FileName:array[0..127] of Byte;
|
boot file name, null terminated string 'generic' name or null in bootrequest, fully qualified directory-path name in bootreply |
Options:array[0..311] of Byte;
|
DHCP options area (minimum 312 bytes) |
Options:array[0..DHCP_OPTIONS_SIZE - 1] of Byte;
|
DHCP options area (minimum 312 bytes) |
DHCP client Id
PDHCPClientId = ^TDHCPClientId;
TDHCPClientId = packed record
Tag:Byte;
|
|
Hardware:THardwareAddress;
|
Class definitions
DHCP specific classes
TDHCPConfigTransport = class(TConfigTransport)
|
TDHCPConfig = class(TNetworkConfig)
|
TBOOTPConfigTransport = class(TConfigTransport)
|
TBOOTPConfig = class(TNetworkConfig)
|
TARPConfigTransport = class(TConfigTransport)
|
TARPConfig = class(TNetworkConfig)
|
TRARPConfigTransport = class(TConfigTransport)
|
TRARPConfig = class(TNetworkConfig)
|
TStaticConfigTransport = class(TConfigTransport)
|
TStaticConfig = class(TNetworkConfig)
|
TLoopbackConfigTransport = class(TConfigTransport)
|
TLoopbackConfig = class(TNetworkConfig)
|
Public variables
None defined
Function declarations
Initialization functions
procedure DHCPInit;
Description: Initialize the DHCP unit and create the Loopback, Static, DHCP, BOOTP, RARP and ARP configuration handlers
Note | Called only during system startup |
---|
Return to Unit Reference