diff --git a/Tests/Kernels/NetworkTest/Kernel.cs b/Tests/Kernels/NetworkTest/Kernel.cs
index e9d17cd96..55133de8b 100644
--- a/Tests/Kernels/NetworkTest/Kernel.cs
+++ b/Tests/Kernels/NetworkTest/Kernel.cs
@@ -1,4 +1,5 @@
using Cosmos.HAL;
+using Cosmos.System.Network;
using Cosmos.System.Network.ARP;
using Cosmos.System.Network.Config;
using Cosmos.System.Network.IPv4;
@@ -21,9 +22,31 @@ namespace NetworkTest
protected override void Run()
{
- /**
- * Since DNS and DHCP are inherited and will call parent classes at creation. UDP, IP and EthernetFrame don't need tests
- **/
+ /** Ethernet Packet Parsing Test **/
+ byte[] ethernetPacketData = new byte[]
+ {
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0C, 0x29, 0xD5, 0xDB, 0x9D, 0x08, 0x00
+ };
+ EthernetPacket ethernetPacket = new EthernetPacket(ethernetPacketData);
+ Equals(ethernetPacketData, ethernetPacket.RawData);
+
+ /** IP Packet Parsing Test **/
+ byte[] ipPacketData = new byte[]
+ {
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0C, 0x29, 0xD5, 0xDB, 0x9D, 0x08, 0x00, 0x45, 0x00, 0x01, 0x16, 0x00, 0x00, 0x00, 0x00, 0x80, 0x11, 0x39,
+ 0xD8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF
+ };
+ IPPacket ipPacket = new IPPacket(ipPacketData);
+ Equals(ipPacketData, ipPacket.RawData);
+
+ /** UDP Packet Parsing Test **/
+ byte[] udpPacketData = new byte[]
+ {
+ 0x98, 0xFA, 0x9B, 0xD4, 0xEB, 0x29, 0xD8, 0xCE, 0x3A, 0x89, 0x3E, 0xD9, 0x08, 0x00, 0x45, 0x00, 0x00, 0x22, 0x0C, 0x74, 0x40, 0x00, 0x40, 0x11, 0xAA,
+ 0xBE, 0xC0, 0xA8, 0x01, 0x02, 0xC0, 0xA8, 0x01, 0x46, 0x10, 0x92, 0x10, 0x92, 0x00, 0x0E, 0x37, 0x22, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x21
+ };
+ UDPPacket udpPacket = new UDPPacket(udpPacketData);
+ Equals(udpPacketData, udpPacket.RawData);
/** DNS Packet Parsing Test **/
byte[] dnsPacketData = new byte[]
@@ -35,15 +58,6 @@ namespace NetworkTest
DNSPacket dnsPacket = new DNSPacket(dnsPacketData);
Equals(dnsPacketData, dnsPacket.RawData);
- /** UDP Packet Parsing Test **/
- byte[] udpPacketData = new byte[]
- {
- 0x98, 0xFA, 0x9B, 0xD4, 0xEB, 0x29, 0xD8, 0xCE, 0x3A, 0x89, 0x3E, 0xD9, 0x08, 0x00, 0x45, 0x00, 0x00, 0x22, 0x0C, 0x74, 0x40, 0x00, 0x40, 0x11, 0xAA,
- 0xBE, 0xC0, 0xA8, 0x01, 0x02, 0xC0, 0xA8, 0x01, 0x46, 0x10, 0x92, 0x10, 0x92, 0x00, 0x0E, 0x37, 0x22, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x21
- };
- UDPPacket udpPacket = new UDPPacket(udpPacketData);
- Equals(udpPacketData, udpPacket.RawData);
-
/** DHCP Packet Parsing Test **/
byte[] dhcpPacketData = new byte[]
{
diff --git a/source/Cosmos.System2/Network/EthernetPacket.cs b/source/Cosmos.System2/Network/EthernetPacket.cs
index 5016ea4f2..876df7c35 100644
--- a/source/Cosmos.System2/Network/EthernetPacket.cs
+++ b/source/Cosmos.System2/Network/EthernetPacket.cs
@@ -36,7 +36,7 @@ namespace Cosmos.System.Network
/// Create new instance of the class, with specified raw data.
///
/// Raw data.
- protected EthernetPacket(byte[] rawData)
+ public EthernetPacket(byte[] rawData)
{
RawData = rawData;
InitFields();
diff --git a/source/Cosmos.System2/Network/IPV4/UDP/DHCP/DHCPClient.cs b/source/Cosmos.System2/Network/IPV4/UDP/DHCP/DHCPClient.cs
index 29bc341cb..bb5349981 100644
--- a/source/Cosmos.System2/Network/IPV4/UDP/DHCP/DHCPClient.cs
+++ b/source/Cosmos.System2/Network/IPV4/UDP/DHCP/DHCPClient.cs
@@ -16,18 +16,8 @@ namespace Cosmos.System.Network.IPv4.UDP.DHCP
///
/// DHCPClient class. Used to manage the DHCP connection to a server.
///
- public class DHCPClient
+ public class DHCPClient : UdpClient
{
- ///
- /// Current DHCPClient
- ///
- public static DHCPClient currentClient;
-
- //
- /// RX buffer queue.
- ///
- protected Queue rxBuffer;
-
//
/// Is DHCP ascked check variable
///
@@ -43,34 +33,12 @@ namespace Cosmos.System.Network.IPv4.UDP.DHCP
}
///
- /// Create new instance of the class.
+ /// Create new instance of the class.
///
/// Thrown on fatal error (contact support).
- /// Thrown if UdpClient with localPort 0 exists.
- public DHCPClient()
+ /// Thrown if UdpClient with localPort 53 exists.
+ public DHCPClient() : base(68)
{
- rxBuffer = new Queue(8);
- currentClient = this;
- }
-
- ///
- /// Close connection.
- ///
- /// Thrown on fatal error (contact support).
- public void Close()
- {
- currentClient = null;
- }
-
- ///
- /// Receive data from packet.
- ///
- /// Packet to receive.
- /// Thrown on fatal error (contact support).
- /// Thrown on IO error.
- internal void ReceiveData(DHCPPacket packet)
- {
- rxBuffer.Enqueue(packet);
}
///
@@ -90,14 +58,14 @@ namespace Cosmos.System.Network.IPv4.UDP.DHCP
{
return -1;
}
- if (_deltaT != Cosmos.HAL.RTC.Second)
+ if (_deltaT != RTC.Second)
{
second++;
- _deltaT = Cosmos.HAL.RTC.Second;
+ _deltaT = RTC.Second;
}
}
- var packet = rxBuffer.Dequeue();
+ var packet = new DHCPPacket(rxBuffer.Dequeue().RawData);
if (packet.MessageType == 2) //Boot Reply
{
@@ -107,7 +75,7 @@ namespace Cosmos.System.Network.IPv4.UDP.DHCP
}
else if (packet.RawData[284] == 0x05 || packet.RawData[284] == 0x06) //ACK or NAK DHCP packet received
{
- DHCPAck ack = new DHCPAck(packet.RawData);
+ var ack = new DHCPAck(packet.RawData);
if (asked)
{
Apply(ack, true);
diff --git a/source/Cosmos.System2/Network/IPV4/UDP/DHCP/DHCPPacket.cs b/source/Cosmos.System2/Network/IPV4/UDP/DHCP/DHCPPacket.cs
index e559742f5..12550fb6a 100644
--- a/source/Cosmos.System2/Network/IPV4/UDP/DHCP/DHCPPacket.cs
+++ b/source/Cosmos.System2/Network/IPV4/UDP/DHCP/DHCPPacket.cs
@@ -51,9 +51,9 @@ namespace Cosmos.System.Network.IPv4.UDP.DHCP
/// Thrown on IO error.
public static void DHCPHandler(byte[] packetData)
{
- DHCPPacket dhcp_packet = new DHCPPacket(packetData);
+ var dhcp_packet = new DHCPPacket(packetData);
- DHCPClient receiver = DHCPClient.currentClient;
+ var receiver = UdpClient.GetClient(dhcp_packet.DestinationPort);
if (receiver != null)
{
receiver.ReceiveData(dhcp_packet);