From: <sul...@us...> - 2008-08-03 06:59:55
|
Revision: 196 http://gridsim.svn.sourceforge.net/gridsim/?rev=196&view=rev Author: sulistio Date: 2008-08-03 07:00:02 +0000 (Sun, 03 Aug 2008) Log Message: ----------- add new methods to incorporate creating new flow routers and links. Modified Paths: -------------- trunk/source/gridsim/util/NetworkReader.java Modified: trunk/source/gridsim/util/NetworkReader.java =================================================================== --- trunk/source/gridsim/util/NetworkReader.java 2008-08-03 06:00:43 UTC (rev 195) +++ trunk/source/gridsim/util/NetworkReader.java 2008-08-03 07:00:02 UTC (rev 196) @@ -7,6 +7,7 @@ package gridsim.util; +import gridsim.net.flow.*; import gridsim.net.*; import java.util.*; import java.io.*; @@ -32,7 +33,7 @@ * ... // linking other routers<br> * </tt> * <br> - * NOTE: <tt>[]</tt> means an optional parameter for logging activities + * NOTE: <tt>[]</tt> means an optional parameter for logging activities * inside a router. * If it is not given, then by default the value is false. * @@ -41,6 +42,11 @@ */ public class NetworkReader { + private static final int RATE_ROUTER = 1; + private static final int RIP_ROUTER = 2; + private static final int FLOOD_ROUTER = 3; + private static final int FLOW_ROUTER = 4; + /** * Creates a network topology that uses a FIFO packet scheduler * @param filename the name of the file containing the description of @@ -188,7 +194,7 @@ * @return a list of Router objects or <tt>null</tt> if an error occurs */ private static LinkedList createRouter(BufferedReader buf, - boolean rate) throws Exception + int routerType) throws Exception { String line = null; StringTokenizer str = null; @@ -249,12 +255,19 @@ } // create a specific Router object - if (rate == true) { + if (routerType == RATE_ROUTER) { router = new RateControlledRouter(name, log); } - else { + else if (routerType == RIP_ROUTER) { router = new RIPRouter(name, log); } + else if (routerType == FLOOD_ROUTER) { + router = new FloodingRouter(name, log); + } + else if (routerType == FLOW_ROUTER) { + router = new FlowRouter(name, log); + } + routerList.add(router); // add the router into the list } @@ -274,7 +287,7 @@ } // create the Router objects first - LinkedList routerList = createRouter(buf, false); + LinkedList routerList = createRouter(buf, NetworkReader.RIP_ROUTER); int GB = 1000000000; // 1 GB in bits String line; @@ -345,7 +358,7 @@ } // create the Router objects first - LinkedList routerList = createRouter(buf, false); + LinkedList routerList = createRouter(buf, NetworkReader.RIP_ROUTER); int GB = 1000000000; // 1 GB in bits String line; @@ -417,7 +430,7 @@ } // create the Router objects first - LinkedList routerList = createRouter(buf, true); + LinkedList routerList = createRouter(buf, NetworkReader.RATE_ROUTER); int GB = 1000000000; // 1 GB in bits String line; @@ -482,5 +495,101 @@ return routerList; } + /** + * Creates a network topology that uses the flow network functionality. + * @param filename the name of the file containing the description of + * the network topology + * @return the list of Routers of the network or <tt>null</tt> if an error + * occurs + * @see gridsim.net.flow.FlowRouter + * @see gridsim.net.flow.FlowLink + */ + public static LinkedList createFlow(String filename) + { + LinkedList routerList = null; + try + { + FileReader fileReader = new FileReader(filename); + BufferedReader buffer = new BufferedReader(fileReader); + routerList = createNetworkFlow(buffer); + } + catch (Exception exp) + { + System.out.println("NetworkReader: File not found."); + routerList = null; + } + + return routerList; + } + + /** + * Creates a network topology from a given buffered reader + * @param buf a Buffered Reader object + * @return a list of Router objects or <tt>null</tt> if an error occurs + */ + private static LinkedList createNetworkFlow(BufferedReader buf) + throws Exception + { + if (buf == null) { + return null; + } + + // create the Router objects first + LinkedList routerList = createRouter(buf, NetworkReader.FLOW_ROUTER); + + int GB = 1000000000; // 1 GB in bits + String line; + String name1, name2; + StringTokenizer str = null; + Router r1, r2; + Link tempLink = null; + + // creating the linking between two routers + while ((line = buf.readLine()) != null) + { + str = new StringTokenizer(line); + if (str.hasMoreTokens() == false) { // ignore newlines + continue; + } + + + // parse the name of the connected routers + name1 = str.nextToken(); // router name + if (name1.startsWith("#") == true) { // ignore comments + continue; + } + + name2 = str.nextToken(); // router name + r1 = getRouter(name1, routerList); + r2 = getRouter(name2, routerList); + + if (r1 == null || r2 == null) + { + System.out.println("NetworkReader.createNetworkFlow(): " + + "Warning - unable to connect both "+name1+" and "+name2); + continue; + } + + // get baud rate of the link + String baud = str.nextToken(); // bandwidth (Gbps) + String propDelay = str.nextToken(); // latency (in millisec) + String mtu = str.nextToken(); // link MTU (in byte) + + tempLink = new FlowLink(r1.get_name() + "_" + r2.get_name(), + Double.parseDouble(baud) * GB, + Double.parseDouble(propDelay), Integer.parseInt(mtu)); + + FIFOScheduler r1Sched = new FIFOScheduler(r1.get_name() + + "_to_" + r2.get_name()); + + FIFOScheduler r2Sched = new FIFOScheduler(r2.get_name() + + "_to_" + r1.get_name()); + + r1.attachRouter(r2, tempLink, r1Sched, r2Sched); + } + + return routerList; + } + } // end class This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |