2018-07-31 20:57:30 +01:00
|
|
|
# CORE Architecture
|
|
|
|
|
|
|
|
## Main Components
|
|
|
|
|
2020-04-13 19:51:12 +01:00
|
|
|
* core-daemon
|
2023-03-08 05:49:50 +00:00
|
|
|
* 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
|
|
|
|
* Provides gRPC API
|
2020-04-13 19:51:12 +01:00
|
|
|
* core-gui
|
2023-03-08 05:49:50 +00:00
|
|
|
* GUI and daemon communicate over gRPC API
|
|
|
|
* Drag and drop creation for nodes and links
|
|
|
|
* Can launch terminals for emulated nodes in running sessions
|
|
|
|
* Can save/open scenario files to recreate previous sessions
|
2022-03-08 19:30:03 +00:00
|
|
|
* vnoded
|
2023-03-08 05:49:50 +00:00
|
|
|
* Command line utility for creating CORE node namespaces
|
2020-04-13 19:51:12 +01:00
|
|
|
* vcmd
|
2023-03-08 05:49:50 +00:00
|
|
|
* 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
|
|
|
|
|
|
|
## 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
|
2023-03-08 05:49:50 +00:00
|
|
|
encouragement, or can also include submitting patches or maintaining aspects
|
2022-03-08 19:30:03 +00:00
|
|
|
of the tool.
|