docs: updates to leverage mkdocs material admonitions
This commit is contained in:
parent
5b41b4e5be
commit
0053ddb57d
13 changed files with 533 additions and 436 deletions
|
@ -79,30 +79,28 @@ introduced to automate tasks.
|
||||||
|
|
||||||
### Creating New Services
|
### Creating New Services
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
|
||||||
|
The directory base name used in **custom_services_dir** below should
|
||||||
|
be unique and should not correspond to any existing Python module name.
|
||||||
|
For example, don't use the name **subprocess** or **services**.
|
||||||
|
|
||||||
1. Modify the example service shown below
|
1. Modify the example service shown below
|
||||||
to do what you want. It could generate config/script files, mount per-node
|
to do what you want. It could generate config/script files, mount per-node
|
||||||
directories, start processes/scripts, etc. Your file can define one or more
|
directories, start processes/scripts, etc. Your file can define one or more
|
||||||
classes to be imported. You can create multiple Python files that will be imported.
|
classes to be imported. You can create multiple Python files that will be imported.
|
||||||
|
|
||||||
2. Put these files in a directory such as ~/.coregui/custom_services
|
2. Put these files in a directory such as **~/.coregui/custom_services**.
|
||||||
Note that the last component of this directory name **myservices** should not
|
|
||||||
be named something like **services** which conflicts with an existing module.
|
|
||||||
|
|
||||||
3. Add a **custom_config_services_dir = ~/.coregui/custom_services** entry to the
|
3. Add a **custom_config_services_dir = ~/.coregui/custom_services** entry to the
|
||||||
/etc/core/core.conf file.
|
/etc/core/core.conf file.
|
||||||
|
|
||||||
**NOTE:**
|
|
||||||
The directory name used in **custom_services_dir** should be unique and
|
|
||||||
should not correspond to
|
|
||||||
any existing Python module name. For example, don't use the name **subprocess**
|
|
||||||
or **services**.
|
|
||||||
|
|
||||||
4. Restart the CORE daemon (core-daemon). Any import errors (Python syntax)
|
4. Restart the CORE daemon (core-daemon). Any import errors (Python syntax)
|
||||||
should be displayed in the terminal (or service log, like journalctl).
|
should be displayed in the terminal (or service log, like journalctl).
|
||||||
|
|
||||||
5. Start using your custom service on your nodes. You can create a new node
|
5. Start using your custom service on your nodes. You can create a new node
|
||||||
type that uses your service, or change the default services for an existing
|
type that uses your service, or change the default services for an existing
|
||||||
node type, or change individual nodes. .
|
node type, or change individual nodes.
|
||||||
|
|
||||||
### Example Custom Service
|
### Example Custom Service
|
||||||
|
|
||||||
|
|
|
@ -27,15 +27,19 @@ new sessions will use by default. To simultaneously run multiple sessions with
|
||||||
control networks, the session option should be used instead of the *core.conf*
|
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
|
||||||
> network prefix that allows more than the suggested */24*, such as */23* or
|
|
||||||
> greater.
|
|
||||||
|
|
||||||
> **NOTE:** Running a session with a control network can fail if a previous
|
If you have a large scenario with more than 253 nodes, use a control
|
||||||
> session has set up a control network and the its bridge is still up. Close
|
network prefix that allows more than the suggested */24*, such as */23* or
|
||||||
> the previous session first or wait for it to complete. If unable to, the
|
greater.
|
||||||
*core-daemon* may need to be restarted and the lingering bridge(s) removed
|
|
||||||
> manually.
|
!!! 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
|
||||||
|
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
|
||||||
|
manually.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# Restart the CORE Daemon
|
# Restart the CORE Daemon
|
||||||
|
@ -49,11 +53,13 @@ for cb in $ctrlbridges; do
|
||||||
done
|
done
|
||||||
```
|
```
|
||||||
|
|
||||||
> **NOTE:** If adjustments to the primary control network configuration made in
|
!!! note
|
||||||
*/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
|
If adjustments to the primary control network configuration made in
|
||||||
> cleared. These per session settings override the defaults in
|
**/etc/core/core.conf** do not seem to take affect, check if there is anything
|
||||||
*/etc/core/core.conf*.
|
set in the *Session Menu*, the *Options...* dialog. They may need to be
|
||||||
|
cleared. These per session settings override the defaults in
|
||||||
|
**/etc/core/core.conf**.
|
||||||
|
|
||||||
## Control Network in Distributed Sessions
|
## Control Network in Distributed Sessions
|
||||||
|
|
||||||
|
@ -117,8 +123,10 @@ 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
|
||||||
> the primary control network.
|
|
||||||
|
*controlnet0* may be used in place of *controlnet* to configure
|
||||||
|
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
|
||||||
|
@ -136,9 +144,11 @@ controlnetif2 = eth2
|
||||||
controlnetif3 = eth3
|
controlnetif3 = eth3
|
||||||
```
|
```
|
||||||
|
|
||||||
> **NOTE:** There is no need to assign an interface to the primary control
|
!!! note
|
||||||
> network because tunnels are formed between the master and the slaves using IP
|
|
||||||
> addresses that are provided in *servers.conf*.
|
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
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
|
@ -170,8 +170,10 @@ only if an EMANE model is used for the WLAN. The basic range model does
|
||||||
not work across multiple servers due to the Linux bridging and nftables
|
not work across multiple servers due to the Linux bridging and nftables
|
||||||
rules that are used.
|
rules that are used.
|
||||||
|
|
||||||
**NOTE: The basic range wireless model does not support distributed emulation,
|
!!! note
|
||||||
but EMANE does.**
|
|
||||||
|
The basic range wireless model does not support distributed emulation,
|
||||||
|
but EMANE does.
|
||||||
|
|
||||||
When nodes are linked across servers **core-daemons** will automatically
|
When nodes are linked across servers **core-daemons** will automatically
|
||||||
create necessary tunnels between the nodes when executed. Care should be taken
|
create necessary tunnels between the nodes when executed. Care should be taken
|
||||||
|
@ -182,10 +184,10 @@ These tunnels are created using GRE tunneling, similar to the Tunnel Tool.
|
||||||
## Distributed Checklist
|
## Distributed Checklist
|
||||||
|
|
||||||
1. Install CORE on master server
|
1. Install CORE on master server
|
||||||
1. Install distributed CORE package on all servers needed
|
2. Install distributed CORE package on all servers needed
|
||||||
1. Installed and configure public-key SSH access on all servers (if you want to use
|
3. 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
|
4. Update CORE configuration as needed
|
||||||
1. Choose the servers that participate in distributed emulation.
|
5. Choose the servers that participate in distributed emulation.
|
||||||
1. Assign nodes to desired servers, empty for master server.
|
6. Assign nodes to desired servers, empty for master server.
|
||||||
1. Press the **Start** button to launch the distributed emulation.
|
7. Press the **Start** button to launch the distributed emulation.
|
||||||
|
|
|
@ -57,7 +57,9 @@ You can find more detailed tutorials and examples at the
|
||||||
|
|
||||||
Every topic below assumes CORE, EMANE, and OSPF MDR have been installed.
|
Every topic below assumes CORE, EMANE, and OSPF MDR have been installed.
|
||||||
|
|
||||||
> **WARNING:** demo files will be found within the new `core-gui`
|
!!! info
|
||||||
|
|
||||||
|
Demo files will be found within the `core-gui` **~/.coregui/xmls** directory
|
||||||
|
|
||||||
| Topic | Model | Description |
|
| Topic | Model | Description |
|
||||||
|--------------------------------------|---------|-----------------------------------------------------------|
|
|--------------------------------------|---------|-----------------------------------------------------------|
|
||||||
|
@ -89,8 +91,10 @@ If you have an EMANE event generator (e.g. mobility or pathloss scripts) and
|
||||||
want to have CORE subscribe to EMANE location events, set the following line
|
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
|
||||||
> on the canvas to update their location in EMANE.
|
|
||||||
|
Do not set this option to True if you want to manually drag nodes around
|
||||||
|
on the canvas to update their location in EMANE.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
emane_event_monitor = True
|
emane_event_monitor = True
|
||||||
|
@ -278,7 +282,9 @@ 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
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
# EMANE Antenna Profiles
|
# EMANE Antenna Profiles
|
||||||
* Table of Contents
|
|
||||||
{:toc}
|
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
Introduction to using the EMANE antenna profile in CORE, based on the example
|
Introduction to using the EMANE antenna profile in CORE, based on the example
|
||||||
EMANE Demo linked below.
|
EMANE Demo linked below.
|
||||||
|
|
||||||
|
@ -10,340 +9,348 @@ EMANE Demo linked below.
|
||||||
for more specifics.
|
for more specifics.
|
||||||
|
|
||||||
## Demo Setup
|
## Demo Setup
|
||||||
|
|
||||||
We will need to create some files in advance of starting this session.
|
We will need to create some files in advance of starting this session.
|
||||||
|
|
||||||
Create directory to place antenna profile files.
|
Create directory to place antenna profile files.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
mkdir /tmp/emane
|
mkdir /tmp/emane
|
||||||
```
|
```
|
||||||
|
|
||||||
Create `/tmp/emane/antennaprofile.xml` with the following contents.
|
Create `/tmp/emane/antennaprofile.xml` with the following contents.
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE profiles SYSTEM "file:///usr/share/emane/dtd/antennaprofile.dtd">
|
<!DOCTYPE profiles SYSTEM "file:///usr/share/emane/dtd/antennaprofile.dtd">
|
||||||
<profiles>
|
<profiles>
|
||||||
<profile id="1"
|
<profile id="1"
|
||||||
antennapatternuri="/tmp/emane/antenna30dsector.xml"
|
antennapatternuri="/tmp/emane/antenna30dsector.xml"
|
||||||
blockagepatternuri="/tmp/emane/blockageaft.xml">
|
blockagepatternuri="/tmp/emane/blockageaft.xml">
|
||||||
<placement north="0" east="0" up="0"/>
|
<placement north="0" east="0" up="0"/>
|
||||||
</profile>
|
</profile>
|
||||||
<profile id="2"
|
<profile id="2"
|
||||||
antennapatternuri="/tmp/emane/antenna30dsector.xml">
|
antennapatternuri="/tmp/emane/antenna30dsector.xml">
|
||||||
<placement north="0" east="0" up="0"/>
|
<placement north="0" east="0" up="0"/>
|
||||||
</profile>
|
</profile>
|
||||||
</profiles>
|
</profiles>
|
||||||
```
|
```
|
||||||
|
|
||||||
Create `/tmp/emane/antenna30dsector.xml` with the following contents.
|
Create `/tmp/emane/antenna30dsector.xml` with the following contents.
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE antennaprofile SYSTEM "file:///usr/share/emane/dtd/antennaprofile.dtd">
|
<!DOCTYPE antennaprofile SYSTEM "file:///usr/share/emane/dtd/antennaprofile.dtd">
|
||||||
|
|
||||||
<!-- 30degree sector antenna pattern with main beam at +6dB and gain decreasing by 3dB every 5 degrees in elevation or bearing.-->
|
<!-- 30degree sector antenna pattern with main beam at +6dB and gain decreasing by 3dB every 5 degrees in elevation or bearing.-->
|
||||||
<antennaprofile>
|
<antennaprofile>
|
||||||
<antennapattern>
|
<antennapattern>
|
||||||
<elevation min='-90' max='-16'>
|
<elevation min='-90' max='-16'>
|
||||||
<bearing min='0' max='359'>
|
<bearing min='0' max='359'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
<elevation min='-15' max='-11'>
|
<elevation min='-15' max='-11'>
|
||||||
<bearing min='0' max='5'>
|
<bearing min='0' max='5'>
|
||||||
<gain value='0'/>
|
<gain value='0'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='6' max='10'>
|
<bearing min='6' max='10'>
|
||||||
<gain value='-3'/>
|
<gain value='-3'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='11' max='15'>
|
<bearing min='11' max='15'>
|
||||||
<gain value='-6'/>
|
<gain value='-6'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='16' max='344'>
|
<bearing min='16' max='344'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='345' max='349'>
|
<bearing min='345' max='349'>
|
||||||
<gain value='-6'/>
|
<gain value='-6'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='350' max='354'>
|
<bearing min='350' max='354'>
|
||||||
<gain value='-3'/>
|
<gain value='-3'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='355' max='359'>
|
<bearing min='355' max='359'>
|
||||||
<gain value='0'/>
|
<gain value='0'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
<elevation min='-10' max='-6'>
|
<elevation min='-10' max='-6'>
|
||||||
<bearing min='0' max='5'>
|
<bearing min='0' max='5'>
|
||||||
<gain value='3'/>
|
<gain value='3'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='6' max='10'>
|
<bearing min='6' max='10'>
|
||||||
<gain value='0'/>
|
<gain value='0'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='11' max='15'>
|
<bearing min='11' max='15'>
|
||||||
<gain value='-3'/>
|
<gain value='-3'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='16' max='344'>
|
<bearing min='16' max='344'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='345' max='349'>
|
<bearing min='345' max='349'>
|
||||||
<gain value='-3'/>
|
<gain value='-3'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='350' max='354'>
|
<bearing min='350' max='354'>
|
||||||
<gain value='0'/>
|
<gain value='0'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='355' max='359'>
|
<bearing min='355' max='359'>
|
||||||
<gain value='3'/>
|
<gain value='3'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
<elevation min='-5' max='-1'>
|
<elevation min='-5' max='-1'>
|
||||||
<bearing min='0' max='5'>
|
<bearing min='0' max='5'>
|
||||||
<gain value='6'/>
|
<gain value='6'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='6' max='10'>
|
<bearing min='6' max='10'>
|
||||||
<gain value='3'/>
|
<gain value='3'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='11' max='15'>
|
<bearing min='11' max='15'>
|
||||||
<gain value='0'/>
|
<gain value='0'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='16' max='344'>
|
<bearing min='16' max='344'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='345' max='349'>
|
<bearing min='345' max='349'>
|
||||||
<gain value='0'/>
|
<gain value='0'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='350' max='354'>
|
<bearing min='350' max='354'>
|
||||||
<gain value='3'/>
|
<gain value='3'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='355' max='359'>
|
<bearing min='355' max='359'>
|
||||||
<gain value='6'/>
|
<gain value='6'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
<elevation min='0' max='5'>
|
<elevation min='0' max='5'>
|
||||||
<bearing min='0' max='5'>
|
<bearing min='0' max='5'>
|
||||||
<gain value='6'/>
|
<gain value='6'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='6' max='10'>
|
<bearing min='6' max='10'>
|
||||||
<gain value='3'/>
|
<gain value='3'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='11' max='15'>
|
<bearing min='11' max='15'>
|
||||||
<gain value='0'/>
|
<gain value='0'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='16' max='344'>
|
<bearing min='16' max='344'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='345' max='349'>
|
<bearing min='345' max='349'>
|
||||||
<gain value='0'/>
|
<gain value='0'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='350' max='354'>
|
<bearing min='350' max='354'>
|
||||||
<gain value='3'/>
|
<gain value='3'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='355' max='359'>
|
<bearing min='355' max='359'>
|
||||||
<gain value='6'/>
|
<gain value='6'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
<elevation min='6' max='10'>
|
<elevation min='6' max='10'>
|
||||||
<bearing min='0' max='5'>
|
<bearing min='0' max='5'>
|
||||||
<gain value='3'/>
|
<gain value='3'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='6' max='10'>
|
<bearing min='6' max='10'>
|
||||||
<gain value='0'/>
|
<gain value='0'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='11' max='15'>
|
<bearing min='11' max='15'>
|
||||||
<gain value='-3'/>
|
<gain value='-3'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='16' max='344'>
|
<bearing min='16' max='344'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='345' max='349'>
|
<bearing min='345' max='349'>
|
||||||
<gain value='-3'/>
|
<gain value='-3'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='350' max='354'>
|
<bearing min='350' max='354'>
|
||||||
<gain value='0'/>
|
<gain value='0'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='355' max='359'>
|
<bearing min='355' max='359'>
|
||||||
<gain value='3'/>
|
<gain value='3'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
<elevation min='11' max='15'>
|
<elevation min='11' max='15'>
|
||||||
<bearing min='0' max='5'>
|
<bearing min='0' max='5'>
|
||||||
<gain value='0'/>
|
<gain value='0'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='6' max='10'>
|
<bearing min='6' max='10'>
|
||||||
<gain value='-3'/>
|
<gain value='-3'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='11' max='15'>
|
<bearing min='11' max='15'>
|
||||||
<gain value='-6'/>
|
<gain value='-6'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='16' max='344'>
|
<bearing min='16' max='344'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='345' max='349'>
|
<bearing min='345' max='349'>
|
||||||
<gain value='-6'/>
|
<gain value='-6'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='350' max='354'>
|
<bearing min='350' max='354'>
|
||||||
<gain value='-3'/>
|
<gain value='-3'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='355' max='359'>
|
<bearing min='355' max='359'>
|
||||||
<gain value='0'/>
|
<gain value='0'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
<elevation min='16' max='90'>
|
<elevation min='16' max='90'>
|
||||||
<bearing min='0' max='359'>
|
<bearing min='0' max='359'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
</antennapattern>
|
</antennapattern>
|
||||||
</antennaprofile>
|
</antennaprofile>
|
||||||
```
|
```
|
||||||
|
|
||||||
Create `/tmp/emane/blockageaft.xml` with the following contents.
|
Create `/tmp/emane/blockageaft.xml` with the following contents.
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE antennaprofile SYSTEM "file:///usr/share/emane/dtd/antennaprofile.dtd">
|
<!DOCTYPE antennaprofile SYSTEM "file:///usr/share/emane/dtd/antennaprofile.dtd">
|
||||||
|
|
||||||
<!-- blockage pattern: 1) entire aft in bearing (90 to 270) blocked 2) elevation below -10 blocked, 3) elevation from -10 to -1 is at -10dB to -1 dB 3) elevation from 0 to 90 no blockage-->
|
<!-- blockage pattern: 1) entire aft in bearing (90 to 270) blocked 2) elevation below -10 blocked, 3) elevation from -10 to -1 is at -10dB to -1 dB 3) elevation from 0 to 90 no blockage-->
|
||||||
<antennaprofile>
|
<antennaprofile>
|
||||||
<blockagepattern>
|
<blockagepattern>
|
||||||
<elevation min='-90' max='-11'>
|
<elevation min='-90' max='-11'>
|
||||||
<bearing min='0' max='359'>
|
<bearing min='0' max='359'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
<elevation min='-10' max='-10'>
|
<elevation min='-10' max='-10'>
|
||||||
<bearing min='0' max='89'>
|
<bearing min='0' max='89'>
|
||||||
<gain value='-10'/>
|
<gain value='-10'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='90' max='270'>
|
<bearing min='90' max='270'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='271' max='359'>
|
<bearing min='271' max='359'>
|
||||||
<gain value='-10'/>
|
<gain value='-10'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
<elevation min='-9' max='-9'>
|
<elevation min='-9' max='-9'>
|
||||||
<bearing min='0' max='89'>
|
<bearing min='0' max='89'>
|
||||||
<gain value='-9'/>
|
<gain value='-9'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='90' max='270'>
|
<bearing min='90' max='270'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='271' max='359'>
|
<bearing min='271' max='359'>
|
||||||
<gain value='-9'/>
|
<gain value='-9'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
<elevation min='-8' max='-8'>
|
<elevation min='-8' max='-8'>
|
||||||
<bearing min='0' max='89'>
|
<bearing min='0' max='89'>
|
||||||
<gain value='-8'/>
|
<gain value='-8'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='90' max='270'>
|
<bearing min='90' max='270'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='271' max='359'>
|
<bearing min='271' max='359'>
|
||||||
<gain value='-8'/>
|
<gain value='-8'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
<elevation min='-7' max='-7'>
|
<elevation min='-7' max='-7'>
|
||||||
<bearing min='0' max='89'>
|
<bearing min='0' max='89'>
|
||||||
<gain value='-7'/>
|
<gain value='-7'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='90' max='270'>
|
<bearing min='90' max='270'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='271' max='359'>
|
<bearing min='271' max='359'>
|
||||||
<gain value='-7'/>
|
<gain value='-7'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
<elevation min='-6' max='-6'>
|
<elevation min='-6' max='-6'>
|
||||||
<bearing min='0' max='89'>
|
<bearing min='0' max='89'>
|
||||||
<gain value='-6'/>
|
<gain value='-6'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='90' max='270'>
|
<bearing min='90' max='270'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='271' max='359'>
|
<bearing min='271' max='359'>
|
||||||
<gain value='-6'/>
|
<gain value='-6'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
<elevation min='-5' max='-5'>
|
<elevation min='-5' max='-5'>
|
||||||
<bearing min='0' max='89'>
|
<bearing min='0' max='89'>
|
||||||
<gain value='-5'/>
|
<gain value='-5'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='90' max='270'>
|
<bearing min='90' max='270'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='271' max='359'>
|
<bearing min='271' max='359'>
|
||||||
<gain value='-5'/>
|
<gain value='-5'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
<elevation min='-4' max='-4'>
|
<elevation min='-4' max='-4'>
|
||||||
<bearing min='0' max='89'>
|
<bearing min='0' max='89'>
|
||||||
<gain value='-4'/>
|
<gain value='-4'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='90' max='270'>
|
<bearing min='90' max='270'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='271' max='359'>
|
<bearing min='271' max='359'>
|
||||||
<gain value='-4'/>
|
<gain value='-4'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
<elevation min='-3' max='-3'>
|
<elevation min='-3' max='-3'>
|
||||||
<bearing min='0' max='89'>
|
<bearing min='0' max='89'>
|
||||||
<gain value='-3'/>
|
<gain value='-3'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='90' max='270'>
|
<bearing min='90' max='270'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='271' max='359'>
|
<bearing min='271' max='359'>
|
||||||
<gain value='-3'/>
|
<gain value='-3'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
<elevation min='-2' max='-2'>
|
<elevation min='-2' max='-2'>
|
||||||
<bearing min='0' max='89'>
|
<bearing min='0' max='89'>
|
||||||
<gain value='-2'/>
|
<gain value='-2'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='90' max='270'>
|
<bearing min='90' max='270'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='271' max='359'>
|
<bearing min='271' max='359'>
|
||||||
<gain value='-2'/>
|
<gain value='-2'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
<elevation min='-1' max='-1'>
|
<elevation min='-1' max='-1'>
|
||||||
<bearing min='0' max='89'>
|
<bearing min='0' max='89'>
|
||||||
<gain value='-1'/>
|
<gain value='-1'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='90' max='270'>
|
<bearing min='90' max='270'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='271' max='359'>
|
<bearing min='271' max='359'>
|
||||||
<gain value='-1'/>
|
<gain value='-1'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
<elevation min='0' max='90'>
|
<elevation min='0' max='90'>
|
||||||
<bearing min='0' max='89'>
|
<bearing min='0' max='89'>
|
||||||
<gain value='0'/>
|
<gain value='0'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='90' max='270'>
|
<bearing min='90' max='270'>
|
||||||
<gain value='-200'/>
|
<gain value='-200'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
<bearing min='271' max='359'>
|
<bearing min='271' max='359'>
|
||||||
<gain value='0'/>
|
<gain value='0'/>
|
||||||
</bearing>
|
</bearing>
|
||||||
</elevation>
|
</elevation>
|
||||||
</blockagepattern>
|
</blockagepattern>
|
||||||
</antennaprofile>
|
</antennaprofile>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run Demo
|
## Run Demo
|
||||||
|
|
||||||
1. Select `Open...` within the GUI
|
1. Select `Open...` within the GUI
|
||||||
1. Load `emane-demo-antenna.xml`
|
1. Load `emane-demo-antenna.xml`
|
||||||
1. Click 
|
1. Click 
|
||||||
1. After startup completes, double click n1 to bring up the nodes terminal
|
1. After startup completes, double click n1 to bring up the nodes terminal
|
||||||
|
|
||||||
## Example Demo
|
## Example Demo
|
||||||
|
|
||||||
This demo will cover running an EMANE event service to feed in antenna,
|
This demo will cover running an EMANE event service to feed in antenna,
|
||||||
location, and pathloss events to demonstrate how antenna profiles
|
location, and pathloss events to demonstrate how antenna profiles
|
||||||
can be used.
|
can be used.
|
||||||
|
|
||||||
### EMANE Event Dump
|
### EMANE Event Dump
|
||||||
|
|
||||||
On n1 lets dump EMANE events, so when we later run the EMANE event service
|
On n1 lets dump EMANE events, so when we later run the EMANE event service
|
||||||
you can monitor when and what is sent.
|
you can monitor when and what is sent.
|
||||||
|
|
||||||
|
@ -352,38 +359,44 @@ root@n1:/tmp/pycore.44917/n1.conf# emaneevent-dump -i ctrl0
|
||||||
```
|
```
|
||||||
|
|
||||||
### Send EMANE Events
|
### Send EMANE Events
|
||||||
|
|
||||||
On the host machine create the following to send EMANE events.
|
On the host machine create the following to send EMANE events.
|
||||||
|
|
||||||
> **WARNING:** make sure to set the `eventservicedevice` to the proper control
|
!!! warning
|
||||||
> network value
|
|
||||||
|
Make sure to set the `eventservicedevice` to the proper control
|
||||||
|
network value
|
||||||
|
|
||||||
Create `eventservice.xml` with the following contents.
|
Create `eventservice.xml` with the following contents.
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE eventservice SYSTEM "file:///usr/share/emane/dtd/eventservice.dtd">
|
<!DOCTYPE eventservice SYSTEM "file:///usr/share/emane/dtd/eventservice.dtd">
|
||||||
<eventservice>
|
<eventservice>
|
||||||
<param name="eventservicegroup" value="224.1.2.8:45703"/>
|
<param name="eventservicegroup" value="224.1.2.8:45703"/>
|
||||||
<param name="eventservicedevice" value="b.9001.da"/>
|
<param name="eventservicedevice" value="b.9001.da"/>
|
||||||
<generator definition="eelgenerator.xml"/>
|
<generator definition="eelgenerator.xml"/>
|
||||||
</eventservice>
|
</eventservice>
|
||||||
```
|
```
|
||||||
|
|
||||||
Create `eelgenerator.xml` with the following contents.
|
Create `eelgenerator.xml` with the following contents.
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE eventgenerator SYSTEM "file:///usr/share/emane/dtd/eventgenerator.dtd">
|
<!DOCTYPE eventgenerator SYSTEM "file:///usr/share/emane/dtd/eventgenerator.dtd">
|
||||||
<eventgenerator library="eelgenerator">
|
<eventgenerator library="eelgenerator">
|
||||||
<param name="inputfile" value="scenario.eel" />
|
<param name="inputfile" value="scenario.eel"/>
|
||||||
<paramlist name="loader">
|
<paramlist name="loader">
|
||||||
<item value="commeffect:eelloadercommeffect:delta"/>
|
<item value="commeffect:eelloadercommeffect:delta"/>
|
||||||
<item value="location,velocity,orientation:eelloaderlocation:delta"/>
|
<item value="location,velocity,orientation:eelloaderlocation:delta"/>
|
||||||
<item value="pathloss:eelloaderpathloss:delta"/>
|
<item value="pathloss:eelloaderpathloss:delta"/>
|
||||||
<item value="antennaprofile:eelloaderantennaprofile:delta"/>
|
<item value="antennaprofile:eelloaderantennaprofile:delta"/>
|
||||||
</paramlist>
|
</paramlist>
|
||||||
</eventgenerator>
|
</eventgenerator>
|
||||||
```
|
```
|
||||||
|
|
||||||
Create `scenario.eel` with the following contents.
|
Create `scenario.eel` with the following contents.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
0.0 nem:1 antennaprofile 1,0.0,0.0
|
0.0 nem:1 antennaprofile 1,0.0,0.0
|
||||||
0.0 nem:4 antennaprofile 2,0.0,0.0
|
0.0 nem:4 antennaprofile 2,0.0,0.0
|
||||||
|
@ -413,23 +426,25 @@ Create `scenario.eel` with the following contents.
|
||||||
|
|
||||||
Run the EMANE event service, monitor what is output on n1 for events
|
Run the EMANE event service, monitor what is output on n1 for events
|
||||||
dumped and see the link changes within the CORE GUI.
|
dumped and see the link changes within the CORE GUI.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
emaneeventservice -l 3 eventservice.xml
|
emaneeventservice -l 3 eventservice.xml
|
||||||
```
|
```
|
||||||
|
|
||||||
### Stages
|
### Stages
|
||||||
|
|
||||||
The events sent will trigger 4 different states.
|
The events sent will trigger 4 different states.
|
||||||
|
|
||||||
* State 1
|
* State 1
|
||||||
* n2 and n3 see each other
|
* n2 and n3 see each other
|
||||||
* n4 and n3 are pointing away
|
* n4 and n3 are pointing away
|
||||||
* State 2
|
* State 2
|
||||||
* n2 and n3 see each other
|
* n2 and n3 see each other
|
||||||
* n1 and n2 see each other
|
* n1 and n2 see each other
|
||||||
* n4 and n3 see each other
|
* n4 and n3 see each other
|
||||||
* State 3
|
* State 3
|
||||||
* n2 and n3 see each other
|
* n2 and n3 see each other
|
||||||
* n4 and n3 are pointing at each other but blocked
|
* n4 and n3 are pointing at each other but blocked
|
||||||
* State 4
|
* State 4
|
||||||
* n2 and n3 see each other
|
* n2 and n3 see each other
|
||||||
* n4 and n3 see each other
|
* n4 and n3 see each other
|
||||||
|
|
|
@ -1,44 +1,51 @@
|
||||||
# EMANE Emulation Event Log (EEL) Generator
|
# EMANE Emulation Event Log (EEL) Generator
|
||||||
* Table of Contents
|
|
||||||
{:toc}
|
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
Introduction to using the EMANE event service and eel files to provide events.
|
Introduction to using the EMANE event service and eel files to provide events.
|
||||||
|
|
||||||
[EMANE Demo 1](https://github.com/adjacentlink/emane-tutorial/wiki/Demonstration-1)
|
[EMANE Demo 1](https://github.com/adjacentlink/emane-tutorial/wiki/Demonstration-1)
|
||||||
for more specifics.
|
for more specifics.
|
||||||
|
|
||||||
## Run Demo
|
## Run Demo
|
||||||
|
|
||||||
1. Select `Open...` within the GUI
|
1. Select `Open...` within the GUI
|
||||||
1. Load `emane-demo-eel.xml`
|
2. Load `emane-demo-eel.xml`
|
||||||
1. Click 
|
3. Click 
|
||||||
1. After startup completes, double click n1 to bring up the nodes terminal
|
4. After startup completes, double click n1 to bring up the nodes terminal
|
||||||
|
|
||||||
## Example Demo
|
## Example Demo
|
||||||
|
|
||||||
This demo will go over defining an EMANE event service and eel file to drive
|
This demo will go over defining an EMANE event service and eel file to drive
|
||||||
an emane event service.
|
an emane event service.
|
||||||
|
|
||||||
### Viewing Events
|
### Viewing Events
|
||||||
|
|
||||||
On n1 we will use the EMANE event dump utility to listen to events.
|
On n1 we will use the EMANE event dump utility to listen to events.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
root@n1:/tmp/pycore.46777/n1.conf# emaneevent-dump -i ctrl0
|
root@n1:/tmp/pycore.46777/n1.conf# emaneevent-dump -i ctrl0
|
||||||
```
|
```
|
||||||
|
|
||||||
### Sending Events
|
### Sending Events
|
||||||
|
|
||||||
On the host machine we will create the following files and start the
|
On the host machine we will create the following files and start the
|
||||||
EMANE event service targeting the control network.
|
EMANE event service targeting the control network.
|
||||||
|
|
||||||
> **WARNING:** make sure to set the `eventservicedevice` to the proper control
|
!!! warning
|
||||||
> network value
|
|
||||||
|
Make sure to set the `eventservicedevice` to the proper control
|
||||||
|
network value
|
||||||
|
|
||||||
Create `eventservice.xml` with the following contents.
|
Create `eventservice.xml` with the following contents.
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE eventservice SYSTEM "file:///usr/share/emane/dtd/eventservice.dtd">
|
<!DOCTYPE eventservice SYSTEM "file:///usr/share/emane/dtd/eventservice.dtd">
|
||||||
<eventservice>
|
<eventservice>
|
||||||
<param name="eventservicegroup" value="224.1.2.8:45703"/>
|
<param name="eventservicegroup" value="224.1.2.8:45703"/>
|
||||||
<param name="eventservicedevice" value="b.9001.f"/>
|
<param name="eventservicedevice" value="b.9001.f"/>
|
||||||
<generator definition="eelgenerator.xml"/>
|
<generator definition="eelgenerator.xml"/>
|
||||||
</eventservice>
|
</eventservice>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -57,21 +64,23 @@ These configuration items tell the EEL Generator which sentences to map to
|
||||||
which plugin and whether to issue delta or full updates.
|
which plugin and whether to issue delta or full updates.
|
||||||
|
|
||||||
Create `eelgenerator.xml` with the following contents.
|
Create `eelgenerator.xml` with the following contents.
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE eventgenerator SYSTEM "file:///usr/share/emane/dtd/eventgenerator.dtd">
|
<!DOCTYPE eventgenerator SYSTEM "file:///usr/share/emane/dtd/eventgenerator.dtd">
|
||||||
<eventgenerator library="eelgenerator">
|
<eventgenerator library="eelgenerator">
|
||||||
<param name="inputfile" value="scenario.eel" />
|
<param name="inputfile" value="scenario.eel"/>
|
||||||
<paramlist name="loader">
|
<paramlist name="loader">
|
||||||
<item value="commeffect:eelloadercommeffect:delta"/>
|
<item value="commeffect:eelloadercommeffect:delta"/>
|
||||||
<item value="location,velocity,orientation:eelloaderlocation:delta"/>
|
<item value="location,velocity,orientation:eelloaderlocation:delta"/>
|
||||||
<item value="pathloss:eelloaderpathloss:delta"/>
|
<item value="pathloss:eelloaderpathloss:delta"/>
|
||||||
<item value="antennaprofile:eelloaderantennaprofile:delta"/>
|
<item value="antennaprofile:eelloaderantennaprofile:delta"/>
|
||||||
</paramlist>
|
</paramlist>
|
||||||
</eventgenerator>
|
</eventgenerator>
|
||||||
```
|
```
|
||||||
|
|
||||||
Finally, create `scenario.eel` with the following contents.
|
Finally, create `scenario.eel` with the following contents.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
0.0 nem:1 pathloss nem:2,90.0
|
0.0 nem:1 pathloss nem:2,90.0
|
||||||
0.0 nem:2 pathloss nem:1,90.0
|
0.0 nem:2 pathloss nem:1,90.0
|
||||||
|
@ -80,11 +89,13 @@ Finally, create `scenario.eel` with the following contents.
|
||||||
```
|
```
|
||||||
|
|
||||||
Start the EMANE event service using the files created above.
|
Start the EMANE event service using the files created above.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
emaneeventservice eventservice.xml -l 3
|
emaneeventservice eventservice.xml -l 3
|
||||||
```
|
```
|
||||||
|
|
||||||
### Sent Events
|
### Sent Events
|
||||||
|
|
||||||
If we go back to look at our original terminal we will see the events logged
|
If we go back to look at our original terminal we will see the events logged
|
||||||
out to the terminal.
|
out to the terminal.
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
# EMANE XML Files
|
# EMANE XML Files
|
||||||
* Table of Contents
|
|
||||||
{:toc}
|
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
Introduction to the XML files generated by CORE used to drive EMANE for
|
Introduction to the XML files generated by CORE used to drive EMANE for
|
||||||
a given node.
|
a given node.
|
||||||
|
|
||||||
|
@ -10,12 +9,14 @@ a given node.
|
||||||
may provide more helpful details.
|
may provide more helpful details.
|
||||||
|
|
||||||
## Run Demo
|
## Run Demo
|
||||||
|
|
||||||
1. Select `Open...` within the GUI
|
1. Select `Open...` within the GUI
|
||||||
1. Load `emane-demo-files.xml`
|
2. Load `emane-demo-files.xml`
|
||||||
1. Click 
|
3. Click 
|
||||||
1. After startup completes, double click n1 to bring up the nodes terminal
|
4. After startup completes, double click n1 to bring up the nodes terminal
|
||||||
|
|
||||||
## Example Demo
|
## Example Demo
|
||||||
|
|
||||||
We will take a look at the files generated in the example demo provided. In this
|
We will take a look at the files generated in the example demo provided. In this
|
||||||
case we are running the RF Pipe model.
|
case we are running the RF Pipe model.
|
||||||
|
|
||||||
|
@ -31,6 +32,7 @@ case we are running the RF Pipe model.
|
||||||
| \<interface name>-trans.xml | configuration when a raw transport is being used |
|
| \<interface name>-trans.xml | configuration when a raw transport is being used |
|
||||||
|
|
||||||
### Listing File
|
### Listing File
|
||||||
|
|
||||||
Below are the files within n1 after starting the demo session.
|
Below are the files within n1 after starting the demo session.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
|
@ -41,6 +43,7 @@ eth0-phy.xml n1-emane.log usr.local.etc.quagga var.run.quagga
|
||||||
```
|
```
|
||||||
|
|
||||||
### Platform XML
|
### Platform XML
|
||||||
|
|
||||||
The root configuration file used to run EMANE for a node is the platform xml file.
|
The root configuration file used to run EMANE for a node is the platform xml file.
|
||||||
In this demo we are looking at `n1-platform.xml`.
|
In this demo we are looking at `n1-platform.xml`.
|
||||||
|
|
||||||
|
@ -78,6 +81,7 @@ root@n1:/tmp/pycore.46777/n1.conf# cat n1-platform.xml
|
||||||
```
|
```
|
||||||
|
|
||||||
### NEM XML
|
### NEM XML
|
||||||
|
|
||||||
The nem definition will contain reference to the transport, mac, and phy xml
|
The nem definition will contain reference to the transport, mac, and phy xml
|
||||||
definitions being used for a given nem.
|
definitions being used for a given nem.
|
||||||
|
|
||||||
|
@ -93,6 +97,7 @@ root@n1:/tmp/pycore.46777/n1.conf# cat eth0-nem.xml
|
||||||
```
|
```
|
||||||
|
|
||||||
### MAC XML
|
### MAC XML
|
||||||
|
|
||||||
MAC layer configuration settings would be found in this file. CORE will write
|
MAC layer configuration settings would be found in this file. CORE will write
|
||||||
out all values, even if the value is a default value.
|
out all values, even if the value is a default value.
|
||||||
|
|
||||||
|
@ -115,6 +120,7 @@ root@n1:/tmp/pycore.46777/n1.conf# cat eth0-mac.xml
|
||||||
```
|
```
|
||||||
|
|
||||||
### PHY XML
|
### PHY XML
|
||||||
|
|
||||||
PHY layer configuration settings would be found in this file. CORE will write
|
PHY layer configuration settings would be found in this file. CORE will write
|
||||||
out all values, even if the value is a default value.
|
out all values, even if the value is a default value.
|
||||||
|
|
||||||
|
@ -149,6 +155,7 @@ root@n1:/tmp/pycore.46777/n1.conf# cat eth0-phy.xml
|
||||||
```
|
```
|
||||||
|
|
||||||
### Transport XML
|
### Transport XML
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
root@n1:/tmp/pycore.46777/n1.conf# cat eth0-trans-virtual.xml
|
root@n1:/tmp/pycore.46777/n1.conf# cat eth0-trans-virtual.xml
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
|
|
@ -1,54 +1,62 @@
|
||||||
# EMANE GPSD Integration
|
# EMANE GPSD Integration
|
||||||
* Table of Contents
|
|
||||||
{:toc}
|
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
Introduction to integrating gpsd in CORE with EMANE.
|
Introduction to integrating gpsd in CORE with EMANE.
|
||||||
|
|
||||||
[EMANE Demo 0](https://github.com/adjacentlink/emane-tutorial/wiki/Demonstration-0)
|
[EMANE Demo 0](https://github.com/adjacentlink/emane-tutorial/wiki/Demonstration-0)
|
||||||
may provide more helpful details.
|
may provide more helpful details.
|
||||||
|
|
||||||
> **WARNING:** requires installation of [gpsd](https://gpsd.gitlab.io/gpsd/index.html)
|
!!!! warning
|
||||||
|
|
||||||
|
Requires installation of [gpsd](https://gpsd.gitlab.io/gpsd/index.html)
|
||||||
|
|
||||||
## Run Demo
|
## Run Demo
|
||||||
|
|
||||||
1. Select `Open...` within the GUI
|
1. Select `Open...` within the GUI
|
||||||
1. Load `emane-demo-gpsd.xml`
|
2. Load `emane-demo-gpsd.xml`
|
||||||
1. Click 
|
3. Click 
|
||||||
1. After startup completes, double click n1 to bring up the nodes terminal
|
4. After startup completes, double click n1 to bring up the nodes terminal
|
||||||
|
|
||||||
## Example Demo
|
## Example Demo
|
||||||
|
|
||||||
This section will cover how to run a gpsd location agent within EMANE, that will
|
This section will cover how to run a gpsd location agent within EMANE, that will
|
||||||
write out locations to a pseudo terminal file. That file can be read in by the
|
write out locations to a pseudo terminal file. That file can be read in by the
|
||||||
gpsd server and make EMANE location events available to gpsd clients.
|
gpsd server and make EMANE location events available to gpsd clients.
|
||||||
|
|
||||||
### EMANE GPSD Event Daemon
|
### EMANE GPSD Event Daemon
|
||||||
|
|
||||||
First create an `eventdaemon.xml` file on n1 with the following contents.
|
First create an `eventdaemon.xml` file on n1 with the following contents.
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE eventdaemon SYSTEM "file:///usr/share/emane/dtd/eventdaemon.dtd">
|
<!DOCTYPE eventdaemon SYSTEM "file:///usr/share/emane/dtd/eventdaemon.dtd">
|
||||||
<eventdaemon nemid="1">
|
<eventdaemon nemid="1">
|
||||||
<param name="eventservicegroup" value="224.1.2.8:45703"/>
|
<param name="eventservicegroup" value="224.1.2.8:45703"/>
|
||||||
<param name="eventservicedevice" value="ctrl0"/>
|
<param name="eventservicedevice" value="ctrl0"/>
|
||||||
<agent definition="gpsdlocationagent.xml"/>
|
<agent definition="gpsdlocationagent.xml"/>
|
||||||
</eventdaemon>
|
</eventdaemon>
|
||||||
```
|
```
|
||||||
|
|
||||||
Then create the `gpsdlocationagent.xml` file on n1 with the following contents.
|
Then create the `gpsdlocationagent.xml` file on n1 with the following contents.
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE eventagent SYSTEM "file:///usr/share/emane/dtd/eventagent.dtd">
|
<!DOCTYPE eventagent SYSTEM "file:///usr/share/emane/dtd/eventagent.dtd">
|
||||||
<eventagent library="gpsdlocationagent">
|
<eventagent library="gpsdlocationagent">
|
||||||
<param name="pseudoterminalfile" value="gps.pty"/>
|
<param name="pseudoterminalfile" value="gps.pty"/>
|
||||||
</eventagent>
|
</eventagent>
|
||||||
```
|
```
|
||||||
|
|
||||||
Start the EMANE event agent. This will facilitate feeding location events
|
Start the EMANE event agent. This will facilitate feeding location events
|
||||||
out to a pseudo terminal file defined above.
|
out to a pseudo terminal file defined above.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
emaneeventd eventdaemon.xml -r -d -l 3 -f emaneeventd.log
|
emaneeventd eventdaemon.xml -r -d -l 3 -f emaneeventd.log
|
||||||
```
|
```
|
||||||
|
|
||||||
Start gpsd, reading in the pseudo terminal file.
|
Start gpsd, reading in the pseudo terminal file.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
gpsd -G -n -b $(cat gps.pty)
|
gpsd -G -n -b $(cat gps.pty)
|
||||||
```
|
```
|
||||||
|
@ -59,36 +67,41 @@ EEL Events will be played out from the actual host machine over the designated
|
||||||
control network interface. Create the following files in the same directory
|
control network interface. Create the following files in the same directory
|
||||||
somewhere on your host.
|
somewhere on your host.
|
||||||
|
|
||||||
> **NOTE:** make sure the below eventservicedevice matches the control network
|
!!! note
|
||||||
> device being used on the host for EMANE
|
|
||||||
|
Make sure the below eventservicedevice matches the control network
|
||||||
|
device being used on the host for EMANE
|
||||||
|
|
||||||
Create `eventservice.xml` on the host machine with the following contents.
|
Create `eventservice.xml` on the host machine with the following contents.
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE eventservice SYSTEM "file:///usr/share/emane/dtd/eventservice.dtd">
|
<!DOCTYPE eventservice SYSTEM "file:///usr/share/emane/dtd/eventservice.dtd">
|
||||||
<eventservice>
|
<eventservice>
|
||||||
<param name="eventservicegroup" value="224.1.2.8:45703"/>
|
<param name="eventservicegroup" value="224.1.2.8:45703"/>
|
||||||
<param name="eventservicedevice" value="b.9001.1"/>
|
<param name="eventservicedevice" value="b.9001.1"/>
|
||||||
<generator definition="eelgenerator.xml"/>
|
<generator definition="eelgenerator.xml"/>
|
||||||
</eventservice>
|
</eventservice>
|
||||||
```
|
```
|
||||||
|
|
||||||
Create `eelgenerator.xml` on the host machine with the following contents.
|
Create `eelgenerator.xml` on the host machine with the following contents.
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE eventgenerator SYSTEM "file:///usr/share/emane/dtd/eventgenerator.dtd">
|
<!DOCTYPE eventgenerator SYSTEM "file:///usr/share/emane/dtd/eventgenerator.dtd">
|
||||||
<eventgenerator library="eelgenerator">
|
<eventgenerator library="eelgenerator">
|
||||||
<param name="inputfile" value="scenario.eel" />
|
<param name="inputfile" value="scenario.eel"/>
|
||||||
<paramlist name="loader">
|
<paramlist name="loader">
|
||||||
<item value="commeffect:eelloadercommeffect:delta"/>
|
<item value="commeffect:eelloadercommeffect:delta"/>
|
||||||
<item value="location,velocity,orientation:eelloaderlocation:delta"/>
|
<item value="location,velocity,orientation:eelloaderlocation:delta"/>
|
||||||
<item value="pathloss:eelloaderpathloss:delta"/>
|
<item value="pathloss:eelloaderpathloss:delta"/>
|
||||||
<item value="antennaprofile:eelloaderantennaprofile:delta"/>
|
<item value="antennaprofile:eelloaderantennaprofile:delta"/>
|
||||||
</paramlist>
|
</paramlist>
|
||||||
</eventgenerator>
|
</eventgenerator>
|
||||||
```
|
```
|
||||||
|
|
||||||
Create `scenario.eel` file with the following contents.
|
Create `scenario.eel` file with the following contents.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
0.0 nem:1 location gps 40.031075,-74.523518,3.000000
|
0.0 nem:1 location gps 40.031075,-74.523518,3.000000
|
||||||
0.0 nem:2 location gps 40.031165,-74.523412,3.000000
|
0.0 nem:2 location gps 40.031165,-74.523412,3.000000
|
||||||
|
@ -96,7 +109,8 @@ Create `scenario.eel` file with the following contents.
|
||||||
|
|
||||||
Start the EEL event service, which will send the events defined in the file above
|
Start the EEL event service, which will send the events defined in the file above
|
||||||
over the control network to all EMANE nodes. These location events will be received
|
over the control network to all EMANE nodes. These location events will be received
|
||||||
and provided to gpsd. This allow gpsd client to connect to and get gps locations.
|
and provided to gpsd. This allows gpsd client to connect to and get gps locations.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
emaneeventservice eventservice.xml -l 3
|
emaneeventservice eventservice.xml -l 3
|
||||||
```
|
```
|
||||||
|
|
|
@ -1,35 +1,40 @@
|
||||||
# EMANE Procomputed
|
# EMANE Procomputed
|
||||||
* Table of Contents
|
|
||||||
{:toc}
|
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
Introduction to using the precomputed propagation model.
|
Introduction to using the precomputed propagation model.
|
||||||
|
|
||||||
[EMANE Demo 1](https://github.com/adjacentlink/emane-tutorial/wiki/Demonstration-1)
|
[EMANE Demo 1](https://github.com/adjacentlink/emane-tutorial/wiki/Demonstration-1)
|
||||||
for more specifics.
|
for more specifics.
|
||||||
|
|
||||||
## Run Demo
|
## Run Demo
|
||||||
|
|
||||||
1. Select `Open...` within the GUI
|
1. Select `Open...` within the GUI
|
||||||
1. Load `emane-demo-precomputed.xml`
|
2. Load `emane-demo-precomputed.xml`
|
||||||
1. Click 
|
3. Click 
|
||||||
1. After startup completes, double click n1 to bring up the nodes terminal
|
4. After startup completes, double click n1 to bring up the nodes terminal
|
||||||
|
|
||||||
## Example Demo
|
## Example Demo
|
||||||
This demo is uing the RF Pipe model witht he propagation model set to
|
|
||||||
|
This demo is using the RF Pipe model with the propagation model set to
|
||||||
precomputed.
|
precomputed.
|
||||||
|
|
||||||
### Failed Pings
|
### Failed Pings
|
||||||
|
|
||||||
Due to using precomputed and having not sent any pathloss events, the nodes
|
Due to using precomputed and having not sent any pathloss events, the nodes
|
||||||
cannot ping eachother yet.
|
cannot ping each other yet.
|
||||||
|
|
||||||
Open a terminal on n1.
|
Open a terminal on n1.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
root@n1:/tmp/pycore.46777/n1.conf# ping 10.0.0.2
|
root@n1:/tmp/pycore.46777/n1.conf# ping 10.0.0.2
|
||||||
connect: Network is unreachable
|
connect: Network is unreachable
|
||||||
```
|
```
|
||||||
|
|
||||||
### EMANE Shell
|
### EMANE Shell
|
||||||
|
|
||||||
You can leverage `emanesh` to investigate why packets are being dropped.
|
You can leverage `emanesh` to investigate why packets are being dropped.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
root@n1:/tmp/pycore.46777/n1.conf# emanesh localhost get table nems phy BroadcastPacketDropTable0 UnicastPacketDropTable0
|
root@n1:/tmp/pycore.46777/n1.conf# emanesh localhost get table nems phy BroadcastPacketDropTable0 UnicastPacketDropTable0
|
||||||
nem 1 phy BroadcastPacketDropTable0
|
nem 1 phy BroadcastPacketDropTable0
|
||||||
|
@ -43,6 +48,7 @@ nem 1 phy UnicastPacketDropTable0
|
||||||
In the example above we can see that the reason packets are being dropped is due to
|
In the example above we can see that the reason packets are being dropped is due to
|
||||||
the propogation model and that is because we have not issued any pathloss events.
|
the propogation model and that is because we have not issued any pathloss events.
|
||||||
You can run another command to validate if you have received any pathloss events.
|
You can run another command to validate if you have received any pathloss events.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
root@n1:/tmp/pycore.46777/n1.conf# emanesh localhost get table nems phy PathlossEventInfoTable
|
root@n1:/tmp/pycore.46777/n1.conf# emanesh localhost get table nems phy PathlossEventInfoTable
|
||||||
nem 1 phy PathlossEventInfoTable
|
nem 1 phy PathlossEventInfoTable
|
||||||
|
@ -50,15 +56,19 @@ nem 1 phy PathlossEventInfoTable
|
||||||
```
|
```
|
||||||
|
|
||||||
### Pathloss Events
|
### Pathloss Events
|
||||||
|
|
||||||
On the host we will send pathloss events from all nems to all other nems.
|
On the host we will send pathloss events from all nems to all other nems.
|
||||||
|
|
||||||
> **NOTE:** make sure properly specify the right control network device
|
!!! note
|
||||||
|
|
||||||
|
Make sure properly specify the right control network device
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
emaneevent-pathloss 1:2 90 -i <controlnet device>
|
emaneevent-pathloss 1:2 90 -i <controlnet device>
|
||||||
```
|
```
|
||||||
|
|
||||||
Now if we check for pathloss events on n2 we will see what was just sent above.
|
Now if we check for pathloss events on n2 we will see what was just sent above.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
root@n1:/tmp/pycore.46777/n1.conf# emanesh localhost get table nems phy PathlossEventInfoTable
|
root@n1:/tmp/pycore.46777/n1.conf# emanesh localhost get table nems phy PathlossEventInfoTable
|
||||||
nem 1 phy PathlossEventInfoTable
|
nem 1 phy PathlossEventInfoTable
|
||||||
|
@ -67,6 +77,7 @@ nem 1 phy PathlossEventInfoTable
|
||||||
```
|
```
|
||||||
|
|
||||||
You should also now be able to ping n1 from n2.
|
You should also now be able to ping n1 from n2.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
root@n1:/tmp/pycore.46777/n1.conf# ping -c 3 10.0.0.2
|
root@n1:/tmp/pycore.46777/n1.conf# ping -c 3 10.0.0.2
|
||||||
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
|
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
|
||||||
|
|
20
docs/hitl.md
20
docs/hitl.md
|
@ -34,9 +34,11 @@ and the other node you wish to be connected to. The RJ45 node will display "UNAS
|
||||||
Double-click the RJ45 node to assign a physical interface. A list of available
|
Double-click the RJ45 node to assign a physical interface. A list of available
|
||||||
interfaces will be shown, and one may be selected, then selecting **Apply**.
|
interfaces will be shown, and one may be selected, then selecting **Apply**.
|
||||||
|
|
||||||
> **NOTE:** When you press the Start button to instantiate your topology, the
|
!!! note
|
||||||
> interface assigned to the RJ45 will be connected to the CORE topology. The
|
|
||||||
> interface can no longer be used by the system.
|
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 can no longer be used by the system.
|
||||||
|
|
||||||
### Multiple RJ45s with One Interface (VLAN)
|
### Multiple RJ45s with One Interface (VLAN)
|
||||||
|
|
||||||
|
@ -71,11 +73,13 @@ the node will display "UNASSIGNED". This text should be replaced with the IP
|
||||||
address of the tunnel peer. This is the IP address of the other CORE machine or
|
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
|
||||||
> has an interface MTU of 1,458 bytes; when joined to a Linux bridge, the
|
|
||||||
> bridge's MTU
|
Be aware of possible MTU (Maximum Transmission Unit) issues with GRE devices.
|
||||||
> becomes 1,458 bytes. The Linux bridge will not perform fragmentation for
|
The *gretap* device has an interface MTU of 1,458 bytes; when joined to a Linux
|
||||||
> large packets if other bridge ports have a higher MTU such as 1,500 bytes.
|
bridge, the bridge's MTU 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.
|
||||||
|
|
||||||
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
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
> **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 installation options, with the package
|
||||||
option being preferred.
|
option being preferred.
|
||||||
|
|
||||||
* [Package based install (rpm/deb)](#package-based-install)
|
* [Package based install (rpm/deb)](#package-based-install)
|
||||||
|
@ -111,8 +113,10 @@ The built packages will require and install system level dependencies, as well a
|
||||||
a post install script to install the provided CORE python wheel. A similar uninstall script
|
a post install script to install the provided CORE python wheel. A similar uninstall script
|
||||||
is ran when uninstalling and would require the same options as given, during the install.
|
is ran when uninstalling and would require the same options as given, during the install.
|
||||||
|
|
||||||
> **NOTE:** PYTHON defaults to python3 for installs below, CORE requires python3.9+, pip,
|
!!! note
|
||||||
> tk compatibility for python gui, and venv for virtual environments
|
|
||||||
|
PYTHON defaults to python3 for installs below, CORE requires python3.9+, pip,
|
||||||
|
tk compatibility for python gui, and venv for virtual environments
|
||||||
|
|
||||||
Examples for install:
|
Examples for install:
|
||||||
|
|
||||||
|
@ -185,11 +189,15 @@ Installaion will carry out the following steps:
|
||||||
* installs systemd service pointing to appropriate python location based on install type
|
* installs systemd service pointing to appropriate python location based on install type
|
||||||
* clone/build/install working version of [OPSF MDR](https://github.com/USNavalResearchLaboratory/ospf-mdr)
|
* clone/build/install working version of [OPSF MDR](https://github.com/USNavalResearchLaboratory/ospf-mdr)
|
||||||
|
|
||||||
> **NOTE:** installing locally comes with its own risks, it can result it potential
|
!!! note
|
||||||
> dependency conflicts with system package manager installed python dependencies
|
|
||||||
|
|
||||||
> **NOTE:** provide a prefix that will be found on path when running as sudo,
|
Installing locally comes with its own risks, it can result it potential
|
||||||
> if the default prefix /usr/local will not be valid
|
dependency conflicts with system package manager installed python dependencies
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
|
||||||
|
Provide a prefix that will be found on path when running as sudo,
|
||||||
|
if the default prefix /usr/local will not be valid
|
||||||
|
|
||||||
The following tools will be leveraged during installation:
|
The following tools will be leveraged during installation:
|
||||||
|
|
||||||
|
@ -282,7 +290,9 @@ 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
|
||||||
you can follow their instructions for installing from source. Installation
|
you can follow their instructions for installing from source. Installation
|
||||||
|
|
|
@ -28,8 +28,10 @@ the number of times the system as a whole needed to deal with a packet. As
|
||||||
more network hops are added, this increases the number of context switches
|
more network hops are added, this increases the number of context switches
|
||||||
and decreases the throughput seen on the full length of the network path.
|
and decreases the throughput seen on the full length of the network path.
|
||||||
|
|
||||||
> **NOTE:** The right question to be asking is *"how much traffic?"*, not
|
!!! note
|
||||||
*"how many nodes?"*.
|
|
||||||
|
The right question to be asking is *"how much traffic?"*, not
|
||||||
|
*"how many nodes?"*.
|
||||||
|
|
||||||
For a more detailed study of performance in CORE, refer to the following
|
For a more detailed study of performance in CORE, refer to the following
|
||||||
publications:
|
publications:
|
||||||
|
|
|
@ -12,9 +12,11 @@ set of default services. Each service defines the per-node directories,
|
||||||
configuration files, startup index, starting commands, validation commands,
|
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
|
||||||
> using the **init**, **upstart**, or **systemd** frameworks. These
|
|
||||||
> lightweight nodes use configured CORE *services*.
|
**Network namespace nodes do not undergo the normal Linux boot process**
|
||||||
|
using the **init**, **upstart**, or **systemd** frameworks. These
|
||||||
|
lightweight nodes use configured CORE *services*.
|
||||||
|
|
||||||
## Available Services
|
## Available Services
|
||||||
|
|
||||||
|
@ -68,11 +70,13 @@ the service customization dialog for that service.
|
||||||
The dialog has three tabs for configuring the different aspects of the service:
|
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
|
||||||
> requires customization (e.g. the *Firewall* service).
|
|
||||||
> A **green** customize icon indicates that a custom configuration exists.
|
A **yellow** customize icon next to a service indicates that service
|
||||||
> Click the *Defaults* button when customizing a service to remove any
|
requires customization (e.g. the *Firewall* service).
|
||||||
> customizations.
|
A **green** customize icon indicates that a custom configuration exists.
|
||||||
|
Click the *Defaults* button when customizing a service to remove any
|
||||||
|
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
|
||||||
|
@ -87,10 +91,11 @@ per-node directories that are defined by the services. For example, the
|
||||||
the Zebra service, because Quagga running on each node needs to write separate
|
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
|
||||||
> mounted uniquely per-node by default.
|
|
||||||
> Per-node mount targets can be found in **/tmp/pycore.nnnnn/nN.conf/**
|
The **/var/log** and **/var/run** directories are
|
||||||
(where *nnnnn* is the session number and *N* is the node number.)
|
mounted uniquely per-node by default.
|
||||||
|
Per-node mount targets can be found in **/tmp/pycore.<session id>/<node name>.conf/**
|
||||||
|
|
||||||
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
|
||||||
|
@ -117,8 +122,10 @@ if a process is running and return zero when found. When a validate command
|
||||||
produces a non-zero return value, an exception is generated, which will cause
|
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
|
||||||
> node and use the *Services...* menu.
|
|
||||||
|
To start, stop, and restart services during run-time, right-click a
|
||||||
|
node and use the *Services...* menu.
|
||||||
|
|
||||||
## New Services
|
## New Services
|
||||||
|
|
||||||
|
@ -135,6 +142,12 @@ ideas for a service before adding a new service type.
|
||||||
|
|
||||||
### Creating New Services
|
### Creating New Services
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
|
||||||
|
The directory name used in **custom_services_dir** below should be unique and
|
||||||
|
should not correspond to any existing Python module name. For example, don't
|
||||||
|
use the name **subprocess** or **services**.
|
||||||
|
|
||||||
1. Modify the example service shown below
|
1. Modify the example service shown below
|
||||||
to do what you want. It could generate config/script files, mount per-node
|
to do what you want. It could generate config/script files, mount per-node
|
||||||
directories, start processes/scripts, etc. sample.py is a Python file that
|
directories, start processes/scripts, etc. sample.py is a Python file that
|
||||||
|
@ -148,12 +161,6 @@ ideas for a service before adding a new service type.
|
||||||
3. Add a **custom_services_dir = `/home/<user>/.coregui/custom_services`** entry to the
|
3. Add a **custom_services_dir = `/home/<user>/.coregui/custom_services`** entry to the
|
||||||
/etc/core/core.conf file.
|
/etc/core/core.conf file.
|
||||||
|
|
||||||
**NOTE:**
|
|
||||||
The directory name used in **custom_services_dir** should be unique and
|
|
||||||
should not correspond to
|
|
||||||
any existing Python module name. For example, don't use the name **subprocess**
|
|
||||||
or **services**.
|
|
||||||
|
|
||||||
4. Restart the CORE daemon (core-daemon). Any import errors (Python syntax)
|
4. Restart the CORE daemon (core-daemon). Any import errors (Python syntax)
|
||||||
should be displayed in the daemon output.
|
should be displayed in the daemon output.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue