     
--     
--  Sigurd Meldal <meldal@anna.stanford.edu>     
--     
-- This is a flat network
--

module netskeleton() return root is
    
    internet : WAN is newWAN(WAN_net_no);

    LANs     : array (NetID, LAN) is (
				      default is next_local_area_network(self)
                                     );
    FWs      : array (NetID, firewall) is
                                     (
				      default is next_firewall(self)
                                     );

    WSs      : array (integer, COTSWorkstation) is
                                     (
				      default is next_COTS_workstation(self)
                                     );

    users    : array (integer, User) is
                                     (
				      default is next_user(self)
                                     );
  
    dummy    : var root;

--  make all the connections     

connect
--  connect Firewalls to the WAN     
    for i : integer in 1..num_enclaves
    generate
        FWs[i].wan_conn
	to
	internet.ws_conn;
	FWs[i].net_conn
	to 
	LANs[i].ws_conn;
    end;

-- connect workstations to their respective LANs
    for i : integer in 1..num_ws
    generate
	WSs[i].net_conn
	to 
	LANs[WSs[i].network_address.net_no].ws_conn;
    end;

-- connect workstations to their respective users
    for i : integer in 1..num_ws
    generate
	WSs[i].user_conn
	to 
	users[i].ws_conn;
    end;

initial

-- We have to traverse the arrays manually, to access (and thus start)
-- the array elements

    for i : integer in 1 .. num_enclaves
    do
	dummy := LANs[i];
    end;

    for i : integer in 1 .. num_enclaves
    do
	dummy := FWs[i];
    end;

    for i : integer in 1 .. num_ws
    do
	dummy := WSs[i];
    end;

    for i : integer in 1 .. num_ws
    do
	dummy := users[i];
    end;
end;
