Compare commits

..

No commits in common. "56a0511f2140e9fd9aa6ecb3ff835d4c80bbb13f" and "648f5425b5965c06aa7af77cc706a0c5ed225df7" have entirely different histories.

17 changed files with 123 additions and 255 deletions

View file

@ -1,26 +1,3 @@
## 2023-08-01 CORE 9.0.3
* Installation
* updated various dependencies
* Documentation
* improved GUI docs to include node interaction and note xhost usage
* \#780 - fixed gRPC examples
* \#787 - complete documentation revamp to leverage mkdocs material
* \#790 - fixed custom emane model example
* core-daemon
* update type hinting to avoid deprecated imports
* updated commands ran within docker based nodes to have proper environment variables
* fixed issue improperly setting session options over gRPC
* \#668 - add fedora sbin path to frr service
* \#774 - fixed pcap configservice
* \#805 - fixed radvd configservice template error
* core-gui
* update type hinting to avoid deprecated imports
* fixed issue allowing duplicate named hook scripts
* fixed issue joining sessions with RJ45 nodes
* utility scripts
* fixed issue in core-cleanup for removing devices
## 2023-03-02 CORE 9.0.2
* Installation
@ -35,10 +12,11 @@
* fixed issue for LXC nodes to properly use a configured image name and write it to XML
* \#742 - fixed issue with bad wlan node id being used
* \#744 - fixed issue not properly setting broadcast address
* core-gui
* fixed sample1.xml to remove SSH service
* fixed emane demo examples
* fixed issue displaying emane configs generally configured for a node
## core-gui
* fixed sample1.xml to remove SSH service
* fixed emane demo examples
* fixed issue displaying emane configs generally configured for a node
## 2022-11-28 CORE 9.0.1

137
README.md
View file

@ -1,107 +1,64 @@
# Index
- CORE
- Docker Setup
- Precompiled container image
- Build container image from source
- Adding extra packages
- Useful commands
- License
# CORE
CORE: Common Open Research Emulator
Copyright (c)2005-2022 the Boeing Company.
See the LICENSE file included in this distribution.
# Docker Setup
## About
The Common Open Research Emulator (CORE) is a tool for emulating
networks on one or more machines. You can connect these emulated
networks to live networks. CORE consists of a GUI for drawing
topologies of lightweight virtual machines, and Python modules for
scripting network emulation.
Here you have 2 choices
## Quick Start
Requires Python 3.9+. More detailed instructions and install options can be found
[here](https://coreemu.github.io/core/install.html).
## Precompiled container image
```bash
# Start container
sudo docker run -itd --name core -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:rw --privileged --restart unless-stopped git.olympuslab.net/afonso/core-extra:latest
```
## Build container image from source
```bash
# Clone the repo
git clone https://gitea.olympuslab.net/afonso/core-extra.git
# cd into the directory
cd core-extra
# build the docker image
sudo docker build -t core-extra .
# start container
sudo docker run -itd --name core -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:rw --privileged --restart unless-stopped core-extra
### Package Install
Grab the latest deb/rpm from [releases](https://github.com/coreemu/core/releases).
This will install vnoded/vcmd, system dependencies, and CORE within a python
virtual environment at `/opt/core/venv`.
```shell
sudo <yum/apt> install -y ./<package>
```
### Adding extra packages
To add extra packages you must modify the Dockerfile and then compile the docker image.
If you install it after starting the container it will, by docker nature, be reverted on the next boot of the container.
# Useful commands
I have the following functions on my fish shell
to help me better use core
THIS ONLY WORKS ON FISH, MODIFY FOR BASH OR ZSH
```fish
# RUN CORE GUI
function core
xhost +local:root
sudo docker exec -it core core-gui
end
# RUN BASH INSIDE THE CONTAINER
function core-bash
sudo docker exec -it core /bin/bash
end
# LAUNCH NODE BASH ON THE HOST MACHINE
function launch-term --argument nodename
sudo docker exec -it core xterm -bg black -fg white -fa 'DejaVu Sans Mono' -fs 16 -e vcmd -c /tmp/pycore.1/$nodename -- /bin/bash
end
#TO RUN ANY OTHER COMMAND
sudo docker exec -it core COMAND_GOES_HERE
Then install OSPF MDR from source:
```shell
git clone https://github.com/USNavalResearchLaboratory/ospf-mdr.git
cd ospf-mdr
./bootstrap.sh
./configure --disable-doc --enable-user=root --enable-group=root \
--with-cflags=-ggdb --sysconfdir=/usr/local/etc/quagga --enable-vtysh \
--localstatedir=/var/run/quagga
make -j$(nproc)
sudo make install
```
## LICENSE
### Script Install
The following should get you up and running on Ubuntu 22.04. This would
install CORE into a python3 virtual environment and install
[OSPF MDR](https://github.com/USNavalResearchLaboratory/ospf-mdr) from source.
Copyright (c) 2005-2018, the Boeing Company.
```shell
git clone https://github.com/coreemu/core.git
cd core
# install dependencies to run installation task
./setup.sh
# run the following or open a new terminal
source ~/.bashrc
# Ubuntu
inv install
# CentOS
inv install -p /usr
```
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
## Documentation & Support
We are leveraging GitHub hosted documentation and Discord for persistent
chat rooms. This allows for more dynamic conversations and the
capability to respond faster. Feel free to join us at the link below.
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.
* [Documentation](https://coreemu.github.io/core/)
* [Discord Channel](https://discord.gg/AKd7kmP)

View file

@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
# this defines the CORE version number, must be static for AC_INIT
AC_INIT(core, 9.0.3)
AC_INIT(core, 9.0.2)
# autoconf and automake initialization
AC_CONFIG_SRCDIR([netns/version.h.in])

View file

@ -1,5 +1,5 @@
# auto-generated by RADVD service (utility.py)
% for ifname, prefixes in ifaces:
% for ifname, prefixes in values:
interface ${ifname}
{
AdvSendAdvert on;

View file

@ -414,16 +414,18 @@ def load_logging_config(config_path: Path) -> None:
def run_cmds_threaded(
node_cmds: list[tuple["CoreNode", list[str]]],
nodes: list["CoreNode"],
cmds: list[str],
wait: bool = True,
shell: bool = False,
workers: int = None,
) -> tuple[dict[int, list[str]], list[Exception]]:
"""
Run the set of commands for the node provided. Each node will
Run a set of commands in order across a provided set of nodes. Each node will
run the commands within the context of a threadpool.
:param node_cmds: list of tuples of nodes and commands to run within them
:param nodes: nodes to run commands in
:param cmds: commands to run in nodes
:param wait: True to wait for status, False otherwise
:param shell: True to run shell like, False otherwise
:param workers: number of workers for threadpool, uses library default otherwise
@ -434,16 +436,16 @@ def run_cmds_threaded(
def _node_cmds(
_target: "CoreNode", _cmds: list[str], _wait: bool, _shell: bool
) -> list[str]:
cmd_outputs = []
outputs = []
for _cmd in _cmds:
output = _target.cmd(_cmd, wait=_wait, shell=_shell)
cmd_outputs.append(output)
return cmd_outputs
outputs.append(output)
return outputs
with concurrent.futures.ThreadPoolExecutor(max_workers=workers) as executor:
futures = []
node_mappings = {}
for node, cmds in node_cmds:
for node in nodes:
future = executor.submit(_node_cmds, node, cmds, wait, shell)
node_mappings[future] = node
futures.append(future)
@ -461,17 +463,19 @@ def run_cmds_threaded(
def run_cmds_mp(
node_cmds: list[tuple["CoreNode", list[str]]],
nodes: list["CoreNode"],
cmds: list[str],
wait: bool = True,
shell: bool = False,
workers: int = None,
) -> tuple[dict[int, list[str]], list[Exception]]:
"""
Run the set of commands for the node provided. Each node will
Run a set of commands in order across a provided set of nodes. Each node will
run the commands within the context of a process pool. This will not work
for distributed nodes and throws an exception when encountered.
:param node_cmds: list of tuples of nodes and commands to run within them
:param nodes: nodes to run commands in
:param cmds: commands to run in nodes
:param wait: True to wait for status, False otherwise
:param shell: True to run shell like, False otherwise
:param workers: number of workers for threadpool, uses library default otherwise
@ -482,7 +486,7 @@ def run_cmds_mp(
with concurrent.futures.ProcessPoolExecutor(max_workers=workers) as executor:
futures = []
node_mapping = {}
for node, cmds in node_cmds:
for node in nodes:
node_cmds = [node.create_cmd(x) for x in cmds]
if node.server:
raise CoreError(

View file

@ -1,6 +1,6 @@
[tool.poetry]
name = "core"
version = "9.0.3"
version = "9.0.2"
description = "CORE Common Open Research Emulator"
authors = ["Boeing Research and Technology"]
license = "BSD-2-Clause"

View file

@ -13,7 +13,6 @@ WORKDIR /opt
# install system dependencies
RUN yum -y update && \
yum install -y \
xterm \
git \
sudo \
wget \
@ -28,8 +27,7 @@ RUN yum -y update && \
tcpdump \
make && \
yum-builddep -y python3 && \
yum autoremove -y && \
yum install -y hostname
yum autoremove -y
# install python3.9
RUN wget https://www.python.org/ftp/python/3.9.15/Python-3.9.15.tgz && \
@ -46,7 +44,7 @@ RUN git clone https://github.com/coreemu/core && \
cd core && \
git checkout ${BRANCH} && \
NO_SYSTEM=1 PYTHON=/usr/local/bin/python3.9 ./setup.sh && \
PATH=/root/.local/bin:$PATH PYTHON=/usr/local/bin/python3.9 inv install -v -p ${PREFIX} --no-python
. /root/.bashrc && PYTHON=/usr/local/bin/python3.9 inv install -v -p ${PREFIX} --no-python
# install emane
RUN wget -q https://adjacentlink.com/downloads/emane/emane-1.3.3-release-1.el7.x86_64.tar.gz && \

View file

@ -11,7 +11,6 @@ WORKDIR /opt
# install basic dependencies
RUN yum -y update && \
yum install -y \
xterm \
git \
sudo \
wget \
@ -31,8 +30,7 @@ RUN yum -y update && \
pkg-config \
make && \
yum-builddep -y python3 && \
yum autoremove -y && \
yum install -y hostname
yum autoremove -y
# install python3.9
RUN wget https://www.python.org/ftp/python/3.9.15/Python-3.9.15.tgz && \

View file

@ -11,72 +11,9 @@ ENV PATH="$PATH:${VENV_PATH}/bin"
WORKDIR /opt
# install system dependencies
RUN apt-get update -y && \
apt-get install -y software-properties-common
RUN add-apt-repository "deb http://archive.ubuntu.com/ubuntu jammy universe"
RUN apt-get update -y && \
apt-get install -y --no-install-recommends \
automake \
bash \
ca-certificates \
ethtool \
gawk \
gcc \
g++ \
iproute2 \
iputils-ping \
libc-dev \
libev-dev \
libreadline-dev \
libtool \
nftables \
python3 \
python3-pip \
python3-tk \
pkg-config \
tk \
xauth \
xterm \
vim \
build-essential \
nano \
firefox \
net-tools \
rsync \
openssh-server \
openssh-client \
vsftpd \
atftpd \
atftp \
mini-httpd \
lynx \
tcpdump \
wireshark \
iperf \
iperf3 \
tshark \
openssh-sftp-server \
bind9 \
bind9-utils \
openvpn \
isc-dhcp-server \
isc-dhcp-client \
whois \
ipcalc \
socat \
hping3 \
libgtk-3-0 \
librest-0.7-0 \
libgtk-3-common \
dconf-gsettings-backend \
libsoup-gnome2.4-1 \
libsoup2.4-1 \
dconf-service \
x11-xserver-utils \
ftp \
git \
sudo \
wget \
@ -89,8 +26,8 @@ RUN apt-get update -y && \
unzip \
uuid-dev \
iproute2 \
vlc \
iputils-ping && \
iputils-ping \
tcpdump && \
apt-get autoremove -y
# install core
@ -98,7 +35,8 @@ RUN git clone https://github.com/coreemu/core && \
cd core && \
git checkout ${BRANCH} && \
./setup.sh && \
PATH=/root/.local/bin:$PATH inv install -v -p ${PREFIX} && \
. /root/.bashrc && \
inv install -v -p ${PREFIX} && \
cd /opt && \
rm -rf ospf-mdr
@ -122,5 +60,3 @@ RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC
rm -f protoc-${PROTOC_VERSION}-linux-x86_64.zip
WORKDIR /root
CMD /opt/core/venv/bin/core-daemon

View file

@ -18,5 +18,5 @@ the remaining steps of a given section.
```
4. You will be presented with sessions to join, select the one created by the script
<p align="center">
<img src="/core/static/tutorial-common/running-join.png" width="75%">
<img src="/static/tutorial-common/running-join.png" width="75%">
</p>

View file

@ -6,7 +6,7 @@ This tutorial will cover some use cases when using a wired 2 node
scenario in CORE.
<p align="center">
<img src="/core/static/tutorial1/scenario.png" width="75%">
<img src="/static/tutorial1/scenario.png" width="75%">
</p>
## Files
@ -46,11 +46,11 @@ between nodes in CORE.
```
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario.xml**
<p align="center">
<img src="/core/static/tutorial-common/running-open.png" width="75%">
<img src="/static/tutorial-common/running-open.png" width="75%">
</p>
* You can now click on the **Start Session** button to run the scenario
<p align="center">
<img src="/core/static/tutorial1/scenario.png" width="75%">
<img src="/static/tutorial1/scenario.png" width="75%">
</p>
* Open a terminal on **n1** by double clicking it in the GUI
* Run the following in **n1** terminal
@ -84,11 +84,11 @@ traffic being sent/received among many other uses.
```
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario.xml**
<p align="center">
<img src="/core/static/tutorial-common/running-open.png" width="75%">
<img src="/static/tutorial-common/running-open.png" width="75%">
</p>
* You can now click on the **Start Session** button to run the scenario
<p align="center">
<img src="/core/static/tutorial1/scenario.png" width="75%">
<img src="/static/tutorial1/scenario.png" width="75%">
</p>
* Open a terminal on **n1** by double clicking it in the GUI
* Open a terminal on **n2** by double clicking it in the GUI
@ -123,20 +123,20 @@ beneficial for understanding how software will behave in adverse conditions.
```
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario.xml**
<p align="center">
<img src="/core/static/tutorial-common/running-open.png" width="75%">
<img src="/static/tutorial-common/running-open.png" width="75%">
</p>
* You can now click on the **Start Session** button to run the scenario
<p align="center">
<img src="/core/static/tutorial1/scenario.png" width="75%">
<img src="/static/tutorial1/scenario.png" width="75%">
</p>
* Right click the link between **n1** and **n2**
* Select **Configure**
<p align="center">
<img src="/core/static/tutorial1/link-config.png" width="75%">
<img src="/static/tutorial1/link-config.png" width="75%">
</p>
* Update the loss to **25**
<p align="center">
<img src="/core/static/tutorial1/link-config-dialog.png" width="50%">
<img src="/static/tutorial1/link-config-dialog.png" width="50%">
</p>
* Open a terminal on **n1** by double clicking it in the GUI
* Run the following in **n1** terminal
@ -166,11 +166,11 @@ within the nodes of our scenario.
```
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario.xml**
<p align="center">
<img src="/core/static/tutorial-common/running-open.png" width="75%">
<img src="/static/tutorial-common/running-open.png" width="75%">
</p>
* You can now click on the **Start Session** button to run the scenario
<p align="center">
<img src="/core/static/tutorial1/scenario.png" width="75%">
<img src="/static/tutorial1/scenario.png" width="75%">
</p>
* Open a terminal on **n1** by double clicking it in the GUI
* Run the following in **n1** terminal
@ -216,11 +216,11 @@ using `tail -f` to observe the output of running software.
```
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario_service.xml**
<p align="center">
<img src="/core/static/tutorial-common/running-open.png" width="75%">
<img src="/static/tutorial-common/running-open.png" width="75%">
</p>
* You can now click on the **Start Session** button to run the scenario
<p align="center">
<img src="/core/static/tutorial1/scenario.png" width="75%">
<img src="/static/tutorial1/scenario.png" width="75%">
</p>
* Open a terminal on **n1** by double clicking it in the GUI
* Run the following in **n1** terminal

View file

@ -30,7 +30,7 @@ XML scenario file, leveraging an NS2 mobility file.
* Navigate to and select this tutorials **scenario.xml** file
* You can now click play to start the session
<p align="center">
<img src="/core/static/tutorial2/wireless.png" width="75%">
<img src="/static/tutorial2/wireless.png" width="75%">
</p>
* Note that OSPF routing protocol is included in the scenario to provide routes to other nodes, as they are discovered
* Double click node **n4** to open a terminal and ping node **n2**
@ -49,7 +49,7 @@ XML scenario file, leveraging an NS2 mobility file.
* Right click on the **wlan1** node and select **WLAN Config**, then set delay to 500000
<p align="center">
<img src="/core/static/tutorial2/wireless-config-delay.png" width="90%">
<img src="/static/tutorial2/wireless-config-delay.png" width="90%">
</p>
* Using the open terminal for node **n4**, ping **n2** again, expect about 2 seconds delay
```shell
@ -69,7 +69,7 @@ XML scenario file, leveraging an NS2 mobility file.
* Right click on the **wlan1** node and select **WLAN Config**, set delay back to 5000 and loss to 10
<p align="center">
<img src="/core/static/tutorial2/wireless-configuration.png" width="90%">
<img src="/static/tutorial2/wireless-configuration.png" width="90%">
</p>
* Using the open terminal for node **n4**, ping **n2** again, expect to notice considerable loss
```shell
@ -111,7 +111,7 @@ gRPC python script and providing mobility over the gRPC interface.
* You will now have joined the already running scenario
<p align="center">
<img src="/core/static/tutorial2/wireless.png" width="90%">
<img src="/static/tutorial2/wireless.png" width="90%">
</p>
## Running Software

View file

@ -71,7 +71,7 @@ file, leveraging an NS2 file for mobility.
known and when the routes are discovered, ping will work
<p align="center">
<img src="/core/static/tutorial3/motion_from_ns2_file.png" width="80%" >
<img src="/static/tutorial3/motion_from_ns2_file.png" width="80%" >
</p>
## Running with the gRPC Script
@ -94,11 +94,11 @@ This section covers using a gRPC script to create and provide scenario movement.
* You will now have joined the already running scenario
* In the terminal running the **scenario.py**, hit a key to start motion
<p align="center">
<img src="/core/static/tutorial3/mobility-script.png" width="80%" >
<img src="/static/tutorial3/mobility-script.png" width="80%" >
</p>
* Observe the link between **n3** and **n4** is shown and then as motion continues the link breaks
<p align="center">
<img src="/core/static/tutorial3/motion_continued_breaks_link.png" width="80%" >
<img src="/static/tutorial3/motion_continued_breaks_link.png" width="80%" >
</p>
## Running the Chat App Software
@ -151,5 +151,5 @@ API.
* Observe that node 2 moves and continues to move
<p align="center">
<img src="/core/static/tutorial3/move-n2.png" width="80%" >
<img src="/static/tutorial3/move-n2.png" width="80%" >
</p>

View file

@ -18,7 +18,7 @@ This section covers using the saved **scenario.xml** file to get and up and runn
* Configure the Windows host VM to have a bridged network adapter
<p align="center">
<img src="/core/static/tutorial5/VM-network-settings.png" width="80%">
<img src="/static/tutorial5/VM-network-settings.png" width="80%">
</p>
* Make sure the **core-daemon** is running in a terminal
```shell
@ -30,15 +30,15 @@ This section covers using the saved **scenario.xml** file to get and up and runn
```
* Open the **scenario.xml** with the unassigned RJ45 node
<p align="center">
<img src="/core/static/tutorial5/rj45-unassigned.png" width="80%">
<img src="/static/tutorial5/rj45-unassigned.png" width="80%">
</p>
* Configure the RJ45 node name to use the bridged interface
<p align="center">
<img src="/core/static/tutorial5/configure-the-rj45.png" width="80%">
<img src="/static/tutorial5/configure-the-rj45.png" width="80%">
</p>
* After configuring the RJ45, run the scenario:
<p align="center">
<img src="/core/static/tutorial5/rj45-connector.png" width="80%">
<img src="/static/tutorial5/rj45-connector.png" width="80%">
</p>
* Double click node **n1** to open a terminal and add a route to the Windows host
```shell
@ -97,7 +97,7 @@ This section covers leveraging the gRPC script to get up and running.
* Configure the Windows host VM to have a bridged network adapter
<p align="center">
<img src="/core/static/tutorial5/VM-network-settings.png" width="80%">
<img src="/static/tutorial5/VM-network-settings.png" width="80%">
</p>
* Make sure the **core-daemon** is running in a terminal
```shell
@ -114,7 +114,7 @@ This section covers leveraging the gRPC script to get up and running.
```
* In the **core-gui** connect to the running session that was created
<p align="center">
<img src="/core/static/tutorial5/rj45-connector.png" width="80%">
<img src="/static/tutorial5/rj45-connector.png" width="80%">
</p>
* Double click node **n1** to open a terminal and add a route to the Windows host
```shell

View file

@ -31,11 +31,11 @@ This section will cover running this sample tutorial that develops a scenario fi
* Create three MDR nodes
<p align="center">
<img src="/core/static/tutorial6/create-nodes.png" width="80%">
<img src="/static/tutorial6/create-nodes.png" width="80%">
</p>
* Double click on each node for configuration, click the icon and set it to use the **drone.png** image
<p align="center">
<img src="/core/static/tutorial6/configure-icon.png" width="50%">
<img src="/static/tutorial6/configure-icon.png" width="50%">
</p>
* Use **Session -> Options** and set **Control Network 0** to **172.16.0.0./24**
@ -44,30 +44,30 @@ This section will cover running this sample tutorial that develops a scenario fi
* Add a WLAN Node
* Link the three prior MDR nodes to the WLAN node
<p align="center">
<img src="/core/static/tutorial6/linked-nodes.png" width="50%">
<img src="/static/tutorial6/linked-nodes.png" width="50%">
</p>
* Click play to start the scenario
* Observe wireless links being created
<p align="center">
<img src="/core/static/tutorial6/wlan-links.png" width="50%">
<img src="/static/tutorial6/wlan-links.png" width="50%">
</p>
* Click stop to end the scenario
* Right click the WLAN node and select **Edit -> Hide**
* Now you can view the nodes in isolation
<p align="center">
<img src="/core/static/tutorial6/hidden-nodes.png" width="50%">
<img src="/static/tutorial6/hidden-nodes.png" width="50%">
</p>
### Changing Canvas Background
* Click **Canvas -> Wallpaper** to set the background to terrain.png
<p align="center">
<img src="/core/static/tutorial6/select-wallpaper.png" width="50%">
<img src="/static/tutorial6/select-wallpaper.png" width="50%">
</p>
* Click play to start the scenario again
* You now have a scenario with drone icons, terrain background, links displayed and hidden WLAN node
<p align="center">
<img src="/core/static/tutorial6/scenario-with-terrain.png" width="80%">
<img src="/static/tutorial6/scenario-with-terrain.png" width="80%">
</p>
## Adding Mobility
@ -80,7 +80,7 @@ This section will cover running this sample tutorial that develops a scenario fi
```
* Let it run to see the link break as the node 1 drone approches the right side
<p align="center">
<img src="/core/static/tutorial6/only-node1-moving.png" width="80%">
<img src="/static/tutorial6/only-node1-moving.png" width="80%">
</p>
* Repeat for other nodes, double click on **n2** and **n3** and run the demo.py script
```shell
@ -93,5 +93,5 @@ This section will cover running this sample tutorial that develops a scenario fi
* Observe nodes moving in parallel tracks, when the far right is reached, the node will move down
and then move to the left. When the far left is reached, the drone will move down and then move to the right.
<p align="center">
<img src="/core/static/tutorial6/scenario-with-motion.png" width="80%">
<img src="/static/tutorial6/scenario-with-motion.png" width="80%">
</p>

View file

@ -6,7 +6,7 @@ This tutorial will cover basic usage and some concepts one may want to
use or leverage when working with and creating EMANE based networks.
<p align="center">
<img src="/core/static/tutorial7/scenario.png" width="75%">
<img src="/static/tutorial7/scenario.png" width="75%">
</p>
For more detailed information on EMANE see the following:
@ -52,11 +52,11 @@ between nodes in CORE.
```
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario.xml**
<p align="center">
<img src="/core/static/tutorial-common/running-open.png" width="75%">
<img src="/static/tutorial-common/running-open.png" width="75%">
</p>
* You can now click on the **Start Session** button to run the scenario
<p align="center">
<img src="/core/static/tutorial7/scenario.png" width="75%">
<img src="/static/tutorial7/scenario.png" width="75%">
</p>
* Open a terminal on **n2** by double clicking it in the GUI
* Run the following in **n2** terminal
@ -90,11 +90,11 @@ traffic being sent/received among many other uses.
```
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario.xml**
<p align="center">
<img src="/core/static/tutorial-common/running-open.png" width="75%">
<img src="/static/tutorial-common/running-open.png" width="75%">
</p>
* You can now click on the **Start Session** button to run the scenario
<p align="center">
<img src="/core/static/tutorial7/scenario.png" width="75%">
<img src="/static/tutorial7/scenario.png" width="75%">
</p>
* Open a terminal on **n2** by double clicking it in the GUI
* Open a terminal on **n3** by double clicking it in the GUI
@ -129,11 +129,11 @@ within the nodes of our scenario.
```
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario.xml**
<p align="center">
<img src="/core/static/tutorial-common/running-open.png" width="75%">
<img src="/static/tutorial-common/running-open.png" width="75%">
</p>
* You can now click on the **Start Session** button to run the scenario
<p align="center">
<img src="/core/static/tutorial7/scenario.png" width="75%">
<img src="/static/tutorial7/scenario.png" width="75%">
</p>
* Open a terminal on **n2** by double clicking it in the GUI
* Run the following in **n2** terminal
@ -179,11 +179,11 @@ using `tail -f` to observe the output of running software.
```
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario_service.xml**
<p align="center">
<img src="/core/static/tutorial-common/running-open.png" width="75%">
<img src="/static/tutorial-common/running-open.png" width="75%">
</p>
* You can now click on the **Start Session** button to run the scenario
<p align="center">
<img src="/core/static/tutorial7/scenario.png" width="75%">
<img src="/static/tutorial7/scenario.png" width="75%">
</p>
* Open a terminal on **n2** by double clicking it in the GUI
* Run the following in **n2** terminal

View file

@ -1,7 +1,4 @@
site_name: CORE Documentation
site_url: https://coreemu.github.io/core
repo_name: coreemu/core
repo_url: https://github.com/coreemu/core
use_directory_urls: false
theme:
name: material