public static void trafficThroughSecureProviders(resultObject results) { //get what the simulation state would look like. GlobalState GS = SimulatorLibrary.initGlobalState(results.g, results.earlyAdopters, results.weightedNodes, short.Parse(results.k)); /** First, get a list of multihomed stubs as destinations **/ var stubs=results.g.getStubs(); List<UInt32> multihomedStubs = new List<UInt32>(); foreach(UInt32 stubNum in stubs) { AsNode stub = results.g.GetNode(stubNum); //if this stub is multihomed, init a destination. add it to the list. if (stub.GetNeighborsByType(RelationshipType.CustomerOf).ToArray().Length > 1) multihomedStubs.Add(stubNum); } Console.WriteLine(multihomedStubs.Count + " stubs out of " + stubs.Count + " are multihomed."); StreamWriter output = new StreamWriter("trafficThroughSecureProvider.txt"); /** Second, go through each iteration... **/ int iteration=0; foreach (bool[] S in results.state) { DateTime IterationStart = DateTime.Now; Int32 numDone = 0; foreach (UInt32 multihomedStubNum in multihomedStubs) { /** for this multhomed stub, see how much traffic * goes through secure providers **/ AsNode multihomedStub = results.g.GetNode(multihomedStubNum); Destination multihomedStubDest = new Destination(SimulatorLibrary.initMiniDestination(results.g, multihomedStubNum, false)); //computer the paths and utilities. multihomedStubDest.UpdatePaths(S); multihomedStubDest.ComputeU(GS.W); //get the providers. var Providers = multihomedStub.GetNeighborsByType(RelationshipType.CustomerOf); //count traffic through secure providers (and number of secure providers). Int64 TotalU = 0; Int64 SecureProviderU = 0; Int32 TotalProviders = Providers.Count(); Int32 SecureProviders = 0; foreach (var Provider in Providers) { if (S[Provider.NodeNum]) { SecureProviderU += multihomedStubDest.U[Provider.NodeNum]; SecureProviders++; } TotalU += multihomedStubDest.U[Provider.NodeNum]; } /*write out summary of how much traffic went through secure providers. */ output.WriteLine(iteration + " :: " + multihomedStubNum + " " + SecureProviders + " " + TotalProviders + " " + SecureProviderU + " " + TotalU); numDone++; if ((numDone % 100) == 0) Console.WriteLine("Done " + numDone + " at " + DateTime.Now); } //some benchmarking. Console.WriteLine(DateTime.Now + " done iteration " + iteration + " it started at " + IterationStart); iteration++; } output.Close(); }
private List<long[]> readUTable(resultObject Params, string ufile) { if (!File.Exists(Params.directory + Params.precursor + "." + ufile)) { Console.WriteLine("error could not find utilities file: " + Params.directory + "." + Params.precursor + "." + ufile); return null; } List<long[]> UTable = new List<long[]>(); StreamReader input = new StreamReader(Params.directory + Params.precursor + "." + ufile); while (!input.EndOfStream) UTable.Add(lineToUtilities(input.ReadLine())); input.Close(); return UTable; }
public static resultObject readParamsFile(string paramsFile) { StreamReader input = new StreamReader(paramsFile); resultObject toreturn = new resultObject(); while (!input.EndOfStream) { string line = input.ReadLine(); string[] pieces = line.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); if (line.IndexOf("setutility") >= 0) { //line pertaining to setting the utility computation if (pieces.Length > 1) toreturn.utility = pieces[1]; } else if (line.IndexOf("Early adopters:") >= 0) { toreturn.earlyAdopters = new List<uint>(); for (int i = 2; i < pieces.Length; i++) { UInt32 curr; if (uint.TryParse(pieces[i].Replace(",",""), out curr)) toreturn.earlyAdopters.Add(curr); } } else if (line.IndexOf("Filename") >= 0) { toreturn.graphFile = pieces[1].ToLower(); if (toreturn.graphFile == "cyclops_2009_ixp.txt" || toreturn.graphFile == "cyclops_20101209_ixp.txt" || toreturn.graphFile=="cyclopsixp20101209-big5-nochildren.txt") { toreturn.f = "0"; } else { //filename looks like: cyclopsixp2009-big5-0.1.txt if (toreturn.graphFile.IndexOf("ixpsmart") < 0) { pieces = toreturn.graphFile.Split("-".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); toreturn.f = pieces[2]; } else toreturn.f = "0.8"; } } else if (line.IndexOf("OutputDir") >= 0) { //contains the directory tag. use this to derive //the precursor for the standard filenames toreturn.precursor = pieces[1].Substring(0, 20); } else if (line.IndexOf("percent") >= 0) { //line setting the utility fraction toreturn.u = pieces[1]; } else if (line.IndexOf("K") >= 0) { //line setting the K value toreturn.k = pieces[1]; } else if (line.IndexOf("Weighted Nodes:") >= 0) { toreturn.weightedNodes = new List<uint>(); for (int i = 2; i < pieces.Length; i++) { UInt32 curr; if (uint.TryParse(pieces[i].Replace(",",""), out curr)) toreturn.weightedNodes.Add(curr); } } } input.Close(); return toreturn; }
private List<bool[]> postProcessState(List<bool[]> unprocessedState, resultObject Params) { List<UInt32> big5 = new List<uint>(); big5.Add(22822); big5.Add(8075); big5.Add(15169); big5.Add(20940); big5.Add(32934); List<bool[]> processedState = new List<bool[]>(); string graphFile = graphDirectory + Params.graphFile; if (!File.Exists(graphFile)) Console.WriteLine("I could not find the graph file: " + graphFile); NetworkGraph g = new NetworkGraph(); InputFileReader ifr = new InputFileReader(graphFile, g); ifr.ProcessFile(); List<UInt32> stubs = g.getStubs(); /*** Process and add the initial state of the simulation ***/ bool[] initialState = SimulatorLibrary.initGlobalState(g, Params.earlyAdopters).S; //walk over stubs and re-evaluate their state. foreach (UInt32 AS in stubs) { if (!big5.Contains(AS)) { AsNode node = g.GetNode(AS); initialState[AS] = false;//default to false for this stub. var parents = node.GetNeighborsByType(RelationshipType.CustomerOf).ToList<AsNode>(); // parents.AddRange(node.GetNeighborsByType(RelationshipType.PeerOf)); //don't turn on for peers foreach (AsNode parent in parents) { if (initialState[parent.NodeNum]) {//parent is true let it be true in the augmented state. initialState[AS] = true; break; } } } } foreach (var AS in Params.earlyAdopters) initialState[AS] = true;//make sure early adopters are "on" processedState.Add(initialState); for (int i = 0; i < unprocessedState.Count; i++) { bool[] currS = unprocessedState[i]; //walk over stubs and re-evaluate their state. foreach (UInt32 AS in stubs) { if (!big5.Contains(AS)) { AsNode node = g.GetNode(AS); currS[AS] = false;//default to false for this stub. var parents = node.GetNeighborsByType(RelationshipType.CustomerOf).ToList<AsNode>(); // parents.AddRange(node.GetNeighborsByType(RelationshipType.PeerOf)); //don't turn on for peers foreach (AsNode parent in parents) { if (currS[parent.NodeNum]) {//parent is true let it be true in the augmented state. currS[AS] = true; break; } } } } foreach (var AS in Params.earlyAdopters) currS[AS] = true;//make sure early adopters are "on" processedState.Add(currS); } return processedState; }