# Net::DHCP::Constants.pm # Author: Stephan Hadinger package Net::DHCP::Constants; # standard module declaration use 5.8.0; use strict; our (@ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $VERSION); use Exporter; $VERSION = 0.66; @ISA = qw(Exporter); @EXPORT = qw(MAGIC_COOKIE); # Constants our (%DHO_CODES, %REV_DHO_CODES); our (%DHCP_MESSAGE, %REV_DHCP_MESSAGE); our (%BOOTP_CODES, %REV_BOOTP_CODES); our (%HTYPE_CODES, %REV_HTYPE_CODES); %EXPORT_TAGS = ( dho_codes => [keys %DHO_CODES], dhcp_message => [keys %DHCP_MESSAGE], bootp_codes => [keys %BOOTP_CODES], htype_codes => [keys %HTYPE_CODES], dhcp_hashes => [ qw( %DHO_CODES %REV_DHO_CODES %DHCP_MESSAGE %REV_DHCP_MESSAGE %BOOTP_CODES %REV_BOOTP_CODES %HTYPE_CODES %REV_HTYPE_CODES )], dhcp_other => [ qw(MAGIC_COOKIE DHCP_UDP_OVERHEAD DHCP_MAX_MTU BOOTP_MIN_LEN BOOTP_ABSOLUTE_MIN_LEN DHCP_MIN_LEN)] ); @EXPORT_OK = qw( %DHO_CODES %REV_DHO_CODES %DHCP_MESSAGE %REV_DHCP_MESSAGE %BOOTP_CODES %REV_BOOTP_CODES %HTYPE_CODES %REV_HTYPE_CODES %DHO_FORMATS ); Exporter::export_tags('dho_codes'); Exporter::export_tags('dhcp_message'); Exporter::export_tags('bootp_codes'); Exporter::export_tags('htype_codes'); Exporter::export_ok_tags('dhcp_other'); # MAGIC_COOKIE for DHCP (oterhwise it is BOOTP) use constant MAGIC_COOKIE => "\x63\x82\x53\x63"; use constant DHCP_UDP_OVERHEAD => (14 + 20 + 8); # Ethernet + IP + UDP use constant DHCP_MAX_MTU => 1500; use constant BOOTP_ABSOLUTE_MIN_LEN => 236; use constant BOOTP_MIN_LEN => 300; use constant DHCP_MIN_LEN => 548; BEGIN { %BOOTP_CODES = ( 'BOOTREQUEST' => 1, 'BOOTREPLY' => 2 ); %HTYPE_CODES = ( 'HTYPE_ETHER' => 1, 'HTYPE_IEEE802' => 6, 'HTYPE_FDDI' => 8 ); %DHO_CODES = ( # rfc 2132 'DHO_PAD' => 0, 'DHO_SUBNET_MASK' => 1, 'DHO_TIME_OFFSET' => 2, 'DHO_ROUTERS' => 3, 'DHO_TIME_SERVERS' => 4, 'DHO_NAME_SERVERS' => 5, 'DHO_DOMAIN_NAME_SERVERS' => 6, 'DHO_LOG_SERVERS' => 7, 'DHO_COOKIE_SERVERS' => 8, 'DHO_LPR_SERVERS' => 9, 'DHO_IMPRESS_SERVERS' => 10, 'DHO_RESOURCE_LOCATION_SERVERS' => 11, 'DHO_HOST_NAME' => 12, 'DHO_BOOT_SIZE' => 13, 'DHO_MERIT_DUMP' => 14, 'DHO_DOMAIN_NAME' => 15, 'DHO_SWAP_SERVER' => 16, 'DHO_ROOT_PATH' => 17, 'DHO_EXTENSIONS_PATH' => 18, 'DHO_IP_FORWARDING' => 19, 'DHO_NON_LOCAL_SOURCE_ROUTING' => 20, 'DHO_POLICY_FILTER' => 21, 'DHO_MAX_DGRAM_REASSEMBLY' => 22, 'DHO_DEFAULT_IP_TTL' => 23, 'DHO_PATH_MTU_AGING_TIMEOUT' => 24, 'DHO_PATH_MTU_PLATEAU_TABLE' => 25, 'DHO_INTERFACE_MTU' => 26, 'DHO_ALL_SUBNETS_LOCAL' => 27, 'DHO_BROADCAST_ADDRESS' => 28, 'DHO_PERFORM_MASK_DISCOVERY' => 29, 'DHO_MASK_SUPPLIER' => 30, 'DHO_ROUTER_DISCOVERY' => 31, 'DHO_ROUTER_SOLICITATION_ADDRESS' => 32, 'DHO_STATIC_ROUTES' => 33, 'DHO_TRAILER_ENCAPSULATION' => 34, 'DHO_ARP_CACHE_TIMEOUT' => 35, 'DHO_IEEE802_3_ENCAPSULATION' => 36, 'DHO_DEFAULT_TCP_TTL' => 37, 'DHO_TCP_KEEPALIVE_INTERVAL' => 38, 'DHO_TCP_KEEPALIVE_GARBAGE' => 39, 'DHO_NIS_DOMAIN' => 40, 'DHO_NIS_SERVERS' => 41, 'DHO_NTP_SERVERS' => 42, 'DHO_VENDOR_ENCAPSULATED_OPTIONS' => 43, 'DHO_NETBIOS_NAME_SERVERS' => 44, 'DHO_NETBIOS_DD_SERVER' => 45, 'DHO_NETBIOS_NODE_TYPE' => 46, 'DHO_NETBIOS_SCOPE' => 47, 'DHO_FONT_SERVERS' => 48, 'DHO_X_DISPLAY_MANAGER' => 49, 'DHO_DHCP_REQUESTED_ADDRESS' => 50, 'DHO_DHCP_LEASE_TIME' => 51, 'DHO_DHCP_OPTION_OVERLOAD' => 52, 'DHO_DHCP_MESSAGE_TYPE' => 53, 'DHO_DHCP_SERVER_IDENTIFIER' => 54, 'DHO_DHCP_PARAMETER_REQUEST_LIST' => 55, 'DHO_DHCP_MESSAGE' => 56, 'DHO_DHCP_MAX_MESSAGE_SIZE' => 57, 'DHO_DHCP_RENEWAL_TIME' => 58, 'DHO_DHCP_REBINDING_TIME' => 59, 'DHO_VENDOR_CLASS_IDENTIFIER' => 60, 'DHO_DHCP_CLIENT_IDENTIFIER' => 61, 'DHO_NWIP_DOMAIN_NAME' => 62, 'DHO_NWIP_SUBOPTIONS' => 63, 'DHO_NIS_DOMAIN' => 64, 'DHO_NIS_SERVER' => 65, 'DHO_TFTP_SERVER' => 66, 'DHO_BOOTFILE' => 67, 'DHO_MOBILE_IP_HOME_AGENT' => 68, 'DHO_SMTP_SERVER' => 69, 'DHO_POP3_SERVER' => 70, 'DHO_NNTP_SERVER' => 71, 'DHO_WWW_SERVER' => 72, 'DHO_FINGER_SERVER' => 73, 'DHO_IRC_SERVER' => 74, 'DHO_STREETTALK_SERVER' => 75, 'DHO_STDA_SERVER' => 76, 'DHO_USER_CLASS' => 77, 'DHO_FQDN' => 81, 'DHO_DHCP_AGENT_OPTIONS' => 82, 'DHO_NDS_SERVERS' => 85, 'DHO_NDS_TREE_NAME' => 86, 'DHO_USER_AUTHENTICATION_PROTOCOL' => 98, 'DHO_AUTO_CONFIGURE' => 116, 'DHO_NAME_SERVICE_SEARCH' => 117, 'DHO_SUBNET_SELECTION' => 118, 'DHO_END' => 255 ); %DHCP_MESSAGE = ( 'DHCPDISCOVER' => 1, 'DHCPOFFER' => 2, 'DHCPREQUEST' => 3, 'DHCPDECLINE' => 4, 'DHCPACK' => 5, 'DHCPNAK' => 6, 'DHCPRELEASE' => 7, 'DHCPINFORM' => 8, 'DHCPFORCERENEW' => 9, 'DHCPLEASEQUERY' => 13, # Cisco extension, draft-ietf-dhc-leasequery-08.txt ); } use constant \%DHO_CODES; %REV_DHO_CODES = reverse %DHO_CODES; use constant \%DHCP_MESSAGE; %REV_DHCP_MESSAGE = reverse %DHCP_MESSAGE; use constant \%BOOTP_CODES; %REV_BOOTP_CODES = reverse %BOOTP_CODES; # for reverse lookup use constant \%HTYPE_CODES; %REV_HTYPE_CODES = reverse %HTYPE_CODES; # for reverse lookup # # Format of DHCP options : for pretty-printing # void : no parameter # inet : 4 bytes IP address # inets : list of 4 bytess IP addresses # inets2 : liste of 4 bytes IP addresses pairs (multiple of 8 bytes) # int : 4 bytes integer # short : 2 bytes intteger # shorts : list of 2 bytes integers # byte : 1 byte int # bytes : list of 1 byte code # string : char* (just kidding) # relays : DHCP sub-options (rfc 3046) # id : client identifier : byte (htype) + string (chaddr) # our %DHO_FORMATS = ( DHO_PAD() => 'void', DHO_SUBNET_MASK() => 'inet', DHO_TIME_OFFSET() => 'int', DHO_ROUTERS() => 'inets', DHO_TIME_SERVERS() => 'inets', DHO_NAME_SERVERS() => 'inets', DHO_DOMAIN_NAME_SERVERS() => 'inets', DHO_LOG_SERVERS() => 'inets', DHO_COOKIE_SERVERS() => 'inets', DHO_LPR_SERVERS() => 'inets', DHO_IMPRESS_SERVERS() => 'inets', DHO_RESOURCE_LOCATION_SERVERS() => 'inets', DHO_HOST_NAME() => 'string', DHO_BOOT_SIZE() => 'short', DHO_MERIT_DUMP() => 'string', DHO_DOMAIN_NAME() => 'string', DHO_SWAP_SERVER() => 'inet', DHO_ROOT_PATH() => 'string', DHO_EXTENSIONS_PATH() => 'string', DHO_IP_FORWARDING() => 'byte', DHO_NON_LOCAL_SOURCE_ROUTING() => 'byte', DHO_POLICY_FILTER() => 'inets2', DHO_MAX_DGRAM_REASSEMBLY() => 'short', DHO_DEFAULT_IP_TTL() => 'byte', DHO_PATH_MTU_AGING_TIMEOUT() => 'int', DHO_PATH_MTU_PLATEAU_TABLE() => 'shorts', DHO_INTERFACE_MTU() => 'short', DHO_ALL_SUBNETS_LOCAL() => 'byte', DHO_BROADCAST_ADDRESS() => 'inet', DHO_PERFORM_MASK_DISCOVERY() => 'byte', DHO_MASK_SUPPLIER() => 'byte', DHO_ROUTER_DISCOVERY() => 'byte', DHO_ROUTER_SOLICITATION_ADDRESS() => 'inet', DHO_STATIC_ROUTES() => 'inets2', DHO_TRAILER_ENCAPSULATION() => 'byte', DHO_ARP_CACHE_TIMEOUT() => 'int', DHO_IEEE802_3_ENCAPSULATION() => 'byte', DHO_DEFAULT_TCP_TTL() => 'byte', DHO_TCP_KEEPALIVE_INTERVAL() => 'int', DHO_TCP_KEEPALIVE_GARBAGE() => 'byte', DHO_NIS_DOMAIN() => 'string', DHO_NIS_SERVERS() => 'inets', DHO_NTP_SERVERS() => 'inets', # DHO_VENDOR_ENCAPSULATED_OPTIONS() => '', DHO_NETBIOS_NAME_SERVERS() => 'inets', DHO_NETBIOS_DD_SERVER() => 'inets', DHO_NETBIOS_NODE_TYPE() => 'byte', DHO_NETBIOS_SCOPE() => 'string', DHO_FONT_SERVERS() => 'inets', DHO_X_DISPLAY_MANAGER() => 'inets', DHO_DHCP_REQUESTED_ADDRESS() => 'inet', DHO_DHCP_LEASE_TIME() => 'int', DHO_DHCP_OPTION_OVERLOAD() => 'byte', DHO_DHCP_MESSAGE_TYPE() => 'byte', DHO_DHCP_SERVER_IDENTIFIER() => 'inet', DHO_DHCP_PARAMETER_REQUEST_LIST() => 'bytes', DHO_DHCP_MESSAGE() => 'string', DHO_DHCP_MAX_MESSAGE_SIZE() => 'short', DHO_DHCP_RENEWAL_TIME() => 'int', DHO_DHCP_REBINDING_TIME() => 'int', DHO_VENDOR_CLASS_IDENTIFIER() => 'string', # DHO_DHCP_CLIENT_IDENTIFIER() => 'ids', DHO_NWIP_DOMAIN_NAME() => 'string', # rfc 2242 # DHO_NWIP_SUBOPTIONS() => '', # rfc 2242 DHO_NIS_DOMAIN() => 'string', DHO_NIS_SERVER() => 'string', DHO_TFTP_SERVER() => 'string', DHO_BOOTFILE() => 'string', DHO_MOBILE_IP_HOME_AGENT() => 'inets', DHO_SMTP_SERVER() => 'inets', DHO_POP3_SERVER() => 'inets', DHO_NNTP_SERVER() => 'inets', DHO_WWW_SERVER() => 'inets', DHO_FINGER_SERVER() => 'inets', DHO_IRC_SERVER() => 'inets', DHO_STREETTALK_SERVER() => 'inets', DHO_STDA_SERVER() => 'inets', # DHO_USER_CLASS() => '', # rfc 3004 # DHO_FQDN() => '', # draft-ietf-dhc-fqdn-option-10.txt # DHO_DHCP_AGENT_OPTIONS() => 'relays', # rfc 3046 DHO_NDS_SERVERS() => 'inets', # rfc 2241 DHO_NDS_TREE_NAME() => 'string', # rfc 2241 DHO_USER_AUTHENTICATION_PROTOCOL() => 'string', # rfc 2485 DHO_AUTO_CONFIGURE() => 'byte', # rfc 2563 DHO_NAME_SERVICE_SEARCH() => 'shorts', # rfc 2937 DHO_SUBNET_SELECTION() => 'inet', # rfc 3011 ); 1; =pod =head1 NAME Net::DHCP::Constants - Constants for DHCP codes and options =head1 SYNOPSIS use Net::DHCP::Constants; print "DHCP option SUBNET_MASK is ", DHO_SUBNET_MASK(); =head1 DESCRIPTION Represents constants used in DHCP protocol, defined in RFC 1533, RFC 2132, RFC 2241, RFC 2485, RFC 2563, RFC 2937, RFC 3004, RFC 3011, RFC 3046. =head1 TAGS As mentioned above, constants can either be imported individually or in sets grouped by tag names. The tag names are: =over 4 =item * bootp_codes Imports all of the basic I constants. (01) BOOTREQUEST (02) BOOTREPLY =item * htype_codes Imports all I (hardware address type) codes. (01) HTYPE_ETHER (06) HTYPE_IEEE802 (08) HTYPE_FDDI Most common value is HTYPE_ETHER for C. =item * dhcp_message Import all DHCP Message codes. (01) DHCPDISCOVER (02) DHCPOFFER (03) DHCPREQUEST (04) DHCPDECLINE (05) DHCPACK (06) DHCPNAK (07) DHCPRELEASE (08) DHCPINFORM (09) DHCPFORCERENEW (13) DHCPLEASEQUERY # draft-ietf-dhc-leasequery-08.txt =item * dho_codes Import all DHCP option codes. (000) DHO_PAD (001) DHO_SUBNET_MASK (002) DHO_TIME_OFFSET (003) DHO_ROUTERS (004) DHO_TIME_SERVERS (005) DHO_NAME_SERVERS (006) DHO_DOMAIN_NAME_SERVERS (007) DHO_LOG_SERVERS (008) DHO_COOKIE_SERVERS (009) DHO_LPR_SERVERS (010) DHO_IMPRESS_SERVERS (011) DHO_RESOURCE_LOCATION_SERVERS (012) DHO_HOST_NAME (013) DHO_BOOT_SIZE (014) DHO_MERIT_DUMP (015) DHO_DOMAIN_NAME (016) DHO_SWAP_SERVER (017) DHO_ROOT_PATH (018) DHO_EXTENSIONS_PATH (019) DHO_IP_FORWARDING (020) DHO_NON_LOCAL_SOURCE_ROUTING (021) DHO_POLICY_FILTER (022) DHO_MAX_DGRAM_REASSEMBLY (023) DHO_DEFAULT_IP_TTL (024) DHO_PATH_MTU_AGING_TIMEOUT (025) DHO_PATH_MTU_PLATEAU_TABLE (026) DHO_INTERFACE_MTU (027) DHO_ALL_SUBNETS_LOCAL (028) DHO_BROADCAST_ADDRESS (029) DHO_PERFORM_MASK_DISCOVERY (030) DHO_MASK_SUPPLIER (031) DHO_ROUTER_DISCOVERY (032) DHO_ROUTER_SOLICITATION_ADDRESS (033) DHO_STATIC_ROUTES (034) DHO_TRAILER_ENCAPSULATION (035) DHO_ARP_CACHE_TIMEOUT (036) DHO_IEEE802_3_ENCAPSULATION (037) DHO_DEFAULT_TCP_TTL (038) DHO_TCP_KEEPALIVE_INTERVAL (039) DHO_TCP_KEEPALIVE_GARBAGE (041) DHO_NIS_SERVERS (042) DHO_NTP_SERVERS (043) DHO_VENDOR_ENCAPSULATED_OPTIONS (044) DHO_NETBIOS_NAME_SERVERS (045) DHO_NETBIOS_DD_SERVER (046) DHO_NETBIOS_NODE_TYPE (047) DHO_NETBIOS_SCOPE (048) DHO_FONT_SERVERS (049) DHO_X_DISPLAY_MANAGER (050) DHO_DHCP_REQUESTED_ADDRESS (051) DHO_DHCP_LEASE_TIME (052) DHO_DHCP_OPTION_OVERLOAD (053) DHO_DHCP_MESSAGE_TYPE (054) DHO_DHCP_SERVER_IDENTIFIER (055) DHO_DHCP_PARAMETER_REQUEST_LIST (056) DHO_DHCP_MESSAGE (057) DHO_DHCP_MAX_MESSAGE_SIZE (058) DHO_DHCP_RENEWAL_TIME (059) DHO_DHCP_REBINDING_TIME (060) DHO_VENDOR_CLASS_IDENTIFIER (061) DHO_DHCP_CLIENT_IDENTIFIER (062) DHO_NWIP_DOMAIN_NAME (063) DHO_NWIP_SUBOPTIONS (064) DHO_NIS_DOMAIN (065) DHO_NIS_SERVER (066) DHO_TFTP_SERVER (067) DHO_BOOTFILE (068) DHO_MOBILE_IP_HOME_AGENT (069) DHO_SMTP_SERVER (070) DHO_POP3_SERVER (071) DHO_NNTP_SERVER (072) DHO_WWW_SERVER (073) DHO_FINGER_SERVER (074) DHO_IRC_SERVER (075) DHO_STREETTALK_SERVER (076) DHO_STDA_SERVER (077) DHO_USER_CLASS (081) DHO_FQDN (082) DHO_DHCP_AGENT_OPTIONS (085) DHO_NDS_SERVERS (086) DHO_NDS_TREE_NAME (098) DHO_USER_AUTHENTICATION_PROTOCOL (116) DHO_AUTO_CONFIGURE (117) DHO_NAME_SERVICE_SEARCH (118) DHO_SUBNET_SELECTION (255) DHO_END =back =head1 TO DO, LIMITATIONS Automatic parsing of DHO_VENDOR_ENCAPSULATED_OPTIONS (code 43) is unsupported. Automatic parsing of DHO_NWIP_SUBOPTIONS (code 63 - rfc 2242) is unsupported. Automatic parsing of DHO_USER_CLASS (code 77 - rfc 3004) is unsupported. =head1 SEE ALSO L, L =head1 AUTHOR Stephan Hadinger Eshadinger@cpan.orgE. =head1 COPYRIGHT This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut