Index: trunk/src/VBox/Frontends/VBoxManage/VBoxManageDHCPServer.cpp
===================================================================
--- trunk/src/VBox/Frontends/VBoxManage/VBoxManageDHCPServer.cpp	(revision 79844)
+++ trunk/src/VBox/Frontends/VBoxManage/VBoxManageDHCPServer.cpp	(revision 79845)
@@ -113,9 +113,9 @@
 } DHCPDCMDCTX;
 
-typedef std::pair<DhcpOpt_T, Utf8Str> DhcpOptSpec;
+typedef std::pair<DHCPOption_T, Utf8Str> DhcpOptSpec;
 typedef std::vector<DhcpOptSpec> DhcpOpts;
 typedef DhcpOpts::iterator DhcpOptIterator;
 
-typedef std::vector<DhcpOpt_T> DhcpOptIds;
+typedef std::vector<DHCPOption_T> DhcpOptIds;
 typedef DhcpOptIds::iterator DhcpOptIdIterator;
 
@@ -511,5 +511,5 @@
                         if (ptrConfig.isNull())
                             return RTEXITCODE_FAILURE;
-                        CHECK_ERROR2I_STMT(ptrConfig, SetOption((DhcpOpt_T)idAddOpt, DHCPOptionEncoding_Normal,
+                        CHECK_ERROR2I_STMT(ptrConfig, SetOption((DHCPOption_T)idAddOpt, DHCPOptionEncoding_Normal,
                                                                 Bstr(ValueUnion.psz).raw()), rcExit = RTEXITCODE_FAILURE);
                     }
@@ -534,5 +534,5 @@
                         if (ptrConfig.isNull())
                             return RTEXITCODE_FAILURE;
-                        CHECK_ERROR2I_STMT(ptrConfig, SetOption((DhcpOpt_T)idAddOpt, DHCPOptionEncoding_Hex,
+                        CHECK_ERROR2I_STMT(ptrConfig, SetOption((DHCPOption_T)idAddOpt, DHCPOptionEncoding_Hex,
                                                                 Bstr(ValueUnion.psz).raw()), rcExit = RTEXITCODE_FAILURE);
                     }
@@ -548,5 +548,5 @@
                         if (ptrConfig.isNull())
                             return RTEXITCODE_FAILURE;
-                        CHECK_ERROR2I_STMT(ptrConfig, RemoveOption((DhcpOpt_T)ValueUnion.u8), rcExit = RTEXITCODE_FAILURE);
+                        CHECK_ERROR2I_STMT(ptrConfig, RemoveOption((DHCPOption_T)ValueUnion.u8), rcExit = RTEXITCODE_FAILURE);
                     }
                     break;
@@ -780,5 +780,5 @@
                         if (ptrConfig.isNull())
                             return RTEXITCODE_FAILURE;
-                        CHECK_ERROR2I_STMT(ptrConfig, SetOption((DhcpOpt_T)u8OptId, DHCPOptionEncoding_Normal,
+                        CHECK_ERROR2I_STMT(ptrConfig, SetOption((DHCPOption_T)u8OptId, DHCPOptionEncoding_Normal,
                                                                 Bstr(ValueUnion.psz).raw()), rcExit = RTEXITCODE_FAILURE);
                     }
@@ -797,5 +797,5 @@
                         if (ptrConfig.isNull())
                             return RTEXITCODE_FAILURE;
-                        CHECK_ERROR2I_STMT(ptrConfig, RemoveOption((DhcpOpt_T)u8OptId), rcExit = RTEXITCODE_FAILURE);
+                        CHECK_ERROR2I_STMT(ptrConfig, RemoveOption((DHCPOption_T)u8OptId), rcExit = RTEXITCODE_FAILURE);
                     }
                     fNeedValueOrRemove = false;
Index: trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 79844)
+++ trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 79845)
@@ -1764,4 +1764,5 @@
       name="DhcpOpt"
       uuid="40d99bd3-3ece-44d2-a07e-1085fe9c4f0b">
+    <desc>Deprecated enum, will be removed in 6.1.</desc>
     <const name="SubnetMask" value="1"/>
     <const name="TimeOffset" value="2"/>
@@ -1830,4 +1831,81 @@
 
   <enum
+      name="DHCPOption"
+      uuid="00f5b10f-0021-4513-00f7-5bf4000982bf">
+    <!-- Names should exactly match those given in DhcpOptions.h. -->
+    <!-- Note! we use the descriptions here in the VBoxManage man page / manual. Everything must be propertly described. -->
+    <const name="SubnetMask"              value="1"><desc>IPv4 netmask. Set to <link to="IDHCPServer::networkMask"/> by default.</desc></const>
+    <const name="TimeOffset"              value="2"><desc>UTC offset in seconds (32-bit decimal value).</desc></const>
+    <const name="Routers"                 value="3"><desc>Space separated list of IPv4 router addresses.</desc></const>
+    <const name="TimeServers"             value="4"><desc>Space separated list of IPv4 time server (RFC 868) addresses.</desc></const>
+    <const name="NameServers"             value="5"><desc>Space separated list of IPv4 name server (IEN 116) addresses.</desc></const>
+    <const name="DomainNameServers"       value="6"><desc>Space separated list of IPv4 DNS addresses.</desc></const>
+    <const name="LogServers"              value="7"><desc>Space separated list of IPv4 log server addresses.</desc></const>
+    <const name="CookieServers"           value="8"><desc>Space separated list of IPv4 cookie server (RFC 865) addresses.</desc></const>
+    <const name="LPRServers"              value="9"><desc>Space separated list of IPv4 line printer server (RFC 1179) addresses.</desc></const>
+    <const name="ImpressServers"          value="10"><desc>Space separated list of IPv4 imagen impress server addresses.</desc></const>
+    <const name="ResourseLocationServers" value="11"><desc>Space separated list of IPv4 resource location (RFC 887) addresses.</desc></const>
+    <const name="HostName"                value="12"><desc>The client name. See RFC 1035 for character limits. </desc></const>
+    <const name="BootFileSize"            value="13"><desc>Number of 512 byte blocks making up the boot file (16-bit decimal value).</desc></const>
+    <const name="MeritDumpFile"           value="14"><desc>Client core file.</desc></const>
+    <const name="DomainName"              value="15"><desc>Domain name for the client.</desc></const>
+    <const name="SwapServer"              value="16"><desc>IPv4 address of the swap server that the client should use.</desc></const>
+    <const name="RootPath"                value="17"><desc>The path to the root disk the client should use.</desc></const>
+    <const name="ExtensionPath"           value="18"><desc>Path to a file containing additional DHCP options (RFC2123).</desc></const>
+    <const name="IPForwarding"            value="19"><desc>Whether IP forwarding should be enabled by the client (boolean).</desc></const>
+    <const name="OptNonLocalSourceRouting" value="20"><desc>Whether non-local datagrams should be forwarded by the client (boolean)</desc></const>
+    <const name="PolicyFilter"            value="21"><desc>List of IPv4 addresses and masks paris controlling non-local source routing.</desc></const>
+    <const name="MaxDgramReassemblySize"  value="22"><desc>The maximum datagram size the client should reassemble (16-bit decimal value).</desc></const>
+    <const name="DefaultIPTTL"            value="23"><desc>The default time-to-leave on outgoing (IP) datagrams (8-bit decimal value).</desc></const>
+    <const name="PathMTUAgingTimeout"     value="24"><desc>RFC1191 path MTU discovery timeout value in seconds (32-bit decimal value).</desc></const>
+    <const name="PathMTUPlateauTable"     value="25"><desc>RFC1191 path MTU discovery size table, sorted in ascending order (list of 16-bit decimal values).</desc></const>
+    <const name="InterfaceMTU"            value="26"><desc>The MTU size for the interface (16-bit decimal value).</desc></const>
+    <const name="AllSubnetsAreLocal"      value="27"><desc>Indicates whether the MTU size is the same for all subnets (boolean).</desc></const>
+    <const name="BroadcastAddress"        value="28"><desc>Broadcast address (RFC1122) for the client to use (IPv4 address).</desc></const>
+    <const name="PerformMaskDiscovery"    value="29"><desc>Whether to perform subnet mask discovery via ICMP (boolean).</desc></const>
+    <const name="MaskSupplier"            value="30"><desc>Whether to respond to subnet mask requests via ICMP (boolean).</desc></const>
+    <const name="PerformRouterDiscovery"  value="31"><desc>Whether to perform router discovery (RFC1256) (boolean).</desc></const>
+    <const name="RouterSolicitationAddress" value="32"><desc>Where to send router solicitation requests (RFC1256) (IPv4 address).</desc></const>
+    <const name="StaticRoute"             value="33"><desc>List of network and router address pairs addresses.</desc></const>
+    <const name="TrailerEncapsulation"    value="34"><desc>Whether to negotiate the use of trailers for ARP (RTF893) (boolean).</desc></const>
+    <const name="ARPCacheTimeout"         value="35"><desc>The timeout in seconds for ARP cache entries (32-bit decimal value).</desc></const>
+    <const name="EthernetEncapsulation"   value="36"><desc>Whether to use IEEE 802.3 (RTF1042) rather than of v2 (RFC894) ethernet encapsulation (boolean).</desc></const>
+    <const name="TCPDefaultTTL"           value="37"><desc>Default time-to-live for TCP sends (non-zero 8-bit decimal value).</desc></const>
+    <const name="TCPKeepaliveInterval"    value="38"><desc>The interface in seconds between TCP keepalive messages (32-bit decimal value).</desc></const>
+    <const name="TCPKeepaliveGarbage"     value="39"><desc>Whether to include a byte of garbage in TCP keepalive messages for backward compatibility (boolean).</desc></const>
+    <const name="NISDomain"               value="40"><desc>The NIS (Sun Network Information Services) domain name (string).</desc></const>
+    <const name="NISServers"              value="41"><desc>Space separated list of IPv4 NIS server addresses.</desc></const>
+    <const name="NTPServers"              value="42"><desc>Space separated list of IPv4 NTP (RFC1035) server addresses.</desc></const>
+    <const name="VendorSpecificInfo"      value="43"><desc>Vendor specific information. Only <link to="DHCPOptionEncoding_hex"/></desc></const>
+    <const name="NetBIOSNameServers"      value="44"><desc>Space separated list of IPv4 NetBIOS name server (NBNS) addresses ((RFC1001,RFC1002).</desc></const>
+    <const name="NetBIOSDatagramServers"  value="45"><desc>Space separated list of IPv4 NetBIOS datagram distribution server (NBDD) addresses (RFC1001,RFC1002).</desc></const>
+    <const name="NetBIOSNodeType"         value="46"><desc>NetBIOS node type (RFC1001,RFC1002): 1=B-node, 2=P-node, 4=M-node, and 8=H-node (8-bit decimal value).</desc></const>
+    <const name="NetBIOSScope"            value="47"><desc>NetBIOS scope (RFC1001,RFC1002). Only <link to="DHCPOptionEncoding_hex"/></desc></const>
+    <const name="XWindowsFontServers"     value="48"><desc>Space separated list of IPv4 X windows font server addresses.</desc></const>
+    <const name="XWindowsDisplayManager"  value="49"><desc>Space separated list of IPv4 X windows display manager addresses.</desc></const>
+    <!-- Options 50 thru 59 are considered DHCP internal and currently not settable. -->
+    <const name="NetWareIPDomainName"     value="62"><desc>Netware IP domain name (RFC2242) (string).</desc></const>
+    <const name="NetWareIPInformation"    value="63"><desc>Netware IP information (RFC2242). Only <link to="DHCPOptionEncoding_hex"/></desc></const>
+    <const name="NISPlusDomain"           value="64"><desc>The NIS+ domain name (string).</desc></const>
+    <const name="NISPlusServers"          value="65"><desc>Space separated list of IPv4 NIS+ server addresses.</desc></const>
+    <const name="TFTPServerName"          value="66"><desc>TFTP server name (string).</desc></const>
+    <const name="BootfileName"            value="67"><desc>Bootfile name (string).</desc></const>
+    <const name="MobileIPHomeAgents"      value="68"><desc>Space separated list of IPv4 mobile IP agent addresses.</desc></const>
+    <const name="SMTPServers"             value="69"><desc>Space separated list of IPv4 simple mail transport protocol (SMPT) server addresses.</desc></const>
+    <const name="POP3Servers"             value="70"><desc>Space separated list of IPv4 post office protocol 3 (POP3) server addresses.</desc></const>
+    <const name="NNTPServers"             value="71"><desc>Space separated list of IPv4 network news transport protocol (NTTP) server addresses.</desc></const>
+    <const name="WWWServers"              value="72"><desc>Space separated list of default IPv4 world wide web (WWW) server addresses.</desc></const>
+    <const name="FingerServers"           value="73"><desc>Space separated list of default IPv4 finger server addresses.</desc></const>
+    <const name="IRCServers"              value="74"><desc>Space separated list of default IPv4 internet relay chat (IRC) server  addresses.</desc></const>
+    <const name="StreetTalkServers"       value="75"><desc>Space separated list of IPv4 StreetTalk server addresses.</desc></const>
+    <const name="STDAServers"             value="76"><desc>Space separated list of IPv4 StreetTalk directory assistance (STDA) server addresses.</desc></const>
+    <!-- 77 is client only -->
+    <const name="SLPDirectoryAgent"       value="78"><desc>Addresses of one or more service location protocol (SLP) directory agent, and an indicator of whether their use is mandatory. Only <link to="DHCPOptionEncoding_hex"/>.</desc></const>
+    <const name="SLPServiceScope"         value="79"><desc>List of service scopes for the service location protocol (SLP) and whether using the list is mandator. Only <link to="DHCPOptionEncoding_hex"/>.</desc></const>
+    <!-- 80 is client only -->
+    <const name="DomainSearch"            value="119"><desc>Domain search list, see RFC3397 and section 4.1.4 in RFC1035 for encoding.  Only <link to="DHCPOptionEncoding_hex"/>.</desc></const>
+  </enum>
+
+  <enum
       name="DHCPOptionEncoding"
       uuid="84b6d460-2838-4682-c0d6-ef5b573ef28a">
@@ -2140,5 +2218,5 @@
   <interface
     name="IDHCPConfig" extends="$unknown"
-    uuid="39cdde66-cfc3-4eec-7427-faf5b16469ae"
+    uuid="00f4a8dc-0002-4b81-0077-1dcb004571ba"
     wsmap="managed"
     reservedMethods="8" reservedAttributes="16"
@@ -2166,9 +2244,21 @@
     </attribute>
 
+    <attribute name="forcedOptions" type="DHCPOption" safearray="yes" readonly="no">
+      <desc>List of DHCP options which should be forced upon the clients in this
+       config scope when they are available, whether the clients asks for them
+       or not.</desc>
+    </attribute>
+
+    <attribute name="suppressedOptions" type="DHCPOption" safearray="yes" readonly="no">
+      <desc>List of DHCP options which should not be sent to the clients in
+        this config scope.  This is intended for cases where one client or a
+        group of clients shouldn't see one or more (typically global) options.</desc>
+    </attribute>
+
     <method name="setOption">
       <desc>
         Sets a DHCP option.
       </desc>
-      <param name="option"    dir="in" type="DhcpOpt">
+      <param name="option"    dir="in" type="DHCPOption">
         <desc>The DHCP option.</desc>
       </param>
@@ -2178,6 +2268,7 @@
       <param name="value"     dir="in" type="wstring">
         <desc>The DHCP option value.  The exact format depends on the DHCP
-          option and should be documented in <link to="DhcpOpt"/>.
-        </desc>
+          @a option value and @a encoding, see see <link to="DHCPOption"/>
+          for the <link to="DHCPOptionEncoding::Normal"/> format.
+         </desc>
       </param>
     </method>
@@ -2185,5 +2276,5 @@
     <method name="removeOption">
       <desc>Removes the given DHCP option.</desc>
-      <param name="option"    dir="in" type="DhcpOpt"/>
+      <param name="option"    dir="in" type="DHCPOption"/>
     </method>
 
@@ -2200,5 +2291,5 @@
     <method name="getOption">
       <desc>Gets the value of a single DHCP option.</desc>
-      <param name="option"    dir="in" type="DhcpOpt">
+      <param name="option"    dir="in" type="DHCPOption">
         <desc>The DHCP option being sought.</desc>
       </param>
@@ -2207,5 +2298,8 @@
       </param>
       <param name="value"     dir="return" type="wstring">
-        <desc>The value of the requested DHCP option.</desc>
+        <desc>The value of the requested DHCP option. The exact format depends on
+          the DHCP @a option value and the @a encoding, see <link to="DHCPOption"/>
+          for the <link to="DHCPOptionEncoding::Normal"/> format.
+        </desc>
       </param>
     </method>
@@ -2213,5 +2307,5 @@
     <method name="getAllOptions">
       <desc>Gets all DHCP options and their values</desc>
-      <param name="options"   dir="out" type="DhcpOpt" safearray="yes">
+      <param name="options"   dir="out" type="DHCPOption" safearray="yes">
         <desc>Array containing the DHCP option numbers.</desc>
       </param>
@@ -2220,5 +2314,7 @@
       </param>
       <param name="values"    dir="return" type="wstring" safearray="yes">
-        <desc>Array of values that runs parallel to @a options and @a encodings.</desc>
+        <desc>Array of values that runs parallel to @a options and @a encodings.  The
+          format depends on both of those.
+        </desc>
       </param>
     </method>
Index: trunk/src/VBox/Main/include/DHCPConfigImpl.h
===================================================================
--- trunk/src/VBox/Main/include/DHCPConfigImpl.h	(revision 79844)
+++ trunk/src/VBox/Main/include/DHCPConfigImpl.h	(revision 79845)
@@ -45,20 +45,26 @@
 protected:
     /** Config scope (global, group, vm+nic, mac).  */
-    DHCPConfigScope_T const m_enmScope;
+    DHCPConfigScope_T const     m_enmScope;
     /** Minimum lease time. */
-    ULONG                   m_secMinLeaseTime;
+    ULONG                       m_secMinLeaseTime;
     /** Default lease time. */
-    ULONG                   m_secDefaultLeaseTime;
+    ULONG                       m_secDefaultLeaseTime;
     /** Maximum lease time. */
-    ULONG                   m_secMaxLeaseTime;
+    ULONG                       m_secMaxLeaseTime;
+    /** List of options which are forced upon the client when available, whether
+     * requested by it or not.  */
+    std::vector<DHCPOption_T>   m_vecForcedOptions;
+    /** List of options which should be suppressed and not returned the the client
+     * when available and requested. */
+    std::vector<DHCPOption_T>   m_vecSuppressedOptions;
     /** DHCP option map. */
-    settings::DhcpOptionMap m_OptionMap;
+    settings::DhcpOptionMap     m_OptionMap;
     /** The DHCP server parent (weak).   */
-    DHCPServer * const      m_pParent;
+    DHCPServer * const          m_pParent;
     /** The DHCP server parent (weak).   */
-    VirtualBox * const      m_pVirtualBox;
+    VirtualBox * const          m_pVirtualBox;
 private:
     /** For setError and such. */
-    VirtualBoxBase * const  m_pHack;
+    VirtualBoxBase * const      m_pHack;
 
 protected:
@@ -85,4 +91,8 @@
     HRESULT i_getMaxLeaseTime(ULONG *aMaxLeaseTime);
     HRESULT i_setMaxLeaseTime(ULONG aMaxLeaseTime);
+    HRESULT i_getForcedOptions(std::vector<DHCPOption_T> &aOptions);
+    HRESULT i_setForcedOptions(const std::vector<DHCPOption_T> &aOptions);
+    HRESULT i_getSuppressedOptions(std::vector<DHCPOption_T> &aOptions);
+    HRESULT i_setSuppressedOptions(const std::vector<DHCPOption_T> &aOptions);
     /** @} */
 
@@ -92,10 +102,10 @@
      * @todo Make protected again when IDHCPServer is cleaned up.
      * @{ */
-    virtual HRESULT i_setOption(DhcpOpt_T aOption, DHCPOptionEncoding_T aEncoding, const com::Utf8Str &aValue);
-
-    virtual HRESULT i_removeOption(DhcpOpt_T aOption);
+    virtual HRESULT i_setOption(DHCPOption_T aOption, DHCPOptionEncoding_T aEncoding, const com::Utf8Str &aValue);
+
+    virtual HRESULT i_removeOption(DHCPOption_T aOption);
     virtual HRESULT i_removeAllOptions();
-    HRESULT         i_getOption(DhcpOpt_T aOption, DHCPOptionEncoding_T *aEncoding, com::Utf8Str &aValue);
-    HRESULT         i_getAllOptions(std::vector<DhcpOpt_T> &aOptions, std::vector<DHCPOptionEncoding_T> &aEncodings,
+    HRESULT         i_getOption(DHCPOption_T aOption, DHCPOptionEncoding_T *aEncoding, com::Utf8Str &aValue);
+    HRESULT         i_getAllOptions(std::vector<DHCPOption_T> &aOptions, std::vector<DHCPOptionEncoding_T> &aEncodings,
                                     std::vector<com::Utf8Str> &aValues);
     virtual HRESULT i_remove();
@@ -150,14 +160,18 @@
     HRESULT getMaxLeaseTime(ULONG *aMaxLeaseTime) RT_OVERRIDE           { return i_getMaxLeaseTime(aMaxLeaseTime); }
     HRESULT setMaxLeaseTime(ULONG aMaxLeaseTime) RT_OVERRIDE            { return i_setMaxLeaseTime(aMaxLeaseTime); }
+    HRESULT getForcedOptions(std::vector<DHCPOption_T> &aOptions) RT_OVERRIDE       { return i_getForcedOptions(aOptions); }
+    HRESULT setForcedOptions(const std::vector<DHCPOption_T> &aOptions) RT_OVERRIDE { return i_setForcedOptions(aOptions); }
+    HRESULT getSuppressedOptions(std::vector<DHCPOption_T> &aOptions) RT_OVERRIDE   { return i_getSuppressedOptions(aOptions); }
+    HRESULT setSuppressedOptions(const std::vector<DHCPOption_T> &aOptions) RT_OVERRIDE  { return i_setSuppressedOptions(aOptions); }
     /** @} */
 
     /** @name wrapped IDHCPConfig methods
      * @{ */
-    HRESULT setOption(DhcpOpt_T aOption, DHCPOptionEncoding_T aEncoding, const com::Utf8Str &aValue) RT_OVERRIDE
+    HRESULT setOption(DHCPOption_T aOption, DHCPOptionEncoding_T aEncoding, const com::Utf8Str &aValue) RT_OVERRIDE
     {
         return i_setOption(aOption, aEncoding, aValue);
     }
 
-    HRESULT removeOption(DhcpOpt_T aOption) RT_OVERRIDE
+    HRESULT removeOption(DHCPOption_T aOption) RT_OVERRIDE
     {
         return i_removeOption(aOption);
@@ -169,10 +183,10 @@
     }
 
-    HRESULT getOption(DhcpOpt_T aOption, DHCPOptionEncoding_T *aEncoding, com::Utf8Str &aValue) RT_OVERRIDE
+    HRESULT getOption(DHCPOption_T aOption, DHCPOptionEncoding_T *aEncoding, com::Utf8Str &aValue) RT_OVERRIDE
     {
         return i_getOption(aOption, aEncoding, aValue);
     }
 
-    HRESULT getAllOptions(std::vector<DhcpOpt_T> &aOptions, std::vector<DHCPOptionEncoding_T> &aEncodings,
+    HRESULT getAllOptions(std::vector<DHCPOption_T> &aOptions, std::vector<DHCPOptionEncoding_T> &aEncodings,
                           std::vector<com::Utf8Str> &aValues) RT_OVERRIDE
     {
@@ -187,6 +201,6 @@
 
 public:
-    HRESULT i_setOption(DhcpOpt_T aOption, DHCPOptionEncoding_T aEncoding, const com::Utf8Str &aValue) RT_OVERRIDE;
-    HRESULT i_removeOption(DhcpOpt_T aOption) RT_OVERRIDE;
+    HRESULT i_setOption(DHCPOption_T aOption, DHCPOptionEncoding_T aEncoding, const com::Utf8Str &aValue) RT_OVERRIDE;
+    HRESULT i_removeOption(DHCPOption_T aOption) RT_OVERRIDE;
     HRESULT i_removeAllOptions() RT_OVERRIDE;
     HRESULT i_remove() RT_OVERRIDE;
@@ -307,4 +321,8 @@
     HRESULT getMaxLeaseTime(ULONG *aMaxLeaseTime) RT_OVERRIDE           { return i_getMaxLeaseTime(aMaxLeaseTime); }
     HRESULT setMaxLeaseTime(ULONG aMaxLeaseTime) RT_OVERRIDE            { return i_setMaxLeaseTime(aMaxLeaseTime); }
+    HRESULT getForcedOptions(std::vector<DHCPOption_T> &aOptions) RT_OVERRIDE       { return i_getForcedOptions(aOptions); }
+    HRESULT setForcedOptions(const std::vector<DHCPOption_T> &aOptions) RT_OVERRIDE { return i_setForcedOptions(aOptions); }
+    HRESULT getSuppressedOptions(std::vector<DHCPOption_T> &aOptions) RT_OVERRIDE   { return i_getSuppressedOptions(aOptions); }
+    HRESULT setSuppressedOptions(const std::vector<DHCPOption_T> &aOptions) RT_OVERRIDE  { return i_setSuppressedOptions(aOptions); }
     /** @} */
 
@@ -318,10 +336,10 @@
     /** @name Wrapped IDHCPConfig methods
      * @{ */
-    HRESULT setOption(DhcpOpt_T aOption, DHCPOptionEncoding_T aEncoding, const com::Utf8Str &aValue) RT_OVERRIDE
+    HRESULT setOption(DHCPOption_T aOption, DHCPOptionEncoding_T aEncoding, const com::Utf8Str &aValue) RT_OVERRIDE
     {
         return i_setOption(aOption, aEncoding, aValue);
     }
 
-    HRESULT removeOption(DhcpOpt_T aOption) RT_OVERRIDE
+    HRESULT removeOption(DHCPOption_T aOption) RT_OVERRIDE
     {
         return i_removeOption(aOption);
@@ -333,10 +351,10 @@
     }
 
-    HRESULT getOption(DhcpOpt_T aOption, DHCPOptionEncoding_T *aEncoding, com::Utf8Str &aValue) RT_OVERRIDE
+    HRESULT getOption(DHCPOption_T aOption, DHCPOptionEncoding_T *aEncoding, com::Utf8Str &aValue) RT_OVERRIDE
     {
         return i_getOption(aOption, aEncoding, aValue);
     }
 
-    HRESULT getAllOptions(std::vector<DhcpOpt_T> &aOptions, std::vector<DHCPOptionEncoding_T> &aEncodings,
+    HRESULT getAllOptions(std::vector<DHCPOption_T> &aOptions, std::vector<DHCPOptionEncoding_T> &aEncodings,
                           std::vector<com::Utf8Str> &aValues) RT_OVERRIDE
     {
@@ -438,14 +456,18 @@
     HRESULT getMaxLeaseTime(ULONG *aMaxLeaseTime) RT_OVERRIDE           { return i_getMaxLeaseTime(aMaxLeaseTime); }
     HRESULT setMaxLeaseTime(ULONG aMaxLeaseTime) RT_OVERRIDE            { return i_setMaxLeaseTime(aMaxLeaseTime); }
+    HRESULT getForcedOptions(std::vector<DHCPOption_T> &aOptions) RT_OVERRIDE       { return i_getForcedOptions(aOptions); }
+    HRESULT setForcedOptions(const std::vector<DHCPOption_T> &aOptions) RT_OVERRIDE { return i_setForcedOptions(aOptions); }
+    HRESULT getSuppressedOptions(std::vector<DHCPOption_T> &aOptions) RT_OVERRIDE   { return i_getSuppressedOptions(aOptions); }
+    HRESULT setSuppressedOptions(const std::vector<DHCPOption_T> &aOptions) RT_OVERRIDE  { return i_setSuppressedOptions(aOptions); }
     /** @} */
 
     /** @name wrapped IDHCPConfig methods
      * @{ */
-    HRESULT setOption(DhcpOpt_T aOption, DHCPOptionEncoding_T aEncoding, const com::Utf8Str &aValue) RT_OVERRIDE
+    HRESULT setOption(DHCPOption_T aOption, DHCPOptionEncoding_T aEncoding, const com::Utf8Str &aValue) RT_OVERRIDE
     {
         return i_setOption(aOption, aEncoding, aValue);
     }
 
-    HRESULT removeOption(DhcpOpt_T aOption) RT_OVERRIDE
+    HRESULT removeOption(DHCPOption_T aOption) RT_OVERRIDE
     {
         return i_removeOption(aOption);
@@ -457,10 +479,10 @@
     }
 
-    HRESULT getOption(DhcpOpt_T aOption, DHCPOptionEncoding_T *aEncoding, com::Utf8Str &aValue) RT_OVERRIDE
+    HRESULT getOption(DHCPOption_T aOption, DHCPOptionEncoding_T *aEncoding, com::Utf8Str &aValue) RT_OVERRIDE
     {
         return i_getOption(aOption, aEncoding, aValue);
     }
 
-    HRESULT getAllOptions(std::vector<DhcpOpt_T> &aOptions, std::vector<DHCPOptionEncoding_T> &aEncodings,
+    HRESULT getAllOptions(std::vector<DHCPOption_T> &aOptions, std::vector<DHCPOptionEncoding_T> &aEncodings,
                           std::vector<com::Utf8Str> &aValues) RT_OVERRIDE
     {
Index: trunk/src/VBox/Main/include/DHCPServerImpl.h
===================================================================
--- trunk/src/VBox/Main/include/DHCPServerImpl.h	(revision 79844)
+++ trunk/src/VBox/Main/include/DHCPServerImpl.h	(revision 79845)
@@ -29,5 +29,5 @@
     struct DHCPServer;
     struct DhcpOptValue;
-    typedef std::map<DhcpOpt_T, DhcpOptValue> DhcpOptionMap;
+    typedef std::map<DHCPOption_T, DhcpOptValue> DhcpOptionMap;
 }
 
@@ -121,5 +121,5 @@
                                     ComObjPtr<DHCPIndividualConfig> &a_rPtrConfig);
 
-    HRESULT i_encode60Option(com::Utf8Str &strEncoded, DhcpOpt_T enmOption,
+    HRESULT i_encode60Option(com::Utf8Str &strEncoded, DHCPOption_T enmOption,
                              DHCPOptionEncoding_T enmEncoding, const com::Utf8Str &strValue);
     HRESULT i_getAllOptions60(DHCPConfig &aSourceConfig, std::vector<com::Utf8Str> &aValues);
Index: trunk/src/VBox/Main/src-server/DHCPConfigImpl.cpp
===================================================================
--- trunk/src/VBox/Main/src-server/DHCPConfigImpl.cpp	(revision 79844)
+++ trunk/src/VBox/Main/src-server/DHCPConfigImpl.cpp	(revision 79845)
@@ -63,4 +63,49 @@
     m_secMaxLeaseTime     = rConfig.secMaxLeaseTime;
 
+    /*
+     * The two option list:
+     */
+    struct
+    {
+        const char                *psz;
+        std::vector<DHCPOption_T> *pDst;
+    } aStr2Vec[] =
+    {
+        { rConfig.strForcedOptions.c_str(),     &m_vecForcedOptions },
+        { rConfig.strSuppressedOptions.c_str(), &m_vecSuppressedOptions },
+    };
+    for (size_t i = 0; i < RT_ELEMENTS(aStr2Vec); i++)
+    {
+        Assert(aStr2Vec[i].pDst->size() == 0);
+        const char *psz = RTStrStripL(aStr2Vec[i].psz);
+        while (*psz != '\0')
+        {
+            uint8_t  bOpt;
+            char    *pszNext;
+            int vrc = RTStrToUInt8Ex(psz, &pszNext, 10, &bOpt);
+            if (vrc == VINF_SUCCESS || vrc == VWRN_TRAILING_SPACES)
+            {
+                try
+                {
+                    aStr2Vec[i].pDst->push_back((DHCPOption_T)bOpt);
+                }
+                catch (std::bad_alloc &)
+                {
+                    return E_OUTOFMEMORY;
+                }
+            }
+            else
+            {
+                LogRelFunc(("Trouble at offset %#zu converting '%s' to a DHCPOption_T vector (vrc=%Rrc)!  Ignornig the remainder.\n",
+                            psz - aStr2Vec[i].psz, aStr2Vec[i].psz, vrc));
+                break;
+            }
+            psz = RTStrStripL(pszNext);
+        }
+    }
+
+    /*
+     * The option map:
+     */
     for (settings::DhcpOptionMap::const_iterator it = rConfig.mapOptions.begin(); it != rConfig.mapOptions.end(); ++it)
     {
@@ -86,4 +131,21 @@
     a_rDst.secMaxLeaseTime     = m_secMaxLeaseTime;
 
+    /* Forced and suppressed vectors: */
+    try
+    {
+        a_rDst.strForcedOptions.setNull();
+        for (size_t i = 0; i < m_vecForcedOptions.size(); i++)
+            a_rDst.strForcedOptions.appendPrintf(i ? " %d" : "%d", m_vecForcedOptions[i]);
+
+        a_rDst.strSuppressedOptions.setNull();
+        for (size_t i = 0; i < m_vecSuppressedOptions.size(); i++)
+            a_rDst.strSuppressedOptions.appendPrintf(i ? " %d" : "%d", m_vecSuppressedOptions[i]);
+    }
+    catch (std::bad_alloc &)
+    {
+        return E_OUTOFMEMORY;
+    }
+
+
     /* Options: */
     try
@@ -161,5 +223,154 @@
 
 
-HRESULT DHCPConfig::i_setOption(DhcpOpt_T aOption, DHCPOptionEncoding_T aEncoding, const com::Utf8Str &aValue)
+HRESULT DHCPConfig::i_getForcedOptions(std::vector<DHCPOption_T> &aOptions)
+{
+    AutoReadLock alock(m_pHack COMMA_LOCKVAL_SRC_POS);
+    try
+    {
+        aOptions = m_vecForcedOptions;
+    }
+    catch (std::bad_alloc &)
+    {
+        return E_OUTOFMEMORY;
+    }
+    return S_OK;
+}
+
+
+HRESULT DHCPConfig::i_setForcedOptions(const std::vector<DHCPOption_T> &aOptions)
+{
+    /*
+     * Validate the options.
+     */
+    try
+    {
+        std::map<DHCPOption_T, bool> mapDuplicates;
+        for (size_t i = 0; i < aOptions.size(); i++)
+        {
+            DHCPOption_T enmOpt = aOptions[i];
+            if ((int)enmOpt > 0 && (int)enmOpt < 255)
+            {
+                if (mapDuplicates.find(enmOpt) == mapDuplicates.end())
+                    mapDuplicates[enmOpt] = true;
+                else
+                    return m_pHack->setError(E_INVALIDARG, m_pHack->tr("Duplicate option value: %d"), (int)enmOpt);
+            }
+            else
+                return m_pHack->setError(E_INVALIDARG, m_pHack->tr("Invalid option value: %d"), (int)enmOpt);
+        }
+    }
+    catch (std::bad_alloc &)
+    {
+        return E_OUTOFMEMORY;
+    }
+
+    /*
+     * Do the updating.
+     */
+    {
+        AutoWriteLock alock(m_pHack COMMA_LOCKVAL_SRC_POS);
+
+        /* Actually changed? */
+        if (m_vecForcedOptions.size() == aOptions.size())
+        {
+            ssize_t i = m_vecForcedOptions.size();
+            while (i-- > 0)
+                if (m_vecForcedOptions[i] != aOptions[i])
+                    break;
+            if (i < 0)
+                return S_OK;
+        }
+
+        /* Copy over the changes: */
+        try
+        {
+            m_vecForcedOptions = aOptions;
+        }
+        catch (std::bad_alloc &)
+        {
+            return E_OUTOFMEMORY;
+        }
+    }
+
+    return i_doWriteConfig();
+}
+
+
+HRESULT DHCPConfig::i_getSuppressedOptions(std::vector<DHCPOption_T> &aOptions)
+{
+    AutoReadLock alock(m_pHack COMMA_LOCKVAL_SRC_POS);
+    try
+    {
+        aOptions = m_vecSuppressedOptions;
+    }
+    catch (std::bad_alloc &)
+    {
+        return E_OUTOFMEMORY;
+    }
+    return S_OK;
+}
+
+
+HRESULT DHCPConfig::i_setSuppressedOptions(const std::vector<DHCPOption_T> &aOptions)
+{
+    /*
+     * Validate and normalize it.
+     */
+    std::map<DHCPOption_T, bool> mapNormalized;
+    try
+    {
+        for (size_t i = 0; i < aOptions.size(); i++)
+        {
+            DHCPOption_T enmOpt = aOptions[i];
+            if ((int)enmOpt > 0 && (int)enmOpt < 255)
+                mapNormalized[enmOpt] = true;
+            else
+                return m_pHack->setError(E_INVALIDARG, m_pHack->tr("Invalid option value: %d"), (int)enmOpt);
+        }
+    }
+    catch (std::bad_alloc &)
+    {
+        return E_OUTOFMEMORY;
+    }
+
+    /*
+     * Do the updating.
+     */
+    {
+        AutoWriteLock alock(m_pHack COMMA_LOCKVAL_SRC_POS);
+
+        /* Actually changed? */
+        if (m_vecSuppressedOptions.size() == mapNormalized.size())
+        {
+            size_t i = 0;
+            for (std::map<DHCPOption_T, bool>::const_iterator itMap = mapNormalized.begin();; ++itMap, i++)
+            {
+                if (itMap == mapNormalized.end())
+                    return S_OK; /* no change */
+                if (itMap->first != m_vecSuppressedOptions[i])
+                    break;
+            }
+        }
+
+        /* Copy over the changes: */
+        try
+        {
+            m_vecSuppressedOptions.resize(mapNormalized.size());
+            size_t i = 0;
+            for (std::map<DHCPOption_T, bool>::const_iterator itMap = mapNormalized.begin();
+                 itMap != mapNormalized.end(); ++itMap, i++)
+                m_vecSuppressedOptions[i] = itMap->first;
+        }
+        catch (std::bad_alloc &)
+        {
+            return E_OUTOFMEMORY;
+        }
+    }
+
+    return i_doWriteConfig();
+}
+
+
+HRESULT DHCPConfig::i_setOption(DHCPOption_T aOption, DHCPOptionEncoding_T aEncoding, const com::Utf8Str &aValue)
 {
     /*
@@ -211,5 +422,5 @@
 
 
-HRESULT DHCPConfig::i_removeOption(DhcpOpt_T aOption)
+HRESULT DHCPConfig::i_removeOption(DHCPOption_T aOption)
 {
     {
@@ -235,5 +446,5 @@
 
 
-HRESULT DHCPConfig::i_getOption(DhcpOpt_T aOption, DHCPOptionEncoding_T *aEncoding, com::Utf8Str &aValue)
+HRESULT DHCPConfig::i_getOption(DHCPOption_T aOption, DHCPOptionEncoding_T *aEncoding, com::Utf8Str &aValue)
 {
     AutoReadLock alock(m_pHack COMMA_LOCKVAL_SRC_POS);
@@ -248,5 +459,5 @@
 
 
-HRESULT DHCPConfig::i_getAllOptions(std::vector<DhcpOpt_T> &aOptions, std::vector<DHCPOptionEncoding_T> &aEncodings,
+HRESULT DHCPConfig::i_getAllOptions(std::vector<DHCPOption_T> &aOptions, std::vector<DHCPOptionEncoding_T> &aEncodings,
                                     std::vector<com::Utf8Str> &aValues)
 {
@@ -338,5 +549,5 @@
     HRESULT hrc = DHCPConfig::i_initWithDefaults(a_pVirtualBox, a_pParent);
     if (SUCCEEDED(hrc))
-        hrc = i_setOption(DhcpOpt_SubnetMask, DHCPOptionEncoding_Normal, "0.0.0.0");
+        hrc = i_setOption(DHCPOption_SubnetMask, DHCPOptionEncoding_Normal, "0.0.0.0");
 
     if (SUCCEEDED(hrc))
@@ -386,5 +597,5 @@
 {
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-    settings::DhcpOptionMap::const_iterator it = m_OptionMap.find(DhcpOpt_SubnetMask);
+    settings::DhcpOptionMap::const_iterator it = m_OptionMap.find(DHCPOption_SubnetMask);
     if (it != m_OptionMap.end())
     {
@@ -412,5 +623,5 @@
         return setErrorBoth(E_INVALIDARG, vrc, tr("Invalid IPv4 netmask '%s': %Rrc"), a_rSrc.c_str(), vrc);
 
-    return i_setOption(DhcpOpt_SubnetMask, DHCPOptionEncoding_Normal, a_rSrc);
+    return i_setOption(DHCPOption_SubnetMask, DHCPOptionEncoding_Normal, a_rSrc);
 }
 
@@ -419,5 +630,5 @@
  * Overriden to ensure the sanity of the DhcpOpt_SubnetMask option.
  */
-HRESULT DHCPGlobalConfig::i_setOption(DhcpOpt_T aOption, DHCPOptionEncoding_T aEncoding, const com::Utf8Str &aValue)
+HRESULT DHCPGlobalConfig::i_setOption(DHCPOption_T aOption, DHCPOptionEncoding_T aEncoding, const com::Utf8Str &aValue)
 {
     if (aOption != DhcpOpt_SubnetMask || aEncoding == DHCPOptionEncoding_Normal)
@@ -430,5 +641,5 @@
  * Overriden to ensure the sanity of the DhcpOpt_SubnetMask option.
  */
-HRESULT DHCPGlobalConfig::i_removeOption(DhcpOpt_T aOption)
+HRESULT DHCPGlobalConfig::i_removeOption(DHCPOption_T aOption)
 {
     if (aOption != DhcpOpt_SubnetMask)
@@ -445,5 +656,5 @@
     {
         AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-        settings::DhcpOptionMap::iterator it = m_OptionMap.find(DhcpOpt_SubnetMask);
+        settings::DhcpOptionMap::iterator it = m_OptionMap.find(DHCPOption_SubnetMask);
         m_OptionMap.erase(m_OptionMap.begin(), it);
         if (it != m_OptionMap.end())
Index: trunk/src/VBox/Main/src-server/DHCPServerImpl.cpp
===================================================================
--- trunk/src/VBox/Main/src-server/DHCPServerImpl.cpp	(revision 79844)
+++ trunk/src/VBox/Main/src-server/DHCPServerImpl.cpp	(revision 79845)
@@ -580,5 +580,5 @@
  * value.
  */
-HRESULT DHCPServer::i_encode60Option(com::Utf8Str &strEncoded, DhcpOpt_T enmOption,
+HRESULT DHCPServer::i_encode60Option(com::Utf8Str &strEncoded, DHCPOption_T enmOption,
                                      DHCPOptionEncoding_T enmEncoding, const com::Utf8Str &strValue)
 {
@@ -634,5 +634,5 @@
 {
     /* Get the values using the new getter: */
-    std::vector<DhcpOpt_T>              Options;
+    std::vector<DHCPOption_T>           Options;
     std::vector<DHCPOptionEncoding_T>   Encodings;
     std::vector<com::Utf8Str>           Values;
@@ -658,5 +658,5 @@
 {
     if (aOption != 0)
-        return aTargetConfig.i_setOption(aOption, DHCPOptionEncoding_Normal, aValue);
+        return aTargetConfig.i_setOption((DHCPOption_T)aOption, DHCPOptionEncoding_Normal, aValue);
 
     /*
@@ -703,5 +703,5 @@
     }
 
-    return aTargetConfig.i_setOption(aOption, enmEncoding, com::Utf8Str(pszNext + 1));
+    return aTargetConfig.i_setOption((DHCPOption_T)aOption, enmEncoding, com::Utf8Str(pszNext + 1));
 }
 
@@ -715,5 +715,5 @@
 HRESULT DHCPServer::removeGlobalOption(DhcpOpt_T aOption)
 {
-    return m->globalConfig->i_removeOption(aOption);
+    return m->globalConfig->i_removeOption((DHCPOption_T)aOption);
 }
 
@@ -885,5 +885,5 @@
     HRESULT hrc = i_vmNameAndSlotToConfig(aVmName, aSlot, false, ptrConfig);
     if (SUCCEEDED(hrc))
-        hrc = ptrConfig->i_removeOption(aOption);
+        hrc = ptrConfig->i_removeOption((DHCPOption_T)aOption);
     return hrc;
 }
Index: trunk/src/VBox/Main/xml/Settings.cpp
===================================================================
--- trunk/src/VBox/Main/xml/Settings.cpp	(revision 79844)
+++ trunk/src/VBox/Main/xml/Settings.cpp	(revision 79845)
@@ -1738,5 +1738,5 @@
         pElmThis->setAttribute("networkName", srv.strNetworkName);
         pElmThis->setAttribute("IPAddress", srv.strIPAddress);
-        DhcpOptConstIterator itOpt = srv.globalConfig.mapOptions.find(DhcpOpt_SubnetMask);
+        DhcpOptConstIterator itOpt = srv.globalConfig.mapOptions.find(DHCPOption_SubnetMask);
         if (itOpt != srv.globalConfig.mapOptions.end())
             pElmThis->setAttribute("networkMask", itOpt->second.strValue);
@@ -1802,8 +1802,12 @@
     if (rConfig.secMaxLeaseTime > 0)
         elmOptions.setAttribute("secMaxLeaseTime", rConfig.secMaxLeaseTime);
+    if (rConfig.strForcedOptions.isNotEmpty())
+        elmOptions.setAttribute("forcedOptions", rConfig.strForcedOptions);
+    if (rConfig.strSuppressedOptions.isNotEmpty())
+        elmOptions.setAttribute("suppressedOptions", rConfig.strSuppressedOptions);
 
     /* The DHCP options are <Option> child elements: */
     for (DhcpOptConstIterator it = rConfig.mapOptions.begin(); it != rConfig.mapOptions.end(); ++it)
-        if (it->first != DhcpOpt_SubnetMask || !fSkipSubnetMask)
+        if (it->first != DHCPOption_SubnetMask || !fSkipSubnetMask)
         {
             xml::ElementNode *pElmOption = elmOptions.createChild("Option");
@@ -1830,5 +1834,5 @@
             if (   pelmServer->getAttributeValue("networkName", srv.strNetworkName)
                 && pelmServer->getAttributeValue("IPAddress", srv.strIPAddress)
-                && pelmServer->getAttributeValue("networkMask", srv.globalConfig.mapOptions[DhcpOpt_SubnetMask].strValue)
+                && pelmServer->getAttributeValue("networkMask", srv.globalConfig.mapOptions[DHCPOption_SubnetMask].strValue)
                 && pelmServer->getAttributeValue("lowerIP", srv.strIPLower)
                 && pelmServer->getAttributeValue("upperIP", srv.strIPUpper)
@@ -1927,4 +1931,8 @@
     if (!elmConfig.getAttributeValue("secMaxLeaseTime", rConfig.secMaxLeaseTime))
         rConfig.secMaxLeaseTime = 0;
+    if (!elmConfig.getAttributeValue("forcedOptions", rConfig.strForcedOptions))
+        rConfig.strSuppressedOptions.setNull();
+    if (!elmConfig.getAttributeValue("suppressedOptions", rConfig.strSuppressedOptions))
+        rConfig.strSuppressedOptions.setNull();
 
     /* The DHCP options are <Option> child elements: */
@@ -1936,6 +1944,6 @@
         if (!pElmOption->getAttributeValue("name", iOptName))
             continue;
-        DhcpOpt_T OptName = (DhcpOpt_T)iOptName;
-        if (OptName == DhcpOpt_SubnetMask && fIgnoreSubnetMask)
+        DHCPOption_T OptName = (DHCPOption_T)iOptName;
+        if (OptName == DHCPOption_SubnetMask && fIgnoreSubnetMask)
             continue;
 
@@ -2258,5 +2266,5 @@
 #endif
         srv.strIPAddress = "192.168.56.100";
-        srv.globalConfig.mapOptions[DhcpOpt_SubnetMask] = DhcpOptValue("255.255.255.0");
+        srv.globalConfig.mapOptions[DHCPOption_SubnetMask] = DhcpOptValue("255.255.255.0");
         srv.strIPLower = "192.168.56.101";
         srv.strIPUpper = "192.168.56.254";
Index: trunk/src/VBox/NetworkServices/Dhcpd/DhcpOptions.cpp
===================================================================
--- trunk/src/VBox/NetworkServices/Dhcpd/DhcpOptions.cpp	(revision 79844)
+++ trunk/src/VBox/NetworkServices/Dhcpd/DhcpOptions.cpp	(revision 79845)
@@ -321,7 +321,7 @@
                 HANDLE(OptNonLocalSourceRouting);       // 20
                 HANDLE(OptPolicyFilter);                // 21
-                HANDLE(OptMaxDatagramReassemblySize);   // 22
+                HANDLE(OptMaxDgramReassemblySize);      // 22
                 HANDLE(OptDefaultIPTTL);                // 23
-                HANDLE(OptDefaultPathMTUAgingTimeout);  // 24
+                HANDLE(OptPathMTUAgingTimeout);         // 24
                 HANDLE(OptPathMTUPlateauTable);         // 25
                 HANDLE(OptInterfaceMTU);                // 26
@@ -342,9 +342,9 @@
                 HANDLE(OptNISServers);                  // 41
                 HANDLE(OptNTPServers);                  // 42
-                HANDLE(OptVendorSpecificInfo);          // 43
+                //HANDLE(OptVendorSpecificInfo);          // 43 - Only DHCPOptionEncoding_hex
                 HANDLE(OptNetBIOSNameServers);          // 44
                 HANDLE(OptNetBIOSDatagramServers);      // 45
                 HANDLE(OptNetBIOSNodeType);             // 46
-                HANDLE(OptNetBIOSScope);                // 47
+                //HANDLE(OptNetBIOSScope);                // 47 - Only DHCPOptionEncoding_hex
                 HANDLE(OptXWindowsFontServers);         // 48
                 HANDLE(OptXWindowsDisplayManager);      // 49
@@ -364,9 +364,9 @@
 #endif
                 HANDLE(OptNetWareIPDomainName);         // 62
-                HANDLE(OptNetWareIPInformation);        // 63
+                //HANDLE(OptNetWareIPInformation);        // 63 - Only DHCPOptionEncoding_hex
                 HANDLE(OptNISPlusDomain);               // 64
                 HANDLE(OptNISPlusServers);              // 65
-                HANDLE(OptTFTPServer);                  // 66 - perhaps we should use an alternative way to configure these.
-                HANDLE(OptBootFileName);                // 67 - perhaps we should use an alternative way to configure these.
+                HANDLE(OptTFTPServerName);              // 66 - perhaps we should use an alternative way to configure these.
+                HANDLE(OptBootfileName);                // 67 - perhaps we should use an alternative way to configure these.
                 HANDLE(OptMobileIPHomeAgents);          // 68
                 HANDLE(OptSMTPServers);                 // 69
@@ -379,7 +379,9 @@
                 HANDLE(OptSTDAServers);                 // 76
                 // OptUserClassId (77) is client only and not configurable.
-                HANDLE(OptSLPDirectoryAgent);           // 78
-                HANDLE(OptSLPServiceScope);             // 79
+                //HANDLE(OptSLPDirectoryAgent);           // 78 - Only DHCPOptionEncoding_hex
+                //HANDLE(OptSLPServiceScope);             // 79 - Only DHCPOptionEncoding_hex
                 // OptRapidCommit (80) is not configurable.
+
+                //HANDLE(OptDomainSearch);                // 119 - Only DHCPOptionEncoding_hex
 
 #undef HANDLE
Index: trunk/src/VBox/NetworkServices/Dhcpd/DhcpOptions.h
===================================================================
--- trunk/src/VBox/NetworkServices/Dhcpd/DhcpOptions.h	(revision 79844)
+++ trunk/src/VBox/NetworkServices/Dhcpd/DhcpOptions.h	(revision 79845)
@@ -756,7 +756,7 @@
 typedef OptValue<20, bool>              OptNonLocalSourceRouting;
 typedef OptList<21, DhcpIpv4AddrAndMask> OptPolicyFilter;
-typedef OptValue<22, uint16_t>          OptMaxDatagramReassemblySize;
+typedef OptValue<22, uint16_t>          OptMaxDgramReassemblySize;
 typedef OptValue<23, uint16_t>          OptDefaultIPTTL;
-typedef OptValue<24, uint32_t>          OptDefaultPathMTUAgingTimeout;
+typedef OptValue<24, uint32_t>          OptPathMTUAgingTimeout;
 typedef OptList<25, uint16_t>           OptPathMTUPlateauTable;
 typedef OptValue<26, uint16_t>          OptInterfaceMTU;
@@ -801,6 +801,6 @@
 typedef OptString<64>                   OptNISPlusDomain;
 typedef OptString<65>                   OptNISPlusServers;
-typedef OptString<66>                   OptTFTPServer;              /**< when overloaded */
-typedef OptString<67>                   OptBootFileName;            /**< when overloaded */
+typedef OptString<66>                   OptTFTPServerName;          /**< when overloaded */
+typedef OptString<67>                   OptBootfileName;            /**< when overloaded */
 typedef OptList<68, RTNETADDRIPV4>      OptMobileIPHomeAgents;
 typedef OptList<69, RTNETADDRIPV4>      OptSMTPServers;
@@ -816,4 +816,5 @@
 typedef OptList<79, uint8_t>            OptSLPServiceScope;         /**< complicated, so just byte list for now. RFC2610 */
 typedef OptNoValue<80>                  OptRapidCommit;             /**< RFC4039 */
+typedef OptList<119, uint8_t>           OptDomainSearch;            /**< RFC3397 */
 /** @} */
 
