├── README.md
├── modivsim-forwardRefactor
└── modivsim-forwardRefactor
│ ├── ModivSim.iml
│ ├── out
│ └── production
│ │ └── ModivSim
│ │ ├── ClientHandler.class
│ │ ├── FlowRouting$Flow.class
│ │ ├── FlowRouting$Topology.class
│ │ ├── FlowRouting.class
│ │ ├── FlowRoutingFolder
│ │ ├── flows.txt
│ │ └── forwardingTable.txt
│ │ ├── Message.class
│ │ ├── ModivSim$1.class
│ │ ├── ModivSim.class
│ │ ├── Node$1.class
│ │ ├── Node.class
│ │ ├── PathStruct.class
│ │ └── nodeFolder
│ │ ├── Node0.txt
│ │ ├── Node1.txt
│ │ ├── Node2.txt
│ │ ├── Node3.txt
│ │ └── Node4.txt
│ └── src
│ ├── ClientHandler.java
│ ├── FlowRouting.java
│ ├── FlowRoutingFolder
│ ├── flows.txt
│ └── forwardingTable.txt
│ ├── Message.java
│ ├── ModivSim.java
│ ├── Node.java
│ ├── PathStruct.java
│ └── nodeFolder
│ ├── Node0.txt
│ ├── Node1.txt
│ ├── Node2.txt
│ ├── Node3.txt
│ └── Node4.txt
└── topology.png
/README.md:
--------------------------------------------------------------------------------
1 | # Distance-Vector-Routing-and-Flow-Control-Simulator
2 |
3 | The project simulates a network traffic in a given topology where the distance vector algorithm is used for path computations and routing. The topology of the network is given and cannot be changed by the user. User can change the path costs between each router, and specify any number of flows from any router to the other. Package size also can be changed. After the user specifies, the program can run the network traffic.
4 |
5 | The program basically consists of two major parts:
6 | - Distance Vector Computation
7 | - Forwarding and Routing Algorithm
8 |
9 | *Distance Vector Computation:*
10 | In this part, the user enters the path costs, and the distance vectors are computed by the program, and exported to a text file.
11 |
12 | *Flow Routing Algorithm:*
13 | In this part, the program takes the output of first part, the distance vectors, as an input to construct the topology. The user enters each packet flow to be executed, i.e., specifies the packages to be transmitted from which router to which router with the sizes of packages. Then, the program simulates the traffic at each steps of each packages including visited routers, queues, delays etc.
14 |
15 | Used skills:
16 | * Socket programming in router communications
17 | * Multi-Threading
18 | * De-centralized programming
19 | * Object-oriented design
20 | * I/O Management, File Reading/Writing
21 | * Implementation of Distance Vector, Routing/Forwarding, and Flow Control Algorithms
22 |
23 |
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/ModivSim.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/ClientHandler.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DenizKrdy98/Distance-Vector-Routing-and-Flow-Control-Simulator/7004ba333549f960d80f85b84b63a901b643f06c/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/ClientHandler.class
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/FlowRouting$Flow.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DenizKrdy98/Distance-Vector-Routing-and-Flow-Control-Simulator/7004ba333549f960d80f85b84b63a901b643f06c/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/FlowRouting$Flow.class
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/FlowRouting$Topology.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DenizKrdy98/Distance-Vector-Routing-and-Flow-Control-Simulator/7004ba333549f960d80f85b84b63a901b643f06c/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/FlowRouting$Topology.class
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/FlowRouting.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DenizKrdy98/Distance-Vector-Routing-and-Flow-Control-Simulator/7004ba333549f960d80f85b84b63a901b643f06c/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/FlowRouting.class
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/FlowRoutingFolder/flows.txt:
--------------------------------------------------------------------------------
1 | 2,4,200
2 | 3,0,150
3 | 3,1,200
4 | 3,0,150
5 |
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/FlowRoutingFolder/forwardingTable.txt:
--------------------------------------------------------------------------------
1 | {1=1=2, 2=2=1, 3=2=1, 4=1=2}
2 | {0=0=2, 2=0=2, 3=4=0, 4=4=0}
3 | {0=0=1, 1=0=1, 3=3=0, 4=0=1}
4 | {0=2=4, 1=4=2, 2=2=4, 4=4=2}
5 | {0=1=3, 1=1=3, 2=1=3, 3=3=1}
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/Message.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DenizKrdy98/Distance-Vector-Routing-and-Flow-Control-Simulator/7004ba333549f960d80f85b84b63a901b643f06c/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/Message.class
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/ModivSim$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DenizKrdy98/Distance-Vector-Routing-and-Flow-Control-Simulator/7004ba333549f960d80f85b84b63a901b643f06c/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/ModivSim$1.class
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/ModivSim.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DenizKrdy98/Distance-Vector-Routing-and-Flow-Control-Simulator/7004ba333549f960d80f85b84b63a901b643f06c/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/ModivSim.class
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/Node$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DenizKrdy98/Distance-Vector-Routing-and-Flow-Control-Simulator/7004ba333549f960d80f85b84b63a901b643f06c/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/Node$1.class
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/Node.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DenizKrdy98/Distance-Vector-Routing-and-Flow-Control-Simulator/7004ba333549f960d80f85b84b63a901b643f06c/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/Node.class
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/PathStruct.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DenizKrdy98/Distance-Vector-Routing-and-Flow-Control-Simulator/7004ba333549f960d80f85b84b63a901b643f06c/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/PathStruct.class
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/nodeFolder/Node0.txt:
--------------------------------------------------------------------------------
1 | 0,(1,5,10),(2,3,15)
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/nodeFolder/Node1.txt:
--------------------------------------------------------------------------------
1 | 1,(0,5,10),(2,9,5),(4,1,15)
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/nodeFolder/Node2.txt:
--------------------------------------------------------------------------------
1 | 2,(0,3,15),(1,9,5),(3,3,10)
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/nodeFolder/Node3.txt:
--------------------------------------------------------------------------------
1 | 3,(2,3,10),(4,7,5)
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/out/production/ModivSim/nodeFolder/Node4.txt:
--------------------------------------------------------------------------------
1 | 4,(1,1,15),(3,7,5)
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/src/ClientHandler.java:
--------------------------------------------------------------------------------
1 | import java.io.*;
2 | import java.net.Socket;
3 |
4 | public class ClientHandler extends Thread {
5 | ObjectOutputStream out;
6 | ObjectInputStream in;
7 | final Socket s;
8 | int clientID;
9 | int serverID;
10 | Node clientNode;
11 |
12 | public ClientHandler(Socket s,ObjectInputStream in, ObjectOutputStream out, int clientID, int serverID, Node clientNode) throws IOException {
13 | this.s = s;
14 | this.clientID = clientID;
15 | this.serverID = serverID;
16 | this.clientNode = clientNode;
17 |
18 | this.out = out;
19 | this.in = in;
20 | }
21 |
22 | public void sendMessage(Message msg) throws IOException {
23 | out.writeObject(msg);
24 | out.flush();
25 | out.reset();
26 | }
27 |
28 | public void receiveMessage() throws IOException, ClassNotFoundException {
29 | Message m = (Message) in.readObject();
30 | if (m.changed){
31 | clientNode.receiveUpdate(m);
32 | }
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/modivsim-forwardRefactor/modivsim-forwardRefactor/src/FlowRouting.java:
--------------------------------------------------------------------------------
1 | import javafx.util.Pair;
2 |
3 | import java.io.BufferedReader;
4 | import java.io.FileReader;
5 | import java.io.IOException;
6 | import java.util.*;
7 |
8 |
9 | public class FlowRouting {
10 | private static ArrayList flows = new ArrayList<>();
11 | private static int numFlows;
12 | private static List