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);