public HostConfiguration() { RoutingTable routingTableOnStack = new RoutingTable(); isRouter = false; routingTable = routingTableOnStack; nameServers = new ArrayList(); bindings = new IPAdapterBindingTable(routingTableOnStack); dhcpClients = new ArrayList(); adapters = new ArrayList(); SetHostName("singularity"); SetDomainName("microsoft.com"); #if false IAdapter loopbackAdapter = new LoopbackAdapter(); Core.Instance().RegisterAdapter(loopbackAdapter, "loopback", LoopbackAdapter.RingSize); this.bindings.Add(loopbackAdapter, new InterfaceIPConfiguration( IPv4.Loopback, new IPv4(0xff000000), IPv4.Loopback, 1)); #endif routingTable.AddRoute( new RouteEntry(IPv4Network.Loopback, IPv4.Loopback, IPv4.Loopback, RouteEntry.InterfaceMetric, RouteEntry.InterfaceRouteTag) ); }
static void Main() { StaticConfiguration.Initialize(); StaticConfiguration.Start(); LoopbackAdapter loopback = new LoopbackAdapter(); Console.WriteLine("Created Loopback Adapter {0}", loopback.HardwareAddress); Core.Instance().RegisterAdapter(loopback, 64); IPModule ip = Core.Instance().GetProtocolByName("IP") as IPModule; Console.WriteLine("Binding address to adapter"); IPv4 ifAddress = IPv4.Parse("192.168.0.100"); IPv4 ifNetmask = IPv4.Parse("255.255.255.0"); IPv4 gwAddress = IPv4.Parse("192.168.0.1"); ip.HostConfiguration.Bindings.Add( loopback, new InterfaceIPConfiguration(ifAddress, ifNetmask, gwAddress) ); const int nInstances = 8; const int maxPackets = 10000; ushort basePort = 10000; Receiver[] receivers = new Receiver[nInstances]; Sender[] senders = new Sender[nInstances]; for (int i = 0; i < nInstances; i++) { ushort rPort = (ushort)(basePort + 2 * i); ushort sPort = (ushort)(basePort + 2 * i + 1); receivers[i] = new Receiver(ifAddress, rPort, maxPackets); senders[i] = new Sender(ifAddress, sPort, ifAddress, rPort, maxPackets); } bool done = false; while (done == false) { Thread.CurrentThread.Join(TimeSpan.FromSeconds(1)); done = true; for (int i = 0; i < nInstances; i++) { if (receivers[i].ThreadState != ThreadState.Stopped || senders[i].ThreadState != ThreadState.Stopped) { done = false; break; } } } Console.WriteLine("Removing Adapter."); Core.Instance().DeregisterAdapter(loopback); StaticConfiguration.Stop(); }
static int ClientServerMain() { var time = 100.0; var config = new ClientServerConfig(); var loopbackAdapter = new LoopbackAdapter(); var privateKey = new byte[KeyBytes]; Console.Write($"starting server on port {shared.ServerPort}\n"); var server = new Server(DefaultAllocator, privateKey, new Address("127.0.0.1", shared.ServerPort), config, loopbackAdapter, time); server.Start(MaxClients); if (!server.IsRunning) { return(1); } Console.Write("started server\n"); ulong clientId = 0; random_bytes(ref clientId, 8); Console.Write($"client id is {clientId:x16}\n"); var client = new Client(DefaultAllocator, new Address("0.0.0.0"), config, loopbackAdapter, time); var serverAddress = new Address("127.0.0.1", shared.ServerPort); client.ConnectLoopback(0, clientId, MaxClients); server.ConnectLoopbackClient(0, clientId, null); loopbackAdapter.client = client; loopbackAdapter.server = server; const double deltaTime = 0.1; Console.CancelKeyPress += interrupt_handler; while (!quit) { server.SendPackets(); client.SendPackets(); server.ReceivePackets(); client.ReceivePackets(); time += deltaTime; client.AdvanceTime(time); if (client.IsDisconnected) { break; } time += deltaTime; server.AdvanceTime(time); sleep(deltaTime); } client.Disconnect(); server.Stop(); return(0); }