Common Open Research Emulator (CORE)


Following on from Evaluating Network Simulation Tools that outlined my requirements for a network simulation tool. I will have a look at the Common Open Research Emulator or CORE as I will refer to it from now on. This is not a review as such as I am assessing against my criteria. I am also new to network simulation so I do not have knowledge of other packages to compare it against. It should, however still be useful if you want to learn a bit more about the software and its capabilities. 

CORE is a tool for emulating networks which comes out of the US Navy Research Laboratory and was developed for them by Boeing Research and Technology division. It seems to be a fairly reliable pedigree to me and fits in with my own military background and research slant. The website for CORE can be found here.

The website is quite clear and includes some demonstrations of what can be done in a movie format. In looking at these I could see immediately that CORE would be interesting to me. It shows a MANET network being created very quickly and visually and also shows making a connection to real world devices. This is starting to tick my boxes.

CORE is designed for Linux or BSD and makes use of many open source tools to deliver it functionality. In many ways it is just a frontend to what you could do the hard way at the Linux command line. This makes the tool enormously flexible. If you run Linux then this will be really simple to begin to use.

The documentation seems good and the installation process is well covered. If you are familiar with Linux then installing is simple. It covers some of the prerequisites that will be needed for the tool. It does miss out on some that could be seen as optional but when you come to try a tool in the menus later you can be left scratching your head as it does not indicate it requires the installation of something. Once discovered then it is a quick step in your package manager to install it, but a little more indication would have been better. I will cover some that I have discovered later.


I installed it on Ubuntu 14.04 which is the latest version of that Linux based distribution. The instructions on the site only cover up to 13.04 which is understandable as you get a new version every 6 months of this particular distribution. I just followed the instructions anyway and had no difficulty. Packages are available for Ubuntu (possibly also work on Debian) and RHEL/Fedora. For any other version full source code is available and instructions on compiling.


CORE is divided into two elements. It has a daemon (service in Windows speak) which runs in the backend and the GUI client. Multiple backends can be run on different machines and they can be strung together. This could be useful if you run the simulation on a powerful server and want to sit at a normal PC to use the GUI. In my set up I will be running the backend on the same machine as the GUI to keep things simple. I have a reasonably powerful machine and nothing I have done so far has taxed the CPU.

CORE Architecture
CORE Architecture

First Run

ToolbarWhen installed you can give it a go. The interface is quite approachable assuming you have a reasonable idea of networking then it is easy to build a topology. You select the node you want (router, PC, switch, etc) and then click on the canvas to place as many as you want. Connections are made by selecting the link tool and dragging between. It auto assigns IPs so that is really all you need to build a simple network. You can then click on the play button and your network will come to life. It is at this point that my computer threw up lots of notifications and the simulated network did not form properly. The culprit was easy to determine, NetworkManager is a simple GUI tool that most desktop versions of Linux use to configure networks. It is plug and play and lets you configure wired and wireless networks. The trouble is as soon as CORE builds its network using the Linux kernel then NetworkManager sees them as new network cards and tries to configure them with DHCP which interferes with the simulations assigned IPs. The quick way around this is to disable NetworkManager before running the simulation. This can though cause you to lose your LAN and internet connection which can be a pain when you want to Google something. I got round this by setting NetworkManager not to try any auto connections. This means it ignores all the new interfaces but still maintains the ones already configured. 

A better long term solution would be to run the daemon in a virtual machine which is configured just for this purpose so it will not interfere with anything. If you install it on a proper Linux server build then it is likely NetworkManager will not be running and you will not get this issue in the first place.

Going Deeper

Having overcome this issue I could then check the network. By double clicking on a node you get a command line terminal which is isolated and only sees the simulated network. You can do the usual things from here like ping and traceroute. The GUI also has a tool which allows you to select two nodes and see a ping between. It is possible to get a chart of the bandwidth of any link and configure what detail you see when you hover the mouse over a node. Just remember that this is a simulation of a real network, you cannot expect to press play and then immediately ping from one end of the network to another. The network will take some time to form depending on its size. Routing information will have to be shared and the nodes themselves to initialise. It is possible to see the routing tables of each node so you can see when it has found all the nodes. Once the network has settled you can then begin your testing, unless network formation is an element you need to test.

Looking around the menus I found one called Traffic. This seemed an easy way to get some background load on the network. The interface seemed straight forward, you choose a source and a destination and then a traffic type and quantity. There are some pre-sets to choose from. However, it did not seem to do anything for me. I eventually found hidden in a log that it was trying to run a command line tool called mgen. I did not have this installed so it was failing, but without any helpful indication why. I then used the package manager to install it (should be available on any version of Linux). This had it working with no issue, this is one of the things not mentioned at installation ( I guess because it is optional).


Each node in the simulation is like a mini Linux machine. It can have services installed on it. For routing Quagga is used and this was installed when following the installation instructions. For many others you have to think of what you have installed. In the same way that if you wanted your server to offer DHCP or a web server then you need to install that software. This seems obvious in retrospect but when you have a button on the GUI then you might fall in the trap (as I did at first) of assuming it is there. Of course all these services are available for free from your package manager. Using the real services adds to the realism of the simulated networks and also means if you are familiar with them that it is easier to configure.


