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)
                );
        }
Example #2
0
        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();
        }
Example #3
0
    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);
    }