The CORE Network Emulator development team released CORE version 4.7 in August 2014. I installed this new version of CORE on a newly-installed Linux 14.04 system and tested some of the new features.
In this post, I list the new features that are most relevant to researchers who use the CORE GUI to set up and run network simulations. I also list some of the defects that I found, along with workarounds.
Updates and New features
The following are the most updates and new features most visible to users like me, who use the CORE GUI. There are many other updates and new features so read the CORE 4.7 release notes to review all the changes in CORE 4.7.
Link effects
The CORE team made some major improvements to the way link effects are implemented. This alone is worth upgrading to CORE 4.7. The changes are:
- Allow jitter to be configured on links
- Link effects, such as delay and jitter, now can be configured between hub/switch and hub/switch connections (not just between routing nodes such as PCs and Routers).
- Link effects can be configured or changed during runtime, after the simulation is started.
- Allow asymmetric link effects. Different values can be configured in each direction. Asymmetric effects are available when a link is created between two routing nodes such as a PC and a router. Only symmetric effects are available if one of the nodes at any end of the link is a Link-layer node such as a switch.
Interface names
The CORE development team changed the standard names that CORE assignes to each virtual interface created on a simulated network node. The new CORE 4.7 starts each interface name with the “veth” prefix, the “tap”, or the “b” prefix (for bridges). ((The older versions of CORE started each interface name with the node name, followed by the interface name. For example: interface n3.eth0)) Example: Interface eth0 on node n3 has the interface name, veth3.0.
It appears the CORE development team made this change to avoid the problem where the Ubuntu Network Manager application interferes with virtual interfaces created by the CORE Network Emulator.
New service types
The CORE development team added new services for MGEN_Sink and OLSRv2. OLSR is outside the scope of my research so I will not discuss the OSLRv2 service in this post. I could not find any documentation for the MGEN_Sink service. The mgen utility is used to generate traffic between nodes. The service defines a startup script that tells mgen to listen on a specific UDP port for unicast IP traffic and to join a multicast group on each interface. When using this service, I expect that the user will change the contents of the mgen.sink input file, as required. See the mgen documentation for more information about mgen.
The core-manage command
The CORE development team created a new feature: The core-manage program is now available to help with the creation of customized services and custom node types. But, there is no documentation except for a basic man page, which does not offer much information.
Defects and Workarounds
Wireshark fails to start capture session at launch
Wireshark fails to capture on interface when launched from the CORE GUI. The script that starts Wireshark passes the wrong interface name to Wireshark because it still uses the old interface naming convention. Wireshark cannot start capturing on that device because it exists under another name.
The workaround is to clear the error dialogue box by clicking on the “OK” button, open the Interfaces dialogue box, and then select the correct interface in Wireshark to start capturing on that interface.
Throughput Widget broken
The bandwidth plots and Throughput Widget are broken in CORE 4.7. See bug #257.
As documented in the release notes, the workaround is to apply the following one-line fix using the command:
$ sudo sed -i 's/set ifname "n\$node_num\\\\.\$ifname/set ifname "veth\$node_num\\\\.[string range \$ifname 3 end]/' /usr/lib/core/widget.tcl
Note that if you installed CORE from source, then the CORE files are in the folder /usr/local/lib/core, instead of /usr/lib/core/. So, if you installed CORE from source, use the slightly modified command shown below to fix this issue:
$ sudo sed -i 's/set ifname "n\$node_num\\\\.\$ifname/set ifname "veth\$node_num\\\\.[string range \$ifname 3 end]/' /usr/local/lib/core/widget.tcl
Interface name change case missed
The change to the interface naming convention was inconsistently implemented. The development team missed one of the cases where interface names are assigned by CORE: if two switches are connected together, CORE still uses the old naming convention for the interfaces connecting the two switches.
There is no workaround required in this case but, if you have not already removed the Network Manager application, it will start launching DHCP packets into the interfaces that use the old naming convention. (Network Manager ignores interfaces that use the new naming convention starting with “veth”, “tap” or “b.”)
BIRD router Ubuntu 14.04 repository problem
In Ubuntu 14.04, the BIRD router software in the repository will not install correctly. This is not a problem with CORE 4.7; it is a problem with Ubuntu 14.04 and BIRD. However, since users will likely be running CORE 4.7 on Ubuntu 14.04, this is an issue they need to know about.
After the install fails, you will get an error message when trying to install any other software. To fix this issue, you must remove BIRD from the list of installed software with the following command:
$ sudo dpkg -r bird
Then, if you intend to use it in CORE network simulations, install BIRD from the latest PPA. The instructions are on the BIRD website.
Old version of CORE in Ubuntu 14.04 repository
The Ubuntu 14.04 software repository still has an older version of CORE (version 4.6). So, install CORE 4.7 from package files or from source.
To verify which version of CORE is in the Ubuntu software repository, execute the following command:
$ apt-cache policy core-network
core-network:
Installed: (none)
Candidate: 4.6-2
Version table:
4.6-2 0
500 http://ca.archive.ubuntu.com/ubuntu/ trusty/universe amd64 Packages
Alternatively, you can check the version of packages core-network-daemon and core-network-gui in the Ubuntu software repository on the Ubuntu packages web site.
Great blog! Thanks for all the Core Emulator posts. By far the best blogs of this products Ive seen!
Thanks for your encouragement!
Love the blog.
Just one question – what OS is that on the first screenshot in the blog? Looks like Tiny core or Micro core but not 100%.
Cheers,
ak.
Hi Anthony,
If you mean the first screen shot on this post, it is a Xubuntu 14.04 desktop.
Thanks, Brian
Thanks Brian.
I’ve been having issues with Unity on Ubuntu 14.04 and although I like it a lot, there are some issues that seem to keep cropping up from time to time. I was thinking of moving to a distribution that has a modern representation of past Linux GUI’s and Xubuntu might just be it!
Thanks again for the fast response. I’ll be installing it soon!
Cheers,
ak.
Hi Brian!
I’ve been trying to use the link bw feature to set the cost of OSPF links but it’s not working. It looks that there’s no difference for OSPF if the link is 512kbps or 10Gbit, all interfaces have the default cost of 10.
Do you know if OSPF should pick up those links bw values from the emulator? if that’s not the case, what’s the function of setting the link’s bw in the emulator?
I went through the official documentation of CORE but I wasn’t able to find any useful information.
Thanks for your help once again!
Look for documentation for ospfd or quagga, and for the tc command. The CORE network emulator is not the problem. The question is: does the ospfd process receive the information about the bandwidth of an interface from the Linux kernel? Does the use of network namespaces cause any complications in this scenario? This is a good point to research. I do not know the answer but I am sure someone else has encountered this issue and hopefully they have posted a solution somewhere.
Thanks for the quick response as always! I’ll look into that and let you know what I found.
Cheers!
Pingback: CORE Network Emulator updated to 4.8 | Open-Source Routing and Network Simulation
Great blog!
Could you help me with the following question? I want to configure the delay of the link connected between two switches using a python script. Do you know how can I connect two switches? It would be something like this but, of course, it is missing the link between the two switches.
#!/usr/bin/python
from core import pycore
session = pycore.Session(persistent=True)
node1 = session.addobj(cls=pycore.nodes.CoreNode, name=”n1″)
node2 = session.addobj(cls=pycore.nodes.CoreNode, name=”n2″)
switch1 = session.addobj(cls=pycore.nodes.SwitchNode, name=”switch1″)
switch2 = session.addobj(cls=pycore.nodes.SwitchNode, name=”switch2″)
node1.newnetif(switch1, [“10.0.0.1/24”])
node2.newnetif(switch2, [“10.0.0.2/24”])
node1.icmd([“ping”, “-c”, “5”, “10.0.0.2”])
session.shutdown()
Hi John,
Sorry but I haven’t done much with the Python API so I don’t know how to answer your question
Brian
Thank you anyway Brian!
John
Hi Brian , Can we use CORE for Software defined wireless networks?
I don’t know. Try Mininet-WiFi instead. Also ask the CORE mailing list.
Yeah But what I have researched Mininet wifi does not support wireless connected between multiple access points.
Hi Brian, Can we use CORE for Software defined wireless network with openvswitch?
Probably not. You would need to extend it with your own Python code. I have not tried this. I suggest you post your question to the CORE mailing list.