DHCPv4.enum.ps1

Write-Devel "Enum PSScriptRoot = $PSScriptRoot"

# https://www.ietf.org/rfc/rfc2131.txt
$Global:DHCPv4PacketStructure = [ordered]@{
    # code = length (in bytes)
    op = 1
    htype = 1
    hlen = 1
    hops = 1
    xid = 4
    flags = 2
    ciaddr = 4
    yiaddr = 4
    siaddr = 4
    giaddr = 4
    chaddr = 16
    sname = 64
    file = 128
}

# https://www.ietf.org/rfc/rfc2132.txt
# $DHCPv4OptionStructure = [ordered]@{
# # code = name, length, type, help
# # @see @url http://www.ietf.org/rfc/rfc2132.txt §3.1
# 0 = @('Pad', 1, "int", "The pad option can be used to cause subsequent fields to align on word boundaries.")
# # @see @url http://www.ietf.org/rfc/rfc2132.txt §3.3
# 1 = @('SubnetMask', 4, 'ipaddress', "The subnet mask option specifies the client's subnet mask as per RFC 950 [5].")
# # @see @url http://www.ietf.org/rfc/rfc2132.txt §3.4
# 2 = @('TimeOffset', 4, 'int', "The time offset field specifies the offset of the client's subnet in seconds from Coordinated Universal Time (UTC). The offset is expressed as a two's complement 32-bit integer. A positive offset indicates a location east of the zero meridian and a negative offset indicates a location west of the zero meridian.")
# # @see @url http://www.ietf.org/rfc/rfc2132.txt §3.5
# 3 = @('Router', 4, 'ipaddress', "The router option specifies a list of IP addresses for routers on the client's subnet. Routers SHOULD be listed in order of preference.")
# # @see @url http://www.ietf.org/rfc/rfc2132.txt §3.6
# 4 = @('TimeServer', 4, 'ipaddress', "The time server option specifies a list of RFC 868 [6] time servers available to the client. Servers SHOULD be listed in order of preference.")
# # @see @url http://www.ietf.org/rfc/rfc2132.txt §3.2
# 255 = @('End', 1, "int", "The end option marks the end of valid information in the vendor field. Subsequent octets should be filled with pad options.")
# }

# https://www.ietf.org/rfc/rfc2132.txt
# 9.6. DHCP Message Type
enum DHCPv4MessageType {
    DHCPDISCOVER = 1
    DHCPOFFER = 2
    DHCPREQUEST = 3
    DHCPDECLINE = 4
    DHCPACK = 5
    DHCPNAK = 6
    DHCPRELEASE = 7
    DHCPINFORM = 8
}

# https://www.ietf.org/rfc/rfc2132.txt
# 3.1. Pad Option
$Global:PAD = 0

# https://www.ietf.org/rfc/rfc2132.txt
# 3.2. End Option
$Global:END = 255

# @url http://www.ietf.org/rfc/rfc2131.txt §3 [Page 13]
$Global:DHCP_MAGIC_COOKIE = @(99,130,83,99)

