Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/sharp-dhcp-server-lib.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2013-09-09 15:52:24 +0400
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2013-09-09 15:52:24 +0400
commit32cabbc37f75e957f38a97fc2dfc15ddecae863a (patch)
tree0179c39641fb1090d112d6987bd9e5e2f6c350ea
First commit
-rw-r--r--SharpDHCPServer.sln46
-rw-r--r--SharpDHCPServerLib/Properties/.svn/all-wcprops11
-rw-r--r--SharpDHCPServerLib/Properties/.svn/entries62
-rw-r--r--SharpDHCPServerLib/Properties/.svn/text-base/AssemblyInfo.cs.svn-base36
-rw-r--r--SharpDHCPServerLib/Properties/AssemblyInfo.cs36
-rw-r--r--SharpDHCPServerLib/SharpDHCPServer.cs902
-rw-r--r--SharpDHCPServerLib/SharpDHCPServerLib.csproj55
-rw-r--r--SharpDHCPServerLib/bin/Debug/SharpDHCPServerLib.XML524
-rw-r--r--SharpDHCPServerLib/bin/Debug/SharpDHCPServerLib.dllbin0 -> 17920 bytes
-rw-r--r--SharpDHCPServerLib/bin/Debug/SharpDHCPServerLib.pdbbin0 -> 32256 bytes
-rw-r--r--SharpDHCPServerLib/bin/Release/SharpDHCPServer.zipbin0 -> 10633 bytes
-rw-r--r--SharpDHCPServerLib/bin/Release/SharpDHCPServerLib.XML524
-rw-r--r--SharpDHCPServerLib/bin/Release/SharpDHCPServerLib.dllbin0 -> 17408 bytes
-rw-r--r--SharpDHCPServerLib/bin/Release/SharpDHCPServerLib.pdbbin0 -> 28160 bytes
-rw-r--r--SharpDHCPServerLib/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cachebin0 -> 5800 bytes
-rw-r--r--SharpDHCPServerLib/obj/Debug/SharpDHCPServerLib.csproj.FileListAbsolute.txt11
-rw-r--r--SharpDHCPServerLib/obj/Debug/SharpDHCPServerLib.dllbin0 -> 17920 bytes
-rw-r--r--SharpDHCPServerLib/obj/Debug/SharpDHCPServerLib.pdbbin0 -> 32256 bytes
-rw-r--r--SharpDHCPServerLib/obj/Release/DesignTimeResolveAssemblyReferencesInput.cachebin0 -> 6545 bytes
-rw-r--r--SharpDHCPServerLib/obj/Release/SharpDHCPServerLib.csproj.FileListAbsolute.txt6
-rw-r--r--SharpDHCPServerLib/obj/Release/SharpDHCPServerLib.dllbin0 -> 17408 bytes
-rw-r--r--SharpDHCPServerLib/obj/Release/SharpDHCPServerLib.pdbbin0 -> 28160 bytes
-rw-r--r--SharpDHCPServer_Sample/Program.cs119
-rw-r--r--SharpDHCPServer_Sample/Properties/.svn/all-wcprops11
-rw-r--r--SharpDHCPServer_Sample/Properties/.svn/entries62
-rw-r--r--SharpDHCPServer_Sample/Properties/.svn/text-base/AssemblyInfo.cs.svn-base36
-rw-r--r--SharpDHCPServer_Sample/Properties/AssemblyInfo.cs36
-rw-r--r--SharpDHCPServer_Sample/SharpDHCPServer_Sample.csproj61
-rw-r--r--SharpDHCPServer_Sample/bin/Debug/SharpDHCPServerLib.dllbin0 -> 17920 bytes
-rw-r--r--SharpDHCPServer_Sample/bin/Debug/SharpDHCPServerLib.pdbbin0 -> 32256 bytes
-rw-r--r--SharpDHCPServer_Sample/bin/Debug/SharpDHCPServerLib.xml518
-rw-r--r--SharpDHCPServer_Sample/bin/Debug/SharpDHCPServer_Sample.exebin0 -> 8192 bytes
-rw-r--r--SharpDHCPServer_Sample/bin/Debug/SharpDHCPServer_Sample.pdbbin0 -> 15872 bytes
-rw-r--r--SharpDHCPServer_Sample/bin/Debug/SharpDHCPServer_Sample.vshost.exebin0 -> 11608 bytes
-rw-r--r--SharpDHCPServer_Sample/bin/Debug/SharpDHCPServer_Sample.vshost.exe.manifest11
-rw-r--r--SharpDHCPServer_Sample/bin/Release/SharpDHCPServerLib.dllbin0 -> 16896 bytes
-rw-r--r--SharpDHCPServer_Sample/bin/Release/SharpDHCPServerLib.pdbbin0 -> 28160 bytes
-rw-r--r--SharpDHCPServer_Sample/bin/Release/SharpDHCPServerLib.xml515
-rw-r--r--SharpDHCPServer_Sample/bin/Release/SharpDHCPServer_Sample.exebin0 -> 7680 bytes
-rw-r--r--SharpDHCPServer_Sample/bin/Release/SharpDHCPServer_Sample.pdbbin0 -> 13824 bytes
-rw-r--r--SharpDHCPServer_Sample/bin/Release/SharpDHCPServer_Sample.vshost.exebin0 -> 11608 bytes
-rw-r--r--SharpDHCPServer_Sample/bin/Release/SharpDHCPServer_Sample.vshost.exe.manifest11
-rw-r--r--SharpDHCPServer_Sample/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cachebin0 -> 5897 bytes
-rw-r--r--SharpDHCPServer_Sample/obj/x86/Debug/ResolveAssemblyReference.cachebin0 -> 3298 bytes
-rw-r--r--SharpDHCPServer_Sample/obj/x86/Debug/SharpDHCPServer_Sample.csproj.FileListAbsolute.txt15
-rw-r--r--SharpDHCPServer_Sample/obj/x86/Debug/SharpDHCPServer_Sample.exebin0 -> 8192 bytes
-rw-r--r--SharpDHCPServer_Sample/obj/x86/Debug/SharpDHCPServer_Sample.pdbbin0 -> 15872 bytes
-rw-r--r--SharpDHCPServer_Sample/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cachebin0 -> 5903 bytes
-rw-r--r--SharpDHCPServer_Sample/obj/x86/Release/ResolveAssemblyReference.cachebin0 -> 3302 bytes
-rw-r--r--SharpDHCPServer_Sample/obj/x86/Release/SharpDHCPServer_Sample.csproj.FileListAbsolute.txt8
-rw-r--r--SharpDHCPServer_Sample/obj/x86/Release/SharpDHCPServer_Sample.exebin0 -> 7680 bytes
-rw-r--r--SharpDHCPServer_Sample/obj/x86/Release/SharpDHCPServer_Sample.pdbbin0 -> 13824 bytes
52 files changed, 3616 insertions, 0 deletions
diff --git a/SharpDHCPServer.sln b/SharpDHCPServer.sln
new file mode 100644
index 0000000..ce3f0e9
--- /dev/null
+++ b/SharpDHCPServer.sln
@@ -0,0 +1,46 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpDHCPServerLib", "SharpDHCPServerLib\SharpDHCPServerLib.csproj", "{B7FCD134-E2B2-43A9-96C5-3DEDB5669F37}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpDHCPServer_Sample", "SharpDHCPServer_Sample\SharpDHCPServer_Sample.csproj", "{E0A4A539-681E-45E1-84A8-C530BA129856}"
+EndProject
+Global
+ GlobalSection(SubversionScc) = preSolution
+ Svn-Managed = True
+ Manager = AnkhSVN - Subversion Support for Visual Studio
+ EndGlobalSection
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|Mixed Platforms = Debug|Mixed Platforms
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|Mixed Platforms = Release|Mixed Platforms
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {B7FCD134-E2B2-43A9-96C5-3DEDB5669F37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B7FCD134-E2B2-43A9-96C5-3DEDB5669F37}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B7FCD134-E2B2-43A9-96C5-3DEDB5669F37}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {B7FCD134-E2B2-43A9-96C5-3DEDB5669F37}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {B7FCD134-E2B2-43A9-96C5-3DEDB5669F37}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {B7FCD134-E2B2-43A9-96C5-3DEDB5669F37}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B7FCD134-E2B2-43A9-96C5-3DEDB5669F37}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B7FCD134-E2B2-43A9-96C5-3DEDB5669F37}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {B7FCD134-E2B2-43A9-96C5-3DEDB5669F37}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {B7FCD134-E2B2-43A9-96C5-3DEDB5669F37}.Release|x86.ActiveCfg = Release|Any CPU
+ {E0A4A539-681E-45E1-84A8-C530BA129856}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {E0A4A539-681E-45E1-84A8-C530BA129856}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {E0A4A539-681E-45E1-84A8-C530BA129856}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {E0A4A539-681E-45E1-84A8-C530BA129856}.Debug|x86.ActiveCfg = Debug|x86
+ {E0A4A539-681E-45E1-84A8-C530BA129856}.Debug|x86.Build.0 = Debug|x86
+ {E0A4A539-681E-45E1-84A8-C530BA129856}.Release|Any CPU.ActiveCfg = Release|x86
+ {E0A4A539-681E-45E1-84A8-C530BA129856}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {E0A4A539-681E-45E1-84A8-C530BA129856}.Release|Mixed Platforms.Build.0 = Release|x86
+ {E0A4A539-681E-45E1-84A8-C530BA129856}.Release|x86.ActiveCfg = Release|x86
+ {E0A4A539-681E-45E1-84A8-C530BA129856}.Release|x86.Build.0 = Release|x86
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/SharpDHCPServerLib/Properties/.svn/all-wcprops b/SharpDHCPServerLib/Properties/.svn/all-wcprops
new file mode 100644
index 0000000..b50fe12
--- /dev/null
+++ b/SharpDHCPServerLib/Properties/.svn/all-wcprops
@@ -0,0 +1,11 @@
+K 25
+svn:wc:ra_dav:version-url
+V 51
+/svn/!svn/ver/2/trunk/SharpDHCPServerLib/Properties
+END
+AssemblyInfo.cs
+K 25
+svn:wc:ra_dav:version-url
+V 67
+/svn/!svn/ver/2/trunk/SharpDHCPServerLib/Properties/AssemblyInfo.cs
+END
diff --git a/SharpDHCPServerLib/Properties/.svn/entries b/SharpDHCPServerLib/Properties/.svn/entries
new file mode 100644
index 0000000..71b8c8a
--- /dev/null
+++ b/SharpDHCPServerLib/Properties/.svn/entries
@@ -0,0 +1,62 @@
+10
+
+dir
+2
+https://sharpdhcpserver.googlecode.com/svn/trunk/SharpDHCPServerLib/Properties
+https://sharpdhcpserver.googlecode.com/svn
+
+
+
+2010-12-06T13:59:04.594212Z
+2
+Avdyukhin@gmail.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3d45f574-0380-fa68-85f7-e44bac00989b
+
+AssemblyInfo.cs
+file
+
+
+
+
+2010-12-06T13:51:30.709049Z
+c131f1daf5dad472d15168f3252a5ad3
+2010-12-06T13:59:04.594212Z
+2
+Avdyukhin@gmail.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2060
+
diff --git a/SharpDHCPServerLib/Properties/.svn/text-base/AssemblyInfo.cs.svn-base b/SharpDHCPServerLib/Properties/.svn/text-base/AssemblyInfo.cs.svn-base
new file mode 100644
index 0000000..910bcdb
--- /dev/null
+++ b/SharpDHCPServerLib/Properties/.svn/text-base/AssemblyInfo.cs.svn-base
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Управление общими сведениями о сборке осуществляется с помощью
+// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
+// связанные со сборкой.
+[assembly: AssemblyTitle("SharpDHCPServerLib")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Cluster")]
+[assembly: AssemblyProduct("SharpDHCPServerLib")]
+[assembly: AssemblyCopyright("Copyright © Cluster 2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Параметр ComVisible со значением FALSE делает типы в сборке невидимыми
+// для COM-компонентов. Если требуется обратиться к типу в этой сборке через
+// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
+[assembly: ComVisible(false)]
+
+// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
+[assembly: Guid("5b90d8af-c01f-4d81-9b8f-2e06c98aac49")]
+
+// Сведения о версии сборки состоят из следующих четырех значений:
+//
+// Основной номер версии
+// Дополнительный номер версии
+// Номер построения
+// Редакция
+//
+// Можно задать все значения или принять номер построения и номер редакции по умолчанию,
+// используя "*", как показано ниже:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/SharpDHCPServerLib/Properties/AssemblyInfo.cs b/SharpDHCPServerLib/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..910bcdb
--- /dev/null
+++ b/SharpDHCPServerLib/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Управление общими сведениями о сборке осуществляется с помощью
+// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
+// связанные со сборкой.
+[assembly: AssemblyTitle("SharpDHCPServerLib")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Cluster")]
+[assembly: AssemblyProduct("SharpDHCPServerLib")]
+[assembly: AssemblyCopyright("Copyright © Cluster 2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Параметр ComVisible со значением FALSE делает типы в сборке невидимыми
+// для COM-компонентов. Если требуется обратиться к типу в этой сборке через
+// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
+[assembly: ComVisible(false)]
+
+// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
+[assembly: Guid("5b90d8af-c01f-4d81-9b8f-2e06c98aac49")]
+
+// Сведения о версии сборки состоят из следующих четырех значений:
+//
+// Основной номер версии
+// Дополнительный номер версии
+// Номер построения
+// Редакция
+//
+// Можно задать все значения или принять номер построения и номер редакции по умолчанию,
+// используя "*", как показано ниже:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/SharpDHCPServerLib/SharpDHCPServer.cs b/SharpDHCPServerLib/SharpDHCPServer.cs
new file mode 100644
index 0000000..8af5830
--- /dev/null
+++ b/SharpDHCPServerLib/SharpDHCPServer.cs
@@ -0,0 +1,902 @@
+/*
+ * ShapDHCPServer (C) 2010, Cluster
+ * http://clusterrr.com
+ * http://code.google.com/p/sharpdhcpserver/
+ *
+ * DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ * Version 2, December 2004
+ *
+ * Copyright (C) 2004 Sam Hocevar
+ * 14 rue de Plaisance, 75014 Paris, France
+ * Everyone is permitted to copy and distribute verbatim or modified
+ * copies of this license document, and changing it is allowed as long
+ * as the name is changed.
+ *
+ * DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ * TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+ *
+ * 0. You just DO WHAT THE FUCK YOU WANT TO.
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Net;
+using System.Net.Sockets;
+using System.IO;
+using System.Threading;
+
+namespace Cluster.SharpDHCPServer
+{
+ /// <summary>
+ /// DHCP request
+ /// </summary>
+ public class DHCPRequest
+ {
+ private readonly DHCPServer dhcpServer;
+ private readonly DHCPPacket requestData;
+ private Socket requestSocket;
+ private const int OPTION_OFFSET = 240;
+ private const int PORT_TO_SEND_TO_CLIENT = 68;
+ private const int PORT_TO_SEND_TO_RELAY = 67;
+
+ /// <summary>
+ /// Raw DHCP packet
+ /// </summary>
+ public struct DHCPPacket
+ {
+ /// <summary>Op code: 1 = boot request, 2 = boot reply</summary>
+ public byte op;
+ /// <summary>Hardware address type</summary>
+ public byte htype;
+ /// <summary>Hardware address length: length of MACID</summary>
+ public byte hlen;
+ /// <summary>Hardware options</summary>
+ public byte hops;
+ /// <summary>Transaction id</summary>
+ public byte[] xid;
+ /// <summary>Elapsed time from trying to boot</summary>
+ public byte[] secs;
+ /// <summary>Flags</summary>
+ public byte[] flags;
+ /// <summary>Client IP</summary>
+ public byte[] ciaddr;
+ /// <summary>Your client IP</summary>
+ public byte[] yiaddr;
+ /// <summary>Server IP</summary>
+ public byte[] siaddr;
+ /// <summary>Relay agent IP</summary>
+ public byte[] giaddr;
+ /// <summary>Client HW address</summary>
+ public byte[] chaddr;
+ /// <summary>Optional server host name</summary>
+ public byte[] sname;
+ /// <summary>Boot file name</summary>
+ public byte[] file;
+ /// <summary>Magic cookie</summary>
+ public byte[] mcookie;
+ /// <summary>Options (rest)</summary>
+ public byte[] options;
+ }
+
+ internal DHCPRequest(byte[] data, Socket socket, DHCPServer server)
+ {
+ dhcpServer = server;
+ System.IO.BinaryReader rdr;
+ System.IO.MemoryStream stm = new System.IO.MemoryStream(data, 0, data.Length);
+ rdr = new System.IO.BinaryReader(stm);
+ // Reading data
+ requestData.op = rdr.ReadByte();
+ requestData.htype = rdr.ReadByte();
+ requestData.hlen = rdr.ReadByte();
+ requestData.hops = rdr.ReadByte();
+ requestData.xid = rdr.ReadBytes(4);
+ requestData.secs = rdr.ReadBytes(2);
+ requestData.flags = rdr.ReadBytes(2);
+ requestData.ciaddr = rdr.ReadBytes(4);
+ requestData.yiaddr = rdr.ReadBytes(4);
+ requestData.siaddr = rdr.ReadBytes(4);
+ requestData.giaddr = rdr.ReadBytes(4);
+ requestData.chaddr = rdr.ReadBytes(16);
+ requestData.sname = rdr.ReadBytes(64);
+ requestData.file = rdr.ReadBytes(128);
+ requestData.mcookie = rdr.ReadBytes(4);
+ requestData.options = rdr.ReadBytes(data.Length - OPTION_OFFSET);
+ requestSocket = socket;
+ }
+
+ /// <summary>
+ /// Returns array of requested by client options
+ /// </summary>
+ /// <returns>Array of requested by client options</returns>
+ public DHCPOption[] GetRequestedOptionsList()
+ {
+ var reqList = this.GetOptionData(DHCPOption.ParameterRequestList);
+ var optList = new List<DHCPOption>();
+ if (reqList != null) foreach (var option in reqList) optList.Add((DHCPOption)option); else return null;
+ return optList.ToArray();
+ }
+
+ private byte[] CreateOptionStruct(DHCPMsgType msgType, DHCPReplyOptions replyOptions, Dictionary<DHCPOption, byte[]> otherForceOptions)
+ {
+ byte[] resultOptions = null;
+ // Requested options
+ var reqList = GetRequestedOptionsList();
+ // Option82?
+ var relayInfo = this.GetOptionData(DHCPOption.RelayInfo);
+ CreateOptionElement(ref resultOptions, DHCPOption.DHCPMessageTYPE, new byte[] { (byte)msgType });
+ // Server identifier - our IP address
+ if ((replyOptions != null) && (replyOptions.ServerIdentifier != null))
+ CreateOptionElement(ref resultOptions, DHCPOption.ServerIdentifier, replyOptions.ServerIdentifier.GetAddressBytes());
+
+ // Requested options
+ if ((reqList != null) && (replyOptions != null))
+ foreach (DHCPOption i in reqList)
+ {
+ byte[] optionData = null;
+ // If it's force option - ignore it. We'll send it later.
+ if ((otherForceOptions != null) && (otherForceOptions.TryGetValue(i, out optionData)))
+ continue;
+ switch (i)
+ {
+ case DHCPOption.SubnetMask:
+ if (replyOptions.SubnetMask != null)
+ optionData = replyOptions.SubnetMask.GetAddressBytes();
+ break;
+ case DHCPOption.Router:
+ if (replyOptions.RouterIP != null)
+ optionData = replyOptions.RouterIP.GetAddressBytes();
+ break;
+ case DHCPOption.DomainNameServers:
+ if (replyOptions.DomainNameServers != null)
+ {
+ optionData = new byte[] { };
+ foreach (var dns in replyOptions.DomainNameServers)
+ {
+ var dnsserv = dns.GetAddressBytes();
+ Array.Resize(ref optionData, optionData.Length + 4);
+ Array.Copy(dnsserv, 0, optionData, optionData.Length - 4, 4);
+ }
+ }
+ break;
+ case DHCPOption.DomainName:
+ if (!string.IsNullOrEmpty(replyOptions.DomainName))
+ optionData = System.Text.Encoding.ASCII.GetBytes(replyOptions.DomainName);
+ break;
+ case DHCPOption.ServerIdentifier:
+ if (replyOptions.ServerIdentifier != null)
+ optionData = replyOptions.ServerIdentifier.GetAddressBytes();
+ break;
+ case DHCPOption.LogServer:
+ if (replyOptions.LogServerIP != null)
+ optionData = replyOptions.LogServerIP.GetAddressBytes();
+ break;
+ case DHCPOption.StaticRoutes:
+ case DHCPOption.StaticRoutesWin:
+ if (replyOptions.StaticRoutes != null)
+ {
+ optionData = new byte[] { };
+ foreach (var route in replyOptions.StaticRoutes)
+ {
+ var routeData = route.BuildRouteData();
+ Array.Resize(ref optionData, optionData.Length + routeData.Length);
+ Array.Copy(routeData, 0, optionData, optionData.Length - routeData.Length, routeData.Length);
+ }
+ }
+ break;
+ default:
+ replyOptions.OtherRequestedOptions.TryGetValue(i, out optionData);
+ break;
+ }
+ if (optionData != null)
+ CreateOptionElement(ref resultOptions, i, optionData);
+ }
+
+ if (GetMsgType() != DHCPMsgType.DHCPINFORM)
+ {
+ // Lease time
+ if (replyOptions != null)
+ {
+ var leaseTime = new byte[4];
+ leaseTime[3] = (byte)(replyOptions.IPAddressLeaseTime);
+ leaseTime[2] = (byte)(replyOptions.IPAddressLeaseTime >> 8);
+ leaseTime[1] = (byte)(replyOptions.IPAddressLeaseTime >> 16);
+ leaseTime[0] = (byte)(replyOptions.IPAddressLeaseTime >> 24);
+ CreateOptionElement(ref resultOptions, DHCPOption.IPAddressLeaseTime, leaseTime);
+ leaseTime[3] = (byte)(replyOptions.RenewalTimeValue_T1);
+ leaseTime[2] = (byte)(replyOptions.RenewalTimeValue_T1 >> 8);
+ leaseTime[1] = (byte)(replyOptions.RenewalTimeValue_T1 >> 16);
+ leaseTime[0] = (byte)(replyOptions.RenewalTimeValue_T1 >> 24);
+ CreateOptionElement(ref resultOptions, DHCPOption.RenewalTimeValue_T1, leaseTime);
+ leaseTime[3] = (byte)(replyOptions.RebindingTimeValue_T2);
+ leaseTime[2] = (byte)(replyOptions.RebindingTimeValue_T2 >> 8);
+ leaseTime[1] = (byte)(replyOptions.RebindingTimeValue_T2 >> 16);
+ leaseTime[0] = (byte)(replyOptions.RebindingTimeValue_T2 >> 24);
+ CreateOptionElement(ref resultOptions, DHCPOption.RebindingTimeValue_T2, leaseTime);
+ }
+ }
+ // Other requested options
+ if (otherForceOptions != null)
+ foreach (var option in otherForceOptions.Keys)
+ {
+ CreateOptionElement(ref resultOptions, option, otherForceOptions[option]);
+ if (option == DHCPOption.RelayInfo) relayInfo = null;
+ }
+
+ // Option 82? Send it back!
+ if (relayInfo != null)
+ CreateOptionElement(ref resultOptions, DHCPOption.RelayInfo, relayInfo);
+
+ // Create the end option
+ Array.Resize(ref resultOptions, resultOptions.Length + 1);
+ Array.Copy(new byte[] { 255 }, 0, resultOptions, resultOptions.Length - 1, 1);
+ return resultOptions;
+ }
+
+ static private void CreateOptionElement(ref byte[] options, DHCPOption option, byte[] data)
+ {
+ byte[] optionData;
+
+ optionData = new byte[data.Length + 2];
+ optionData[0] = (byte)option;
+ optionData[1] = (byte)data.Length;
+ Array.Copy(data, 0, optionData, 2, data.Length);
+ if (options == null)
+ Array.Resize(ref options, (int)optionData.Length);
+ else
+ Array.Resize(ref options, options.Length + optionData.Length);
+ Array.Copy(optionData, 0, options, options.Length - optionData.Length, optionData.Length);
+ }
+
+ /// <summary>
+ /// Sends DHCP reply
+ /// </summary>
+ /// <param name="msgType">Type of DHCP message to send</param>
+ /// <param name="ip">IP for client</param>
+ /// <param name="replyData">Reply options (will be sent if requested)</param>
+ public void SendDHCPReply(DHCPMsgType msgType, IPAddress ip, DHCPReplyOptions replyData)
+ {
+ SendDHCPReply(msgType, ip, replyData, null);
+ }
+ /// <summary>
+ /// Sends DHCP reply
+ /// </summary>
+ /// <param name="msgType">Type of DHCP message to send</param>
+ /// <param name="ip">IP for client</param>
+ /// <param name="replyData">Reply options (will be sent if requested)</param>
+ /// <param name="otherForceOptions">Force reply options (will be sent anyway)</param>
+ public void SendDHCPReply(DHCPMsgType msgType, IPAddress ip, DHCPReplyOptions replyData, Dictionary<DHCPOption, byte[]> otherForceOptions)
+ {
+ var replyBuffer = requestData;
+ replyBuffer.op = 2; // Reply
+ replyBuffer.yiaddr = ip.GetAddressBytes(); // Client's IP
+ replyBuffer.options = CreateOptionStruct(msgType, replyData, otherForceOptions); // Options
+ if (!string.IsNullOrEmpty(dhcpServer.ServerName))
+ {
+ var serverNameBytes = Encoding.ASCII.GetBytes(dhcpServer.ServerName);
+ int len = (serverNameBytes.Length > 63) ? 63 : serverNameBytes.Length;
+ Array.Copy(serverNameBytes, replyBuffer.sname, len);
+ replyBuffer.sname[len] = 0;
+ }
+ lock (requestSocket)
+ {
+ IPEndPoint endPoint;
+ if ((replyBuffer.giaddr[0] == 0) && (replyBuffer.giaddr[1] == 0) &&
+ (replyBuffer.giaddr[2] == 0) && (replyBuffer.giaddr[3] == 0))
+ {
+ requestSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
+ endPoint = new IPEndPoint(IPAddress.Broadcast, PORT_TO_SEND_TO_CLIENT);
+ }
+ else
+ {
+ requestSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, false);
+ endPoint = new IPEndPoint(new IPAddress(replyBuffer.giaddr), PORT_TO_SEND_TO_RELAY);
+ }
+ var DataToSend = BuildDataStructure(replyBuffer);
+ requestSocket.SendTo(DataToSend, endPoint);
+ }
+ }
+
+ private static byte[] BuildDataStructure(DHCPPacket packet)
+ {
+ byte[] mArray;
+
+ try
+ {
+ mArray = new byte[0];
+ AddOptionElement(new byte[] { packet.op }, ref mArray);
+ AddOptionElement(new byte[] { packet.htype }, ref mArray);
+ AddOptionElement(new byte[] { packet.hlen }, ref mArray);
+ AddOptionElement(new byte[] { packet.hops }, ref mArray);
+ AddOptionElement(packet.xid, ref mArray);
+ AddOptionElement(packet.secs, ref mArray);
+ AddOptionElement(packet.flags, ref mArray);
+ AddOptionElement(packet.ciaddr, ref mArray);
+ AddOptionElement(packet.yiaddr, ref mArray);
+ AddOptionElement(packet.siaddr, ref mArray);
+ AddOptionElement(packet.giaddr, ref mArray);
+ AddOptionElement(packet.chaddr, ref mArray);
+ AddOptionElement(packet.sname, ref mArray);
+ AddOptionElement(packet.file, ref mArray);
+
+ AddOptionElement(packet.mcookie, ref mArray);
+ AddOptionElement(packet.options, ref mArray);
+ return mArray;
+ }
+ finally
+ {
+ mArray = null;
+ }
+ }
+
+ private static void AddOptionElement(byte[] fromValue, ref byte[] targetArray)
+ {
+ if (targetArray != null)
+ Array.Resize(ref targetArray, targetArray.Length + fromValue.Length);
+ else
+ Array.Resize(ref targetArray, fromValue.Length);
+ Array.Copy(fromValue, 0, targetArray, targetArray.Length - fromValue.Length, fromValue.Length);
+ }
+
+ /// <summary>
+ /// Returns option content
+ /// </summary>
+ /// <param name="option">Option to retrieve</param>
+ /// <returns>Option content</returns>
+ public byte[] GetOptionData(DHCPOption option)
+ {
+ int DHCPId = 0;
+ byte DDataID, DataLength = 0;
+ byte[] dumpData;
+
+ DHCPId = (int)option;
+ for (int i = 0; i < requestData.options.Length; i++)
+ {
+ DDataID = requestData.options[i];
+ if (DDataID == (byte)DHCPOption.END_Option) break;
+ if (DDataID == DHCPId)
+ {
+ DataLength = requestData.options[i + 1];
+ dumpData = new byte[DataLength];
+ Array.Copy(requestData.options, i + 2, dumpData, 0, DataLength);
+ return dumpData;
+ }
+ else
+ {
+ DataLength = requestData.options[i + 1];
+ i += 1 + DataLength;
+ }
+ }
+
+ return null;
+ }
+
+ /// <summary>
+ /// Returns all options
+ /// </summary>
+ /// <returns>Options dictionary</returns>
+ public Dictionary<DHCPOption, byte[]> GetAllOptions()
+ {
+ var result = new Dictionary<DHCPOption, byte[]>();
+ DHCPOption DDataID;
+ byte DataLength = 0;
+
+ for (int i = 0; i < requestData.options.Length; i++)
+ {
+ DDataID = (DHCPOption)requestData.options[i];
+ if (DDataID == DHCPOption.END_Option) break;
+ DataLength = requestData.options[i + 1];
+ byte[] dumpData = new byte[DataLength];
+ Array.Copy(requestData.options, i + 2, dumpData, 0, DataLength);
+ result[DDataID] = dumpData;
+
+ DataLength = requestData.options[i + 1];
+ i += 1 + DataLength;
+ }
+
+ return result;
+ }
+
+ /// <summary>
+ /// Returns ciaddr (client IP address)
+ /// </summary>
+ /// <returns>ciaddr</returns>
+ public IPAddress GetCiaddr()
+ {
+ if ((requestData.ciaddr[0] == 0) &&
+ (requestData.ciaddr[1] == 0) &&
+ (requestData.ciaddr[2] == 0) &&
+ (requestData.ciaddr[3] == 0)
+ ) return null;
+ return new IPAddress(requestData.ciaddr);
+ }
+ /// <summary>
+ /// Returns giaddr (gateway IP address switched by relay)
+ /// </summary>
+ /// <returns>giaddr</returns>
+ public IPAddress GetGiaddr()
+ {
+ if ((requestData.giaddr[0] == 0) &&
+ (requestData.giaddr[1] == 0) &&
+ (requestData.giaddr[2] == 0) &&
+ (requestData.giaddr[3] == 0)
+ ) return null;
+ return new IPAddress(requestData.giaddr);
+ }
+ /// <summary>
+ /// Returns chaddr (client hardware address)
+ /// </summary>
+ /// <returns>chaddr</returns>
+ public byte[] GetChaddr()
+ {
+ var res = new byte[requestData.hlen];
+ Array.Copy(requestData.chaddr, res, requestData.hlen);
+ return res;
+ }
+ /// <summary>
+ /// Returns requested IP (option 50)
+ /// </summary>
+ /// <returns>Requested IP</returns>
+ public IPAddress GetRequestedIP()
+ {
+ var ipBytes = GetOptionData(DHCPOption.RequestedIPAddress);
+ if (ipBytes == null) return null;
+ return new IPAddress(ipBytes);
+ }
+ /// <summary>
+ /// Returns type of DHCP request
+ /// </summary>
+ /// <returns>DHCP message type</returns>
+ public DHCPMsgType GetMsgType()
+ {
+ byte[] DData;
+ DData = GetOptionData(DHCPOption.DHCPMessageTYPE);
+ if (DData != null)
+ return (DHCPMsgType)DData[0];
+ return 0;
+ }
+ /// <summary>
+ /// Returns entire content of DHCP packet
+ /// </summary>
+ /// <returns>DHCP packet</returns>
+ public DHCPPacket GetRawPacket()
+ {
+ return requestData;
+ }
+ /// <summary>
+ /// Returns relay info (option 82)
+ /// </summary>
+ /// <returns>Relay info</returns>
+ public RelayInfo? GetRelayInfo()
+ {
+ var result = new RelayInfo();
+ var relayInfo = GetOptionData(DHCPOption.RelayInfo);
+ if (relayInfo != null)
+ {
+ int i = 0;
+ while (i < relayInfo.Length)
+ {
+ var subOptID = relayInfo[i];
+ if (subOptID == 1)
+ {
+ result.AgentCircuitID = new byte[relayInfo[i + 1]];
+ Array.Copy(relayInfo, i + 2, result.AgentCircuitID, 0, relayInfo[i + 1]);
+ }
+ else if (subOptID == 2)
+ {
+ result.AgentRemoteID = new byte[relayInfo[i + 1]];
+ Array.Copy(relayInfo, i + 2, result.AgentRemoteID, 0, relayInfo[i + 1]);
+ }
+ i += 2 + relayInfo[i + 1];
+ }
+ return result;
+ }
+ return null;
+ }
+ }
+
+ /// <summary>
+ /// DHCP Server
+ /// </summary>
+ public class DHCPServer : IDisposable
+ {
+ /// <summary>Delegate for DHCP message</summary>
+ public delegate void DHCPDataReceivedEventHandler(DHCPRequest dhcpRequest);
+
+ /// <summary>Will be called on any DHCP message</summary>
+ public event DHCPDataReceivedEventHandler OnDataReceived = delegate { };
+ /// <summary>Will be called on any DISCOVER message</summary>
+ public event DHCPDataReceivedEventHandler OnDiscover = delegate { };
+ /// <summary>Will be called on any REQUEST message</summary>
+ public event DHCPDataReceivedEventHandler OnRequest = delegate { };
+ /// <summary>Will be called on any DECLINE message</summary>
+ public event DHCPDataReceivedEventHandler OnDecline = delegate { };
+ /// <summary>Will be called on any DECLINE released</summary>
+ public event DHCPDataReceivedEventHandler OnReleased = delegate { };
+ /// <summary>Will be called on any DECLINE inform</summary>
+ public event DHCPDataReceivedEventHandler OnInform = delegate { };
+
+ /// <summary>Server name (optional)</summary>
+ public string ServerName { get; set; }
+
+ private Socket socket = null;
+ private Thread receiveDataThread = null;
+ private const int PORT_TO_LISTEN_TO = 67;
+
+ /// <summary>
+ /// Creates DHCP server, it will be started instantly
+ /// </summary>
+ /// <param name="bindIp">IP address to bind</param>
+ public DHCPServer(IPAddress bindIp)
+ {
+ var ipLocalEndPoint = new IPEndPoint(bindIp, PORT_TO_LISTEN_TO);
+ socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
+ socket.Bind(ipLocalEndPoint);
+ receiveDataThread = new Thread(ReceiveDataThread);
+ receiveDataThread.Start();
+ }
+
+ /// <summary>Creates DHCP server, it will be started instantly</summary>
+ public DHCPServer() : this(IPAddress.Any)
+ {
+ }
+
+ /// <summary>Disposes DHCP server</summary>
+ public void Dispose()
+ {
+ if (socket != null)
+ {
+ socket.Close();
+ socket = null;
+ }
+ if (receiveDataThread != null)
+ {
+ receiveDataThread.Abort();
+ receiveDataThread = null;
+ }
+ }
+
+ private void ReceiveDataThread()
+ {
+ while (true)
+ {
+ try
+ {
+ IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
+ EndPoint remote = (EndPoint)(sender); var buffer = new byte[1024];
+ int len = socket.ReceiveFrom(buffer, ref remote);
+ if (len > 0)
+ {
+ Array.Resize(ref buffer, len);
+ var dataReceivedThread = new Thread(DataReceived);
+ dataReceivedThread.Start(buffer);
+ }
+ }
+ catch
+ {
+ // Ignore all
+ }
+ }
+ }
+
+ private void DataReceived(object o)
+ {
+ var data = (byte[])o;
+ try
+ {
+ var dhcpRequest = new DHCPRequest(data, socket, this);
+ //ccDHCP = new clsDHCP();
+
+
+ //data is now in the structure
+ //get the msg type
+ OnDataReceived(dhcpRequest);
+ var msgType = dhcpRequest.GetMsgType();
+ switch (msgType)
+ {
+ case DHCPMsgType.DHCPDISCOVER:
+ OnDiscover(dhcpRequest);
+ break;
+ case DHCPMsgType.DHCPREQUEST:
+ OnRequest(dhcpRequest);
+ break;
+ case DHCPMsgType.DHCPDECLINE:
+ OnDecline(dhcpRequest);
+ break;
+ case DHCPMsgType.DHCPRELEASE:
+ OnReleased(dhcpRequest);
+ break;
+ case DHCPMsgType.DHCPINFORM:
+ OnInform(dhcpRequest);
+ break;
+ //default:
+ // Console.WriteLine("Unknown DHCP message: " + (int)MsgTyp + " (" + MsgTyp.ToString() + ")");
+ // break;
+ }
+ }
+ catch
+ {
+ // Ignore
+ }
+ }
+ }
+
+ /// <summary>DHCP message type</summary>
+ public enum DHCPMsgType
+ {
+ /// <summary>DHCP DISCOVER message</summary>
+ DHCPDISCOVER = 1,
+ /// <summary>DHCP OFFER message</summary>
+ DHCPOFFER = 2,
+ /// <summary>DHCP REQUEST message</summary>
+ DHCPREQUEST = 3,
+ /// <summary>DHCP DECLINE message</summary>
+ DHCPDECLINE = 4,
+ /// <summary>DHCP ACK message</summary>
+ DHCPACK = 5,
+ /// <summary>DHCP NAK message</summary>
+ DHCPNAK = 6,
+ /// <summary>DHCP RELEASE message</summary>
+ DHCPRELEASE = 7,
+ /// <summary>DHCP INFORM message</summary>
+ DHCPINFORM = 8
+ }
+
+ /// <summary>DHCP option enum</summary>
+ public enum DHCPOption
+ {
+ /// <summary>Option 1</summary>
+ SubnetMask = 1,
+ /// <summary>Option 2</summary>
+ TimeOffset = 2,
+ /// <summary>Option 3</summary>
+ Router = 3,
+ /// <summary>Option 4</summary>
+ TimeServer = 4,
+ /// <summary>Option 5</summary>
+ NameServer = 5,
+ /// <summary>Option 6</summary>
+ DomainNameServers = 6,
+ /// <summary>Option 7</summary>
+ LogServer = 7,
+ /// <summary>Option 8</summary>
+ CookieServer = 8,
+ /// <summary>Option 9</summary>
+ LPRServer = 9,
+ /// <summary>Option 10</summary>
+ ImpressServer = 10,
+ /// <summary>Option 11</summary>
+ ResourceLocServer = 11,
+ /// <summary>Option 12</summary>
+ HostName = 12,
+ /// <summary>Option 13</summary>
+ BootFileSize = 13,
+ /// <summary>Option 14</summary>
+ MeritDump = 14,
+ /// <summary>Option 15</summary>
+ DomainName = 15,
+ /// <summary>Option 16</summary>
+ SwapServer = 16,
+ /// <summary>Option 17</summary>
+ RootPath = 17,
+ /// <summary>Option 18</summary>
+ ExtensionsPath = 18,
+ /// <summary>Option 19</summary>
+ IpForwarding = 19,
+ /// <summary>Option 20</summary>
+ NonLocalSourceRouting = 20,
+ /// <summary>Option 21</summary>
+ PolicyFilter = 21,
+ /// <summary>Option 22</summary>
+ MaximumDatagramReAssemblySize = 22,
+ /// <summary>Option 23</summary>
+ DefaultIPTimeToLive = 23,
+ /// <summary>Option 24</summary>
+ PathMTUAgingTimeout = 24,
+ /// <summary>Option 25</summary>
+ PathMTUPlateauTable = 25,
+ /// <summary>Option 26</summary>
+ InterfaceMTU = 26,
+ /// <summary>Option 27</summary>
+ AllSubnetsAreLocal = 27,
+ /// <summary>Option 28</summary>
+ BroadcastAddress = 28,
+ /// <summary>Option 29</summary>
+ PerformMaskDiscovery = 29,
+ /// <summary>Option 30</summary>
+ MaskSupplier = 30,
+ /// <summary>Option 31</summary>
+ PerformRouterDiscovery = 31,
+ /// <summary>Option 32</summary>
+ RouterSolicitationAddress = 32,
+ /// <summary>Option 33</summary>
+ StaticRoute = 33,
+ /// <summary>Option 34</summary>
+ TrailerEncapsulation = 34,
+ /// <summary>Option 35</summary>
+ ARPCacheTimeout = 35,
+ /// <summary>Option 36</summary>
+ EthernetEncapsulation = 36,
+ /// <summary>Option 37</summary>
+ TCPDefaultTTL = 37,
+ /// <summary>Option 38</summary>
+ TCPKeepaliveInterval = 38,
+ /// <summary>Option 39</summary>
+ TCPKeepaliveGarbage = 39,
+ /// <summary>Option 40</summary>
+ NetworkInformationServiceDomain = 40,
+ /// <summary>Option 41</summary>
+ NetworkInformationServers = 41,
+ /// <summary>Option 42</summary>
+ NetworkTimeProtocolServers = 42,
+ /// <summary>Option 43</summary>
+ VendorSpecificInformation = 43,
+ /// <summary>Option 44</summary>
+ NetBIOSoverTCPIPNameServer = 44,
+ /// <summary>Option 45</summary>
+ NetBIOSoverTCPIPDatagramDistributionServer = 45,
+ /// <summary>Option 46</summary>
+ NetBIOSoverTCPIPNodeType = 46,
+ /// <summary>Option 47</summary>
+ NetBIOSoverTCPIPScope = 47,
+ /// <summary>Option 48</summary>
+ XWindowSystemFontServer = 48,
+ /// <summary>Option 49</summary>
+ XWindowSystemDisplayManager = 49,
+ /// <summary>Option 50</summary>
+ RequestedIPAddress = 50,
+ /// <summary>Option 51</summary>
+ IPAddressLeaseTime = 51,
+ /// <summary>Option 52</summary>
+ OptionOverload = 52,
+ /// <summary>Option 53</summary>
+ DHCPMessageTYPE = 53,
+ /// <summary>Option 54</summary>
+ ServerIdentifier = 54,
+ /// <summary>Option 55</summary>
+ ParameterRequestList = 55,
+ /// <summary>Option 56</summary>
+ Message = 56,
+ /// <summary>Option 57</summary>
+ MaximumDHCPMessageSize = 57,
+ /// <summary>Option 58</summary>
+ RenewalTimeValue_T1 = 58,
+ /// <summary>Option 59</summary>
+ RebindingTimeValue_T2 = 59,
+ /// <summary>Option 60</summary>
+ Vendorclassidentifier = 60,
+ /// <summary>Option 61</summary>
+ ClientIdentifier = 61,
+ /// <summary>Option 62</summary>
+ NetWateIPDomainName = 62,
+ /// <summary>Option 63</summary>
+ NetWateIPInformation = 63,
+ /// <summary>Option 64</summary>
+ NetworkInformationServicePlusDomain = 64,
+ /// <summary>Option 65</summary>
+ NetworkInformationServicePlusServers = 65,
+ /// <summary>Option 66</summary>
+ TFTPServerName = 66,
+ /// <summary>Option 67</summary>
+ BootfileName = 67,
+ /// <summary>Option 68</summary>
+ MobileIPHomeAgent = 68,
+ /// <summary>Option 69</summary>
+ SMTPServer = 69,
+ /// <summary>Option 70</summary>
+ POP3Server = 70,
+ /// <summary>Option 71</summary>
+ NNTPServer = 71,
+ /// <summary>Option 72</summary>
+ DefaultWWWServer = 72,
+ /// <summary>Option 73</summary>
+ DefaultFingerServer = 73,
+ /// <summary>Option 74</summary>
+ DefaultIRCServer = 74,
+ /// <summary>Option 75</summary>
+ StreetTalkServer = 75,
+ /// <summary>Option 76</summary>
+ STDAServer = 76,
+ /// <summary>Option 82</summary>
+ RelayInfo = 82,
+ /// <summary>Option 121</summary>
+ StaticRoutes = 121,
+ /// <summary>Option 249</summary>
+ StaticRoutesWin = 249,
+ /// <summary>Option 255 (END option)</summary>
+ END_Option = 255
+ }
+
+ /// <summary>Reply options</summary>
+ public class DHCPReplyOptions
+ {
+ /// <summary>IP address</summary>
+ public IPAddress SubnetMask = null;
+ /// <summary>IP address lease time (seconds)</summary>
+ public UInt32 IPAddressLeaseTime = 60 * 60 * 24;
+ /// <summary>Renewal time (seconds)</summary>
+ public UInt32 RenewalTimeValue_T1 = 60 * 60 * 24;
+ /// <summary>Rebinding time (seconds)</summary>
+ public UInt32 RebindingTimeValue_T2 = 60 * 60 * 24;
+ /// <summary>Domain name</summary>
+ public string DomainName = null;
+ /// <summary>IP address of DHCP server</summary>
+ public IPAddress ServerIdentifier = null;
+ /// <summary>Router (gateway) IP</summary>
+ public IPAddress RouterIP = null;
+ /// <summary>Domain name servers (DNS)</summary>
+ public IPAddress[] DomainNameServers = null;
+ /// <summary>Log server IP</summary>
+ public IPAddress LogServerIP = null;
+ /// <summary>Static routes</summary>
+ public NetworkRoute[] StaticRoutes = null;
+ /// <summary>Other options which will be sent on request</summary>
+ public Dictionary<DHCPOption, byte[]> OtherRequestedOptions = new Dictionary<DHCPOption, byte[]>();
+ }
+
+ /// <summary>Network route</summary>
+ public struct NetworkRoute
+ {
+ /// <summary>IP address of destination network</summary>
+ public IPAddress Network;
+ /// <summary>Subnet mask length</summary>
+ public byte NetMaskLength;
+ /// <summary>Gateway</summary>
+ public IPAddress Gateway;
+
+ /// <summary>Creates network route</summary>
+ /// <param name="network">IP address to bind</param>
+ /// <param name="netMaskLength">Subnet mask length</param>
+ /// <param name="gateway">Gateway</param>
+ public NetworkRoute(IPAddress network, byte netMaskLength, IPAddress gateway)
+ {
+ Network = network;
+ NetMaskLength = netMaskLength;
+ Gateway = gateway;
+ }
+
+ /// <summary>Creates network route</summary>
+ /// <param name="network">IP address to bind</param>
+ /// <param name="netMask">Subnet mask</param>
+ /// <param name="gateway">Gateway</param>
+ public NetworkRoute(IPAddress network, IPAddress netMask, IPAddress gateway)
+ {
+ byte length = 0;
+ var mask = netMask.GetAddressBytes();
+ for (byte x = 0; x < 4; x++)
+ {
+ for (byte b = 0; b < 8; b++)
+ if (((mask[x] >> (7 - b)) & 1) == 1)
+ length++;
+ else break;
+ }
+ Network = network;
+ NetMaskLength = length;
+ Gateway = gateway;
+ }
+
+ internal byte[] BuildRouteData()
+ {
+ int ipLength;
+ if (NetMaskLength <= 8) ipLength = 1;
+ else if (NetMaskLength <= 16) ipLength = 2;
+ else if (NetMaskLength <= 24) ipLength = 3;
+ else ipLength = 4;
+ var res = new byte[1 + ipLength + 4];
+ res[0] = NetMaskLength;
+ Array.Copy(Network.GetAddressBytes(), 0, res, 1, ipLength);
+ Array.Copy(Gateway.GetAddressBytes(), 0, res, 1 + ipLength, 4);
+ return res;
+ }
+ }
+
+ /// <summary>DHCP relay information (option 82)</summary>
+ public struct RelayInfo
+ {
+ /// <summary>Agent circuit ID</summary>
+ public byte[] AgentCircuitID;
+ /// <summary>Agent remote ID</summary>
+ public byte[] AgentRemoteID;
+ }
+}
diff --git a/SharpDHCPServerLib/SharpDHCPServerLib.csproj b/SharpDHCPServerLib/SharpDHCPServerLib.csproj
new file mode 100644
index 0000000..b321ec8
--- /dev/null
+++ b/SharpDHCPServerLib/SharpDHCPServerLib.csproj
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{B7FCD134-E2B2-43A9-96C5-3DEDB5669F37}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Cluster.SharpDHCPServer</RootNamespace>
+ <AssemblyName>SharpDHCPServerLib</AssemblyName>
+ <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <DocumentationFile>bin\Debug\SharpDHCPServerLib.XML</DocumentationFile>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <DocumentationFile>bin\Release\SharpDHCPServerLib.XML</DocumentationFile>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="SharpDHCPServer.cs" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/SharpDHCPServerLib/bin/Debug/SharpDHCPServerLib.XML b/SharpDHCPServerLib/bin/Debug/SharpDHCPServerLib.XML
new file mode 100644
index 0000000..408d813
--- /dev/null
+++ b/SharpDHCPServerLib/bin/Debug/SharpDHCPServerLib.XML
@@ -0,0 +1,524 @@
+<?xml version="1.0"?>
+<doc>
+ <assembly>
+ <name>SharpDHCPServerLib</name>
+ </assembly>
+ <members>
+ <member name="T:Cluster.SharpDHCPServer.DHCPRequest">
+ <summary>
+ DHCP request
+ </summary>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetRequestedOptionsList">
+ <summary>
+ Returns array of requested by client options
+ </summary>
+ <returns>Array of requested by client options</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.SendDHCPReply(Cluster.SharpDHCPServer.DHCPMsgType,System.Net.IPAddress,Cluster.SharpDHCPServer.DHCPReplyOptions)">
+ <summary>
+ Sends DHCP reply
+ </summary>
+ <param name="msgType">Type of DHCP message to send</param>
+ <param name="ip">IP for client</param>
+ <param name="replyData">Reply options (will be sent if requested)</param>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.SendDHCPReply(Cluster.SharpDHCPServer.DHCPMsgType,System.Net.IPAddress,Cluster.SharpDHCPServer.DHCPReplyOptions,System.Collections.Generic.Dictionary{Cluster.SharpDHCPServer.DHCPOption,System.Byte[]})">
+ <summary>
+ Sends DHCP reply
+ </summary>
+ <param name="msgType">Type of DHCP message to send</param>
+ <param name="ip">IP for client</param>
+ <param name="replyData">Reply options (will be sent if requested)</param>
+ <param name="otherForceOptions">Force reply options (will be sent anyway)</param>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetOptionData(Cluster.SharpDHCPServer.DHCPOption)">
+ <summary>
+ Returns option content
+ </summary>
+ <param name="option">Option to retrieve</param>
+ <returns>Option content</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetAllOptions">
+ <summary>
+ Returns all options
+ </summary>
+ <returns>Options dictionary</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetCiaddr">
+ <summary>
+ Returns ciaddr (client IP address)
+ </summary>
+ <returns>ciaddr</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetGiaddr">
+ <summary>
+ Returns giaddr (gateway IP address switched by relay)
+ </summary>
+ <returns>giaddr</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetChaddr">
+ <summary>
+ Returns chaddr (client hardware address)
+ </summary>
+ <returns>chaddr</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetRequestedIP">
+ <summary>
+ Returns requested IP (option 50)
+ </summary>
+ <returns>Requested IP</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetMsgType">
+ <summary>
+ Returns type of DHCP request
+ </summary>
+ <returns>DHCP message type</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetRawPacket">
+ <summary>
+ Returns entire content of DHCP packet
+ </summary>
+ <returns>DHCP packet</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetRelayInfo">
+ <summary>
+ Returns relay info (option 82)
+ </summary>
+ <returns>Relay info</returns>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket">
+ <summary>
+ Raw DHCP packet
+ </summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.op">
+ <summary>Op code: 1 = boot request, 2 = boot reply</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.htype">
+ <summary>Hardware address type</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.hlen">
+ <summary>Hardware address length: length of MACID</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.hops">
+ <summary>Hardware options</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.xid">
+ <summary>Transaction id</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.secs">
+ <summary>Elapsed time from trying to boot</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.flags">
+ <summary>Flags</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.ciaddr">
+ <summary>Client IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.yiaddr">
+ <summary>Your client IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.siaddr">
+ <summary>Server IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.giaddr">
+ <summary>Relay agent IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.chaddr">
+ <summary>Client HW address</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.sname">
+ <summary>Optional server host name</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.file">
+ <summary>Boot file name</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.mcookie">
+ <summary>Magic cookie</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.options">
+ <summary>Options (rest)</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPServer">
+ <summary>
+ DHCP Server
+ </summary>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPServer.#ctor(System.Net.IPAddress)">
+ <summary>
+ Creates DHCP server, it will be started instantly
+ </summary>
+ <param name="bindIp">IP address to bind</param>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPServer.#ctor">
+ <summary>Creates DHCP server, it will be started instantly</summary>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPServer.Dispose">
+ <summary>Disposes DHCP server</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnDataReceived">
+ <summary>Will be called on any DHCP message</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnDiscover">
+ <summary>Will be called on any DISCOVER message</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnRequest">
+ <summary>Will be called on any REQUEST message</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnDecline">
+ <summary>Will be called on any DECLINE message</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnReleased">
+ <summary>Will be called on any DECLINE released</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnInform">
+ <summary>Will be called on any DECLINE inform</summary>
+ </member>
+ <member name="P:Cluster.SharpDHCPServer.DHCPServer.ServerName">
+ <summary>Server name (optional)</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPServer.DHCPDataReceivedEventHandler">
+ <summary>Delegate for DHCP message</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPMsgType">
+ <summary>DHCP message type</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPDISCOVER">
+ <summary>DHCP DISCOVER message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPOFFER">
+ <summary>DHCP OFFER message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPREQUEST">
+ <summary>DHCP REQUEST message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPDECLINE">
+ <summary>DHCP DECLINE message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPACK">
+ <summary>DHCP ACK message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPNAK">
+ <summary>DHCP NAK message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPRELEASE">
+ <summary>DHCP RELEASE message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPINFORM">
+ <summary>DHCP INFORM message</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPOption">
+ <summary>DHCP option enum</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.SubnetMask">
+ <summary>Option 1</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TimeOffset">
+ <summary>Option 2</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.Router">
+ <summary>Option 3</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TimeServer">
+ <summary>Option 4</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NameServer">
+ <summary>Option 5</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DomainNameServers">
+ <summary>Option 6</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.LogServer">
+ <summary>Option 7</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.CookieServer">
+ <summary>Option 8</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.LPRServer">
+ <summary>Option 9</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ImpressServer">
+ <summary>Option 10</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ResourceLocServer">
+ <summary>Option 11</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.HostName">
+ <summary>Option 12</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.BootFileSize">
+ <summary>Option 13</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MeritDump">
+ <summary>Option 14</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DomainName">
+ <summary>Option 15</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.SwapServer">
+ <summary>Option 16</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RootPath">
+ <summary>Option 17</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ExtensionsPath">
+ <summary>Option 18</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.IpForwarding">
+ <summary>Option 19</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NonLocalSourceRouting">
+ <summary>Option 20</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PolicyFilter">
+ <summary>Option 21</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MaximumDatagramReAssemblySize">
+ <summary>Option 22</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DefaultIPTimeToLive">
+ <summary>Option 23</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PathMTUAgingTimeout">
+ <summary>Option 24</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PathMTUPlateauTable">
+ <summary>Option 25</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.InterfaceMTU">
+ <summary>Option 26</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.AllSubnetsAreLocal">
+ <summary>Option 27</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.BroadcastAddress">
+ <summary>Option 28</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PerformMaskDiscovery">
+ <summary>Option 29</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MaskSupplier">
+ <summary>Option 30</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PerformRouterDiscovery">
+ <summary>Option 31</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RouterSolicitationAddress">
+ <summary>Option 32</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.StaticRoute">
+ <summary>Option 33</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TrailerEncapsulation">
+ <summary>Option 34</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ARPCacheTimeout">
+ <summary>Option 35</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.EthernetEncapsulation">
+ <summary>Option 36</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TCPDefaultTTL">
+ <summary>Option 37</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TCPKeepaliveInterval">
+ <summary>Option 38</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TCPKeepaliveGarbage">
+ <summary>Option 39</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkInformationServiceDomain">
+ <summary>Option 40</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkInformationServers">
+ <summary>Option 41</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkTimeProtocolServers">
+ <summary>Option 42</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.VendorSpecificInformation">
+ <summary>Option 43</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetBIOSoverTCPIPNameServer">
+ <summary>Option 44</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetBIOSoverTCPIPDatagramDistributionServer">
+ <summary>Option 45</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetBIOSoverTCPIPNodeType">
+ <summary>Option 46</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetBIOSoverTCPIPScope">
+ <summary>Option 47</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.XWindowSystemFontServer">
+ <summary>Option 48</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.XWindowSystemDisplayManager">
+ <summary>Option 49</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RequestedIPAddress">
+ <summary>Option 50</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.IPAddressLeaseTime">
+ <summary>Option 51</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.OptionOverload">
+ <summary>Option 52</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DHCPMessageTYPE">
+ <summary>Option 53</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ServerIdentifier">
+ <summary>Option 54</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ParameterRequestList">
+ <summary>Option 55</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.Message">
+ <summary>Option 56</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MaximumDHCPMessageSize">
+ <summary>Option 57</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RenewalTimeValue_T1">
+ <summary>Option 58</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RebindingTimeValue_T2">
+ <summary>Option 59</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.Vendorclassidentifier">
+ <summary>Option 60</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ClientIdentifier">
+ <summary>Option 61</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetWateIPDomainName">
+ <summary>Option 62</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetWateIPInformation">
+ <summary>Option 63</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkInformationServicePlusDomain">
+ <summary>Option 64</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkInformationServicePlusServers">
+ <summary>Option 65</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TFTPServerName">
+ <summary>Option 66</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.BootfileName">
+ <summary>Option 67</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MobileIPHomeAgent">
+ <summary>Option 68</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.SMTPServer">
+ <summary>Option 69</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.POP3Server">
+ <summary>Option 70</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NNTPServer">
+ <summary>Option 71</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DefaultWWWServer">
+ <summary>Option 72</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DefaultFingerServer">
+ <summary>Option 73</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DefaultIRCServer">
+ <summary>Option 74</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.StreetTalkServer">
+ <summary>Option 75</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.STDAServer">
+ <summary>Option 76</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RelayInfo">
+ <summary>Option 82</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.StaticRoutes">
+ <summary>Option 121</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.StaticRoutesWin">
+ <summary>Option 249</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.END_Option">
+ <summary>Option 255 (END option)</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPReplyOptions">
+ <summary>Reply options</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.SubnetMask">
+ <summary>IP address</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.IPAddressLeaseTime">
+ <summary>IP address lease time (seconds)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.RenewalTimeValue_T1">
+ <summary>Renewal time (seconds)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.RebindingTimeValue_T2">
+ <summary>Rebinding time (seconds)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.DomainName">
+ <summary>Domain name</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.ServerIdentifier">
+ <summary>IP address of DHCP server</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.RouterIP">
+ <summary>Router (gateway) IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.DomainNameServers">
+ <summary>Domain name servers (DNS)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.LogServerIP">
+ <summary>Log server IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.StaticRoutes">
+ <summary>Static routes</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.OtherRequestedOptions">
+ <summary>Other options which will be sent on request</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.NetworkRoute">
+ <summary>Network route</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.NetworkRoute.Network">
+ <summary>IP address of destination network</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.NetworkRoute.NetMaskLength">
+ <summary>Subnet mask length</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.NetworkRoute.Gateway">
+ <summary>Gateway</summary>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.NetworkRoute.#ctor(System.Net.IPAddress,System.Byte,System.Net.IPAddress)">
+ <summary>Creates network route</summary>
+ <param name="network">IP address to bind</param>
+ <param name="netMaskLength">Subnet mask length</param>
+ <param name="gateway">Gateway</param>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.NetworkRoute.#ctor(System.Net.IPAddress,System.Net.IPAddress,System.Net.IPAddress)">
+ <summary>Creates network route</summary>
+ <param name="network">IP address to bind</param>
+ <param name="netMask">Subnet mask</param>
+ <param name="gateway">Gateway</param>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.RelayInfo">
+ <summary>DHCP relay information (option 82)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.RelayInfo.AgentCircuitID">
+ <summary>Agent circuit ID</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.RelayInfo.AgentRemoteID">
+ <summary>Agent remote ID</summary>
+ </member>
+ </members>
+</doc>
diff --git a/SharpDHCPServerLib/bin/Debug/SharpDHCPServerLib.dll b/SharpDHCPServerLib/bin/Debug/SharpDHCPServerLib.dll
new file mode 100644
index 0000000..5d90d66
--- /dev/null
+++ b/SharpDHCPServerLib/bin/Debug/SharpDHCPServerLib.dll
Binary files differ
diff --git a/SharpDHCPServerLib/bin/Debug/SharpDHCPServerLib.pdb b/SharpDHCPServerLib/bin/Debug/SharpDHCPServerLib.pdb
new file mode 100644
index 0000000..2b3bb6e
--- /dev/null
+++ b/SharpDHCPServerLib/bin/Debug/SharpDHCPServerLib.pdb
Binary files differ
diff --git a/SharpDHCPServerLib/bin/Release/SharpDHCPServer.zip b/SharpDHCPServerLib/bin/Release/SharpDHCPServer.zip
new file mode 100644
index 0000000..c419bf9
--- /dev/null
+++ b/SharpDHCPServerLib/bin/Release/SharpDHCPServer.zip
Binary files differ
diff --git a/SharpDHCPServerLib/bin/Release/SharpDHCPServerLib.XML b/SharpDHCPServerLib/bin/Release/SharpDHCPServerLib.XML
new file mode 100644
index 0000000..408d813
--- /dev/null
+++ b/SharpDHCPServerLib/bin/Release/SharpDHCPServerLib.XML
@@ -0,0 +1,524 @@
+<?xml version="1.0"?>
+<doc>
+ <assembly>
+ <name>SharpDHCPServerLib</name>
+ </assembly>
+ <members>
+ <member name="T:Cluster.SharpDHCPServer.DHCPRequest">
+ <summary>
+ DHCP request
+ </summary>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetRequestedOptionsList">
+ <summary>
+ Returns array of requested by client options
+ </summary>
+ <returns>Array of requested by client options</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.SendDHCPReply(Cluster.SharpDHCPServer.DHCPMsgType,System.Net.IPAddress,Cluster.SharpDHCPServer.DHCPReplyOptions)">
+ <summary>
+ Sends DHCP reply
+ </summary>
+ <param name="msgType">Type of DHCP message to send</param>
+ <param name="ip">IP for client</param>
+ <param name="replyData">Reply options (will be sent if requested)</param>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.SendDHCPReply(Cluster.SharpDHCPServer.DHCPMsgType,System.Net.IPAddress,Cluster.SharpDHCPServer.DHCPReplyOptions,System.Collections.Generic.Dictionary{Cluster.SharpDHCPServer.DHCPOption,System.Byte[]})">
+ <summary>
+ Sends DHCP reply
+ </summary>
+ <param name="msgType">Type of DHCP message to send</param>
+ <param name="ip">IP for client</param>
+ <param name="replyData">Reply options (will be sent if requested)</param>
+ <param name="otherForceOptions">Force reply options (will be sent anyway)</param>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetOptionData(Cluster.SharpDHCPServer.DHCPOption)">
+ <summary>
+ Returns option content
+ </summary>
+ <param name="option">Option to retrieve</param>
+ <returns>Option content</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetAllOptions">
+ <summary>
+ Returns all options
+ </summary>
+ <returns>Options dictionary</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetCiaddr">
+ <summary>
+ Returns ciaddr (client IP address)
+ </summary>
+ <returns>ciaddr</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetGiaddr">
+ <summary>
+ Returns giaddr (gateway IP address switched by relay)
+ </summary>
+ <returns>giaddr</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetChaddr">
+ <summary>
+ Returns chaddr (client hardware address)
+ </summary>
+ <returns>chaddr</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetRequestedIP">
+ <summary>
+ Returns requested IP (option 50)
+ </summary>
+ <returns>Requested IP</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetMsgType">
+ <summary>
+ Returns type of DHCP request
+ </summary>
+ <returns>DHCP message type</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetRawPacket">
+ <summary>
+ Returns entire content of DHCP packet
+ </summary>
+ <returns>DHCP packet</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetRelayInfo">
+ <summary>
+ Returns relay info (option 82)
+ </summary>
+ <returns>Relay info</returns>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket">
+ <summary>
+ Raw DHCP packet
+ </summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.op">
+ <summary>Op code: 1 = boot request, 2 = boot reply</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.htype">
+ <summary>Hardware address type</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.hlen">
+ <summary>Hardware address length: length of MACID</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.hops">
+ <summary>Hardware options</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.xid">
+ <summary>Transaction id</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.secs">
+ <summary>Elapsed time from trying to boot</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.flags">
+ <summary>Flags</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.ciaddr">
+ <summary>Client IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.yiaddr">
+ <summary>Your client IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.siaddr">
+ <summary>Server IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.giaddr">
+ <summary>Relay agent IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.chaddr">
+ <summary>Client HW address</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.sname">
+ <summary>Optional server host name</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.file">
+ <summary>Boot file name</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.mcookie">
+ <summary>Magic cookie</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.options">
+ <summary>Options (rest)</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPServer">
+ <summary>
+ DHCP Server
+ </summary>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPServer.#ctor(System.Net.IPAddress)">
+ <summary>
+ Creates DHCP server, it will be started instantly
+ </summary>
+ <param name="bindIp">IP address to bind</param>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPServer.#ctor">
+ <summary>Creates DHCP server, it will be started instantly</summary>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPServer.Dispose">
+ <summary>Disposes DHCP server</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnDataReceived">
+ <summary>Will be called on any DHCP message</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnDiscover">
+ <summary>Will be called on any DISCOVER message</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnRequest">
+ <summary>Will be called on any REQUEST message</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnDecline">
+ <summary>Will be called on any DECLINE message</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnReleased">
+ <summary>Will be called on any DECLINE released</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnInform">
+ <summary>Will be called on any DECLINE inform</summary>
+ </member>
+ <member name="P:Cluster.SharpDHCPServer.DHCPServer.ServerName">
+ <summary>Server name (optional)</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPServer.DHCPDataReceivedEventHandler">
+ <summary>Delegate for DHCP message</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPMsgType">
+ <summary>DHCP message type</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPDISCOVER">
+ <summary>DHCP DISCOVER message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPOFFER">
+ <summary>DHCP OFFER message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPREQUEST">
+ <summary>DHCP REQUEST message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPDECLINE">
+ <summary>DHCP DECLINE message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPACK">
+ <summary>DHCP ACK message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPNAK">
+ <summary>DHCP NAK message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPRELEASE">
+ <summary>DHCP RELEASE message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPINFORM">
+ <summary>DHCP INFORM message</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPOption">
+ <summary>DHCP option enum</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.SubnetMask">
+ <summary>Option 1</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TimeOffset">
+ <summary>Option 2</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.Router">
+ <summary>Option 3</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TimeServer">
+ <summary>Option 4</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NameServer">
+ <summary>Option 5</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DomainNameServers">
+ <summary>Option 6</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.LogServer">
+ <summary>Option 7</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.CookieServer">
+ <summary>Option 8</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.LPRServer">
+ <summary>Option 9</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ImpressServer">
+ <summary>Option 10</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ResourceLocServer">
+ <summary>Option 11</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.HostName">
+ <summary>Option 12</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.BootFileSize">
+ <summary>Option 13</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MeritDump">
+ <summary>Option 14</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DomainName">
+ <summary>Option 15</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.SwapServer">
+ <summary>Option 16</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RootPath">
+ <summary>Option 17</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ExtensionsPath">
+ <summary>Option 18</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.IpForwarding">
+ <summary>Option 19</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NonLocalSourceRouting">
+ <summary>Option 20</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PolicyFilter">
+ <summary>Option 21</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MaximumDatagramReAssemblySize">
+ <summary>Option 22</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DefaultIPTimeToLive">
+ <summary>Option 23</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PathMTUAgingTimeout">
+ <summary>Option 24</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PathMTUPlateauTable">
+ <summary>Option 25</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.InterfaceMTU">
+ <summary>Option 26</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.AllSubnetsAreLocal">
+ <summary>Option 27</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.BroadcastAddress">
+ <summary>Option 28</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PerformMaskDiscovery">
+ <summary>Option 29</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MaskSupplier">
+ <summary>Option 30</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PerformRouterDiscovery">
+ <summary>Option 31</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RouterSolicitationAddress">
+ <summary>Option 32</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.StaticRoute">
+ <summary>Option 33</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TrailerEncapsulation">
+ <summary>Option 34</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ARPCacheTimeout">
+ <summary>Option 35</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.EthernetEncapsulation">
+ <summary>Option 36</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TCPDefaultTTL">
+ <summary>Option 37</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TCPKeepaliveInterval">
+ <summary>Option 38</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TCPKeepaliveGarbage">
+ <summary>Option 39</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkInformationServiceDomain">
+ <summary>Option 40</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkInformationServers">
+ <summary>Option 41</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkTimeProtocolServers">
+ <summary>Option 42</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.VendorSpecificInformation">
+ <summary>Option 43</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetBIOSoverTCPIPNameServer">
+ <summary>Option 44</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetBIOSoverTCPIPDatagramDistributionServer">
+ <summary>Option 45</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetBIOSoverTCPIPNodeType">
+ <summary>Option 46</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetBIOSoverTCPIPScope">
+ <summary>Option 47</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.XWindowSystemFontServer">
+ <summary>Option 48</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.XWindowSystemDisplayManager">
+ <summary>Option 49</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RequestedIPAddress">
+ <summary>Option 50</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.IPAddressLeaseTime">
+ <summary>Option 51</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.OptionOverload">
+ <summary>Option 52</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DHCPMessageTYPE">
+ <summary>Option 53</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ServerIdentifier">
+ <summary>Option 54</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ParameterRequestList">
+ <summary>Option 55</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.Message">
+ <summary>Option 56</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MaximumDHCPMessageSize">
+ <summary>Option 57</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RenewalTimeValue_T1">
+ <summary>Option 58</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RebindingTimeValue_T2">
+ <summary>Option 59</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.Vendorclassidentifier">
+ <summary>Option 60</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ClientIdentifier">
+ <summary>Option 61</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetWateIPDomainName">
+ <summary>Option 62</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetWateIPInformation">
+ <summary>Option 63</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkInformationServicePlusDomain">
+ <summary>Option 64</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkInformationServicePlusServers">
+ <summary>Option 65</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TFTPServerName">
+ <summary>Option 66</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.BootfileName">
+ <summary>Option 67</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MobileIPHomeAgent">
+ <summary>Option 68</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.SMTPServer">
+ <summary>Option 69</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.POP3Server">
+ <summary>Option 70</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NNTPServer">
+ <summary>Option 71</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DefaultWWWServer">
+ <summary>Option 72</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DefaultFingerServer">
+ <summary>Option 73</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DefaultIRCServer">
+ <summary>Option 74</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.StreetTalkServer">
+ <summary>Option 75</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.STDAServer">
+ <summary>Option 76</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RelayInfo">
+ <summary>Option 82</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.StaticRoutes">
+ <summary>Option 121</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.StaticRoutesWin">
+ <summary>Option 249</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.END_Option">
+ <summary>Option 255 (END option)</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPReplyOptions">
+ <summary>Reply options</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.SubnetMask">
+ <summary>IP address</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.IPAddressLeaseTime">
+ <summary>IP address lease time (seconds)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.RenewalTimeValue_T1">
+ <summary>Renewal time (seconds)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.RebindingTimeValue_T2">
+ <summary>Rebinding time (seconds)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.DomainName">
+ <summary>Domain name</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.ServerIdentifier">
+ <summary>IP address of DHCP server</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.RouterIP">
+ <summary>Router (gateway) IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.DomainNameServers">
+ <summary>Domain name servers (DNS)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.LogServerIP">
+ <summary>Log server IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.StaticRoutes">
+ <summary>Static routes</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.OtherRequestedOptions">
+ <summary>Other options which will be sent on request</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.NetworkRoute">
+ <summary>Network route</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.NetworkRoute.Network">
+ <summary>IP address of destination network</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.NetworkRoute.NetMaskLength">
+ <summary>Subnet mask length</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.NetworkRoute.Gateway">
+ <summary>Gateway</summary>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.NetworkRoute.#ctor(System.Net.IPAddress,System.Byte,System.Net.IPAddress)">
+ <summary>Creates network route</summary>
+ <param name="network">IP address to bind</param>
+ <param name="netMaskLength">Subnet mask length</param>
+ <param name="gateway">Gateway</param>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.NetworkRoute.#ctor(System.Net.IPAddress,System.Net.IPAddress,System.Net.IPAddress)">
+ <summary>Creates network route</summary>
+ <param name="network">IP address to bind</param>
+ <param name="netMask">Subnet mask</param>
+ <param name="gateway">Gateway</param>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.RelayInfo">
+ <summary>DHCP relay information (option 82)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.RelayInfo.AgentCircuitID">
+ <summary>Agent circuit ID</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.RelayInfo.AgentRemoteID">
+ <summary>Agent remote ID</summary>
+ </member>
+ </members>
+</doc>
diff --git a/SharpDHCPServerLib/bin/Release/SharpDHCPServerLib.dll b/SharpDHCPServerLib/bin/Release/SharpDHCPServerLib.dll
new file mode 100644
index 0000000..0b41b2e
--- /dev/null
+++ b/SharpDHCPServerLib/bin/Release/SharpDHCPServerLib.dll
Binary files differ
diff --git a/SharpDHCPServerLib/bin/Release/SharpDHCPServerLib.pdb b/SharpDHCPServerLib/bin/Release/SharpDHCPServerLib.pdb
new file mode 100644
index 0000000..868eb85
--- /dev/null
+++ b/SharpDHCPServerLib/bin/Release/SharpDHCPServerLib.pdb
Binary files differ
diff --git a/SharpDHCPServerLib/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/SharpDHCPServerLib/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 0000000..3819a93
--- /dev/null
+++ b/SharpDHCPServerLib/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
Binary files differ
diff --git a/SharpDHCPServerLib/obj/Debug/SharpDHCPServerLib.csproj.FileListAbsolute.txt b/SharpDHCPServerLib/obj/Debug/SharpDHCPServerLib.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..ad206c2
--- /dev/null
+++ b/SharpDHCPServerLib/obj/Debug/SharpDHCPServerLib.csproj.FileListAbsolute.txt
@@ -0,0 +1,11 @@
+D:\Projects\SmallDHCPServer_CodeProject\SharpDHCPServerLib\bin\Debug\SharpDHCPServerLib.dll
+D:\Projects\SmallDHCPServer_CodeProject\SharpDHCPServerLib\bin\Debug\SharpDHCPServerLib.pdb
+D:\Projects\SmallDHCPServer_CodeProject\SharpDHCPServerLib\obj\Debug\ResolveAssemblyReference.cache
+D:\Projects\SmallDHCPServer_CodeProject\SharpDHCPServerLib\obj\Debug\SharpDHCPServerLib.dll
+D:\Projects\SmallDHCPServer_CodeProject\SharpDHCPServerLib\obj\Debug\SharpDHCPServerLib.pdb
+D:\Projects\SharpDHCPServer\SharpDHCPServerLib\bin\Debug\SharpDHCPServerLib.dll
+D:\Projects\SharpDHCPServer\SharpDHCPServerLib\bin\Debug\SharpDHCPServerLib.pdb
+D:\Projects\SharpDHCPServer\SharpDHCPServerLib\obj\Debug\ResolveAssemblyReference.cache
+D:\Projects\SharpDHCPServer\SharpDHCPServerLib\obj\Debug\SharpDHCPServerLib.dll
+D:\Projects\SharpDHCPServer\SharpDHCPServerLib\obj\Debug\SharpDHCPServerLib.pdb
+D:\Projects\SharpDHCPServer\SharpDHCPServerLib\bin\Debug\SharpDHCPServerLib.XML
diff --git a/SharpDHCPServerLib/obj/Debug/SharpDHCPServerLib.dll b/SharpDHCPServerLib/obj/Debug/SharpDHCPServerLib.dll
new file mode 100644
index 0000000..5d90d66
--- /dev/null
+++ b/SharpDHCPServerLib/obj/Debug/SharpDHCPServerLib.dll
Binary files differ
diff --git a/SharpDHCPServerLib/obj/Debug/SharpDHCPServerLib.pdb b/SharpDHCPServerLib/obj/Debug/SharpDHCPServerLib.pdb
new file mode 100644
index 0000000..2b3bb6e
--- /dev/null
+++ b/SharpDHCPServerLib/obj/Debug/SharpDHCPServerLib.pdb
Binary files differ
diff --git a/SharpDHCPServerLib/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache b/SharpDHCPServerLib/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 0000000..48f1a8e
--- /dev/null
+++ b/SharpDHCPServerLib/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache
Binary files differ
diff --git a/SharpDHCPServerLib/obj/Release/SharpDHCPServerLib.csproj.FileListAbsolute.txt b/SharpDHCPServerLib/obj/Release/SharpDHCPServerLib.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..b52c004
--- /dev/null
+++ b/SharpDHCPServerLib/obj/Release/SharpDHCPServerLib.csproj.FileListAbsolute.txt
@@ -0,0 +1,6 @@
+D:\Projects\SharpDHCPServer\SharpDHCPServerLib\bin\Release\SharpDHCPServerLib.dll
+D:\Projects\SharpDHCPServer\SharpDHCPServerLib\bin\Release\SharpDHCPServerLib.pdb
+D:\Projects\SharpDHCPServer\SharpDHCPServerLib\obj\Release\ResolveAssemblyReference.cache
+D:\Projects\SharpDHCPServer\SharpDHCPServerLib\obj\Release\SharpDHCPServerLib.dll
+D:\Projects\SharpDHCPServer\SharpDHCPServerLib\obj\Release\SharpDHCPServerLib.pdb
+D:\Projects\SharpDHCPServer\SharpDHCPServerLib\bin\Release\SharpDHCPServerLib.XML
diff --git a/SharpDHCPServerLib/obj/Release/SharpDHCPServerLib.dll b/SharpDHCPServerLib/obj/Release/SharpDHCPServerLib.dll
new file mode 100644
index 0000000..0b41b2e
--- /dev/null
+++ b/SharpDHCPServerLib/obj/Release/SharpDHCPServerLib.dll
Binary files differ
diff --git a/SharpDHCPServerLib/obj/Release/SharpDHCPServerLib.pdb b/SharpDHCPServerLib/obj/Release/SharpDHCPServerLib.pdb
new file mode 100644
index 0000000..868eb85
--- /dev/null
+++ b/SharpDHCPServerLib/obj/Release/SharpDHCPServerLib.pdb
Binary files differ
diff --git a/SharpDHCPServer_Sample/Program.cs b/SharpDHCPServer_Sample/Program.cs
new file mode 100644
index 0000000..f350d82
--- /dev/null
+++ b/SharpDHCPServer_Sample/Program.cs
@@ -0,0 +1,119 @@
+/*
+ * ShapDHCPServer (C) 2010, Cluster
+ * http://clusterrr.com
+ * http://code.google.com/p/sharpdhcpserver/
+ *
+ * DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ * Version 2, December 2004
+ *
+ * Copyright (C) 2004 Sam Hocevar
+ * 14 rue de Plaisance, 75014 Paris, France
+ * Everyone is permitted to copy and distribute verbatim or modified
+ * copies of this license document, and changing it is allowed as long
+ * as the name is changed.
+ *
+ * DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ * TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+ *
+ * 0. You just DO WHAT THE FUCK YOU WANT TO.
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Net;
+using Cluster.SharpDHCPServer;
+
+namespace Cluster.SharpDHCPServer_Sample
+{
+ class Program
+ {
+ const string LOCAL_INTERFACE = "0.0.0.0";
+ static byte nextIP = 10;
+ static Dictionary<string, IPAddress> leases = new Dictionary<string, IPAddress>();
+ static void Main(string[] args)
+ {
+ var server = new DHCPServer();
+ server.ServerName = "SharpDHCPServer";
+ server.OnDataReceived += Request;
+ Console.WriteLine("Running DHCP server. Press enter to stop it.");
+ Console.ReadLine();
+ server.Dispose();
+ }
+
+ static void Request(DHCPRequest dhcpRequest)
+ {
+ var type = dhcpRequest.GetMsgType();
+ var mac = ByteArrayToString(dhcpRequest.GetChaddr());
+ // IP for client
+ IPAddress ip;
+ if (!leases.TryGetValue(mac, out ip))
+ {
+ ip = new IPAddress(new byte[] { 10, 0, 0, nextIP++ });
+ leases[mac] = ip;
+ }
+ Console.WriteLine(type.ToString() + " request from " + mac + ", it will be " + ip.ToString());
+
+ var options = dhcpRequest.GetAllOptions();
+ Console.Write("Options:");
+ foreach (DHCPOption option in options.Keys)
+ {
+ Console.WriteLine(option.ToString() + ": " + ByteArrayToString(options[option]));
+ }
+ // Lets show some request info
+ var requestedOptions = dhcpRequest.GetRequestedOptionsList();
+ if (requestedOptions != null)
+ {
+ Console.Write("Requested options:");
+ foreach (DHCPOption option in requestedOptions) Console.Write(" " + option.ToString());
+ Console.WriteLine();
+ }
+ // Option 82 info
+ var relayInfo = dhcpRequest.GetRelayInfo();
+ if (relayInfo.AgentCircuitID != null) Console.WriteLine("Relay agent circuit ID: " + ByteArrayToString(relayInfo.AgentCircuitID));
+ if (relayInfo.AgentRemoteID != null) Console.WriteLine("Relay agent remote ID: " + ByteArrayToString(relayInfo.AgentRemoteID));
+ Console.WriteLine();
+
+ var replyOptions = new DHCPReplyOptions();
+ // Options should be filled with valid data. Only requested options will be sent.
+ replyOptions.SubnetMask = IPAddress.Parse("255.255.255.0");
+ replyOptions.DomainName = "SharpDHCPServer";
+ replyOptions.ServerIdentifier = IPAddress.Parse("10.0.0.1");
+ replyOptions.RouterIP = IPAddress.Parse("10.0.0.1");
+ replyOptions.DomainNameServers = new IPAddress[] { IPAddress.Parse("192.168.100.2"), IPAddress.Parse("192.168.100.3") };
+ // Some static routes
+ replyOptions.StaticRoutes = new NetworkRoute[] {
+ new NetworkRoute(IPAddress.Parse("10.0.0.0"), IPAddress.Parse("255.0.0.0"), IPAddress.Parse("10.0.0.1")),
+ new NetworkRoute(IPAddress.Parse("192.168.0.0"), IPAddress.Parse("255.255.0.0"), IPAddress.Parse("10.0.0.1")),
+ new NetworkRoute(IPAddress.Parse("172.16.0.0"), IPAddress.Parse("255.240.0.0"), IPAddress.Parse("10.0.0.1")),
+ new NetworkRoute(IPAddress.Parse("80.252.130.248"), IPAddress.Parse("255.255.255.248"), IPAddress.Parse("10.0.0.1")),
+ new NetworkRoute(IPAddress.Parse("80.252.128.88"), IPAddress.Parse("255.255.255.248"), IPAddress.Parse("10.0.0.1")),
+ };
+
+ // Lets send reply to client!
+ if (type == DHCPMsgType.DHCPDISCOVER)
+ dhcpRequest.SendDHCPReply(DHCPMsgType.DHCPOFFER, ip, replyOptions);
+ if (type == DHCPMsgType.DHCPREQUEST)
+ dhcpRequest.SendDHCPReply(DHCPMsgType.DHCPACK, ip, replyOptions);
+ }
+
+ static string ByteArrayToString(byte[] ar)
+ {
+ var res = new StringBuilder();
+ foreach (var b in ar)
+ {
+ res.Append(b.ToString("X2"));
+ }
+ res.Append(" (");
+ foreach (var b in ar)
+ {
+ if ((b >= 32) && (b <127))
+ res.Append(Encoding.ASCII.GetString(new byte[] { b }));
+ else res.Append(" ");
+ }
+ res.Append(")");
+ return res.ToString();
+ }
+ }
+}
diff --git a/SharpDHCPServer_Sample/Properties/.svn/all-wcprops b/SharpDHCPServer_Sample/Properties/.svn/all-wcprops
new file mode 100644
index 0000000..fc8a3fe
--- /dev/null
+++ b/SharpDHCPServer_Sample/Properties/.svn/all-wcprops
@@ -0,0 +1,11 @@
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svn/!svn/ver/2/trunk/SharpDHCPServer_Sample/Properties
+END
+AssemblyInfo.cs
+K 25
+svn:wc:ra_dav:version-url
+V 71
+/svn/!svn/ver/2/trunk/SharpDHCPServer_Sample/Properties/AssemblyInfo.cs
+END
diff --git a/SharpDHCPServer_Sample/Properties/.svn/entries b/SharpDHCPServer_Sample/Properties/.svn/entries
new file mode 100644
index 0000000..6b87649
--- /dev/null
+++ b/SharpDHCPServer_Sample/Properties/.svn/entries
@@ -0,0 +1,62 @@
+10
+
+dir
+2
+https://sharpdhcpserver.googlecode.com/svn/trunk/SharpDHCPServer_Sample/Properties
+https://sharpdhcpserver.googlecode.com/svn
+
+
+
+2010-12-06T13:59:04.594212Z
+2
+Avdyukhin@gmail.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3d45f574-0380-fa68-85f7-e44bac00989b
+
+AssemblyInfo.cs
+file
+
+
+
+
+2010-12-06T13:51:30.753049Z
+ab4507a3a785b28cd58c3d387576aeb7
+2010-12-06T13:59:04.594212Z
+2
+Avdyukhin@gmail.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2068
+
diff --git a/SharpDHCPServer_Sample/Properties/.svn/text-base/AssemblyInfo.cs.svn-base b/SharpDHCPServer_Sample/Properties/.svn/text-base/AssemblyInfo.cs.svn-base
new file mode 100644
index 0000000..ff53389
--- /dev/null
+++ b/SharpDHCPServer_Sample/Properties/.svn/text-base/AssemblyInfo.cs.svn-base
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Управление общими сведениями о сборке осуществляется с помощью
+// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
+// связанные со сборкой.
+[assembly: AssemblyTitle("SharpDHCPServer_Sample")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Cluster")]
+[assembly: AssemblyProduct("SharpDHCPServer_Sample")]
+[assembly: AssemblyCopyright("Copyright © Cluster 2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Параметр ComVisible со значением FALSE делает типы в сборке невидимыми
+// для COM-компонентов. Если требуется обратиться к типу в этой сборке через
+// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
+[assembly: ComVisible(false)]
+
+// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
+[assembly: Guid("b0578828-11d1-4197-8af2-f029410d1672")]
+
+// Сведения о версии сборки состоят из следующих четырех значений:
+//
+// Основной номер версии
+// Дополнительный номер версии
+// Номер построения
+// Редакция
+//
+// Можно задать все значения или принять номер построения и номер редакции по умолчанию,
+// используя "*", как показано ниже:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/SharpDHCPServer_Sample/Properties/AssemblyInfo.cs b/SharpDHCPServer_Sample/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..ff53389
--- /dev/null
+++ b/SharpDHCPServer_Sample/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Управление общими сведениями о сборке осуществляется с помощью
+// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
+// связанные со сборкой.
+[assembly: AssemblyTitle("SharpDHCPServer_Sample")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Cluster")]
+[assembly: AssemblyProduct("SharpDHCPServer_Sample")]
+[assembly: AssemblyCopyright("Copyright © Cluster 2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Параметр ComVisible со значением FALSE делает типы в сборке невидимыми
+// для COM-компонентов. Если требуется обратиться к типу в этой сборке через
+// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
+[assembly: ComVisible(false)]
+
+// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
+[assembly: Guid("b0578828-11d1-4197-8af2-f029410d1672")]
+
+// Сведения о версии сборки состоят из следующих четырех значений:
+//
+// Основной номер версии
+// Дополнительный номер версии
+// Номер построения
+// Редакция
+//
+// Можно задать все значения или принять номер построения и номер редакции по умолчанию,
+// используя "*", как показано ниже:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/SharpDHCPServer_Sample/SharpDHCPServer_Sample.csproj b/SharpDHCPServer_Sample/SharpDHCPServer_Sample.csproj
new file mode 100644
index 0000000..c69a977
--- /dev/null
+++ b/SharpDHCPServer_Sample/SharpDHCPServer_Sample.csproj
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{E0A4A539-681E-45E1-84A8-C530BA129856}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Cluster.SharpDHCPServer_Sample</RootNamespace>
+ <AssemblyName>SharpDHCPServer_Sample</AssemblyName>
+ <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+ <PlatformTarget>x86</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+ <PlatformTarget>x86</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\SharpDHCPServerLib\SharpDHCPServerLib.csproj">
+ <Project>{B7FCD134-E2B2-43A9-96C5-3DEDB5669F37}</Project>
+ <Name>SharpDHCPServerLib</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServerLib.dll b/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServerLib.dll
new file mode 100644
index 0000000..3340512
--- /dev/null
+++ b/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServerLib.dll
Binary files differ
diff --git a/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServerLib.pdb b/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServerLib.pdb
new file mode 100644
index 0000000..7a9dc7c
--- /dev/null
+++ b/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServerLib.pdb
Binary files differ
diff --git a/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServerLib.xml b/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServerLib.xml
new file mode 100644
index 0000000..3302c01
--- /dev/null
+++ b/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServerLib.xml
@@ -0,0 +1,518 @@
+<?xml version="1.0"?>
+<doc>
+ <assembly>
+ <name>SharpDHCPServerLib</name>
+ </assembly>
+ <members>
+ <member name="T:Cluster.SharpDHCPServer.DHCPRequest">
+ <summary>
+ DHCP request
+ </summary>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetRequestedOptionsList">
+ <summary>
+ Returns array of requested by client options
+ </summary>
+ <returns>Array of requested by client options</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.SendDHCPReply(Cluster.SharpDHCPServer.DHCPMsgType,System.Net.IPAddress,Cluster.SharpDHCPServer.DHCPReplyOptions)">
+ <summary>
+ Sends DHCP reply
+ </summary>
+ <param name="msgType">Type of DHCP message to send</param>
+ <param name="ip">IP for client</param>
+ <param name="replyData">Reply options (will be sent if requested)</param>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.SendDHCPReply(Cluster.SharpDHCPServer.DHCPMsgType,System.Net.IPAddress,Cluster.SharpDHCPServer.DHCPReplyOptions,System.Collections.Generic.Dictionary{Cluster.SharpDHCPServer.DHCPOption,System.Byte[]})">
+ <summary>
+ Sends DHCP reply
+ </summary>
+ <param name="msgType">Type of DHCP message to send</param>
+ <param name="ip">IP for client</param>
+ <param name="replyData">Reply options (will be sent if requested)</param>
+ <param name="otherForceOptions">Force reply options (will be sent anyway)</param>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetOptionData(Cluster.SharpDHCPServer.DHCPOption)">
+ <summary>
+ Returns option content
+ </summary>
+ <param name="option">Option to retrieve</param>
+ <returns>Option content</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetAllOptions">
+ <summary>
+ Returns all options
+ </summary>
+ <returns>Options dictionary</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetCiaddr">
+ <summary>
+ Returns ciaddr (client IP address)
+ </summary>
+ <returns>ciaddr</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetGiaddr">
+ <summary>
+ Returns giaddr (gateway IP address switched by relay)
+ </summary>
+ <returns>giaddr</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetChaddr">
+ <summary>
+ Returns chaddr (client hardware address)
+ </summary>
+ <returns>chaddr</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetMsgType">
+ <summary>
+ Returns type of DHCP request
+ </summary>
+ <returns>DHCP message type</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetRawPacket">
+ <summary>
+ Returns entire content of DHCP packet
+ </summary>
+ <returns>DHCP packet</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetRelayInfo">
+ <summary>
+ Returns relay info (option 82)
+ </summary>
+ <returns>Relay info</returns>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket">
+ <summary>
+ Raw DHCP packet
+ </summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.op">
+ <summary>Op code: 1 = boot request, 2 = boot reply</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.htype">
+ <summary>Hardware address type</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.hlen">
+ <summary>Hardware address length: length of MACID</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.hops">
+ <summary>Hardware options</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.xid">
+ <summary>Transaction id</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.secs">
+ <summary>Elapsed time from trying to boot</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.flags">
+ <summary>Flags</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.ciaddr">
+ <summary>Client IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.yiaddr">
+ <summary>Your client IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.siaddr">
+ <summary>Server IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.giaddr">
+ <summary>Relay agent IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.chaddr">
+ <summary>Client HW address</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.sname">
+ <summary>Optional server host name</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.file">
+ <summary>Boot file name</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.mcookie">
+ <summary>Magic cookie</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.options">
+ <summary>Options (rest)</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPServer">
+ <summary>
+ DHCP Server
+ </summary>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPServer.#ctor(System.Net.IPAddress)">
+ <summary>
+ Creates DHCP server, it will be started instantly
+ </summary>
+ <param name="bindIp">IP address to bind</param>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPServer.#ctor">
+ <summary>Creates DHCP server, it will be started instantly</summary>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPServer.Dispose">
+ <summary>Disposes DHCP server</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnDataReceived">
+ <summary>Will be called on any DHCP message</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnDiscover">
+ <summary>Will be called on any DISCOVER message</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnRequest">
+ <summary>Will be called on any REQUEST message</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnDecline">
+ <summary>Will be called on any DECLINE message</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnReleased">
+ <summary>Will be called on any DECLINE released</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnInform">
+ <summary>Will be called on any DECLINE inform</summary>
+ </member>
+ <member name="P:Cluster.SharpDHCPServer.DHCPServer.ServerName">
+ <summary>Server name (optional)</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPServer.DHCPDataReceivedEventHandler">
+ <summary>Delegate for DHCP message</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPMsgType">
+ <summary>DHCP message type</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPDISCOVER">
+ <summary>DHCP DISCOVER message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPOFFER">
+ <summary>DHCP OFFER message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPREQUEST">
+ <summary>DHCP REQUEST message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPDECLINE">
+ <summary>DHCP DECLINE message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPACK">
+ <summary>DHCP ACK message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPNAK">
+ <summary>DHCP NAK message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPRELEASE">
+ <summary>DHCP RELEASE message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPINFORM">
+ <summary>DHCP INFORM message</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPOption">
+ <summary>DHCP option enum</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.SubnetMask">
+ <summary>Option 1</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TimeOffset">
+ <summary>Option 2</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.Router">
+ <summary>Option 3</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TimeServer">
+ <summary>Option 4</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NameServer">
+ <summary>Option 5</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DomainNameServers">
+ <summary>Option 6</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.LogServer">
+ <summary>Option 7</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.CookieServer">
+ <summary>Option 8</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.LPRServer">
+ <summary>Option 9</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ImpressServer">
+ <summary>Option 10</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ResourceLocServer">
+ <summary>Option 11</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.HostName">
+ <summary>Option 12</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.BootFileSize">
+ <summary>Option 13</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MeritDump">
+ <summary>Option 14</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DomainName">
+ <summary>Option 15</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.SwapServer">
+ <summary>Option 16</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RootPath">
+ <summary>Option 17</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ExtensionsPath">
+ <summary>Option 18</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.IpForwarding">
+ <summary>Option 19</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NonLocalSourceRouting">
+ <summary>Option 20</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PolicyFilter">
+ <summary>Option 21</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MaximumDatagramReAssemblySize">
+ <summary>Option 22</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DefaultIPTimeToLive">
+ <summary>Option 23</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PathMTUAgingTimeout">
+ <summary>Option 24</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PathMTUPlateauTable">
+ <summary>Option 25</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.InterfaceMTU">
+ <summary>Option 26</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.AllSubnetsAreLocal">
+ <summary>Option 27</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.BroadcastAddress">
+ <summary>Option 28</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PerformMaskDiscovery">
+ <summary>Option 29</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MaskSupplier">
+ <summary>Option 30</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PerformRouterDiscovery">
+ <summary>Option 31</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RouterSolicitationAddress">
+ <summary>Option 32</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.StaticRoute">
+ <summary>Option 33</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TrailerEncapsulation">
+ <summary>Option 34</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ARPCacheTimeout">
+ <summary>Option 35</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.EthernetEncapsulation">
+ <summary>Option 36</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TCPDefaultTTL">
+ <summary>Option 37</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TCPKeepaliveInterval">
+ <summary>Option 38</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TCPKeepaliveGarbage">
+ <summary>Option 39</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkInformationServiceDomain">
+ <summary>Option 40</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkInformationServers">
+ <summary>Option 41</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkTimeProtocolServers">
+ <summary>Option 42</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.VendorSpecificInformation">
+ <summary>Option 43</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetBIOSoverTCPIPNameServer">
+ <summary>Option 44</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetBIOSoverTCPIPDatagramDistributionServer">
+ <summary>Option 45</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetBIOSoverTCPIPNodeType">
+ <summary>Option 46</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetBIOSoverTCPIPScope">
+ <summary>Option 47</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.XWindowSystemFontServer">
+ <summary>Option 48</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.XWindowSystemDisplayManager">
+ <summary>Option 49</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RequestedIPAddress">
+ <summary>Option 50</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.IPAddressLeaseTime">
+ <summary>Option 51</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.OptionOverload">
+ <summary>Option 52</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DHCPMessageTYPE">
+ <summary>Option 53</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ServerIdentifier">
+ <summary>Option 54</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ParameterRequestList">
+ <summary>Option 55</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.Message">
+ <summary>Option 56</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MaximumDHCPMessageSize">
+ <summary>Option 57</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RenewalTimeValue_T1">
+ <summary>Option 58</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RebindingTimeValue_T2">
+ <summary>Option 59</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.Vendorclassidentifier">
+ <summary>Option 60</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ClientIdentifier">
+ <summary>Option 61</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetWateIPDomainName">
+ <summary>Option 62</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetWateIPInformation">
+ <summary>Option 63</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkInformationServicePlusDomain">
+ <summary>Option 64</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkInformationServicePlusServers">
+ <summary>Option 65</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TFTPServerName">
+ <summary>Option 66</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.BootfileName">
+ <summary>Option 67</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MobileIPHomeAgent">
+ <summary>Option 68</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.SMTPServer">
+ <summary>Option 69</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.POP3Server">
+ <summary>Option 70</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NNTPServer">
+ <summary>Option 71</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DefaultWWWServer">
+ <summary>Option 72</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DefaultFingerServer">
+ <summary>Option 73</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DefaultIRCServer">
+ <summary>Option 74</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.StreetTalkServer">
+ <summary>Option 75</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.STDAServer">
+ <summary>Option 76</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RelayInfo">
+ <summary>Option 82</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.StaticRoutes">
+ <summary>Option 121</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.StaticRoutesWin">
+ <summary>Option 249</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.END_Option">
+ <summary>Option 255 (END option)</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPReplyOptions">
+ <summary>Reply options</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.SubnetMask">
+ <summary>IP address</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.IPAddressLeaseTime">
+ <summary>IP address lease time (seconds)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.RenewalTimeValue_T1">
+ <summary>Renewal time (seconds)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.RebindingTimeValue_T2">
+ <summary>Rebinding time (seconds)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.DomainName">
+ <summary>Domain name</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.ServerIdentifier">
+ <summary>IP address of DHCP server</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.RouterIP">
+ <summary>Router (gateway) IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.DomainNameServers">
+ <summary>Domain name servers (DNS)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.LogServerIP">
+ <summary>Log server IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.StaticRoutes">
+ <summary>Static routes</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.OtherRequestedOptions">
+ <summary>Other options which will be sent on request</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.NetworkRoute">
+ <summary>Network route</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.NetworkRoute.Network">
+ <summary>IP address of destination network</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.NetworkRoute.NetMaskLength">
+ <summary>Subnet mask length</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.NetworkRoute.Gateway">
+ <summary>Gateway</summary>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.NetworkRoute.#ctor(System.Net.IPAddress,System.Byte,System.Net.IPAddress)">
+ <summary>Creates network route</summary>
+ <param name="network">IP address to bind</param>
+ <param name="netMaskLength">Subnet mask length</param>
+ <param name="gateway">Gateway</param>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.NetworkRoute.#ctor(System.Net.IPAddress,System.Net.IPAddress,System.Net.IPAddress)">
+ <summary>Creates network route</summary>
+ <param name="network">IP address to bind</param>
+ <param name="netMask">Subnet mask</param>
+ <param name="gateway">Gateway</param>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.RelayInfo">
+ <summary>DHCP relay information (option 82)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.RelayInfo.AgentCircuitID">
+ <summary>Agent circuit ID</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.RelayInfo.AgentRemoteID">
+ <summary>Agent remote ID</summary>
+ </member>
+ </members>
+</doc>
diff --git a/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServer_Sample.exe b/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServer_Sample.exe
new file mode 100644
index 0000000..006a484
--- /dev/null
+++ b/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServer_Sample.exe
Binary files differ
diff --git a/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServer_Sample.pdb b/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServer_Sample.pdb
new file mode 100644
index 0000000..b16fc76
--- /dev/null
+++ b/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServer_Sample.pdb
Binary files differ
diff --git a/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServer_Sample.vshost.exe b/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServer_Sample.vshost.exe
new file mode 100644
index 0000000..58da521
--- /dev/null
+++ b/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServer_Sample.vshost.exe
Binary files differ
diff --git a/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServer_Sample.vshost.exe.manifest b/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServer_Sample.vshost.exe.manifest
new file mode 100644
index 0000000..061c9ca
--- /dev/null
+++ b/SharpDHCPServer_Sample/bin/Debug/SharpDHCPServer_Sample.vshost.exe.manifest
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+ <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
+ <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
+ <security>
+ <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
+ <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
+ </requestedPrivileges>
+ </security>
+ </trustInfo>
+</assembly>
diff --git a/SharpDHCPServer_Sample/bin/Release/SharpDHCPServerLib.dll b/SharpDHCPServer_Sample/bin/Release/SharpDHCPServerLib.dll
new file mode 100644
index 0000000..4726802
--- /dev/null
+++ b/SharpDHCPServer_Sample/bin/Release/SharpDHCPServerLib.dll
Binary files differ
diff --git a/SharpDHCPServer_Sample/bin/Release/SharpDHCPServerLib.pdb b/SharpDHCPServer_Sample/bin/Release/SharpDHCPServerLib.pdb
new file mode 100644
index 0000000..319e1c2
--- /dev/null
+++ b/SharpDHCPServer_Sample/bin/Release/SharpDHCPServerLib.pdb
Binary files differ
diff --git a/SharpDHCPServer_Sample/bin/Release/SharpDHCPServerLib.xml b/SharpDHCPServer_Sample/bin/Release/SharpDHCPServerLib.xml
new file mode 100644
index 0000000..a9d7598
--- /dev/null
+++ b/SharpDHCPServer_Sample/bin/Release/SharpDHCPServerLib.xml
@@ -0,0 +1,515 @@
+<?xml version="1.0"?>
+<doc>
+ <assembly>
+ <name>SharpDHCPServerLib</name>
+ </assembly>
+ <members>
+ <member name="T:Cluster.SharpDHCPServer.DHCPRequest">
+ <summary>
+ DHCP request
+ </summary>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetRequestedOptionsList">
+ <summary>
+ Returns array of requested by client options
+ </summary>
+ <returns>Array of requested by client options</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.SendDHCPReply(Cluster.SharpDHCPServer.DHCPMsgType,System.Net.IPAddress,Cluster.SharpDHCPServer.DHCPReplyOptions)">
+ <summary>
+ Sends DHCP reply
+ </summary>
+ <param name="msgType">Type of DHCP message to send</param>
+ <param name="ip">IP for client</param>
+ <param name="replyData">Reply options (will be sent if requested)</param>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.SendDHCPReply(Cluster.SharpDHCPServer.DHCPMsgType,System.Net.IPAddress,Cluster.SharpDHCPServer.DHCPReplyOptions,System.Collections.Generic.Dictionary{Cluster.SharpDHCPServer.DHCPOption,System.Byte[]})">
+ <summary>
+ Sends DHCP reply
+ </summary>
+ <param name="msgType">Type of DHCP message to send</param>
+ <param name="ip">IP for client</param>
+ <param name="replyData">Reply options (will be sent if requested)</param>
+ <param name="otherForceOptions">Force reply options (will be sent anyway)</param>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetOptionData(Cluster.SharpDHCPServer.DHCPOption)">
+ <summary>
+ Returns option content
+ </summary>
+ <param name="option">Option to retrieve</param>
+ <returns>Option content</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetAllOptions">
+ <summary>
+ Returns all options
+ </summary>
+ <returns>Options dictionary</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetCiaddr">
+ <summary>
+ Returns ciaddr (client IP address)
+ </summary>
+ <returns>ciaddr</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetGiaddr">
+ <summary>
+ Returns giaddr (gateway IP address switched by relay)
+ </summary>
+ <returns>giaddr</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetChaddr">
+ <summary>
+ Returns chaddr (client hardware address)
+ </summary>
+ <returns>chaddr</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetMsgType">
+ <summary>
+ Returns type of DHCP request
+ </summary>
+ <returns>DHCP message type</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetRawPacket">
+ <summary>
+ Returns entire content of DHCP packet
+ </summary>
+ <returns>DHCP packet</returns>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPRequest.GetRelayInfo">
+ <summary>
+ Returns relay info (option 82)
+ </summary>
+ <returns>Relay info</returns>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket">
+ <summary>
+ Raw DHCP packet
+ </summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.op">
+ <summary>Op code: 1 = boot request, 2 = boot reply</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.htype">
+ <summary>Hardware address type</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.hlen">
+ <summary>Hardware address length: length of MACID</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.hops">
+ <summary>Hardware options</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.xid">
+ <summary>Transaction id</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.secs">
+ <summary>Elapsed time from trying to boot</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.flags">
+ <summary>Flags</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.ciaddr">
+ <summary>Client IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.yiaddr">
+ <summary>Your client IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.siaddr">
+ <summary>Server IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.giaddr">
+ <summary>Relay agent IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.chaddr">
+ <summary>Client HW address</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.sname">
+ <summary>Optional server host name</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.file">
+ <summary>Boot file name</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.mcookie">
+ <summary>Magic cookie</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPRequest.DHCPPacket.options">
+ <summary>Options (rest)</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPServer">
+ <summary>
+ DHCP Server
+ </summary>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPServer.#ctor(System.Net.IPAddress)">
+ <summary>
+ Creates DHCP server, it will be started instantly
+ </summary>
+ <param name="bindIp">IP address to bind</param>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPServer.#ctor">
+ <summary>Creates DHCP server, it will be started instantly</summary>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.DHCPServer.Dispose">
+ <summary>Disposes DHCP server</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnDataReceived">
+ <summary>Will be called on any DHCP message</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnDiscover">
+ <summary>Will be called on any DISCOVER message</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnRequest">
+ <summary>Will be called on any REQUEST message</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnDecline">
+ <summary>Will be called on any DECLINE message</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnReleased">
+ <summary>Will be called on any DECLINE released</summary>
+ </member>
+ <member name="E:Cluster.SharpDHCPServer.DHCPServer.OnInform">
+ <summary>Will be called on any DECLINE inform</summary>
+ </member>
+ <member name="P:Cluster.SharpDHCPServer.DHCPServer.ServerName">
+ <summary>Server name (optional)</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPServer.DHCPDataReceivedEventHandler">
+ <summary>Delegate for DHCP message</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPMsgType">
+ <summary>DHCP message type</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPDISCOVER">
+ <summary>DHCP DISCOVER message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPOFFER">
+ <summary>DHCP OFFER message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPREQUEST">
+ <summary>DHCP REQUEST message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPDECLINE">
+ <summary>DHCP DECLINE message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPACK">
+ <summary>DHCP ACK message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPNAK">
+ <summary>DHCP NAK message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPRELEASE">
+ <summary>DHCP RELEASE message</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPMsgType.DHCPINFORM">
+ <summary>DHCP INFORM message</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPOption">
+ <summary>DHCP option enum</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.SubnetMask">
+ <summary>Option 1</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TimeOffset">
+ <summary>Option 2</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.Router">
+ <summary>Option 3</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TimeServer">
+ <summary>Option 4</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NameServer">
+ <summary>Option 5</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DomainNameServers">
+ <summary>Option 6</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.LogServer">
+ <summary>Option 7</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.CookieServer">
+ <summary>Option 8</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.LPRServer">
+ <summary>Option 9</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ImpressServer">
+ <summary>Option 10</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ResourceLocServer">
+ <summary>Option 11</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.HostName">
+ <summary>Option 12</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.BootFileSize">
+ <summary>Option 13</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MeritDump">
+ <summary>Option 14</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DomainName">
+ <summary>Option 15</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.SwapServer">
+ <summary>Option 16</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RootPath">
+ <summary>Option 17</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ExtensionsPath">
+ <summary>Option 18</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.IpForwarding">
+ <summary>Option 19</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NonLocalSourceRouting">
+ <summary>Option 20</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PolicyFilter">
+ <summary>Option 21</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MaximumDatagramReAssemblySize">
+ <summary>Option 22</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DefaultIPTimeToLive">
+ <summary>Option 23</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PathMTUAgingTimeout">
+ <summary>Option 24</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PathMTUPlateauTable">
+ <summary>Option 25</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.InterfaceMTU">
+ <summary>Option 26</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.AllSubnetsAreLocal">
+ <summary>Option 27</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.BroadcastAddress">
+ <summary>Option 28</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PerformMaskDiscovery">
+ <summary>Option 29</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MaskSupplier">
+ <summary>Option 30</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.PerformRouterDiscovery">
+ <summary>Option 31</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RouterSolicitationAddress">
+ <summary>Option 32</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.StaticRoute">
+ <summary>Option 33</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TrailerEncapsulation">
+ <summary>Option 34</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ARPCacheTimeout">
+ <summary>Option 35</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.EthernetEncapsulation">
+ <summary>Option 36</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TCPDefaultTTL">
+ <summary>Option 37</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TCPKeepaliveInterval">
+ <summary>Option 38</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TCPKeepaliveGarbage">
+ <summary>Option 39</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkInformationServiceDomain">
+ <summary>Option 40</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkInformationServers">
+ <summary>Option 41</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkTimeProtocolServers">
+ <summary>Option 42</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.VendorSpecificInformation">
+ <summary>Option 43</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetBIOSoverTCPIPNameServer">
+ <summary>Option 44</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetBIOSoverTCPIPDatagramDistributionServer">
+ <summary>Option 45</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetBIOSoverTCPIPNodeType">
+ <summary>Option 46</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetBIOSoverTCPIPScope">
+ <summary>Option 47</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.XWindowSystemFontServer">
+ <summary>Option 48</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.XWindowSystemDisplayManager">
+ <summary>Option 49</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RequestedIPAddress">
+ <summary>Option 50</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.IPAddressLeaseTime">
+ <summary>Option 51</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.OptionOverload">
+ <summary>Option 52</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DHCPMessageTYPE">
+ <summary>Option 53</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ServerIdentifier">
+ <summary>Option 54</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ParameterRequestList">
+ <summary>Option 55</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.Message">
+ <summary>Option 56</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MaximumDHCPMessageSize">
+ <summary>Option 57</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RenewalTimeValue_T1">
+ <summary>Option 58</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RebindingTimeValue_T2">
+ <summary>Option 59</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.Vendorclassidentifier">
+ <summary>Option 60</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.ClientIdentifier">
+ <summary>Option 61</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetWateIPDomainName">
+ <summary>Option 62</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetWateIPInformation">
+ <summary>Option 63</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkInformationServicePlusDomain">
+ <summary>Option 64</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NetworkInformationServicePlusServers">
+ <summary>Option 65</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.TFTPServerName">
+ <summary>Option 66</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.BootfileName">
+ <summary>Option 67</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.MobileIPHomeAgent">
+ <summary>Option 68</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.SMTPServer">
+ <summary>Option 69</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.POP3Server">
+ <summary>Option 70</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.NNTPServer">
+ <summary>Option 71</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DefaultWWWServer">
+ <summary>Option 72</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DefaultFingerServer">
+ <summary>Option 73</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.DefaultIRCServer">
+ <summary>Option 74</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.StreetTalkServer">
+ <summary>Option 75</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.STDAServer">
+ <summary>Option 76</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.RelayInfo">
+ <summary>Option 82</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.StaticRoutes">
+ <summary>Option 121</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.StaticRoutesWin">
+ <summary>Option 249</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPOption.END_Option">
+ <summary>Option 255 (END option)</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.DHCPReplyOptions">
+ <summary>Reply options</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.SubnetMask">
+ <summary>IP address</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.RenewalTimeValue_T1">
+ <summary>Renewal time (seconds)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.RebindingTimeValue_T2">
+ <summary>Rebinding time (seconds)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.DomainName">
+ <summary>Domain name</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.ServerIdentifier">
+ <summary>IP address of DHCP server</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.RouterIP">
+ <summary>Router (gateway) IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.DomainNameServers">
+ <summary>Domain name servers (DNS)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.LogServerIP">
+ <summary>Log server IP</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.StaticRoutes">
+ <summary>Static routes</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.DHCPReplyOptions.OtherRequestedOptions">
+ <summary>Other options which will be sent on request</summary>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.NetworkRoute">
+ <summary>Network route</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.NetworkRoute.Network">
+ <summary>IP address of destination network</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.NetworkRoute.NetMaskLength">
+ <summary>Subnet mask length</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.NetworkRoute.Gateway">
+ <summary>Gateway</summary>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.NetworkRoute.#ctor(System.Net.IPAddress,System.Byte,System.Net.IPAddress)">
+ <summary>Creates network route</summary>
+ <param name="network">IP address to bind</param>
+ <param name="netMaskLength">Subnet mask length</param>
+ <param name="gateway">Gateway</param>
+ </member>
+ <member name="M:Cluster.SharpDHCPServer.NetworkRoute.#ctor(System.Net.IPAddress,System.Net.IPAddress,System.Net.IPAddress)">
+ <summary>Creates network route</summary>
+ <param name="network">IP address to bind</param>
+ <param name="netMask">Subnet mask</param>
+ <param name="gateway">Gateway</param>
+ </member>
+ <member name="T:Cluster.SharpDHCPServer.RelayInfo">
+ <summary>DHCP relay information (option 82)</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.RelayInfo.AgentCircuitID">
+ <summary>Agent circuit ID</summary>
+ </member>
+ <member name="F:Cluster.SharpDHCPServer.RelayInfo.AgentRemoteID">
+ <summary>Agent remote ID</summary>
+ </member>
+ </members>
+</doc>
diff --git a/SharpDHCPServer_Sample/bin/Release/SharpDHCPServer_Sample.exe b/SharpDHCPServer_Sample/bin/Release/SharpDHCPServer_Sample.exe
new file mode 100644
index 0000000..29e18f8
--- /dev/null
+++ b/SharpDHCPServer_Sample/bin/Release/SharpDHCPServer_Sample.exe
Binary files differ
diff --git a/SharpDHCPServer_Sample/bin/Release/SharpDHCPServer_Sample.pdb b/SharpDHCPServer_Sample/bin/Release/SharpDHCPServer_Sample.pdb
new file mode 100644
index 0000000..233abfb
--- /dev/null
+++ b/SharpDHCPServer_Sample/bin/Release/SharpDHCPServer_Sample.pdb
Binary files differ
diff --git a/SharpDHCPServer_Sample/bin/Release/SharpDHCPServer_Sample.vshost.exe b/SharpDHCPServer_Sample/bin/Release/SharpDHCPServer_Sample.vshost.exe
new file mode 100644
index 0000000..58da521
--- /dev/null
+++ b/SharpDHCPServer_Sample/bin/Release/SharpDHCPServer_Sample.vshost.exe
Binary files differ
diff --git a/SharpDHCPServer_Sample/bin/Release/SharpDHCPServer_Sample.vshost.exe.manifest b/SharpDHCPServer_Sample/bin/Release/SharpDHCPServer_Sample.vshost.exe.manifest
new file mode 100644
index 0000000..061c9ca
--- /dev/null
+++ b/SharpDHCPServer_Sample/bin/Release/SharpDHCPServer_Sample.vshost.exe.manifest
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+ <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
+ <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
+ <security>
+ <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
+ <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
+ </requestedPrivileges>
+ </security>
+ </trustInfo>
+</assembly>
diff --git a/SharpDHCPServer_Sample/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/SharpDHCPServer_Sample/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 0000000..8131b39
--- /dev/null
+++ b/SharpDHCPServer_Sample/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache
Binary files differ
diff --git a/SharpDHCPServer_Sample/obj/x86/Debug/ResolveAssemblyReference.cache b/SharpDHCPServer_Sample/obj/x86/Debug/ResolveAssemblyReference.cache
new file mode 100644
index 0000000..05511d8
--- /dev/null
+++ b/SharpDHCPServer_Sample/obj/x86/Debug/ResolveAssemblyReference.cache
Binary files differ
diff --git a/SharpDHCPServer_Sample/obj/x86/Debug/SharpDHCPServer_Sample.csproj.FileListAbsolute.txt b/SharpDHCPServer_Sample/obj/x86/Debug/SharpDHCPServer_Sample.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..525d399
--- /dev/null
+++ b/SharpDHCPServer_Sample/obj/x86/Debug/SharpDHCPServer_Sample.csproj.FileListAbsolute.txt
@@ -0,0 +1,15 @@
+D:\Projects\SmallDHCPServer_CodeProject\SharpDHCPServer_Sample\bin\Debug\SharpDHCPServer_Sample.exe
+D:\Projects\SmallDHCPServer_CodeProject\SharpDHCPServer_Sample\bin\Debug\SharpDHCPServer_Sample.pdb
+D:\Projects\SmallDHCPServer_CodeProject\SharpDHCPServer_Sample\obj\x86\Debug\ResolveAssemblyReference.cache
+D:\Projects\SmallDHCPServer_CodeProject\SharpDHCPServer_Sample\obj\x86\Debug\SharpDHCPServer_Sample.exe
+D:\Projects\SmallDHCPServer_CodeProject\SharpDHCPServer_Sample\obj\x86\Debug\SharpDHCPServer_Sample.pdb
+D:\Projects\SmallDHCPServer_CodeProject\SharpDHCPServer_Sample\bin\Debug\SharpDHCPServerLib.dll
+D:\Projects\SmallDHCPServer_CodeProject\SharpDHCPServer_Sample\bin\Debug\SharpDHCPServerLib.pdb
+D:\Projects\SharpDHCPServer\SharpDHCPServer_Sample\bin\Debug\SharpDHCPServer_Sample.exe
+D:\Projects\SharpDHCPServer\SharpDHCPServer_Sample\bin\Debug\SharpDHCPServer_Sample.pdb
+D:\Projects\SharpDHCPServer\SharpDHCPServer_Sample\bin\Debug\SharpDHCPServerLib.dll
+D:\Projects\SharpDHCPServer\SharpDHCPServer_Sample\bin\Debug\SharpDHCPServerLib.pdb
+D:\Projects\SharpDHCPServer\SharpDHCPServer_Sample\obj\x86\Debug\ResolveAssemblyReference.cache
+D:\Projects\SharpDHCPServer\SharpDHCPServer_Sample\obj\x86\Debug\SharpDHCPServer_Sample.exe
+D:\Projects\SharpDHCPServer\SharpDHCPServer_Sample\obj\x86\Debug\SharpDHCPServer_Sample.pdb
+D:\Projects\SharpDHCPServer\SharpDHCPServer_Sample\bin\Debug\SharpDHCPServerLib.xml
diff --git a/SharpDHCPServer_Sample/obj/x86/Debug/SharpDHCPServer_Sample.exe b/SharpDHCPServer_Sample/obj/x86/Debug/SharpDHCPServer_Sample.exe
new file mode 100644
index 0000000..006a484
--- /dev/null
+++ b/SharpDHCPServer_Sample/obj/x86/Debug/SharpDHCPServer_Sample.exe
Binary files differ
diff --git a/SharpDHCPServer_Sample/obj/x86/Debug/SharpDHCPServer_Sample.pdb b/SharpDHCPServer_Sample/obj/x86/Debug/SharpDHCPServer_Sample.pdb
new file mode 100644
index 0000000..b16fc76
--- /dev/null
+++ b/SharpDHCPServer_Sample/obj/x86/Debug/SharpDHCPServer_Sample.pdb
Binary files differ
diff --git a/SharpDHCPServer_Sample/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache b/SharpDHCPServer_Sample/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 0000000..85d8b22
--- /dev/null
+++ b/SharpDHCPServer_Sample/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
Binary files differ
diff --git a/SharpDHCPServer_Sample/obj/x86/Release/ResolveAssemblyReference.cache b/SharpDHCPServer_Sample/obj/x86/Release/ResolveAssemblyReference.cache
new file mode 100644
index 0000000..fae1c34
--- /dev/null
+++ b/SharpDHCPServer_Sample/obj/x86/Release/ResolveAssemblyReference.cache
Binary files differ
diff --git a/SharpDHCPServer_Sample/obj/x86/Release/SharpDHCPServer_Sample.csproj.FileListAbsolute.txt b/SharpDHCPServer_Sample/obj/x86/Release/SharpDHCPServer_Sample.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..1edb7d6
--- /dev/null
+++ b/SharpDHCPServer_Sample/obj/x86/Release/SharpDHCPServer_Sample.csproj.FileListAbsolute.txt
@@ -0,0 +1,8 @@
+D:\Projects\SharpDHCPServer\SharpDHCPServer_Sample\bin\Release\SharpDHCPServer_Sample.exe
+D:\Projects\SharpDHCPServer\SharpDHCPServer_Sample\bin\Release\SharpDHCPServer_Sample.pdb
+D:\Projects\SharpDHCPServer\SharpDHCPServer_Sample\bin\Release\SharpDHCPServerLib.dll
+D:\Projects\SharpDHCPServer\SharpDHCPServer_Sample\bin\Release\SharpDHCPServerLib.pdb
+D:\Projects\SharpDHCPServer\SharpDHCPServer_Sample\obj\x86\Release\ResolveAssemblyReference.cache
+D:\Projects\SharpDHCPServer\SharpDHCPServer_Sample\obj\x86\Release\SharpDHCPServer_Sample.exe
+D:\Projects\SharpDHCPServer\SharpDHCPServer_Sample\obj\x86\Release\SharpDHCPServer_Sample.pdb
+D:\Projects\SharpDHCPServer\SharpDHCPServer_Sample\bin\Release\SharpDHCPServerLib.xml
diff --git a/SharpDHCPServer_Sample/obj/x86/Release/SharpDHCPServer_Sample.exe b/SharpDHCPServer_Sample/obj/x86/Release/SharpDHCPServer_Sample.exe
new file mode 100644
index 0000000..29e18f8
--- /dev/null
+++ b/SharpDHCPServer_Sample/obj/x86/Release/SharpDHCPServer_Sample.exe
Binary files differ
diff --git a/SharpDHCPServer_Sample/obj/x86/Release/SharpDHCPServer_Sample.pdb b/SharpDHCPServer_Sample/obj/x86/Release/SharpDHCPServer_Sample.pdb
new file mode 100644
index 0000000..233abfb
--- /dev/null
+++ b/SharpDHCPServer_Sample/obj/x86/Release/SharpDHCPServer_Sample.pdb
Binary files differ