The package comes with the ability to form a MANET network using OSPF v3 MDR which is an extension to the popular OSPF routing protocol that supports Mobile Ad-Hoc Routing. It is very simple to set up a network using these as you can just place many MDR nodes over the canvas add a wireless network and associate with it. When you hit play it will begin to form a network and you can see the links as they come in. It has a very simple distance algorithm which you can adjust. When the simulation is live you can drag a node around the network and see the links form and break. Whilst I have only had a limited play with this it seems to have realistic reforming time for the routes. The actual links are not modelled in detail with a simple make and break distance an you set the throughput as a  global network.  

The movement of nodes can be scripted or done by hand. As you move a node around the network the links appear instantly which is of course unrealistic. The network routing however takes some time to adjust so in terms of seeing an effect on the network it appears reasonable. It should be possible to use another tool from the US Navy called Extendable Mobile Ad-hoc Network Emulator (EMANE) which should give a much more realistic simulation of the wireless interface. However, I have not yet successfully got it working. It may be due to using Ubuntu 14.04 rather than a known supported version. I will persevere and perhaps post a follow up blog post when I do get it working.


There are multiple ways to get information from a running simulation. Interactively you can add charts to the canvas to show throughput on a wired link (not wireless). You can get information by hovering over a node such as routes, IP addresses, etc. This is extensible as the information comes from running a command line tool at that node and capturing the output. By double clicking a node you get to the command line and can use any tool that you are familiar with on Linux. The right click menu on a node offers some good choices such as a tcpdump or even more helpfully it will bring up Wireshark (if you have it installed) where you can use that powerful tool to inspect the simulation. The whole tool can be scripted by python which can drive the simulation or capture from it. Each node has its own log which captures events on that system. In short you have access to any tools you would on a live Linux system which is almost any you could dream of.


I have only begun to scratch the surface of the tool but have come across a few quirks. I have already mentioned issues with no useful feedback when you try to use a function that relies on an external tool that is not installed. Another I saw when using the MDR routers. To get a more realistic node I attached a wired network through a switch on to a wireless MDR router and placed a PC node in it. I found that it was not possible to then ping across the network from this node. It turns out that the MDR router had set up the wired interface to use MDR routing as well. The PC node though does not have that enabled by default so no routing information was being shared. I could get around this by either enabling MDR on the PC or going in to the Quagga conf file on the router and removing the MDR set up for the wired interface so on that port it acted as a standard router. I cannot say this is a bug as such but you do learn that point and click can only go so far and you do need to understand the network you are building and sometimes dive down in to the configuration files.

I did unfortunately see a few crashes which again could be down to me using an 'unsupported' OS version. Whilst I solved the NetworkManager issue and so could still use my internet when running a simulation. I did see that my browser (Chrome) seemed to crash quite often when the simulation was active. I also very occasionally had CORE bring down the whole X Server which was a real pain when I had unsaved work. Hopefully this will be solved when 14.04 becomes fully supported or I run it in a separate virtual machine on a supported OS. In the mean time I will try and capture the fault and report a bug.


I covered in my previous article the criteria that were important to me. Some feedback from that has got me adding support to that list. As this is an Open Source tool not commercial this will refer to online community support. So a quick assessment against my criteria:

Real Time

CORE is a realtime network simulation so incorporating it with real devices and software should be simple. In fact if I want to run an event driven simulation for other aspects of my research then I will need to have a different tool. 


As I have covered you have all the strength of Linux and its available tools with which to add to the simulation which makes it very adaptable. The tool itself can be scripted (though I have not yet explored this) and is open source so every element could be changed.


It uses the same software that is used on many routers , servers and PCs so this provides a measure of realism. The wireless side by default is fairly simplistic but has the promise of integration with other tools to address this. The fidelity I need on this aspect is not that high. In many ways I would like to push the network to be unrealistically bad to check what happens to my protocol in those scenarios.

Interface with real applications

Adding a network port in to the simulation is simple. Command line software can be easily run but in order to run GUI based software access to the X server is needed. This can be configured by adding a control network and then using secure shell (ssh) with X forwarding. The X traffic will go across the control network and not impact the simulation. If Windows or other OS software is needed then a virtual machine could be run and the network tied in to the simulation or a separate machine physically attached.

Open Source

This is important to me from a philosophical point of view but it also ties in to the adaptability of the software. CORE is release under a BSD licence so is very liberal and can be reused in many situations.


As I have covered it has one MANET implementation built in with the possibility to extend and incorporate other means. The RF side is not super realistic but for my purposes is probably good enough.


It is not a commercial program but it does have various support mechanisms. It is being actively developed and the last version was released in September 2013. As it has an open repository under google code here you can see when new code is added. I can see a steady stream and the last commit at time of writing was 30th of April (13 days ago). It has an active bug list, which include the NetworkManager bug I covered. It also has a mailing list which is quite active and for instance has some information about EMANE on Ubuntu 14.04 which may help me overcome that issue.


CORE is a very powerful tool which is available free of charge. It does have a very easy to use interface which makes learning it quite easy. You cannot expect to use it without a good working knowledge of IP networks though and occasionally may have to dive down in to config files. It seems well supported with some community around it.

I am very impressed with CORE and it ticks most of the boxes I had for a simulation tool. There is still a lot more depth and functionality for me to explore but I am fairly confident that it will have great utility in my research. I would recommend anyone with Linux skills who wants to learn more about networks and IP to give CORE a try.

Tags in this Article:  Simulation Modeling CORE