# # number of options
# # @see @url http://www.ietf.org/rfc/rfc2132.txt
enum DHCPv4OptionCode {
    PAD = 0
# RFC section 3
    SubnetMask = 1
    TimeOffset = 2
    Router = 3
    TimeServer = 4
    NameServer = 5
    DomainNameServer = 6
    LogServer = 7
    CookieServer = 8
    LPRServer = 9
    ImpressServer = 10
    ResourceLocationServer = 11
    Hostname = 12
    BootFileSize = 13
    MeritDump = 14
    DomainName = 15
    SwapServer = 16
    RootPath = 17
    ExtensionsPath = 18
# RFC section 4
    IPForwarding = 19
    NonLocalSourceRouting = 20
    PolicyFilter = 21
    MaximumDatagramReassemblySize = 22
    DefaultIPTTL = 23
    PathMTUAgingTimeout = 24
    PathMTUPlateauTable = 25
# RFC section 5
    InterfaceMTU = 26
    AllSubnetsareLocal = 27
    BroadcastAddress = 28
    PerformMaskDiscovery = 29
    MaskSupplier = 30
    PerformRouteriscovery = 31
    RouterSolicitationddress = 32
    StaticRoute = 33
# RFC section 6
    TrailerEncapsulation = 34
    ARPCacheimeout = 35
    EthernetEncapsulation = 36
# RFC section 7
    TCPDefaultTL = 37
    TCPKeepaliventerval = 38
    TCPKeepalivearbage = 39
# RFC section 8
    NISDomain = 40
    NISServer = 41
    NTPServer = 42
    VendorSpecificInformation = 43
    NetBIOSNameServer = 44
    NetBIOSDatagramDistributionServer = 45
    NetBIOSNodeType = 46
    NetBIOSScope = 47
    XFontServer = 48
    XDisplayManager = 49
    NISPLUSDomain = 64
    NISPLUSServer = 65
    MobileIPHomeAgent = 68
    SMTPServer = 69
    POP3Server = 70
    NNTPServer = 71
    WWWServer = 72
    FingerServer = 73
    IRCServer = 74
    StreetTalkServer = 75
    STDAServer = 76
# RFC section 9
    RequestedIPAddress = 50
    IPAddressLeaseTime = 51
    OptionOverload = 52
    DHCPMessageType = 53
    ServerIdentifier = 54
    ParameterRequestList = 55
    Message = 56
    MaximumDHCPMessageSize = 57
    RenewalTimeValue = 58
    RebindingTimeValue = 59
    Vendorclassidentifier = 60
    ClientIdentifier = 61
    TFTPservername = 66
    Bootfilename = 67
#
    END = 255
}

