Cosmos/source/FrodeTest/Test/IPv4Test.cs
sschocke_cp 7af62315ec RTL8139 Driver Changes
Update Global to call driver initialization routines for different drivers. Devices are enumerated during startup regardless of what hardware you are using.
Update FrodeTest workspace to run via new NetworkDevice interface
Update Builder.cs so that QEMU gets called with only either "-net tap" or "-net user", as these two options conflict
Internalized most of the TCP/IP stack leaving only the User needed classes available to use.
Commented most of TCP/IP stack public methods, and cleaned out code a little bit.
2009-03-31 20:33:22 +00:00

91 lines
3.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using Cosmos.Hardware.Network.TCPIPModel.NetworkLayer.IPv4;
using Cosmos.Hardware.Network.TCPIPModel.PhysicalLayer.Ethernet2;
using Cosmos.Hardware.Network.Devices.RTL8139;
using Cosmos.Kernel;
using Cosmos.Hardware.Network;
namespace FrodeTest.Test
{
class IPv4Test
{
public static void RunTest()
{
Console.WriteLine("-- Testing IPv4 --");
//Create a IPv4 Packet
IPv4Packet ipv4Packet = new IPv4Packet();
//ipv4Packet.DestinationAddress = new IPv4Address(10, 0, 2, 2); //Virtual DHCP server in Qemu
//ipv4Packet.SourceAddress = new IPv4Address(10, 0, 2, 15); //Default IP address assigned in Qemu
ipv4Packet.DestinationAddress = new IPv4Address(172, 28, 6, 1);
ipv4Packet.SourceAddress = new IPv4Address(172,28,6,6);
ipv4Packet.TypeOfService = 0;
ipv4Packet.Identification = 0;
ipv4Packet.FragmentFlags = IPv4Packet.Fragmentation.DoNotFragment;
ipv4Packet.FragmentOffset = 0;
ipv4Packet.Protocol = IPv4Packet.Protocols.TCP;
List<byte> data = new List<byte>();
data.Add(0xFF);
data.Add(0xFE);
data.Add(0xFD);
data.Add(0xFC);
data.Add(0xFB);
data.Add(0xFA);
//data.Add(0x31); //the number 1
ipv4Packet.Data = data;
ipv4Packet.HeaderLength = ipv4Packet.CalculateHeaderLength();
ipv4Packet.TotalLength = ipv4Packet.CalculateTotalLength();
ipv4Packet.HeaderChecksum = ipv4Packet.CalculateHeaderChecksum();
//Write some debug info to screen
Console.WriteLine("IPv4 Packet data:");
foreach (byte b in ipv4Packet.RawBytes())
Console.Write(b.ToHex(2) + ":");
Console.WriteLine();
Console.Write(ipv4Packet.ToString());
//Send the Packet
var nics = Cosmos.Hardware.Network.NetworkDevice.NetworkDevices;
if (nics.Count == 0)
{
Console.WriteLine("No networkcard RTL8139 found");
return;
}
var nic = nics[0];
nic.Enable();
Ethernet2Frame frame = new Ethernet2Frame();
//byte[] mDest = new byte[6];
//mDest[0] = 1;
//mDest[1] = 0;
//mDest[2] = 94;
//mDest[3] = 127;
//mDest[4] = 255;
//mDest[5] = 250;
//MACAddress macDest = new MACAddress(mDest);
//frame.Destination = macDest;
frame.Destination = nic.MACAddress;
//byte[] mSrc = new byte[6];
//mSrc[0] = 0;
//mSrc[1] = 255;
//mSrc[2] = 99;
//mSrc[3] = 8;
//mSrc[4] = 252;
//mSrc[5] = 226;
//MACAddress macSrc = new MACAddress(mSrc);
//frame.Source = macSrc;
frame.Source = nic.MACAddress;
frame.Payload = ipv4Packet.RawBytes();
nic.QueueBytes(frame.RawBytes());
//nic.TransmitFrame(frame);
}
}
}