2018-07-31 20:57:30 +01:00
|
|
|
# CORE Architecture
|
|
|
|
|
|
|
|
* Table of Contents
|
|
|
|
{:toc}
|
|
|
|
|
|
|
|
## Main Components
|
|
|
|
|
2020-04-13 19:51:12 +01:00
|
|
|
* core-daemon
|
|
|
|
* Manages emulated sessions of nodes and links for a given network
|
|
|
|
* Nodes are created using Linux namespaces
|
|
|
|
* Links are created using Linux bridges and virtual ethernet peers
|
|
|
|
* Packets sent over links are manipulated using traffic control
|
2018-07-31 20:57:30 +01:00
|
|
|
* Controlled via the CORE GUI
|
2021-01-06 21:24:09 +00:00
|
|
|
* Provides both a custom TLV API and gRPC API
|
2020-04-13 19:51:12 +01:00
|
|
|
* Python program that leverages a small C binary for node creation
|
|
|
|
* core-gui
|
|
|
|
* GUI and daemon communicate over the custom TLV API
|
|
|
|
* Drag and drop creation for nodes and links
|
|
|
|
* Can launch terminals for emulated nodes in running sessions
|
2018-07-31 20:57:30 +01:00
|
|
|
* Can save/open scenario files to recreate previous sessions
|
|
|
|
* TCL/TK program
|
2020-04-13 19:51:12 +01:00
|
|
|
* coresendmsg
|
|
|
|
* Command line utility for sending TLV API messages to the core-daemon
|
|
|
|
* vcmd
|
|
|
|
* Command line utility for sending shell commands to nodes
|
2018-07-31 20:57:30 +01:00
|
|
|
|
2020-04-13 19:51:12 +01:00
|
|
|
![](static/architecture.png)
|
2018-07-31 20:57:30 +01:00
|
|
|
|
2020-04-09 22:34:52 +01:00
|
|
|
## Sessions
|
|
|
|
|
2020-04-13 19:51:12 +01:00
|
|
|
CORE can create and run multiple emulated sessions at once, below is an
|
|
|
|
overview of the states a session will transition between during typical
|
|
|
|
GUI interactions.
|
2020-04-09 22:34:52 +01:00
|
|
|
|
2020-04-13 19:51:12 +01:00
|
|
|
![](static/workflow.png)
|
2020-04-09 22:34:52 +01:00
|
|
|
|
2018-07-31 20:57:30 +01:00
|
|
|
## How Does it Work?
|
|
|
|
|
2020-04-09 22:34:52 +01:00
|
|
|
The CORE framework runs on Linux and uses Linux namespacing for creating
|
|
|
|
node containers. These nodes are linked together using Linux bridging and
|
|
|
|
virtual interfaces. CORE sessions are a set of nodes and links operating
|
|
|
|
together for a specific purpose.
|
2018-07-31 20:57:30 +01:00
|
|
|
|
|
|
|
### Linux
|
|
|
|
|
2020-04-13 19:51:12 +01:00
|
|
|
Linux network namespaces (also known as netns) is the primary
|
2020-04-09 22:34:52 +01:00
|
|
|
technique used by CORE. Most recent Linux distributions have
|
|
|
|
namespaces-enabled kernels out of the box. Each namespace has its own process
|
|
|
|
environment and private network stack. Network namespaces share the same
|
|
|
|
filesystem in CORE.
|
2018-07-31 20:57:30 +01:00
|
|
|
|
2020-04-09 22:34:52 +01:00
|
|
|
CORE combines these namespaces with Linux Ethernet bridging to form networks.
|
|
|
|
Link characteristics are applied using Linux Netem queuing disciplines.
|
2021-05-10 23:07:42 +01:00
|
|
|
Nftables provides Ethernet frame filtering on Linux bridges. Wireless networks are
|
|
|
|
emulated by controlling which interfaces can send and receive with nftables
|
2020-04-09 22:34:52 +01:00
|
|
|
rules.
|
2018-07-31 20:57:30 +01:00
|
|
|
|
|
|
|
## Prior Work
|
|
|
|
|
2020-04-09 22:34:52 +01:00
|
|
|
The Tcl/Tk CORE GUI was originally derived from the open source
|
|
|
|
[IMUNES](http://imunes.net) project from the University of Zagreb as a custom
|
|
|
|
project within Boeing Research and Technology's Network Technology research
|
|
|
|
group in 2004. Since then they have developed the CORE framework to use Linux
|
2020-04-13 19:51:12 +01:00
|
|
|
namespacing, have developed a Python framework, and made numerous user and
|
2020-04-09 22:34:52 +01:00
|
|
|
kernel-space developments, such as support for wireless networks, IPsec,
|
|
|
|
distribute emulation, simulation integration, and more. The IMUNES project
|
|
|
|
also consists of userspace and kernel components.
|
2018-07-31 20:57:30 +01:00
|
|
|
|
|
|
|
## Open Source Project and Resources
|
|
|
|
|
2020-04-09 22:34:52 +01:00
|
|
|
CORE has been released by Boeing to the open source community under the BSD
|
|
|
|
license. If you find CORE useful for your work, please contribute back to the
|
|
|
|
project. Contributions can be as simple as reporting a bug, dropping a line of
|
|
|
|
encouragement or technical suggestions to the mailing lists, or can also
|
|
|
|
include submitting patches or maintaining aspects of the tool.
|