# DHCPv4 options listed in a hashtable
# @see @url http://www.ietf.org/rfc/rfc2132.txt
$Global:hDHCPv4Options = @{
    'PAD' = @{ 'code' = 0; 'label' = "PAD"; 'length' = 1; "value" = 0 }
# RFC section 3
    'SubnetMask' = @{ 'code' = 1; 'label' = "SubnetMask"; 'length' = 4 }
    'TimeOffset' = @{ 'code' = 2; 'label' = "TimeOffset"; 'length' = 4 }
    'Router' = @{ 'code' = 3; 'label' = "Router"; 'length' = 0 }
    'TimeServer' = @{ 'code' = 4; 'label' = "TimeServer"; 'length' = 0 }
    'NameServer' = @{ 'code' = 5; 'label' = "NameServer"; 'length' = 0 }
    'DomainNameServer' = @{ 'code' = 6; 'label' = "DomainNameServer"; 'length' = 0 }
    'LogServer' = @{ 'code' = 7; 'label' = "LogServer"; 'length' = 0 }
    'CookieServer' = @{ 'code' = 8; 'label' = "CookieServer"; 'length' = 0 }
    'LPRServer' = @{ 'code' = 9; 'label' = "LPRServer"; 'length' = 0 }
    'ImpressServer' = @{ 'code' = 10; 'label' = "ImpressServer"; 'length' = 0 }
    'ResourceLocationServer' = @{ 'code' = 11; 'label' = "ResourceLocationServer"; 'length' = 0 }
    'Hostname' = @{ 'code' = 12; 'label' = "Hostname"; 'length' = 0 }
    'BootFileSize' = @{ 'code' = 13; 'label' = "BootFileSize"; 'length' = 2 }
    'MeritDump' = @{ 'code' = 14; 'label' = "MeritDump"; 'length' = 0 }
    'DomainName' = @{ 'code' = 15; 'label' = "DomainName"; 'length' = 0 }
    'SwapServer' = @{ 'code' = 16; 'label' = "SwapServer"; 'length' = 0 }
    'RootPath' = @{ 'code' = 17; 'label' = "RootPath"; 'length' = 0 }
    'ExtensionsPath' = @{ 'code' = 18; 'label' = "ExtensionsPath"; 'length' = 0 }
# RFC section 4
    'IPForwarding' = @{ 'code' = 19; 'label' = "IPForwarding"; 'length' = 1 }
    'NonLocalSourceRouting' = @{ 'code' = 20; 'label' = "NonLocalSourceRouting"; 'length' = 1 }
    'PolicyFilter' = @{ 'code' = 21; 'label' = "PolicyFilter"; 'length' = 0 }
    'MaximumDatagramReassemblySize' = @{ 'code' = 22; 'label' = "MaximumDatagramReassemblySize"; 'length' = 2 }
    'DefaultIPTTL' = @{ 'code' = 23; 'label' = "DefaultIPTTL"; 'length' = 1 }
    'PathMTUAgingTimeout' = @{ 'code' = 24; 'label' = "PathMTUAgingTimeout"; 'length' = 4 }
    'PathMTUPlateauTable' = @{ 'code' = 25; 'label' = "PathMTUPlateauTable"; 'length' = 0 }
# RFC section 5
    'InterfaceMTU' = @{ 'code' = 26; 'label' = "InterfaceMTU"; 'length' = 2 }
    'AllSubnetsareLocal' = @{ 'code' = 27; 'label' = "AllSubnetsareLocal"; 'length' = 1 }
    'BroadcastAddress' = @{ 'code' = 28; 'label' = "BroadcastAddress"; 'length' = 4 }
    'PerformMaskDiscovery' = @{ 'code' = 29; 'label' = "PerformMaskDiscovery"; 'length' = 1 }
    'MaskSupplier' = @{ 'code' = 30; 'label' = "MaskSupplier"; 'length' = 1 }
    'PerformRouteriscovery' = @{ 'code' = 31; 'label' = "PerformRouteriscovery"; 'length' = 1 }
    'RouterSolicitationddress' = @{ 'code' = 32; 'label' = "RouterSolicitationddress"; 'length' = 4 }
    'StaticRoute' = @{ 'code' = 33; 'label' = "StaticRoute"; 'length' = 0 }
# RFC section 6
    'TrailerEncapsulation' = @{ 'code' = 34; 'label' = "TrailerEncapsulation"; 'length' = 1 }
    'ARPCacheimeout' = @{ 'code' = 35; 'label' = "ARPCacheimeout"; 'length' = 4 }
    'EthernetEncapsulation' = @{ 'code' = 36; 'label' = "EthernetEncapsulation"; 'length' = 1 }
# RFC section 7
    'TCPDefaultTL' = @{ 'code' = 37; 'label' = "TCPDefaultTL"; 'length' = 1 }
    'TCPKeepaliventerval' = @{ 'code' = 38; 'label' = "TCPKeepaliventerval"; 'length' = 4 }
    'TCPKeepalivearbage' = @{ 'code' = 39; 'label' = "TCPKeepalivearbage"; 'length' = 1 }
# RFC section 8
    'NISDomain' = @{ 'code' = 40; 'label' = "NISDomain"; 'length' = 0 }
    'NISServer' = @{ 'code' = 41; 'label' = "NISServer"; 'length' = 0 }
    'NTPServer' = @{ 'code' = 42; 'label' = "NTPServer"; 'length' = 0 }
    'VendorSpecificInformation' = @{ 'code' = 43; 'label' = "VendorSpecificInformation"; 'length' = 0 }
    'NetBIOSNameServer' = @{ 'code' = 44; 'label' = "NetBIOSNameServer"; 'length' = 0 }
    'NetBIOSDatagramDistributionServer' = @{ 'code' = 45; 'label' = "NetBIOSDatagramDistributionServer"; 'length' = 0 }
    'NetBIOSNodeType' = @{ 'code' = 46; 'label' = "NetBIOSNodeType"; 'length' = 1 }
    'NetBIOSScope' = @{ 'code' = 47; 'label' = "NetBIOSScope"; 'length' = 0 }
    'XFontServer' = @{ 'code' = 48; 'label' = "XFontServer"; 'length' = 0 }
    'XDisplayManager' = @{ 'code' = 49; 'label' = "XDisplayManager"; 'length' = 0 }
    'NISPLUSDomain' = @{ 'code' = 64; 'label' = "NISPLUSDomain"; 'length' = 0 }
    'NISPLUSServer' = @{ 'code' = 65; 'label' = "NISPLUSServer"; 'length' = 0 }
    'MobileIPHomeAgent' = @{ 'code' = 68; 'label' = "MobileIPHomeAgent"; 'length' = 0 }
    'SMTPServer' = @{ 'code' = 69; 'label' = "SMTPServer"; 'length' = 0 }
    'POP3Server' = @{ 'code' = 70; 'label' = "POP3Server"; 'length' = 0 }
    'NNTPServer' = @{ 'code' = 71; 'label' = "NNTPServer"; 'length' = 0 }
    'WWWServer' = @{ 'code' = 72; 'label' = "WWWServer"; 'length' = 0 }
    'FingerServer' = @{ 'code' = 73; 'label' = "FingerServer"; 'length' = 0 }
    'IRCServer' = @{ 'code' = 74; 'label' = "IRCServer"; 'length' = 0 }
    'StreetTalkServer' = @{ 'code' = 75; 'label' = "StreetTalkServer"; 'length' = 0 }
    'STDAServer' = @{ 'code' = 76; 'label' = "STDAServer"; 'length' = 0 }
# RFC section 9
    'RequestedIPAddress' = @{ 'code' = 50; 'label' = "RequestedIPAddress"; 'length' = 4 }
    'IPAddressLeaseTime' = @{ 'code' = 51; 'label' = "IPAddressLeaseTime"; 'length' = 4 }
    'OptionOverload' = @{ 'code' = 52; 'label' = "OptionOverload"; 'length' = 1 }
    'DHCPMessageType' = @{ 'code' = 53; 'label' = "DHCPMessageType"; 'length' = 1 }
    'ServerIdentifier' = @{ 'code' = 54; 'label' = "ServerIdentifier"; 'length' = 4 }
    'ParameterRequestList' = @{ 'code' = 55; 'label' = "ParameterRequestList"; 'length' = 0 }
    'Message' = @{ 'code' = 56; 'label' = "Message"; 'length' = 0 }
    'MaximumDHCPMessageSize' = @{ 'code' = 57; 'label' = "MaximumDHCPMessageSize"; 'length' = 2 }
    'RenewalTimeValue' = @{ 'code' = 58; 'label' = "RenewalTimeValue"; 'length' = 4 }
    'RebindingTimeValue' = @{ 'code' = 59; 'label' = "RebindingTimeValue"; 'length' = 4 }
    'Vendorclassidentifier' = @{ 'code' = 60; 'label' = "Vendorclassidentifier"; 'length' = 0 }
    'ClientIdentifier' = @{ 'code' = 61; 'label' = "ClientIdentifier"; 'length' = 0 }
    'TFTPservername' = @{ 'code' = 66; 'label' = "TFTPservername"; 'length' = 0 }
    'Bootfilename' = @{ 'code' = 67; 'label' = "Bootfilename"; 'length' = 0 }
#
    'END' = @{ 'code' = 255; 'label' = "END"; 'length' = 1 }
}

