The Common Open Research Emulator (CORE) is an open-source network simulator developed by Boeing’s Research and Technology division and supported, in part, by the US Naval Research Laboratory. It is a fork of the IMUNES Network Emulator project and it was developed as a tool to support a mobile data networking research project. It can also be used to emulate fixed link networks, which is the use-case we are investigating.
CORE uses Linux Containers (LXC) as its virtualization method. It provides a GUI tool for creating networks and offers useful functions for inspecting the status of virtual network elements and for running applications and creating traffic in the network.
To test-drive the CORE Network Emulator, I will use CORE to create a simulated network of host computers, switches, and routers. I will run the simulation and show some of the interesting features available in CORE.
The VCORE virtual machine
The CORE project provides a virtual machine disk image called VCORE than can run in VirtualBox. This is a simple way to evaluate CORE. The file is very large – almost 600 megabytes – but it provides a fully-functional lubuntu system running CORE in a virtual machine on your PC. This allows us to quickly test CORE.
Download the VCORE appliance. Under the CORE Downloads section of the CORE web site, click on the vmware-image directory link. The click on the latest version of the VCORE ZIP archive which, in this case, is vcore–4.4.zip.
Unzip the vcore–4.4.zip archive to a directory on your computer. The unzipped files will be in a directory named vcore–4.4.
Start VirtualBox. Use the VirtualBox menu command, Machine → Add to select the vcore–4.4.vbox file. Virtualbox will load the virtual machine into its list of available virtual machines. In the VirtualBox virtual machine manager window, click on the virtual machine named vcore–4.4 and press the Start button. The VCORE virtual machine will start up.
The VCORE virtual machine is running a version of Ubuntu 12.04 with the LXDE desktop. The VirtualBox Guest Additions are already installed.
Click on the CORE icon on the desktop to start the CORE network simulator. This will open the CORE graphical user interface, which is a window with a graph paper-like canvas, a toolbar on the left side, and a menu bar on the top.
The CORE Network Emulator has two modes of operation: the Edit and Execute modes.
By default, the CORE GUI starts in Edit mode, which presents a blank canvas and a toolbar on the left side of the canvas. The user will draw a network scenario using the Edit mode tools and then run the simulation by pressing the green Start button.
Create a test network
We will create a small test network that should allow us to demonstrate a simple routing example. In this example, we will create a network of the routers that are connected together in a triangle. This should allow us to demonstrate routing and re-routing caused by changes in the network. Around the network we will create access networks consisting of PCs and servers connected to the routers.
First, we add the three routers to the network. When the simulation starts, the router is configured to run Quagga with OSPFv2 and OSPFv3, and has IP Forwarding turned on. To create routers in CORE, click on the Network-layer virtual nodes tool and, in the tool’s the callout menu, select the Router tool. Then, move the mouse pointer to the canvas and click once in each spot where you want a router to appear.
Then, we want to add some PCs to the network. When the simulation starts, the PCs will be simply configured with only a default route. To add PCs, click on the Network Layer virtual nodes tool again and, in the callout menu, select the PC tool. Then, click on the canvas in each spot where you want a PC to appear.
Next, we want to add some switches so we can try out link-layer networking in the simulation. When the simulation starts, the switches are brctl processes that run on the your host operating system. Click on the Link-layer node tool and select the Switch tool. Then, click on the canvas in each spot where you want a switch to appear.
Then, we want to some other virtual computers on the far side of the network that will represent servers in a data center so, just for display reasons, I chose to use the Host node type for these PCs. When the simulation starts, the Host node functions the same as PC node. The only difference is that the Host node also has SSH started by default. To create the Host nodes, click on the Network-layer nodes tool and select the Host tool. Click on the canvas in each spot where you want to create a Host node.
Configure displayed information
By default, CORE displays the following information on the canvas next to each network-layer node:
- IPv4 address of each link connected to the node
- IPv6 address of each link connected to the node
- Node name
You may wish to change the information displayed, either to clean up the network diagram or to add even more information. In my case, I wanted to display only the IPv4 address and the port name for each link connected to a network-layer node. To change the information displayed, click on the Menu Bar and select the menu commands:
View → Show
Then, check or uncheck the type of information you would like to see displayed. You can perform this action in both Edit mode and Execute mode.
Pressing the Start button changes CORE to Execute mode and the toolbar changes to show a new set of tools available in this mode. The virtual machines in the network scenario are all created and started.
Start the simulation by clicking on the Start button. The CORE network simulator will run commands that start up all the virtual machines in the simulation and connect them together in the manner specified on the canvas. The running network simulation we created is shown in the figure, below.
Inspect node status
CORE provides tools for inspecting the status of each virtual machine in the simulated network. You can start an xterm for each node and run shell commands to check the status of routing tables and to check the node configuration. But, CORE provides a simpler tool for checking some specific information on each node.
The Observer Widgets Tool provides a method for seeing information about any node simply by hovering your mouse pointer over that node in the canvas. Click on the tool in the Execution Toolbar and then select the widget you want to use. For example, you could select the IPv4 Routing Table widget or the Running processes widget. Then move your mouse pointer over the nodes in the canvas and see the results.
When you hover your mouse pointer over a node, the selected widget automatically executes a shell command on that node and returns the results to a pop-up window on the CORE canvas. It only works on Network-layer nodes. You can create new widgets and add them to the Observer Widgets Tool.
Run network test tools
CORE provides some tools that start processes on virtual machines without opening an xterm and entering shell commands. One of these tools is the Two-node tool.
The Two-node tool will run either traceroute or ping commands. Click on the Two-node tool in the toolbar, then select the source node and destination node. Click on the Run button. This will execute the traceroute command on the source node, using the IP address of the destination node.
The results of the traceroute command are displayed in the text window in the tool. The path through the network identified by the traceroute command is also highlighted on the CORE canvas. Click the Clear button to remove the highlight and clear the text window.
In this example, we see that the path that data will take when sent between the source and destination nodes follow the shortest path through the network. This is because all links in the network have equal costs, which is the default settings for the OSPF routing configuration on each router.
Generating and visualizing traffic flows
CORE provides a tool for generating traffic between nodes. The Traffic Flows dialogue box provides a range of configurable options. To create a new traffic flow, click on the menu command:
Tools → Traffic...
Then click on the New Traffic Flow button. The Edit Traffic Flow dialogue box will appear. Choose the source and destination nodes and select the traffic parameters. Click on the Start All Flows button in the Traffic Flows dialog box to start the traffic flow.
In this example, I created one traffic flow going in one direction between two nodes. I chose the same source and destination nodes I used in the previous traceroute example.
To visualize the traffic flow, you can configure CORE to display the Link Labels, using the Show command in the View menu. This will show the bandwidth of traffic passing on each link. To visualize the links where traffic is passing, configure the Throughput Widget to highlight a path that is passing more than a certain amount of traffic. For example, if you have configured a traffic flow of 100 kbps between two nodes, set the throughput widget to highligh paths that have a 50 kbps or higher traffic rate. To configure the thoughput widget, use the menu command:
Widgets → Throughput
In this example, the links running traffic will be highlighted as a wide red line, while other links carrying no traffic or low levels of traffic (from peroidic routing protocol updates) will show as thin red lines.
Network reroute caused by change in link cost
To test that the routing protocols are operating, let’s change the network routing by changing the cost of links between the routers. We will increase the cost of the link over which traffic is flowing to force the network to reroute the traffic flow over the other links, instead.
Right click on the router, n1. Select Shell Window → vtysh. Do the same on router n3. This opens two xterm windows, one on router n1 and the other on router n3, both running the Quagga VTY shell. The default OSPF configuration on each node set the cost of every link to 10. If we change the cost of the link between n1 and n3 to 30, we should see OSPF converge on a lower-cost path between toutes n1 and n3 by passing through router n2.
On router n1, execute the following configuration changes:
n1# configure terminal n1(config)# interface eth2 n1(config-if)# ospf cost 30
On router n3, execute the following configuration changes:
n3# configure terminal n3(config)# interface eth0 n3(config-if)# ospf cost 30
Now the cost of the direct link between router n1 and n3 is 30, while the cost of the path from routers n1 to n2 to n3 is 20. The OSPF routing protocol will reconverge and routers n1 and n3 will start passing traffic along the route that goes through router n2.
Change link configurations
The CORE Network Emulator also provides a tool to change link configurations. Double-click on a link to open the Link Configuraion dialogue box. You can change link parameters to limit maximum bandwidth on a link, set the link delay, introduce errors on the link, and change how the link is displayed on the canvas.
To see this work, you could open an xterm on one of the simulated nodes and ping another node on the network. Then, change the delay on one of the links between the two nodes and watch the ping times increase. You could also change the maximum bandwidth on the a link that is running traffic to a value smaller than the running traffic rate and watch the traffic on the link drop to the value you configured.
The CORE Network Emulator offers a lot of functionality. The user can save the network configuration to a file and open saved configuration files. Also, the simulation can be connected to a physical Ethernet port to be connected to other computers running CORE simulations or to live equipment. This is called distributed CORE.
There are many functions available under the Menu tools that can be explored. However, when trying out the other tools in the CORE Network Emulator, I started encountering problems.
I don’t want to be negative. CORE looks like a great tool. The basic functionality provided by the CORE Network Emulator for setting up and running virtual machines in a simulated network works well. But, CORE offers many menu options and tools that do not appear to work as expected. Here is a list of some of the issues I encountered while taking a first look at this tool.
- The VCORE virtual machine does not appear to have all the software installed that CORE requires. For example, the tool has a menu command to launch Wireshark to monitor traffic on a specified link but Wireshark is not available in the VCORE virtual machine so the command fails. Also, the DHCP server software is not installed. XORP is not installed.
- The Linux Containers virtualization system has some incompatibilies with launching software services in virtual machines. For example, after I installed the DHCP server software, I could not start it in an LXC virtual machine.
- Some functions do not operate as expected. For example: the switch nodes do not have spanning tree enabled so it you connect switches in a loop, the resulting packet storm will consume 100% of your CPU. Also, the bit-error rate option in the Link Configuration dialog box appears to have no affect.
- You cannot modify key elements during Execute mode. For example, you cannot add or delete switches, virtual machines, or links.
- Performance is poor. I saw odd results when running traceroute, such as many timeouts. The CORE documentation suggests that performance will be poor when running CORE in a virtual machine, so this may improve when CORE is installed on a native Linux host computer.
- Bi-directional traffic flows do not work. I set up two flows between two nodes: one in each direction. Traffic only passed one way.
- If you start a ping command using the Run Tool or the Two-node Tool, you cannot stop it. You need to manually kill the process on the virtual node.
In summary, the VCORE virtual machine does not provide all the functionality that one would expect the CORE Network Emulator to provide, based on the tools and menu commands shown in the user interface. Where the functionality does exist, I found numerous bugs and performance issues.
The CORE Network Emulator offers an attractive graphical user interface that facilitates setting up a network of virtual machines. The tool offers a lot of advanced functionality but not all of that functionality works as expected. While the tool looks great and has good potential, my first impression is that it currently suffers from quality problems that need to be resolved.
In a future post, I will try to install CORE and all its prerequisite software on a Linux host computer, either by installing available CORE packages or by installing from source code, and see if that resolves some of the problems I encountered while taking a first look at the CORE network emulator running in the VCORE virtual machine.