This repository keeps track of NOSIX simulator development
-
Compilation steps:
(a) Download all the files in this folder
(b) You need g++ to compile the files
(c) Execute gmake clean
(d) Execute gmake
(e) Confirm "simulator" executable is created
-
Execution of simulation:
(a) You can fine tune the component parameters & Set the simulation time: MAXSTEPS in NOSIXSimulationVer2.cpp (b) Recompile the file if you have done any custom changes
(c) Execute ./simulator >> output.txt
- Observe the result:
(a) more output.txt to view the result
-
Tested platform
Solaris 10 Ultra Sparc
-
Bugs
- event_queue.cpp: (state:Open)
-> Line120 prevNode == head
change to: currentNode == head-
Controller statistics: (state:Open)
If a small flow is evicted, only control channel rate is adjusted. The number of flows processed/bytes processed count will not reflect small flow count. We should send 1 packet_in (for large flow), 1 process_flow (for evicted small flow).
-
flowgenerator/switch forwarding rate limitation: (state: open)
Both flow generator and switch forwarding rate must be same. The max rate is 1Gbps. The flow gen and switch doesnt support more than 1Gbps. This need fix in both the components.
Important data structures:
-> Class flowGenerator: Depicts the flow generator component
-> Class sdnSwitch: Depcits sdn switch component
-> Class sdnController: Depicts sdn controller component
-> Class Queue: a generic FIFO queue to model communication queues between flowgenerator,switch and controller
-> Class EventQueue: A sorted queue based on event time to model event scheduler
-> structure Flow: Flow generated by flowgen is represented by this structure. The characteristics of flow such as flow type, flow arrival time, number of packets in the flow, flow preamble/postamble tags and flow number are captured.
-> structure flowGenProps: A structure to record properties of flow generator component such as flow generation frequency, % of small, medium and elephant flows
-> structure switchProps: Properties of underlying switch (hardware/software) such as forwarding rate, number of flow tables, number of entries per flow table, number of flow entries installed, switch model etc are represented in this structure.
-> structure controllerProps: Properties of sdn controller such as control channel rate is represented here.
-> structure Event: Represent the event added to event scheduler. Event time and type of event is represented in this structure.
-> array flowTracker: Indexed by the flow number. This is to keep track of number of packets transmitted for given flow. The flow tags such as begin, end, continuing of the flow is determined based on whether this is start of the flow, end or continuation of same flow.
-> HashMap hashSet: Switch TCAM table is modeled as hash table data structure with key:flownumber value:number of packets transmitted for this flow. As new flows arrives, the flow install command installs the flow in the hash table and when the flow ends the flow entry is removed from hash table using erase function.
-> enum flowTypes: Represent types of flow. A flow can be small, meidum or large/elephant flow
-> enum flowTags: Represent whether this flow is beginning, end, continuing or full flow
-> enum flowActions: Represent open flow PACKET_IN, PACKET_OUT, FLOW_INSTALL, PROCESS_PACKET actions