# DHCPv4 options listed in an array
# @see @url http://www.ietf.org/rfc/rfc2132.txt
$Global:aDHCPv4Options = @(
    @{ 'code' = 0; 'label' = "PAD"; 'length' = 1; "value" = 0 }
# RFC section 3
    @{ 'code' = 1; 'label' = "SubnetMask"; 'length' = 4 }
    @{ 'code' = 2; 'label' = "TimeOffset"; 'length' = 4 }
    @{ 'code' = 3; 'label' = "Router"; 'length' = 0 }
    @{ 'code' = 4; 'label' = "TimeServer"; 'length' = 0 }
    @{ 'code' = 5; 'label' = "NameServer"; 'length' = 0 }
    @{ 'code' = 6; 'label' = "DomainNameServer"; 'length' = 0 }
    @{ 'code' = 7; 'label' = "LogServer"; 'length' = 0 }
    @{ 'code' = 8; 'label' = "CookieServer"; 'length' = 0 }
    @{ 'code' = 9; 'label' = "LPRServer"; 'length' = 0 }
    @{ 'code' = 10; 'label' = "ImpressServer"; 'length' = 0 }
    @{ 'code' = 11; 'label' = "ResourceLocationServer"; 'length' = 0 }
    @{ 'code' = 12; 'label' = "Hostname"; 'length' = 0 }
    @{ 'code' = 13; 'label' = "BootFileSize"; 'length' = 2 }
    @{ 'code' = 14; 'label' = "MeritDump"; 'length' = 0 }
    @{ 'code' = 15; 'label' = "DomainName"; 'length' = 0 }
    @{ 'code' = 16; 'label' = "SwapServer"; 'length' = 0 }
    @{ 'code' = 17; 'label' = "RootPath"; 'length' = 0 }
    @{ 'code' = 18; 'label' = "ExtensionsPath"; 'length' = 0 }
# RFC section 4
    @{ 'code' = 19; 'label' = "IPForwarding"; 'length' = 1 }
    @{ 'code' = 20; 'label' = "NonLocalSourceRouting"; 'length' = 1 }
    @{ 'code' = 21; 'label' = "PolicyFilter"; 'length' = 0 }
    @{ 'code' = 22; 'label' = "MaximumDatagramReassemblySize"; 'length' = 2 }
    @{ 'code' = 23; 'label' = "DefaultIPTTL"; 'length' = 1 }
    @{ 'code' = 24; 'label' = "PathMTUAgingTimeout"; 'length' = 4 }
    @{ 'code' = 25; 'label' = "PathMTUPlateauTable"; 'length' = 0 }
# RFC section 5
    @{ 'code' = 26; 'label' = "InterfaceMTU"; 'length' = 2 }
    @{ 'code' = 27; 'label' = "AllSubnetsareLocal"; 'length' = 1 }
    @{ 'code' = 28; 'label' = "BroadcastAddress"; 'length' = 4 }
    @{ 'code' = 29; 'label' = "PerformMaskDiscovery"; 'length' = 1 }
    @{ 'code' = 30; 'label' = "MaskSupplier"; 'length' = 1 }
    @{ 'code' = 31; 'label' = "PerformRouteriscovery"; 'length' = 1 }
    @{ 'code' = 32; 'label' = "RouterSolicitationddress"; 'length' = 4 }
    @{ 'code' = 33; 'label' = "StaticRoute"; 'length' = 0 }
# RFC section 6
    @{ 'code' = 34; 'label' = "TrailerEncapsulation"; 'length' = 1 }
    @{ 'code' = 35; 'label' = "ARPCacheimeout"; 'length' = 4 }
    @{ 'code' = 36; 'label' = "EthernetEncapsulation"; 'length' = 1 }
# RFC section 7
    @{ 'code' = 37; 'label' = "TCPDefaultTL"; 'length' = 1 }
    @{ 'code' = 38; 'label' = "TCPKeepaliventerval"; 'length' = 4 }
    @{ 'code' = 39; 'label' = "TCPKeepalivearbage"; 'length' = 1 }
# RFC section 8
    @{ 'code' = 40; 'label' = "NISDomain"; 'length' = 0 }
    @{ 'code' = 41; 'label' = "NISServer"; 'length' = 0 }
    @{ 'code' = 42; 'label' = "NTPServer"; 'length' = 0 }
    @{ 'code' = 43; 'label' = "VendorSpecificInformation"; 'length' = 0 }
    @{ 'code' = 44; 'label' = "NetBIOSNameServer"; 'length' = 0 }
    @{ 'code' = 45; 'label' = "NetBIOSDatagramDistributionServer"; 'length' = 0 }
    @{ 'code' = 46; 'label' = "NetBIOSNodeType"; 'length' = 1 }
    @{ 'code' = 47; 'label' = "NetBIOSScope"; 'length' = 0 }
    @{ 'code' = 48; 'label' = "XFontServer"; 'length' = 0 }
    @{ 'code' = 49; 'label' = "XDisplayManager"; 'length' = 0 }
    # RFC section 9
    @{ 'code' = 50; 'label' = "RequestedIPAddress"; 'length' = 4 }
    @{ 'code' = 51; 'label' = "IPAddressLeaseTime"; 'length' = 4 }
    @{ 'code' = 52; 'label' = "OptionOverload"; 'length' = 1 }
    @{ 'code' = 53; 'label' = "DHCPMessageType"; 'length' = 1 }
    @{ 'code' = 54; 'label' = "ServerIdentifier"; 'length' = 4 }
    @{ 'code' = 55; 'label' = "ParameterRequestList"; 'length' = 0 }
    @{ 'code' = 56; 'label' = "Message"; 'length' = 0 }
    @{ 'code' = 57; 'label' = "MaximumDHCPMessageSize"; 'length' = 2 }
    @{ 'code' = 58; 'label' = "RenewalTimeValue"; 'length' = 4 }
    @{ 'code' = 59; 'label' = "RebindingTimeValue"; 'length' = 4 }
    @{ 'code' = 60; 'label' = "Vendorclassidentifier"; 'length' = 0 }
    @{ 'code' = 61; 'label' = "ClientIdentifier"; 'length' = 0 }
    @{ 'code' = 62; }
    @{ 'code' = 63; }
    # RFC section 8
    @{ 'code' = 64; 'label' = "NISPLUSDomain"; 'length' = 0 }
    @{ 'code' = 65; 'label' = "NISPLUSServer"; 'length' = 0 }
    # RFC section 9
    @{ 'code' = 66; 'label' = "TFTPservername"; 'length' = 0 }
    @{ 'code' = 67; 'label' = "Bootfilename"; 'length' = 0 }
    # RFC section 8
    @{ 'code' = 68; 'label' = "MobileIPHomeAgent"; 'length' = 0 }
    @{ 'code' = 69; 'label' = "SMTPServer"; 'length' = 0 }
    # RFC section 9
    @{ 'code' = 70; 'label' = "POP3Server"; 'length' = 0 }
    @{ 'code' = 71; 'label' = "NNTPServer"; 'length' = 0 }
    @{ 'code' = 72; 'label' = "WWWServer"; 'length' = 0 }
    @{ 'code' = 73; 'label' = "FingerServer"; 'length' = 0 }
    @{ 'code' = 74; 'label' = "IRCServer"; 'length' = 0 }
    @{ 'code' = 75; 'label' = "StreetTalkServer"; 'length' = 0 }
    @{ 'code' = 76; 'label' = "STDAServer"; 'length' = 0 }
#
    # @{ 'code' = 255; 'label' = "END"; 'length' = 1 }
)

