docs: initial changes to support using mkdocs material
This commit is contained in:
parent
785cf82ba3
commit
078e0df329
20 changed files with 253 additions and 187 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -18,6 +18,9 @@ configure~
|
||||||
debian
|
debian
|
||||||
stamp-h1
|
stamp-h1
|
||||||
|
|
||||||
|
# python virtual environments
|
||||||
|
venv
|
||||||
|
|
||||||
# generated protobuf files
|
# generated protobuf files
|
||||||
*_pb2.py
|
*_pb2.py
|
||||||
*_pb2_grpc.py
|
*_pb2_grpc.py
|
||||||
|
|
|
@ -1,25 +1,22 @@
|
||||||
# CORE Architecture
|
# CORE Architecture
|
||||||
|
|
||||||
* Table of Contents
|
|
||||||
{:toc}
|
|
||||||
|
|
||||||
## Main Components
|
## Main Components
|
||||||
|
|
||||||
* core-daemon
|
* core-daemon
|
||||||
* Manages emulated sessions of nodes and links for a given network
|
* Manages emulated sessions of nodes and links for a given network
|
||||||
* Nodes are created using Linux namespaces
|
* Nodes are created using Linux namespaces
|
||||||
* Links are created using Linux bridges and virtual ethernet peers
|
* Links are created using Linux bridges and virtual ethernet peers
|
||||||
* Packets sent over links are manipulated using traffic control
|
* Packets sent over links are manipulated using traffic control
|
||||||
* Provides gRPC API
|
* Provides gRPC API
|
||||||
* core-gui
|
* core-gui
|
||||||
* GUI and daemon communicate over gRPC API
|
* GUI and daemon communicate over gRPC API
|
||||||
* Drag and drop creation for nodes and links
|
* Drag and drop creation for nodes and links
|
||||||
* Can launch terminals for emulated nodes in running sessions
|
* Can launch terminals for emulated nodes in running sessions
|
||||||
* Can save/open scenario files to recreate previous sessions
|
* Can save/open scenario files to recreate previous sessions
|
||||||
* vnoded
|
* vnoded
|
||||||
* Command line utility for creating CORE node namespaces
|
* Command line utility for creating CORE node namespaces
|
||||||
* vcmd
|
* vcmd
|
||||||
* Command line utility for sending shell commands to nodes
|
* Command line utility for sending shell commands to nodes
|
||||||
|
|
||||||
![](static/architecture.png)
|
![](static/architecture.png)
|
||||||
|
|
||||||
|
@ -57,5 +54,5 @@ rules.
|
||||||
CORE has been released by Boeing to the open source community under the BSD
|
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
|
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
|
project. Contributions can be as simple as reporting a bug, dropping a line of
|
||||||
encouragement, or can also include submitting patches or maintaining aspects
|
encouragement, or can also include submitting patches or maintaining aspects
|
||||||
of the tool.
|
of the tool.
|
||||||
|
|
|
@ -1,7 +1,4 @@
|
||||||
# CORE Config Services
|
# Config Services
|
||||||
|
|
||||||
* Table of Contents
|
|
||||||
{:toc}
|
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
|
@ -15,6 +12,7 @@ CORE services are a convenience for creating reusable dynamic scripts
|
||||||
to run on nodes, for carrying out specific task(s).
|
to run on nodes, for carrying out specific task(s).
|
||||||
|
|
||||||
This boilds down to the following functions:
|
This boilds down to the following functions:
|
||||||
|
|
||||||
* generating files the service will use, either directly for commands or for configuration
|
* generating files the service will use, either directly for commands or for configuration
|
||||||
* command(s) for starting a service
|
* command(s) for starting a service
|
||||||
* command(s) for validating a service
|
* command(s) for validating a service
|
||||||
|
@ -121,6 +119,7 @@ from typing import Dict, List
|
||||||
from core.config import ConfigString, ConfigBool, Configuration
|
from core.config import ConfigString, ConfigBool, Configuration
|
||||||
from core.configservice.base import ConfigService, ConfigServiceMode, ShadowDir
|
from core.configservice.base import ConfigService, ConfigServiceMode, ShadowDir
|
||||||
|
|
||||||
|
|
||||||
# class that subclasses ConfigService
|
# class that subclasses ConfigService
|
||||||
class ExampleService(ConfigService):
|
class ExampleService(ConfigService):
|
||||||
# unique name for your service within CORE
|
# unique name for your service within CORE
|
||||||
|
@ -129,7 +128,7 @@ class ExampleService(ConfigService):
|
||||||
group: str = "ExampleGroup"
|
group: str = "ExampleGroup"
|
||||||
# directories that the service should shadow mount, hiding the system directory
|
# directories that the service should shadow mount, hiding the system directory
|
||||||
directories: List[str] = [
|
directories: List[str] = [
|
||||||
"/usr/local/core",
|
"/usr/local/core",
|
||||||
]
|
]
|
||||||
# files that this service should generate, defaults to nodes home directory
|
# files that this service should generate, defaults to nodes home directory
|
||||||
# or can provide an absolute path to a mounted directory
|
# or can provide an absolute path to a mounted directory
|
||||||
|
|
|
@ -1,13 +1,10 @@
|
||||||
# CORE Control Network
|
# CORE Control Network
|
||||||
|
|
||||||
* Table of Contents
|
|
||||||
{:toc}
|
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
The CORE control network allows the virtual nodes to communicate with their
|
The CORE control network allows the virtual nodes to communicate with their
|
||||||
host environment. There are two types: the primary control network and
|
host environment. There are two types: the primary control network and
|
||||||
auxiliary control networks. The primary control network is used mainly for
|
auxiliary control networks. The primary control network is used mainly for
|
||||||
communicating with the virtual nodes from host machines and for master-slave
|
communicating with the virtual nodes from host machines and for master-slave
|
||||||
communications in a multi-server distributed environment. Auxiliary control
|
communications in a multi-server distributed environment. Auxiliary control
|
||||||
networks have been introduced to for routing namespace hosted emulation
|
networks have been introduced to for routing namespace hosted emulation
|
||||||
|
@ -31,14 +28,14 @@ control networks, the session option should be used instead of the *core.conf*
|
||||||
default.
|
default.
|
||||||
|
|
||||||
> **NOTE:** If you have a large scenario with more than 253 nodes, use a control
|
> **NOTE:** If you have a large scenario with more than 253 nodes, use a control
|
||||||
network prefix that allows more than the suggested */24*, such as */23* or
|
> network prefix that allows more than the suggested */24*, such as */23* or
|
||||||
greater.
|
> greater.
|
||||||
|
|
||||||
> **NOTE:** Running a session with a control network can fail if a previous
|
> **NOTE:** Running a session with a control network can fail if a previous
|
||||||
session has set up a control network and the its bridge is still up. Close
|
> session has set up a control network and the its bridge is still up. Close
|
||||||
the previous session first or wait for it to complete. If unable to, the
|
> the previous session first or wait for it to complete. If unable to, the
|
||||||
*core-daemon* may need to be restarted and the lingering bridge(s) removed
|
*core-daemon* may need to be restarted and the lingering bridge(s) removed
|
||||||
manually.
|
> manually.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# Restart the CORE Daemon
|
# Restart the CORE Daemon
|
||||||
|
@ -54,8 +51,8 @@ done
|
||||||
|
|
||||||
> **NOTE:** If adjustments to the primary control network configuration made in
|
> **NOTE:** If adjustments to the primary control network configuration made in
|
||||||
*/etc/core/core.conf* do not seem to take affect, check if there is anything
|
*/etc/core/core.conf* do not seem to take affect, check if there is anything
|
||||||
set in the *Session Menu*, the *Options...* dialog. They may need to be
|
> set in the *Session Menu*, the *Options...* dialog. They may need to be
|
||||||
cleared. These per session settings override the defaults in
|
> cleared. These per session settings override the defaults in
|
||||||
*/etc/core/core.conf*.
|
*/etc/core/core.conf*.
|
||||||
|
|
||||||
## Control Network in Distributed Sessions
|
## Control Network in Distributed Sessions
|
||||||
|
@ -102,9 +99,9 @@ argument being the keyword *"shutdown"*.
|
||||||
Starting with EMANE 0.9.2, CORE will run EMANE instances within namespaces.
|
Starting with EMANE 0.9.2, CORE will run EMANE instances within namespaces.
|
||||||
Since it is advisable to separate the OTA traffic from other traffic, we will
|
Since it is advisable to separate the OTA traffic from other traffic, we will
|
||||||
need more than single channel leading out from the namespace. Up to three
|
need more than single channel leading out from the namespace. Up to three
|
||||||
auxiliary control networks may be defined. Multiple control networks are set
|
auxiliary control networks may be defined. Multiple control networks are set
|
||||||
up in */etc/core/core.conf* file. Lines *controlnet1*, *controlnet2* and
|
up in */etc/core/core.conf* file. Lines *controlnet1*, *controlnet2* and
|
||||||
*controlnet3* define the auxiliary networks.
|
*controlnet3* define the auxiliary networks.
|
||||||
|
|
||||||
For example, having the following */etc/core/core.conf*:
|
For example, having the following */etc/core/core.conf*:
|
||||||
|
|
||||||
|
@ -114,18 +111,18 @@ controlnet1 = core1:172.18.1.0/24 core2:172.18.2.0/24 core3:172.18.3.0/24
|
||||||
controlnet2 = core1:172.19.1.0/24 core2:172.19.2.0/24 core3:172.19.3.0/24
|
controlnet2 = core1:172.19.1.0/24 core2:172.19.2.0/24 core3:172.19.3.0/24
|
||||||
```
|
```
|
||||||
|
|
||||||
This will activate the primary and two auxiliary control networks and add
|
This will activate the primary and two auxiliary control networks and add
|
||||||
interfaces *ctrl0*, *ctrl1*, *ctrl2* to each node. One use case would be to
|
interfaces *ctrl0*, *ctrl1*, *ctrl2* to each node. One use case would be to
|
||||||
assign *ctrl1* to the OTA manager device and *ctrl2* to the Event Service
|
assign *ctrl1* to the OTA manager device and *ctrl2* to the Event Service
|
||||||
device in the EMANE Options dialog box and leave *ctrl0* for CORE control
|
device in the EMANE Options dialog box and leave *ctrl0* for CORE control
|
||||||
traffic.
|
traffic.
|
||||||
|
|
||||||
> **NOTE:** *controlnet0* may be used in place of *controlnet* to configure
|
> **NOTE:** *controlnet0* may be used in place of *controlnet* to configure
|
||||||
>the primary control network.
|
> the primary control network.
|
||||||
|
|
||||||
Unlike the primary control network, the auxiliary control networks will not
|
Unlike the primary control network, the auxiliary control networks will not
|
||||||
employ tunneling since their primary purpose is for efficiently transporting
|
employ tunneling since their primary purpose is for efficiently transporting
|
||||||
multicast EMANE OTA and event traffic. Note that there is no per-session
|
multicast EMANE OTA and event traffic. Note that there is no per-session
|
||||||
configuration for auxiliary control networks.
|
configuration for auxiliary control networks.
|
||||||
|
|
||||||
To extend the auxiliary control networks across a distributed test
|
To extend the auxiliary control networks across a distributed test
|
||||||
|
@ -140,8 +137,8 @@ controlnetif3 = eth3
|
||||||
```
|
```
|
||||||
|
|
||||||
> **NOTE:** There is no need to assign an interface to the primary control
|
> **NOTE:** There is no need to assign an interface to the primary control
|
||||||
>network because tunnels are formed between the master and the slaves using IP
|
> network because tunnels are formed between the master and the slaves using IP
|
||||||
>addresses that are provided in *servers.conf*.
|
> addresses that are provided in *servers.conf*.
|
||||||
|
|
||||||
Shown below is a representative diagram of the configuration above.
|
Shown below is a representative diagram of the configuration above.
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
# CORE Developer's Guide
|
# CORE Developer's Guide
|
||||||
|
|
||||||
* Table of Contents
|
## Overview
|
||||||
{:toc}
|
|
||||||
|
|
||||||
## Repository Overview
|
|
||||||
|
|
||||||
The CORE source consists of several programming languages for
|
The CORE source consists of several programming languages for
|
||||||
historical reasons. Current development focuses on the Python modules and
|
historical reasons. Current development focuses on the Python modules and
|
||||||
|
@ -65,7 +62,7 @@ inv test-mock
|
||||||
## Linux Network Namespace Commands
|
## Linux Network Namespace Commands
|
||||||
|
|
||||||
Linux network namespace containers are often managed using the *Linux Container Tools* or *lxc-tools* package.
|
Linux network namespace containers are often managed using the *Linux Container Tools* or *lxc-tools* package.
|
||||||
The lxc-tools website is available here http://lxc.sourceforge.net/ for more information. CORE does not use these
|
The lxc-tools website is available here http://lxc.sourceforge.net/ for more information. CORE does not use these
|
||||||
management utilities, but includes its own set of tools for instantiating and configuring network namespace containers.
|
management utilities, but includes its own set of tools for instantiating and configuring network namespace containers.
|
||||||
This section describes these tools.
|
This section describes these tools.
|
||||||
|
|
||||||
|
@ -100,7 +97,7 @@ vcmd -c /tmp/pycore.50160/n1 -- /sbin/ip -4 ro
|
||||||
|
|
||||||
A script named *core-cleanup* is provided to clean up any running CORE emulations. It will attempt to kill any
|
A script named *core-cleanup* is provided to clean up any running CORE emulations. It will attempt to kill any
|
||||||
remaining vnoded processes, kill any EMANE processes, remove the :file:`/tmp/pycore.*` session directories, and remove
|
remaining vnoded processes, kill any EMANE processes, remove the :file:`/tmp/pycore.*` session directories, and remove
|
||||||
any bridges or *nftables* rules. With a *-d* option, it will also kill any running CORE daemon.
|
any bridges or *nftables* rules. With a *-d* option, it will also kill any running CORE daemon.
|
||||||
|
|
||||||
### netns command
|
### netns command
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
# CORE - Distributed Emulation
|
# CORE - Distributed Emulation
|
||||||
|
|
||||||
* Table of Contents
|
|
||||||
{:toc}
|
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
A large emulation scenario can be deployed on multiple emulation servers and
|
A large emulation scenario can be deployed on multiple emulation servers and
|
||||||
|
@ -61,6 +58,7 @@ First the distributed servers must be configured to allow passwordless root
|
||||||
login over SSH.
|
login over SSH.
|
||||||
|
|
||||||
On distributed server:
|
On distributed server:
|
||||||
|
|
||||||
```shelll
|
```shelll
|
||||||
# install openssh-server
|
# install openssh-server
|
||||||
sudo apt install openssh-server
|
sudo apt install openssh-server
|
||||||
|
@ -81,6 +79,7 @@ sudo systemctl restart sshd
|
||||||
```
|
```
|
||||||
|
|
||||||
On master server:
|
On master server:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# install package if needed
|
# install package if needed
|
||||||
sudo apt install openssh-client
|
sudo apt install openssh-client
|
||||||
|
@ -99,6 +98,7 @@ connect_kwargs: {"key_filename": "/home/user/.ssh/core"}
|
||||||
```
|
```
|
||||||
|
|
||||||
On distributed server:
|
On distributed server:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# open sshd config
|
# open sshd config
|
||||||
vi /etc/ssh/sshd_config
|
vi /etc/ssh/sshd_config
|
||||||
|
@ -116,8 +116,9 @@ Make sure the value used below is the absolute path to the file
|
||||||
generated above **~/.ssh/core**"
|
generated above **~/.ssh/core**"
|
||||||
|
|
||||||
Add/update the fabric configuration file **/etc/fabric.yml**:
|
Add/update the fabric configuration file **/etc/fabric.yml**:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
connect_kwargs: {"key_filename": "/home/user/.ssh/core"}
|
connect_kwargs: { "key_filename": "/home/user/.ssh/core" }
|
||||||
```
|
```
|
||||||
|
|
||||||
## Add Emulation Servers in GUI
|
## Add Emulation Servers in GUI
|
||||||
|
@ -183,7 +184,7 @@ These tunnels are created using GRE tunneling, similar to the Tunnel Tool.
|
||||||
1. Install CORE on master server
|
1. Install CORE on master server
|
||||||
1. Install distributed CORE package on all servers needed
|
1. Install distributed CORE package on all servers needed
|
||||||
1. Installed and configure public-key SSH access on all servers (if you want to use
|
1. Installed and configure public-key SSH access on all servers (if you want to use
|
||||||
double-click shells or Widgets.) for both the GUI user (for terminals) and root for running CORE commands
|
double-click shells or Widgets.) for both the GUI user (for terminals) and root for running CORE commands
|
||||||
1. Update CORE configuration as needed
|
1. Update CORE configuration as needed
|
||||||
1. Choose the servers that participate in distributed emulation.
|
1. Choose the servers that participate in distributed emulation.
|
||||||
1. Assign nodes to desired servers, empty for master server.
|
1. Assign nodes to desired servers, empty for master server.
|
||||||
|
|
|
@ -15,7 +15,6 @@ sudo apt install docker.io
|
||||||
|
|
||||||
### RHEL Systems
|
### RHEL Systems
|
||||||
|
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
Custom configuration required to avoid iptable rules being added and removing
|
Custom configuration required to avoid iptable rules being added and removing
|
||||||
|
@ -26,8 +25,8 @@ Place the file below in **/etc/docker/docker.json**
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"bridge": "none",
|
"bridge": "none",
|
||||||
"iptables": false
|
"iptables": false
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -53,6 +52,7 @@ Images used by Docker nodes in CORE need to have networking tools installed for
|
||||||
CORE to automate setup and configuration of the network within the container.
|
CORE to automate setup and configuration of the network within the container.
|
||||||
|
|
||||||
Example Dockerfile:
|
Example Dockerfile:
|
||||||
|
|
||||||
```
|
```
|
||||||
FROM ubuntu:latest
|
FROM ubuntu:latest
|
||||||
RUN apt-get update
|
RUN apt-get update
|
||||||
|
@ -60,6 +60,7 @@ RUN apt-get install -y iproute2 ethtool
|
||||||
```
|
```
|
||||||
|
|
||||||
Build image:
|
Build image:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo docker build -t <name> .
|
sudo docker build -t <name> .
|
||||||
```
|
```
|
||||||
|
|
|
@ -1,7 +1,4 @@
|
||||||
# CORE/EMANE
|
# EMANE (Extendable Mobile Ad-hoc Network Emulator)
|
||||||
|
|
||||||
* Table of Contents
|
|
||||||
{:toc}
|
|
||||||
|
|
||||||
## What is EMANE?
|
## What is EMANE?
|
||||||
|
|
||||||
|
@ -31,7 +28,7 @@ and instantiates one EMANE process in the namespace. The EMANE process binds a
|
||||||
user space socket to the TAP device for sending and receiving data from CORE.
|
user space socket to the TAP device for sending and receiving data from CORE.
|
||||||
|
|
||||||
An EMANE instance sends and receives OTA (Over-The-Air) traffic to and from
|
An EMANE instance sends and receives OTA (Over-The-Air) traffic to and from
|
||||||
other EMANE instances via a control port (e.g. *ctrl0*, *ctrl1*). It also
|
other EMANE instances via a control port (e.g. *ctrl0*, *ctrl1*). It also
|
||||||
sends and receives Events to and from the Event Service using the same or a
|
sends and receives Events to and from the Event Service using the same or a
|
||||||
different control port. EMANE models are configured through the GUI's
|
different control port. EMANE models are configured through the GUI's
|
||||||
configuration dialog. A corresponding EmaneModel Python class is sub-classed
|
configuration dialog. A corresponding EmaneModel Python class is sub-classed
|
||||||
|
@ -93,7 +90,7 @@ want to have CORE subscribe to EMANE location events, set the following line
|
||||||
in the **core.conf** configuration file.
|
in the **core.conf** configuration file.
|
||||||
|
|
||||||
> **NOTE:** Do not set this option to True if you want to manually drag nodes around
|
> **NOTE:** Do not set this option to True if you want to manually drag nodes around
|
||||||
on the canvas to update their location in EMANE.
|
> on the canvas to update their location in EMANE.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
emane_event_monitor = True
|
emane_event_monitor = True
|
||||||
|
@ -104,6 +101,7 @@ prefix will place the DTD files in **/usr/local/share/emane/dtd** while CORE
|
||||||
expects them in **/usr/share/emane/dtd**.
|
expects them in **/usr/share/emane/dtd**.
|
||||||
|
|
||||||
Update the EMANE prefix configuration to resolve this problem.
|
Update the EMANE prefix configuration to resolve this problem.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
emane_prefix = /usr/local
|
emane_prefix = /usr/local
|
||||||
```
|
```
|
||||||
|
@ -116,6 +114,7 @@ placed within the path defined by **emane_models_dir** in the CORE
|
||||||
configuration file. This path cannot end in **/emane**.
|
configuration file. This path cannot end in **/emane**.
|
||||||
|
|
||||||
Here is an example model with documentation describing functionality:
|
Here is an example model with documentation describing functionality:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
"""
|
"""
|
||||||
Example custom emane model.
|
Example custom emane model.
|
||||||
|
@ -210,7 +209,7 @@ The EMANE models should be listed here for selection. (You may need to restart t
|
||||||
CORE daemon if it was running prior to installing the EMANE Python bindings.)
|
CORE daemon if it was running prior to installing the EMANE Python bindings.)
|
||||||
|
|
||||||
When an EMANE model is selected, you can click on the models option button
|
When an EMANE model is selected, you can click on the models option button
|
||||||
causing the GUI to query the CORE daemon for configuration items.
|
causing the GUI to query the CORE daemon for configuration items.
|
||||||
Each model will have different parameters, refer to the
|
Each model will have different parameters, refer to the
|
||||||
EMANE documentation for an explanation of each item. The defaults values are
|
EMANE documentation for an explanation of each item. The defaults values are
|
||||||
presented in the dialog. Clicking *Apply* and *Apply* again will store the
|
presented in the dialog. Clicking *Apply* and *Apply* again will store the
|
||||||
|
@ -220,7 +219,7 @@ The RF-PIPE and IEEE 802.11abg models use a Universal PHY that supports
|
||||||
geographic location information for determining pathloss between nodes. A
|
geographic location information for determining pathloss between nodes. A
|
||||||
default latitude and longitude location is provided by CORE and this
|
default latitude and longitude location is provided by CORE and this
|
||||||
location-based pathloss is enabled by default; this is the *pathloss mode*
|
location-based pathloss is enabled by default; this is the *pathloss mode*
|
||||||
setting for the Universal PHY. Moving a node on the canvas while the
|
setting for the Universal PHY. Moving a node on the canvas while the
|
||||||
emulation is running generates location events for EMANE. To view or change
|
emulation is running generates location events for EMANE. To view or change
|
||||||
the geographic location or scale of the canvas use the *Canvas Size and Scale*
|
the geographic location or scale of the canvas use the *Canvas Size and Scale*
|
||||||
dialog available from the *Canvas* menu.
|
dialog available from the *Canvas* menu.
|
||||||
|
@ -237,7 +236,7 @@ to be created in the virtual nodes that are linked to the EMANE WLAN. These
|
||||||
devices appear with interface names such as eth0, eth1, etc. The EMANE processes
|
devices appear with interface names such as eth0, eth1, etc. The EMANE processes
|
||||||
should now be running in each namespace.
|
should now be running in each namespace.
|
||||||
|
|
||||||
To view the configuration generated by CORE, look in the */tmp/pycore.nnnnn/* session
|
To view the configuration generated by CORE, look in the */tmp/pycore.nnnnn/* session
|
||||||
directory to find the generated EMANE xml files. One easy way to view
|
directory to find the generated EMANE xml files. One easy way to view
|
||||||
this information is by double-clicking one of the virtual nodes and listing the files
|
this information is by double-clicking one of the virtual nodes and listing the files
|
||||||
in the shell.
|
in the shell.
|
||||||
|
@ -281,12 +280,11 @@ being used, along with changing any configuration setting from their defaults.
|
||||||
|
|
||||||
> **NOTE:** Here is a quick checklist for distributed emulation with EMANE.
|
> **NOTE:** Here is a quick checklist for distributed emulation with EMANE.
|
||||||
|
|
||||||
1. Follow the steps outlined for normal CORE.
|
1. Follow the steps outlined for normal CORE.
|
||||||
2. Assign nodes to desired servers
|
2. Assign nodes to desired servers
|
||||||
3. Synchronize your machine's clocks prior to starting the emulation,
|
3. Synchronize your machine's clocks prior to starting the emulation,
|
||||||
using *ntp* or *ptp*. Some EMANE models are sensitive to timing.
|
using *ntp* or *ptp*. Some EMANE models are sensitive to timing.
|
||||||
4. Press the *Start* button to launch the distributed emulation.
|
4. Press the *Start* button to launch the distributed emulation.
|
||||||
|
|
||||||
|
|
||||||
Now when the Start button is used to instantiate the emulation, the local CORE
|
Now when the Start button is used to instantiate the emulation, the local CORE
|
||||||
daemon will connect to other emulation servers that have been assigned
|
daemon will connect to other emulation servers that have been assigned
|
||||||
|
|
34
docs/grpc.md
34
docs/grpc.md
|
@ -1,7 +1,6 @@
|
||||||
# gRPC API
|
# gRPC API
|
||||||
|
|
||||||
* Table of Contents
|
## Overview
|
||||||
{:toc}
|
|
||||||
|
|
||||||
[gRPC](https://grpc.io/) is a client/server API for interfacing with CORE
|
[gRPC](https://grpc.io/) is a client/server API for interfacing with CORE
|
||||||
and used by the python GUI for driving all functionality. It is dependent
|
and used by the python GUI for driving all functionality. It is dependent
|
||||||
|
@ -9,7 +8,7 @@ on having a running `core-daemon` instance to be leveraged.
|
||||||
|
|
||||||
A python client can be created from the raw generated grpc files included
|
A python client can be created from the raw generated grpc files included
|
||||||
with CORE or one can leverage a provided gRPC client that helps encapsulate
|
with CORE or one can leverage a provided gRPC client that helps encapsulate
|
||||||
some of the functionality to try and help make things easier.
|
some functionality to try and help make things easier.
|
||||||
|
|
||||||
## Python Client
|
## Python Client
|
||||||
|
|
||||||
|
@ -41,13 +40,13 @@ When creating nodes of type `NodeType.DEFAULT` these are the default models
|
||||||
and the services they map to.
|
and the services they map to.
|
||||||
|
|
||||||
* mdr
|
* mdr
|
||||||
* zebra, OSPFv3MDR, IPForward
|
* zebra, OSPFv3MDR, IPForward
|
||||||
* PC
|
* PC
|
||||||
* DefaultRoute
|
* DefaultRoute
|
||||||
* router
|
* router
|
||||||
* zebra, OSPFv2, OSPFv3, IPForward
|
* zebra, OSPFv2, OSPFv3, IPForward
|
||||||
* host
|
* host
|
||||||
* DefaultRoute, SSH
|
* DefaultRoute, SSH
|
||||||
|
|
||||||
### Interface Helper
|
### Interface Helper
|
||||||
|
|
||||||
|
@ -56,8 +55,10 @@ when creating interface data for nodes. Alternatively one can manually create
|
||||||
a `core.api.grpc.wrappers.Interface` class instead with appropriate information.
|
a `core.api.grpc.wrappers.Interface` class instead with appropriate information.
|
||||||
|
|
||||||
Manually creating gRPC client interface:
|
Manually creating gRPC client interface:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from core.api.grpc.wrappers import Interface
|
from core.api.grpc.wrappers import Interface
|
||||||
|
|
||||||
# id is optional and will set to the next available id
|
# id is optional and will set to the next available id
|
||||||
# name is optional and will default to eth<id>
|
# name is optional and will default to eth<id>
|
||||||
# mac is optional and will result in a randomly generated mac
|
# mac is optional and will result in a randomly generated mac
|
||||||
|
@ -72,6 +73,7 @@ iface = Interface(
|
||||||
```
|
```
|
||||||
|
|
||||||
Leveraging the interface helper class:
|
Leveraging the interface helper class:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from core.api.grpc import client
|
from core.api.grpc import client
|
||||||
|
|
||||||
|
@ -90,6 +92,7 @@ iface_data = iface_helper.create_iface(
|
||||||
Various events that can occur within a session can be listened to.
|
Various events that can occur within a session can be listened to.
|
||||||
|
|
||||||
Event types:
|
Event types:
|
||||||
|
|
||||||
* session - events for changes in session state and mobility start/stop/pause
|
* session - events for changes in session state and mobility start/stop/pause
|
||||||
* node - events for node movements and icon changes
|
* node - events for node movements and icon changes
|
||||||
* link - events for link configuration changes and wireless link add/delete
|
* link - events for link configuration changes and wireless link add/delete
|
||||||
|
@ -101,9 +104,11 @@ Event types:
|
||||||
from core.api.grpc import client
|
from core.api.grpc import client
|
||||||
from core.api.grpc.wrappers import EventType
|
from core.api.grpc.wrappers import EventType
|
||||||
|
|
||||||
|
|
||||||
def event_listener(event):
|
def event_listener(event):
|
||||||
print(event)
|
print(event)
|
||||||
|
|
||||||
|
|
||||||
# create grpc client and connect
|
# create grpc client and connect
|
||||||
core = client.CoreGrpcClient()
|
core = client.CoreGrpcClient()
|
||||||
core.connect()
|
core.connect()
|
||||||
|
@ -123,6 +128,7 @@ core.events(session.id, event_listener, [EventType.NODE])
|
||||||
Links can be configured at the time of creation or during runtime.
|
Links can be configured at the time of creation or during runtime.
|
||||||
|
|
||||||
Currently supported configuration options:
|
Currently supported configuration options:
|
||||||
|
|
||||||
* bandwidth (bps)
|
* bandwidth (bps)
|
||||||
* delay (us)
|
* delay (us)
|
||||||
* duplicate (%)
|
* duplicate (%)
|
||||||
|
@ -167,6 +173,7 @@ core.edit_link(session.id, link)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Peer to Peer Example
|
### Peer to Peer Example
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# required imports
|
# required imports
|
||||||
from core.api.grpc import client
|
from core.api.grpc import client
|
||||||
|
@ -198,6 +205,7 @@ core.start_session(session)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Switch/Hub Example
|
### Switch/Hub Example
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# required imports
|
# required imports
|
||||||
from core.api.grpc import client
|
from core.api.grpc import client
|
||||||
|
@ -232,6 +240,7 @@ core.start_session(session)
|
||||||
```
|
```
|
||||||
|
|
||||||
### WLAN Example
|
### WLAN Example
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# required imports
|
# required imports
|
||||||
from core.api.grpc import client
|
from core.api.grpc import client
|
||||||
|
@ -283,6 +292,7 @@ For EMANE you can import and use one of the existing models and
|
||||||
use its name for configuration.
|
use its name for configuration.
|
||||||
|
|
||||||
Current models:
|
Current models:
|
||||||
|
|
||||||
* core.emane.ieee80211abg.EmaneIeee80211abgModel
|
* core.emane.ieee80211abg.EmaneIeee80211abgModel
|
||||||
* core.emane.rfpipe.EmaneRfPipeModel
|
* core.emane.rfpipe.EmaneRfPipeModel
|
||||||
* core.emane.tdma.EmaneTdmaModel
|
* core.emane.tdma.EmaneTdmaModel
|
||||||
|
@ -315,7 +325,7 @@ session = core.create_session()
|
||||||
# create nodes
|
# create nodes
|
||||||
position = Position(x=200, y=200)
|
position = Position(x=200, y=200)
|
||||||
emane = session.add_node(
|
emane = session.add_node(
|
||||||
1, _type=NodeType.EMANE, position=position, emane=EmaneIeee80211abgModel.name
|
1, _type=NodeType.EMANE, position=position, emane=EmaneIeee80211abgModel.name
|
||||||
)
|
)
|
||||||
position = Position(x=100, y=100)
|
position = Position(x=100, y=100)
|
||||||
node1 = session.add_node(2, model="mdr", position=position)
|
node1 = session.add_node(2, model="mdr", position=position)
|
||||||
|
@ -330,8 +340,8 @@ session.add_link(node1=node2, node2=emane, iface1=iface1)
|
||||||
|
|
||||||
# setting emane specific emane model configuration
|
# setting emane specific emane model configuration
|
||||||
emane.set_emane_model(EmaneIeee80211abgModel.name, {
|
emane.set_emane_model(EmaneIeee80211abgModel.name, {
|
||||||
"eventservicettl": "2",
|
"eventservicettl": "2",
|
||||||
"unicastrate": "3",
|
"unicastrate": "3",
|
||||||
})
|
})
|
||||||
|
|
||||||
# start session
|
# start session
|
||||||
|
@ -339,6 +349,7 @@ core.start_session(session)
|
||||||
```
|
```
|
||||||
|
|
||||||
EMANE Model Configuration:
|
EMANE Model Configuration:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# emane network specific config, set on an emane node
|
# emane network specific config, set on an emane node
|
||||||
# this setting applies to all nodes connected
|
# this setting applies to all nodes connected
|
||||||
|
@ -359,6 +370,7 @@ Configuring the files of a service results in a specific hard coded script being
|
||||||
generated, instead of the default scripts, that may leverage dynamic generation.
|
generated, instead of the default scripts, that may leverage dynamic generation.
|
||||||
|
|
||||||
The following features can be configured for a service:
|
The following features can be configured for a service:
|
||||||
|
|
||||||
* files - files that will be generated
|
* files - files that will be generated
|
||||||
* directories - directories that will be mounted unique to the node
|
* directories - directories that will be mounted unique to the node
|
||||||
* startup - commands to run start a service
|
* startup - commands to run start a service
|
||||||
|
@ -366,6 +378,7 @@ The following features can be configured for a service:
|
||||||
* shutdown - commands to run to stop a service
|
* shutdown - commands to run to stop a service
|
||||||
|
|
||||||
Editing service properties:
|
Editing service properties:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# configure a service, for a node, for a given session
|
# configure a service, for a node, for a given session
|
||||||
node.service_configs[service_name] = NodeServiceData(
|
node.service_configs[service_name] = NodeServiceData(
|
||||||
|
@ -381,6 +394,7 @@ When editing a service file, it must be the name of `config`
|
||||||
file that the service will generate.
|
file that the service will generate.
|
||||||
|
|
||||||
Editing a service file:
|
Editing a service file:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# to edit the contents of a generated file you can specify
|
# to edit the contents of a generated file you can specify
|
||||||
# the service, the file name, and its contents
|
# the service, the file name, and its contents
|
||||||
|
|
88
docs/gui.md
88
docs/gui.md
|
@ -1,9 +1,5 @@
|
||||||
|
|
||||||
# CORE GUI
|
# CORE GUI
|
||||||
|
|
||||||
* Table of Contents
|
|
||||||
{:toc}
|
|
||||||
|
|
||||||
![](static/core-gui.png)
|
![](static/core-gui.png)
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
@ -12,7 +8,7 @@ The GUI is used to draw nodes and network devices on a canvas, linking them
|
||||||
together to create an emulated network session.
|
together to create an emulated network session.
|
||||||
|
|
||||||
After pressing the start button, CORE will proceed through these phases,
|
After pressing the start button, CORE will proceed through these phases,
|
||||||
staying in the **runtime** phase. After the session is stopped, CORE will
|
staying in the **runtime** phase. After the session is stopped, CORE will
|
||||||
proceed to the **data collection** phase before tearing down the emulated
|
proceed to the **data collection** phase before tearing down the emulated
|
||||||
state.
|
state.
|
||||||
|
|
||||||
|
@ -22,7 +18,7 @@ when these session states are reached.
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
Beyond installing CORE, you must have the CORE daemon running. This is done
|
Beyond installing CORE, you must have the CORE daemon running. This is done
|
||||||
on the command line with either systemd or sysv.
|
on the command line with either systemd or sysv.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
|
@ -40,24 +36,24 @@ The GUI will create a directory in your home directory on first run called
|
||||||
~/.coregui. This directory will help layout various files that the GUI may use.
|
~/.coregui. This directory will help layout various files that the GUI may use.
|
||||||
|
|
||||||
* .coregui/
|
* .coregui/
|
||||||
* backgrounds/
|
* backgrounds/
|
||||||
* place backgrounds used for display in the GUI
|
* place backgrounds used for display in the GUI
|
||||||
* custom_emane/
|
* custom_emane/
|
||||||
* place to keep custom emane models to use with the core-daemon
|
* place to keep custom emane models to use with the core-daemon
|
||||||
* custom_services/
|
* custom_services/
|
||||||
* place to keep custom services to use with the core-daemon
|
* place to keep custom services to use with the core-daemon
|
||||||
* icons/
|
* icons/
|
||||||
* icons the GUI uses along with customs icons desired
|
* icons the GUI uses along with customs icons desired
|
||||||
* mobility/
|
* mobility/
|
||||||
* place to keep custom mobility files
|
* place to keep custom mobility files
|
||||||
* scripts/
|
* scripts/
|
||||||
* place to keep core related scripts
|
* place to keep core related scripts
|
||||||
* xmls/
|
* xmls/
|
||||||
* place to keep saved session xml files
|
* place to keep saved session xml files
|
||||||
* gui.log
|
* gui.log
|
||||||
* log file when running the gui, look here when issues occur for exceptions etc
|
* log file when running the gui, look here when issues occur for exceptions etc
|
||||||
* config.yaml
|
* config.yaml
|
||||||
* configuration file used to save/load various gui related settings (custom nodes, layouts, addresses, etc)
|
* configuration file used to save/load various gui related settings (custom nodes, layouts, addresses, etc)
|
||||||
|
|
||||||
## Modes of Operation
|
## Modes of Operation
|
||||||
|
|
||||||
|
@ -342,8 +338,8 @@ be selected by double-clicking its name in the list, or an interface name may
|
||||||
be entered into the text box.
|
be entered into the text box.
|
||||||
|
|
||||||
> **NOTE:** When you press the Start button to instantiate your topology, the
|
> **NOTE:** When you press the Start button to instantiate your topology, the
|
||||||
interface assigned to the RJ45 will be connected to the CORE topology. The
|
> interface assigned to the RJ45 will be connected to the CORE topology. The
|
||||||
interface can no longer be used by the system.
|
> interface can no longer be used by the system.
|
||||||
|
|
||||||
Multiple RJ45 nodes can be used within CORE and assigned to the same physical
|
Multiple RJ45 nodes can be used within CORE and assigned to the same physical
|
||||||
interface if 802.1x VLANs are used. This allows for more RJ45 nodes than
|
interface if 802.1x VLANs are used. This allows for more RJ45 nodes than
|
||||||
|
@ -378,10 +374,10 @@ address of the tunnel peer. This is the IP address of the other CORE machine or
|
||||||
physical machine, not an IP address of another virtual node.
|
physical machine, not an IP address of another virtual node.
|
||||||
|
|
||||||
> **NOTE:** Be aware of possible MTU (Maximum Transmission Unit) issues with GRE devices. The *gretap* device
|
> **NOTE:** Be aware of possible MTU (Maximum Transmission Unit) issues with GRE devices. The *gretap* device
|
||||||
has an interface MTU of 1,458 bytes; when joined to a Linux bridge, the
|
> has an interface MTU of 1,458 bytes; when joined to a Linux bridge, the
|
||||||
bridge's MTU
|
> bridge's MTU
|
||||||
becomes 1,458 bytes. The Linux bridge will not perform fragmentation for
|
> becomes 1,458 bytes. The Linux bridge will not perform fragmentation for
|
||||||
large packets if other bridge ports have a higher MTU such as 1,500 bytes.
|
> large packets if other bridge ports have a higher MTU such as 1,500 bytes.
|
||||||
|
|
||||||
The GRE key is used to identify flows with GRE tunneling. This allows multiple
|
The GRE key is used to identify flows with GRE tunneling. This allows multiple
|
||||||
GRE tunnels to exist between that same pair of tunnel peers. A unique number
|
GRE tunnels to exist between that same pair of tunnel peers. A unique number
|
||||||
|
@ -392,7 +388,7 @@ used.
|
||||||
Here are example commands for building the other end of a tunnel on a Linux
|
Here are example commands for building the other end of a tunnel on a Linux
|
||||||
machine. In this example, a router in CORE has the virtual address
|
machine. In this example, a router in CORE has the virtual address
|
||||||
**10.0.0.1/24** and the CORE host machine has the (real) address
|
**10.0.0.1/24** and the CORE host machine has the (real) address
|
||||||
**198.51.100.34/24**. The Linux box
|
**198.51.100.34/24**. The Linux box
|
||||||
that will connect with the CORE machine is reachable over the (real) network
|
that will connect with the CORE machine is reachable over the (real) network
|
||||||
at **198.51.100.76/24**.
|
at **198.51.100.76/24**.
|
||||||
The emulated router is linked with the Tunnel Node. In the
|
The emulated router is linked with the Tunnel Node. In the
|
||||||
|
@ -501,21 +497,20 @@ CORE offers several levels of wireless emulation fidelity, depending on modeling
|
||||||
hardware.
|
hardware.
|
||||||
|
|
||||||
* WLAN Node
|
* WLAN Node
|
||||||
* uses set bandwidth, delay, and loss
|
* uses set bandwidth, delay, and loss
|
||||||
* links are enabled or disabled based on a set range
|
* links are enabled or disabled based on a set range
|
||||||
* uses the least CPU when moving, but nothing extra when not moving
|
* uses the least CPU when moving, but nothing extra when not moving
|
||||||
* Wireless Node
|
* Wireless Node
|
||||||
* uses set bandwidth, delay, and initial loss
|
* uses set bandwidth, delay, and initial loss
|
||||||
* loss dynamically changes based on distance between nodes, which can be configured with range parameters
|
* loss dynamically changes based on distance between nodes, which can be configured with range parameters
|
||||||
* links are enabled or disabled based on a set range
|
* links are enabled or disabled based on a set range
|
||||||
* uses more CPU to calculate loss for every movement, but nothing extra when not moving
|
* uses more CPU to calculate loss for every movement, but nothing extra when not moving
|
||||||
* EMANE Node
|
* EMANE Node
|
||||||
* uses a physical layer model to account for signal propagation, antenna profile effects and interference
|
* uses a physical layer model to account for signal propagation, antenna profile effects and interference
|
||||||
sources in order to provide a realistic environment for wireless experimentation
|
sources in order to provide a realistic environment for wireless experimentation
|
||||||
* uses the most CPU for every packet, as complex calculations are used for fidelity
|
* uses the most CPU for every packet, as complex calculations are used for fidelity
|
||||||
* See [Wiki](https://github.com/adjacentlink/emane/wiki) for details on general EMANE usage
|
* See [Wiki](https://github.com/adjacentlink/emane/wiki) for details on general EMANE usage
|
||||||
* See [CORE EMANE](emane.md) for details on using EMANE in CORE
|
* See [CORE EMANE](emane.md) for details on using EMANE in CORE
|
||||||
|
|
||||||
|
|
||||||
| Model | Type | Supported Platform(s) | Fidelity | Description |
|
| Model | Type | Supported Platform(s) | Fidelity | Description |
|
||||||
|----------|--------|-----------------------|----------|-------------------------------------------------------------------------------|
|
|----------|--------|-----------------------|----------|-------------------------------------------------------------------------------|
|
||||||
|
@ -545,7 +540,7 @@ The default configuration of the WLAN is set to use the basic range model. Havin
|
||||||
selected causes **core-daemon** to calculate the distance between nodes based
|
selected causes **core-daemon** to calculate the distance between nodes based
|
||||||
on screen pixels. A numeric range in screen pixels is set for the wireless
|
on screen pixels. A numeric range in screen pixels is set for the wireless
|
||||||
network using the **Range** slider. When two wireless nodes are within range of
|
network using the **Range** slider. When two wireless nodes are within range of
|
||||||
each other, a green line is drawn between them and they are linked. Two
|
each other, a green line is drawn between them and they are linked. Two
|
||||||
wireless nodes that are farther than the range pixels apart are not linked.
|
wireless nodes that are farther than the range pixels apart are not linked.
|
||||||
During Execute mode, users may move wireless nodes around by clicking and
|
During Execute mode, users may move wireless nodes around by clicking and
|
||||||
dragging them, and wireless links will be dynamically made or broken.
|
dragging them, and wireless links will be dynamically made or broken.
|
||||||
|
@ -561,7 +556,8 @@ CORE has a few ways to script mobility.
|
||||||
| EMANE events | See [EMANE](emane.md) for details on using EMANE scripts to move nodes around. Location information is typically given as latitude, longitude, and altitude. |
|
| EMANE events | See [EMANE](emane.md) for details on using EMANE scripts to move nodes around. Location information is typically given as latitude, longitude, and altitude. |
|
||||||
|
|
||||||
For the first method, you can create a mobility script using a text
|
For the first method, you can create a mobility script using a text
|
||||||
editor, or using a tool such as [BonnMotion](http://net.cs.uni-bonn.de/wg/cs/applications/bonnmotion/), and associate the script with one of the wireless
|
editor, or using a tool such as [BonnMotion](http://net.cs.uni-bonn.de/wg/cs/applications/bonnmotion/), and associate
|
||||||
|
the script with one of the wireless
|
||||||
using the WLAN configuration dialog box. Click the *ns-2 mobility script...*
|
using the WLAN configuration dialog box. Click the *ns-2 mobility script...*
|
||||||
button, and set the *mobility script file* field in the resulting *ns2script*
|
button, and set the *mobility script file* field in the resulting *ns2script*
|
||||||
configuration dialog.
|
configuration dialog.
|
||||||
|
|
|
@ -15,21 +15,3 @@ networking scenarios, security studies, and increasing the size of physical test
|
||||||
* Runs applications and protocols without modification
|
* Runs applications and protocols without modification
|
||||||
* Drag and drop GUI
|
* Drag and drop GUI
|
||||||
* Highly customizable
|
* Highly customizable
|
||||||
|
|
||||||
## Topics
|
|
||||||
|
|
||||||
| Topic | Description |
|
|
||||||
|--------------------------------------|-------------------------------------------------------------------|
|
|
||||||
| [Installation](install.md) | How to install CORE and its requirements |
|
|
||||||
| [Architecture](architecture.md) | Overview of the architecture |
|
|
||||||
| [Node Types](nodetypes.md) | Overview of node types supported within CORE |
|
|
||||||
| [GUI](gui.md) | How to use the GUI |
|
|
||||||
| [Python API](python.md) | Covers how to control core directly using python |
|
|
||||||
| [gRPC API](grpc.md) | Covers how control core using gRPC |
|
|
||||||
| [Distributed](distributed.md) | Details for running CORE across multiple servers |
|
|
||||||
| [Control Network](ctrlnet.md) | How to use control networks to communicate with nodes from host |
|
|
||||||
| [Config Services](configservices.md) | Overview of provided config services and creating custom ones |
|
|
||||||
| [Services](services.md) | Overview of provided services and creating custom ones |
|
|
||||||
| [EMANE](emane.md) | Overview of EMANE integration and integrating custom EMANE models |
|
|
||||||
| [Performance](performance.md) | Notes on performance when using CORE |
|
|
||||||
| [Developers Guide](devguide.md) | Overview on how to contribute to CORE |
|
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
# Installation
|
# Installation
|
||||||
* Table of Contents
|
|
||||||
{:toc}
|
|
||||||
|
|
||||||
> **WARNING:** if Docker is installed, the default iptable rules will block CORE traffic
|
> **WARNING:** if Docker is installed, the default iptable rules will block CORE traffic
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
CORE currently supports and provides the following install options, with the package
|
CORE currently supports and provides the following install options, with the package
|
||||||
option being preferred.
|
option being preferred.
|
||||||
|
|
||||||
|
@ -13,6 +12,7 @@ option being preferred.
|
||||||
* [Dockerfile based install](#dockerfile-based-install)
|
* [Dockerfile based install](#dockerfile-based-install)
|
||||||
|
|
||||||
### Requirements
|
### Requirements
|
||||||
|
|
||||||
Any computer capable of running Linux should be able to run CORE. Since the physical machine will be hosting numerous
|
Any computer capable of running Linux should be able to run CORE. Since the physical machine will be hosting numerous
|
||||||
containers, as a general rule you should select a machine having as much RAM and CPU resources as possible.
|
containers, as a general rule you should select a machine having as much RAM and CPU resources as possible.
|
||||||
|
|
||||||
|
@ -21,31 +21,35 @@ containers, as a general rule you should select a machine having as much RAM and
|
||||||
* nftables compatible kernel and nft command line tool
|
* nftables compatible kernel and nft command line tool
|
||||||
|
|
||||||
### Supported Linux Distributions
|
### Supported Linux Distributions
|
||||||
|
|
||||||
Plan is to support recent Ubuntu and CentOS LTS releases.
|
Plan is to support recent Ubuntu and CentOS LTS releases.
|
||||||
|
|
||||||
Verified:
|
Verified:
|
||||||
|
|
||||||
* Ubuntu - 18.04, 20.04, 22.04
|
* Ubuntu - 18.04, 20.04, 22.04
|
||||||
* CentOS - 7.8
|
* CentOS - 7.8
|
||||||
|
|
||||||
### Files
|
### Files
|
||||||
|
|
||||||
The following is a list of files that would be installed after installation.
|
The following is a list of files that would be installed after installation.
|
||||||
|
|
||||||
* executables
|
* executables
|
||||||
* `<prefix>/bin/{vcmd, vnode}`
|
* `<prefix>/bin/{vcmd, vnode}`
|
||||||
* can be adjusted using script based install , package will be /usr
|
* can be adjusted using script based install , package will be /usr
|
||||||
* python files
|
* python files
|
||||||
* virtual environment `/opt/core/venv`
|
* virtual environment `/opt/core/venv`
|
||||||
* local install will be local to the python version used
|
* local install will be local to the python version used
|
||||||
* `python3 -c "import core; print(core.__file__)"`
|
* `python3 -c "import core; print(core.__file__)"`
|
||||||
* scripts {core-daemon, core-cleanup, etc}
|
* scripts {core-daemon, core-cleanup, etc}
|
||||||
* virtualenv `/opt/core/venv/bin`
|
* virtualenv `/opt/core/venv/bin`
|
||||||
* local `/usr/local/bin`
|
* local `/usr/local/bin`
|
||||||
* configuration files
|
* configuration files
|
||||||
* `/etc/core/{core.conf, logging.conf}`
|
* `/etc/core/{core.conf, logging.conf}`
|
||||||
* ospf mdr repository files when using script based install
|
* ospf mdr repository files when using script based install
|
||||||
* `<repo>/../ospf-mdr`
|
* `<repo>/../ospf-mdr`
|
||||||
|
|
||||||
### Installed Scripts
|
### Installed Scripts
|
||||||
|
|
||||||
The following python scripts are provided.
|
The following python scripts are provided.
|
||||||
|
|
||||||
| Name | Description |
|
| Name | Description |
|
||||||
|
@ -59,17 +63,20 @@ The following python scripts are provided.
|
||||||
| core-service-update | tool to update automate modifying a legacy service to match current naming |
|
| core-service-update | tool to update automate modifying a legacy service to match current naming |
|
||||||
|
|
||||||
### Upgrading from Older Release
|
### Upgrading from Older Release
|
||||||
|
|
||||||
Please make sure to uninstall any previous installations of CORE cleanly
|
Please make sure to uninstall any previous installations of CORE cleanly
|
||||||
before proceeding to install.
|
before proceeding to install.
|
||||||
|
|
||||||
Clearing out a current install from 7.0.0+, making sure to provide options
|
Clearing out a current install from 7.0.0+, making sure to provide options
|
||||||
used for install (`-l` or `-p`).
|
used for install (`-l` or `-p`).
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
cd <CORE_REPO>
|
cd <CORE_REPO>
|
||||||
inv uninstall <options>
|
inv uninstall <options>
|
||||||
```
|
```
|
||||||
|
|
||||||
Previous install was built from source for CORE release older than 7.0.0:
|
Previous install was built from source for CORE release older than 7.0.0:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
cd <CORE_REPO>
|
cd <CORE_REPO>
|
||||||
sudo make uninstall
|
sudo make uninstall
|
||||||
|
@ -78,6 +85,7 @@ make clean
|
||||||
```
|
```
|
||||||
|
|
||||||
Installed from previously built packages:
|
Installed from previously built packages:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# centos
|
# centos
|
||||||
sudo yum remove core
|
sudo yum remove core
|
||||||
|
@ -107,6 +115,7 @@ is ran when uninstalling and would require the same options as given, during the
|
||||||
> tk compatibility for python gui, and venv for virtual environments
|
> tk compatibility for python gui, and venv for virtual environments
|
||||||
|
|
||||||
Examples for install:
|
Examples for install:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# recommended to upgrade to the latest version of pip before installation
|
# recommended to upgrade to the latest version of pip before installation
|
||||||
# in python, can help avoid building from source issues
|
# in python, can help avoid building from source issues
|
||||||
|
@ -128,6 +137,7 @@ sudo <python> -m pip install /opt/core/core-<version>-py3-none-any.whl
|
||||||
```
|
```
|
||||||
|
|
||||||
Example for removal, requires using the same options as install:
|
Example for removal, requires using the same options as install:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# remove a standard install
|
# remove a standard install
|
||||||
sudo <yum/apt> remove core
|
sudo <yum/apt> remove core
|
||||||
|
@ -142,6 +152,7 @@ sudo NO_PYTHON=1 <yum/apt> remove core
|
||||||
```
|
```
|
||||||
|
|
||||||
### Installing OSPF MDR
|
### Installing OSPF MDR
|
||||||
|
|
||||||
You will need to manually install OSPF MDR for routing nodes, since this is not
|
You will need to manually install OSPF MDR for routing nodes, since this is not
|
||||||
provided by the package.
|
provided by the package.
|
||||||
|
|
||||||
|
@ -159,6 +170,7 @@ sudo make install
|
||||||
When done see [Post Install](#post-install).
|
When done see [Post Install](#post-install).
|
||||||
|
|
||||||
## Script Based Install
|
## Script Based Install
|
||||||
|
|
||||||
The script based installation will install system level dependencies, python library and
|
The script based installation will install system level dependencies, python library and
|
||||||
dependencies, as well as dependencies for building CORE.
|
dependencies, as well as dependencies for building CORE.
|
||||||
|
|
||||||
|
@ -166,6 +178,7 @@ The script based install also automatically builds and installs OSPF MDR, used b
|
||||||
on routing nodes. This can optionally be skipped.
|
on routing nodes. This can optionally be skipped.
|
||||||
|
|
||||||
Installaion will carry out the following steps:
|
Installaion will carry out the following steps:
|
||||||
|
|
||||||
* installs system dependencies for building core
|
* installs system dependencies for building core
|
||||||
* builds vcmd/vnoded and python grpc files
|
* builds vcmd/vnoded and python grpc files
|
||||||
* installs core into poetry managed virtual environment or locally, if flag is passed
|
* installs core into poetry managed virtual environment or locally, if flag is passed
|
||||||
|
@ -188,6 +201,7 @@ The following tools will be leveraged during installation:
|
||||||
| [poetry](https://python-poetry.org/) | used to install python virtual environment or building a python wheel |
|
| [poetry](https://python-poetry.org/) | used to install python virtual environment or building a python wheel |
|
||||||
|
|
||||||
First we will need to clone and navigate to the CORE repo.
|
First we will need to clone and navigate to the CORE repo.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# clone CORE repo
|
# clone CORE repo
|
||||||
git clone https://github.com/coreemu/core.git
|
git clone https://github.com/coreemu/core.git
|
||||||
|
@ -229,6 +243,7 @@ Options:
|
||||||
When done see [Post Install](#post-install).
|
When done see [Post Install](#post-install).
|
||||||
|
|
||||||
### Unsupported Linux Distribution
|
### Unsupported Linux Distribution
|
||||||
|
|
||||||
For unsupported OSs you could attempt to do the following to translate
|
For unsupported OSs you could attempt to do the following to translate
|
||||||
an installation to your use case.
|
an installation to your use case.
|
||||||
|
|
||||||
|
@ -243,6 +258,7 @@ inv install --dry -v -p <prefix> -i <install type>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Dockerfile Based Install
|
## Dockerfile Based Install
|
||||||
|
|
||||||
You can leverage one of the provided Dockerfiles, to run and launch CORE within a Docker container.
|
You can leverage one of the provided Dockerfiles, to run and launch CORE within a Docker container.
|
||||||
|
|
||||||
Since CORE nodes will leverage software available within the system for a given use case,
|
Since CORE nodes will leverage software available within the system for a given use case,
|
||||||
|
@ -253,7 +269,7 @@ make sure to update and build the Dockerfile with desired software.
|
||||||
git clone https://github.com/coreemu/core.git
|
git clone https://github.com/coreemu/core.git
|
||||||
cd core
|
cd core
|
||||||
# build image
|
# build image
|
||||||
sudo docker build -t core -f Dockerfile.<centos,ubuntu,oracle> .
|
sudo docker build -t core -f dockerfiles/Dockerfile.<centos,ubuntu,oracle> .
|
||||||
# start container
|
# start container
|
||||||
sudo docker run -itd --name core -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:rw --privileged core
|
sudo docker run -itd --name core -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:rw --privileged core
|
||||||
# enable xhost access to the root user
|
# enable xhost access to the root user
|
||||||
|
@ -265,6 +281,7 @@ sudo docker exec -it core core-gui
|
||||||
When done see [Post Install](#post-install).
|
When done see [Post Install](#post-install).
|
||||||
|
|
||||||
## Installing EMANE
|
## Installing EMANE
|
||||||
|
|
||||||
> **NOTE:** installing EMANE for the virtual environment is known to work for 1.21+
|
> **NOTE:** installing EMANE for the virtual environment is known to work for 1.21+
|
||||||
|
|
||||||
The recommended way to install EMANE is using prebuilt packages, otherwise
|
The recommended way to install EMANE is using prebuilt packages, otherwise
|
||||||
|
@ -282,6 +299,7 @@ Also, these EMANE bindings need to be built using `protoc` 3.19+. So make sure
|
||||||
that is available and being picked up on PATH properly.
|
that is available and being picked up on PATH properly.
|
||||||
|
|
||||||
Examples for building and installing EMANE python bindings for use in CORE:
|
Examples for building and installing EMANE python bindings for use in CORE:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# if your system does not have protoc 3.19+
|
# if your system does not have protoc 3.19+
|
||||||
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.6/protoc-3.19.6-linux-x86_64.zip
|
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.6/protoc-3.19.6-linux-x86_64.zip
|
||||||
|
@ -306,32 +324,39 @@ inv install-emane -e <version tag>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Post Install
|
## Post Install
|
||||||
|
|
||||||
After installation completes you are now ready to run CORE.
|
After installation completes you are now ready to run CORE.
|
||||||
|
|
||||||
### Resolving Docker Issues
|
### Resolving Docker Issues
|
||||||
|
|
||||||
If you have Docker installed, by default it will change the iptables
|
If you have Docker installed, by default it will change the iptables
|
||||||
forwarding chain to drop packets, which will cause issues for CORE traffic.
|
forwarding chain to drop packets, which will cause issues for CORE traffic.
|
||||||
|
|
||||||
You can temporarily resolve the issue with the following command:
|
You can temporarily resolve the issue with the following command:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sudo iptables --policy FORWARD ACCEPT
|
sudo iptables --policy FORWARD ACCEPT
|
||||||
```
|
```
|
||||||
|
|
||||||
Alternatively, you can configure Docker to avoid doing this, but will likely
|
Alternatively, you can configure Docker to avoid doing this, but will likely
|
||||||
break normal Docker networking usage. Using the setting below will require
|
break normal Docker networking usage. Using the setting below will require
|
||||||
a restart.
|
a restart.
|
||||||
|
|
||||||
Place the file contents below in **/etc/docker/docker.json**
|
Place the file contents below in **/etc/docker/docker.json**
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"iptables": false
|
"iptables": false
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Resolving Path Issues
|
### Resolving Path Issues
|
||||||
|
|
||||||
One problem running CORE you may run into, using the virtual environment or locally
|
One problem running CORE you may run into, using the virtual environment or locally
|
||||||
can be issues related to your path.
|
can be issues related to your path.
|
||||||
|
|
||||||
To add support for your user to run scripts from the virtual environment:
|
To add support for your user to run scripts from the virtual environment:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# can add to ~/.bashrc
|
# can add to ~/.bashrc
|
||||||
export PATH=$PATH:/opt/core/venv/bin
|
export PATH=$PATH:/opt/core/venv/bin
|
||||||
|
@ -339,6 +364,7 @@ export PATH=$PATH:/opt/core/venv/bin
|
||||||
|
|
||||||
This will not solve the path issue when running as sudo, so you can do either
|
This will not solve the path issue when running as sudo, so you can do either
|
||||||
of the following to compensate.
|
of the following to compensate.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# run command passing in the right PATH to pickup from the user running the command
|
# run command passing in the right PATH to pickup from the user running the command
|
||||||
sudo env PATH=$PATH core-daemon
|
sudo env PATH=$PATH core-daemon
|
||||||
|
@ -350,6 +376,7 @@ sudop core-daemon
|
||||||
```
|
```
|
||||||
|
|
||||||
### Running CORE
|
### Running CORE
|
||||||
|
|
||||||
The following assumes I have resolved PATH issues and setup the `sudop` alias.
|
The following assumes I have resolved PATH issues and setup the `sudop` alias.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
|
@ -360,6 +387,7 @@ core-gui
|
||||||
```
|
```
|
||||||
|
|
||||||
### Enabling Service
|
### Enabling Service
|
||||||
|
|
||||||
After installation, the core service is not enabled by default. If you desire to use the
|
After installation, the core service is not enabled by default. If you desire to use the
|
||||||
service, run the following commands.
|
service, run the following commands.
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# Install CentOS
|
# Install CentOS
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
Below is a detailed path for installing CORE and related tooling on a fresh
|
Below is a detailed path for installing CORE and related tooling on a fresh
|
||||||
CentOS 7 install. Both of the examples below will install CORE into its
|
CentOS 7 install. Both of the examples below will install CORE into its
|
||||||
own virtual environment located at **/opt/core/venv**. Both examples below
|
own virtual environment located at **/opt/core/venv**. Both examples below
|
||||||
|
@ -122,6 +124,7 @@ The CORE virtual environment and related scripts will not be found on your PATH,
|
||||||
so some adjustments needs to be made.
|
so some adjustments needs to be made.
|
||||||
|
|
||||||
To add support for your user to run scripts from the virtual environment:
|
To add support for your user to run scripts from the virtual environment:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# can add to ~/.bashrc
|
# can add to ~/.bashrc
|
||||||
export PATH=$PATH:/opt/core/venv/bin
|
export PATH=$PATH:/opt/core/venv/bin
|
||||||
|
@ -129,6 +132,7 @@ export PATH=$PATH:/opt/core/venv/bin
|
||||||
|
|
||||||
This will not solve the path issue when running as sudo, so you can do either
|
This will not solve the path issue when running as sudo, so you can do either
|
||||||
of the following to compensate.
|
of the following to compensate.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# run command passing in the right PATH to pickup from the user running the command
|
# run command passing in the right PATH to pickup from the user running the command
|
||||||
sudo env PATH=$PATH core-daemon
|
sudo env PATH=$PATH core-daemon
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
# Install Ubuntu
|
# Install Ubuntu
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
Below is a detailed path for installing CORE and related tooling on a fresh
|
Below is a detailed path for installing CORE and related tooling on a fresh
|
||||||
Ubuntu 22.04 install. Both of the examples below will install CORE into its
|
Ubuntu 22.04 installation. Both of the examples below will install CORE into its
|
||||||
own virtual environment located at **/opt/core/venv**. Both examples below
|
own virtual environment located at **/opt/core/venv**. Both examples below
|
||||||
also assume using **~/Documents** as the working directory.
|
also assume using **~/Documents** as the working directory.
|
||||||
|
|
||||||
|
@ -94,6 +96,7 @@ The CORE virtual environment and related scripts will not be found on your PATH,
|
||||||
so some adjustments needs to be made.
|
so some adjustments needs to be made.
|
||||||
|
|
||||||
To add support for your user to run scripts from the virtual environment:
|
To add support for your user to run scripts from the virtual environment:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# can add to ~/.bashrc
|
# can add to ~/.bashrc
|
||||||
export PATH=$PATH:/opt/core/venv/bin
|
export PATH=$PATH:/opt/core/venv/bin
|
||||||
|
@ -101,6 +104,7 @@ export PATH=$PATH:/opt/core/venv/bin
|
||||||
|
|
||||||
This will not solve the path issue when running as sudo, so you can do either
|
This will not solve the path issue when running as sudo, so you can do either
|
||||||
of the following to compensate.
|
of the following to compensate.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# run command passing in the right PATH to pickup from the user running the command
|
# run command passing in the right PATH to pickup from the user running the command
|
||||||
sudo env PATH=$PATH core-daemon
|
sudo env PATH=$PATH core-daemon
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# LXC Support
|
# LXC Support
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
LXC nodes are provided by way of LXD to create nodes using predefined
|
LXC nodes are provided by way of LXD to create nodes using predefined
|
||||||
images and provide file system separation.
|
images and provide file system separation.
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,4 @@
|
||||||
# CORE Node Types
|
# Node Types
|
||||||
|
|
||||||
* Table of Contents
|
|
||||||
{:toc}
|
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
# CORE Performance
|
# CORE Performance
|
||||||
|
|
||||||
* Table of Contents
|
|
||||||
{:toc}
|
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
The top question about the performance of CORE is often *how many nodes can it
|
The top question about the performance of CORE is often *how many nodes can it
|
||||||
|
@ -16,7 +13,6 @@ handle?* The answer depends on several factors:
|
||||||
| Network traffic | the more packets that are sent around the virtual network increases the amount of CPU usage. |
|
| Network traffic | the more packets that are sent around the virtual network increases the amount of CPU usage. |
|
||||||
| GUI usage | widgets that run periodically, mobility scenarios, and other GUI interactions generally consume CPU cycles that may be needed for emulation. |
|
| GUI usage | widgets that run periodically, mobility scenarios, and other GUI interactions generally consume CPU cycles that may be needed for emulation. |
|
||||||
|
|
||||||
|
|
||||||
On a typical single-CPU Xeon 3.0GHz server machine with 2GB RAM running Linux,
|
On a typical single-CPU Xeon 3.0GHz server machine with 2GB RAM running Linux,
|
||||||
we have found it reasonable to run 30-75 nodes running OSPFv2 and OSPFv3
|
we have found it reasonable to run 30-75 nodes running OSPFv2 and OSPFv3
|
||||||
routing. On this hardware CORE can instantiate 100 or more nodes, but at
|
routing. On this hardware CORE can instantiate 100 or more nodes, but at
|
||||||
|
@ -39,8 +35,8 @@ For a more detailed study of performance in CORE, refer to the following
|
||||||
publications:
|
publications:
|
||||||
|
|
||||||
* J\. Ahrenholz, T. Goff, and B. Adamson, Integration of the CORE and EMANE
|
* J\. Ahrenholz, T. Goff, and B. Adamson, Integration of the CORE and EMANE
|
||||||
Network Emulators, Proceedings of the IEEE Military Communications Conference 2011, November 2011.
|
Network Emulators, Proceedings of the IEEE Military Communications Conference 2011, November 2011.
|
||||||
* Ahrenholz, J., Comparison of CORE Network Emulation Platforms, Proceedings
|
* Ahrenholz, J., Comparison of CORE Network Emulation Platforms, Proceedings
|
||||||
of the IEEE Military Communications Conference 2010, pp. 864-869, November 2010.
|
of the IEEE Military Communications Conference 2010, pp. 864-869, November 2010.
|
||||||
* J\. Ahrenholz, C. Danilov, T. Henderson, and J.H. Kim, CORE: A real-time
|
* J\. Ahrenholz, C. Danilov, T. Henderson, and J.H. Kim, CORE: A real-time
|
||||||
network emulator, Proceedings of IEEE MILCOM Conference, 2008.
|
network emulator, Proceedings of IEEE MILCOM Conference, 2008.
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
# Python API
|
# Python API
|
||||||
|
|
||||||
* Table of Contents
|
|
||||||
{:toc}
|
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
Writing your own Python scripts offers a rich programming environment with
|
Writing your own Python scripts offers a rich programming environment with
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
# CORE Services
|
# Services (Deprecated)
|
||||||
|
|
||||||
* Table of Contents
|
## Overview
|
||||||
{:toc}
|
|
||||||
|
|
||||||
## Services
|
|
||||||
|
|
||||||
CORE uses the concept of services to specify what processes or scripts run on a
|
CORE uses the concept of services to specify what processes or scripts run on a
|
||||||
node when it is started. Layer-3 nodes such as routers and PCs are defined by
|
node when it is started. Layer-3 nodes such as routers and PCs are defined by
|
||||||
|
@ -16,8 +13,8 @@ configuration files, startup index, starting commands, validation commands,
|
||||||
shutdown commands, and meta-data associated with a node.
|
shutdown commands, and meta-data associated with a node.
|
||||||
|
|
||||||
> **NOTE:** **Network namespace nodes do not undergo the normal Linux boot process**
|
> **NOTE:** **Network namespace nodes do not undergo the normal Linux boot process**
|
||||||
using the **init**, **upstart**, or **systemd** frameworks. These
|
> using the **init**, **upstart**, or **systemd** frameworks. These
|
||||||
lightweight nodes use configured CORE *services*.
|
> lightweight nodes use configured CORE *services*.
|
||||||
|
|
||||||
## Available Services
|
## Available Services
|
||||||
|
|
||||||
|
@ -72,10 +69,10 @@ The dialog has three tabs for configuring the different aspects of the service:
|
||||||
files, directories, and startup/shutdown.
|
files, directories, and startup/shutdown.
|
||||||
|
|
||||||
> **NOTE:** A **yellow** customize icon next to a service indicates that service
|
> **NOTE:** A **yellow** customize icon next to a service indicates that service
|
||||||
requires customization (e.g. the *Firewall* service).
|
> requires customization (e.g. the *Firewall* service).
|
||||||
A **green** customize icon indicates that a custom configuration exists.
|
> A **green** customize icon indicates that a custom configuration exists.
|
||||||
Click the *Defaults* button when customizing a service to remove any
|
> Click the *Defaults* button when customizing a service to remove any
|
||||||
customizations.
|
> customizations.
|
||||||
|
|
||||||
The Files tab is used to display or edit the configuration files or scripts that
|
The Files tab is used to display or edit the configuration files or scripts that
|
||||||
are used for this service. Files can be selected from a drop-down list, and
|
are used for this service. Files can be selected from a drop-down list, and
|
||||||
|
@ -91,9 +88,9 @@ the Zebra service, because Quagga running on each node needs to write separate
|
||||||
PID files to that directory.
|
PID files to that directory.
|
||||||
|
|
||||||
> **NOTE:** The **/var/log** and **/var/run** directories are
|
> **NOTE:** The **/var/log** and **/var/run** directories are
|
||||||
mounted uniquely per-node by default.
|
> mounted uniquely per-node by default.
|
||||||
Per-node mount targets can be found in **/tmp/pycore.nnnnn/nN.conf/**
|
> Per-node mount targets can be found in **/tmp/pycore.nnnnn/nN.conf/**
|
||||||
(where *nnnnn* is the session number and *N* is the node number.)
|
(where *nnnnn* is the session number and *N* is the node number.)
|
||||||
|
|
||||||
The Startup/shutdown tab lists commands that are used to start and stop this
|
The Startup/shutdown tab lists commands that are used to start and stop this
|
||||||
service. The startup index allows configuring when this service starts relative
|
service. The startup index allows configuring when this service starts relative
|
||||||
|
@ -121,7 +118,7 @@ produces a non-zero return value, an exception is generated, which will cause
|
||||||
an error to be displayed in the Check Emulation Light.
|
an error to be displayed in the Check Emulation Light.
|
||||||
|
|
||||||
> **NOTE:** To start, stop, and restart services during run-time, right-click a
|
> **NOTE:** To start, stop, and restart services during run-time, right-click a
|
||||||
node and use the *Services...* menu.
|
> node and use the *Services...* menu.
|
||||||
|
|
||||||
## New Services
|
## New Services
|
||||||
|
|
||||||
|
|
56
mkdocs.yml
Normal file
56
mkdocs.yml
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
site_name: CORE Documentation
|
||||||
|
use_directory_urls: false
|
||||||
|
theme:
|
||||||
|
name: material
|
||||||
|
palette:
|
||||||
|
- scheme: slate
|
||||||
|
toggle:
|
||||||
|
icon: material/brightness-4
|
||||||
|
name: Switch to Light Mode
|
||||||
|
primary: teal
|
||||||
|
accent: teal
|
||||||
|
- scheme: default
|
||||||
|
toggle:
|
||||||
|
icon: material/brightness-7
|
||||||
|
name: Switch to Dark Mode
|
||||||
|
primary: teal
|
||||||
|
accent: teal
|
||||||
|
features:
|
||||||
|
- navigation.path
|
||||||
|
- navigation.instant
|
||||||
|
- navigation.footer
|
||||||
|
- content.code.copy
|
||||||
|
markdown_extensions:
|
||||||
|
- pymdownx.snippets:
|
||||||
|
base_path: docs
|
||||||
|
- admonition
|
||||||
|
- pymdownx.details
|
||||||
|
- pymdownx.superfences
|
||||||
|
- pymdownx.tabbed:
|
||||||
|
alternate_style: true
|
||||||
|
- pymdownx.inlinehilite
|
||||||
|
nav:
|
||||||
|
- Home: index.md
|
||||||
|
- Overview:
|
||||||
|
- Architecture: architecture.md
|
||||||
|
- Performance: performance.md
|
||||||
|
- Installation:
|
||||||
|
- Overview: install.md
|
||||||
|
- Ubuntu: install_ubuntu.md
|
||||||
|
- CentOS: install_centos.md
|
||||||
|
- Detailed Topics:
|
||||||
|
- GUI: gui.md
|
||||||
|
- API:
|
||||||
|
- Python: python.md
|
||||||
|
- gRPC: grpc.md
|
||||||
|
- Services:
|
||||||
|
- Config Services: configservices.md
|
||||||
|
- Services (Deprecated): services.md
|
||||||
|
- EMANE: emane.md
|
||||||
|
- Node Types:
|
||||||
|
- Overview: nodetypes.md
|
||||||
|
- Docker: docker.md
|
||||||
|
- LXC: lxc.md
|
||||||
|
- Distributed: distributed.md
|
||||||
|
- Control Network: ctrlnet.md
|
||||||
|
- Developers Guide: devguide.md
|
Loading…
Reference in a new issue