# # number of options
# # @see @url http://www.ietf.org/rfc/rfc2132.txt
# WARN this syntax does not work
# enum eDHCPv4Options {
# PAD = @{ 'code' = 0; 'label' = "PAD"; 'length' = 1; "value" = 0 }
# # RFC section 3
# SubnetMask = @{ 'code' = 1; 'label' = "SubnetMask"; 'length' = 4 }
# TimeOffset = @{ 'code' = 2; 'label' = "TimeOffset"; 'length' = 1 }
# Router = @{ 'code' = 3; 'label' = "Router"; 'length' = 1 }
# TimeServer = @{ 'code' = 4; 'label' = "TimeServer"; 'length' = 1 }
# NameServer = @{ 'code' = 5; 'label' = "NameServer"; 'length' = 1 }
# DomainNameServer = @{ 'code' = 6; 'label' = "DomainNameServer"; 'length' = 1 }
# LogServer = @{ 'code' = 7; 'label' = "LogServer"; 'length' = 1 }
# CookieServer = @{ 'code' = 8; 'label' = "CookieServer"; 'length' = 1 }
# LPRServer = @{ 'code' = 9; 'label' = "LPRServer"; 'length' = 1 }
# ImpressServer = @{ 'code' = 10; 'label' = "ImpressServer"; 'length' = 1 }
# ResourceLocationServer = @{ 'code' = 11; 'label' = "ResourceLocationServer"; 'length' = 1 }
# Hostname = @{ 'code' = 12; 'label' = "Hostname"; 'length' = 1 }
# BootFileSize = @{ 'code' = 13; 'label' = "BootFileSize"; 'length' = 1 }
# MeritDump = @{ 'code' = 14; 'label' = "MeritDump"; 'length' = 1 }
# DomainName = @{ 'code' = 15; 'label' = "DomainName"; 'length' = 1 }
# SwapServer = @{ 'code' = 16; 'label' = "SwapServer"; 'length' = 1 }
# RootPath = @{ 'code' = 17; 'label' = "RootPath"; 'length' = 1 }
# ExtensionsPath = @{ 'code' = 18; 'label' = "ExtensionsPath"; 'length' = 1 }
# # RFC section 4
# IPForwarding = @{ 'code' = 19; 'label' = "IPForwarding"; 'length' = 1 }
# NonLocalSourceRouting = @{ 'code' = 20; 'label' = "NonLocalSourceRouting"; 'length' = 1 }
# PolicyFilter = @{ 'code' = 21; 'label' = "PolicyFilter"; 'length' = 1 }
# MaximumDatagramReassemblySize = @{ 'code' = 22; 'label' = "MaximumDatagramReassemblySize"; 'length' = 1 }
# DefaultIPTTL = @{ 'code' = 23; 'label' = "DefaultIPTTL"; 'length' = 1 }
# PathMTUAgingTimeout = @{ 'code' = 24; 'label' = "PathMTUAgingTimeout"; 'length' = 1 }
# PathMTUPlateauTable = @{ 'code' = 25; 'label' = "PathMTUPlateauTable"; 'length' = 1 }
# # RFC section 5
# InterfaceMTU = @{ 'code' = 26; 'label' = "InterfaceMTU"; 'length' = 1 }
# AllSubnetsareLocal = @{ 'code' = 27; 'label' = "AllSubnetsareLocal"; 'length' = 1 }
# BroadcastAddress = @{ 'code' = 28; 'label' = "BroadcastAddress"; 'length' = 1 }
# PerformMaskDiscovery = @{ 'code' = 29; 'label' = "PerformMaskDiscovery"; 'length' = 1 }
# MaskSupplier = @{ 'code' = 30; 'label' = "MaskSupplier"; 'length' = 1 }
# PerformRouteriscovery = @{ 'code' = 31; 'label' = "PerformRouteriscovery"; 'length' = 1 }
# RouterSolicitationddress = @{ 'code' = 32; 'label' = "RouterSolicitationddress"; 'length' = 1 }
# StaticRoute = @{ 'code' = 33; 'label' = "StaticRoute"; 'length' = 1 }
# # RFC section 6
# TrailerEncapsulation = @{ 'code' = 34; 'label' = "TrailerEncapsulation"; 'length' = 1 }
# ARPCacheimeout = @{ 'code' = 35; 'label' = "ARPCacheimeout"; 'length' = 1 }
# EthernetEncapsulation = @{ 'code' = 36; 'label' = "EthernetEncapsulation"; 'length' = 1 }
# # RFC section 7
# TCPDefaultTL = @{ 'code' = 37; 'label' = "TCPDefaultTL"; 'length' = 1 }
# TCPKeepaliventerval = @{ 'code' = 38; 'label' = "TCPKeepaliventerval"; 'length' = 1 }
# TCPKeepalivearbage = @{ 'code' = 39; 'label' = "TCPKeepalivearbage"; 'length' = 1 }
# # RFC section 8
# NISDomain = @{ 'code' = 40; 'label' = "NISDomain"; 'length' = 1 }
# NISServer = @{ 'code' = 41; 'label' = "NISServer"; 'length' = 1 }
# NTPServer = @{ 'code' = 42; 'label' = "NTPServer"; 'length' = 1 }
# VendorSpecificInformation = @{ 'code' = 43; 'label' = "VendorSpecificInformation"; 'length' = 1 }
# NetBIOSNameServer = @{ 'code' = 44; 'label' = "NetBIOSNameServer"; 'length' = 1 }
# NetBIOSDatagramDistributionServer = @{ 'code' = 45; 'label' = "NetBIOSDatagramDistributionServer"; 'length' = 1 }
# NetBIOSNodeType = @{ 'code' = 46; 'label' = "NetBIOSNodeType"; 'length' = 1 }
# NetBIOSScope = @{ 'code' = 47; 'label' = "NetBIOSScope"; 'length' = 1 }
# XFontServer = @{ 'code' = 48; 'label' = "XFontServer"; 'length' = 1 }
# XDisplayManager = @{ 'code' = 49; 'label' = "XDisplayManager"; 'length' = 1 }
# NISPLUSDomain = @{ 'code' = 64; 'label' = "NISPLUSDomain"; 'length' = 1 }
# NISPLUSServer = @{ 'code' = 65; 'label' = "NISPLUSServer"; 'length' = 1 }
# MobileIPHomeAgent = @{ 'code' = 68; 'label' = "MobileIPHomeAgent"; 'length' = 1 }
# SMTPServer = @{ 'code' = 69; 'label' = "SMTPServer"; 'length' = 1 }
# POP3Server = 70
# NNTPServer = @{ 'code' = 71; 'label' = "NNTPServer"; 'length' = 1 }
# WWWServer = @{ 'code' = 72; 'label' = "WWWServer"; 'length' = 1 }
# FingerServer = @{ 'code' = 73; 'label' = "FingerServer"; 'length' = 1 }
# IRCServer = @{ 'code' = 74; 'label' = "IRCServer"; 'length' = 1 }
# StreetTalkServer = @{ 'code' = 75; 'label' = "StreetTalkServer"; 'length' = 1 }
# STDAServer = @{ 'code' = 76; 'label' = "STDAServer"; 'length' = 1 }
# # RFC section 9
# RequestedIPAddress = @{ 'code' = 50; 'label' = "RequestedIPAddress"; 'length' = 1 }
# IPAddressLeaseTime = @{ 'code' = 51; 'label' = "IPAddressLeaseTime"; 'length' = 1 }
# OptionOverload = @{ 'code' = 52; 'label' = "OptionOverload"; 'length' = 1 }
# DHCPMessageType = @{ 'code' = 53; 'label' = "DHCPMessageType"; 'length' = 1 }
# ServerIdentifier = @{ 'code' = 54; 'label' = "ServerIdentifier"; 'length' = 1 }
# ParameterRequestList = @{ 'code' = 55; 'label' = "ParameterRequestList"; 'length' = 1 }
# Message = @{ 'code' = 56; 'label' = "Message"; 'length' = 1 }
# MaximumDHCPMessageSize = @{ 'code' = 57; 'label' = "MaximumDHCPMessageSize"; 'length' = 1 }
# RenewalTimeValue = @{ 'code' = 58; 'label' = "RenewalTimeValue"; 'length' = 1 }
# RebindingTimeValue = @{ 'code' = 59; 'label' = "RebindingTimeValue"; 'length' = 1 }
# Vendorclassidentifier = @{ 'code' = 60; 'label' = "Vendorclassidentifier"; 'length' = 1 }
# ClientIdentifier = @{ 'code' = 61; 'label' = "ClientIdentifier"; 'length' = 1 }
# TFTPservername = @{ 'code' = 66; 'label' = "TFTPservername"; 'length' = 1 }
# Bootfilename = @{ 'code' = 67; 'label' = "Bootfilename"; 'length' = 1 }
# #
# END = @{ 'code' = 255; 'label' = "END"; 'length' = 1 }
# }