Compare commits
16 commits
648f5425b5
...
56a0511f21
Author | SHA1 | Date | |
---|---|---|---|
56a0511f21 | |||
|
20071eed2e | ||
|
62a09c7570 | ||
|
c37fa33ffe | ||
|
7060a6842f | ||
|
8da068159f | ||
|
e3715e188c | ||
|
722fbde7d0 | ||
|
2cb8ec2fb2 | ||
|
544ad9b638 | ||
|
c44dc521fb | ||
|
ecf380c884 | ||
|
5ab71377cc | ||
|
1841fb1110 | ||
|
bcf7429785 | ||
|
31e6839ac5 |
17 changed files with 255 additions and 123 deletions
32
CHANGELOG.md
32
CHANGELOG.md
|
@ -1,3 +1,26 @@
|
||||||
|
## 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
|
## 2023-03-02 CORE 9.0.2
|
||||||
|
|
||||||
* Installation
|
* Installation
|
||||||
|
@ -12,11 +35,10 @@
|
||||||
* fixed issue for LXC nodes to properly use a configured image name and write it to XML
|
* 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
|
* \#742 - fixed issue with bad wlan node id being used
|
||||||
* \#744 - fixed issue not properly setting broadcast address
|
* \#744 - fixed issue not properly setting broadcast address
|
||||||
|
* core-gui
|
||||||
## core-gui
|
* fixed sample1.xml to remove SSH service
|
||||||
* fixed sample1.xml to remove SSH service
|
* fixed emane demo examples
|
||||||
* fixed emane demo examples
|
* fixed issue displaying emane configs generally configured for a node
|
||||||
* fixed issue displaying emane configs generally configured for a node
|
|
||||||
|
|
||||||
## 2022-11-28 CORE 9.0.1
|
## 2022-11-28 CORE 9.0.1
|
||||||
|
|
||||||
|
|
|
@ -11,9 +11,72 @@ ENV PATH="$PATH:${VENV_PATH}/bin"
|
||||||
WORKDIR /opt
|
WORKDIR /opt
|
||||||
|
|
||||||
# install system dependencies
|
# 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 && \
|
RUN apt-get update -y && \
|
||||||
apt-get install -y --no-install-recommends \
|
apt-get install -y --no-install-recommends \
|
||||||
|
automake \
|
||||||
|
bash \
|
||||||
ca-certificates \
|
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 \
|
git \
|
||||||
sudo \
|
sudo \
|
||||||
wget \
|
wget \
|
||||||
|
@ -26,8 +89,8 @@ RUN apt-get update -y && \
|
||||||
unzip \
|
unzip \
|
||||||
uuid-dev \
|
uuid-dev \
|
||||||
iproute2 \
|
iproute2 \
|
||||||
iputils-ping \
|
vlc \
|
||||||
tcpdump && \
|
iputils-ping && \
|
||||||
apt-get autoremove -y
|
apt-get autoremove -y
|
||||||
|
|
||||||
# install core
|
# install core
|
||||||
|
@ -35,8 +98,7 @@ RUN git clone https://github.com/coreemu/core && \
|
||||||
cd core && \
|
cd core && \
|
||||||
git checkout ${BRANCH} && \
|
git checkout ${BRANCH} && \
|
||||||
./setup.sh && \
|
./setup.sh && \
|
||||||
. /root/.bashrc && \
|
PATH=/root/.local/bin:$PATH inv install -v -p ${PREFIX} && \
|
||||||
inv install -v -p ${PREFIX} && \
|
|
||||||
cd /opt && \
|
cd /opt && \
|
||||||
rm -rf ospf-mdr
|
rm -rf ospf-mdr
|
||||||
|
|
||||||
|
@ -60,3 +122,5 @@ RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC
|
||||||
rm -f protoc-${PROTOC_VERSION}-linux-x86_64.zip
|
rm -f protoc-${PROTOC_VERSION}-linux-x86_64.zip
|
||||||
|
|
||||||
WORKDIR /root
|
WORKDIR /root
|
||||||
|
|
||||||
|
CMD /opt/core/venv/bin/core-daemon
|
137
README.md
137
README.md
|
@ -1,64 +1,107 @@
|
||||||
|
# Index
|
||||||
|
- CORE
|
||||||
|
- Docker Setup
|
||||||
|
- Precompiled container image
|
||||||
|
- Build container image from source
|
||||||
|
- Adding extra packages
|
||||||
|
|
||||||
|
- Useful commands
|
||||||
|
- License
|
||||||
|
|
||||||
# CORE
|
# CORE
|
||||||
|
|
||||||
CORE: Common Open Research Emulator
|
CORE: Common Open Research Emulator
|
||||||
|
|
||||||
Copyright (c)2005-2022 the Boeing Company.
|
Copyright (c)2005-2022 the Boeing Company.
|
||||||
|
|
||||||
See the LICENSE file included in this distribution.
|
See the LICENSE file included in this distribution.
|
||||||
|
|
||||||
## About
|
# Docker Setup
|
||||||
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.
|
|
||||||
|
|
||||||
## Quick Start
|
Here you have 2 choices
|
||||||
Requires Python 3.9+. More detailed instructions and install options can be found
|
|
||||||
[here](https://coreemu.github.io/core/install.html).
|
|
||||||
|
|
||||||
### Package Install
|
## Precompiled container image
|
||||||
Grab the latest deb/rpm from [releases](https://github.com/coreemu/core/releases).
|
|
||||||
|
```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
|
||||||
|
|
||||||
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>
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Then install OSPF MDR from source:
|
### Adding extra packages
|
||||||
```shell
|
|
||||||
git clone https://github.com/USNavalResearchLaboratory/ospf-mdr.git
|
To add extra packages you must modify the Dockerfile and then compile the docker image.
|
||||||
cd ospf-mdr
|
If you install it after starting the container it will, by docker nature, be reverted on the next boot of the container.
|
||||||
./bootstrap.sh
|
|
||||||
./configure --disable-doc --enable-user=root --enable-group=root \
|
# Useful commands
|
||||||
--with-cflags=-ggdb --sysconfdir=/usr/local/etc/quagga --enable-vtysh \
|
|
||||||
--localstatedir=/var/run/quagga
|
I have the following functions on my fish shell
|
||||||
make -j$(nproc)
|
to help me better use core
|
||||||
sudo make install
|
|
||||||
|
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
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Script Install
|
## LICENSE
|
||||||
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.
|
|
||||||
|
|
||||||
```shell
|
Copyright (c) 2005-2018, the Boeing Company.
|
||||||
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
|
|
||||||
```
|
|
||||||
|
|
||||||
## Documentation & Support
|
Redistribution and use in source and binary forms, with or without
|
||||||
We are leveraging GitHub hosted documentation and Discord for persistent
|
modification, are permitted provided that the following conditions are met:
|
||||||
chat rooms. This allows for more dynamic conversations and the
|
|
||||||
capability to respond faster. Feel free to join us at the link below.
|
|
||||||
|
|
||||||
* [Documentation](https://coreemu.github.io/core/)
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
* [Discord Channel](https://discord.gg/AKd7kmP)
|
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.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
# this defines the CORE version number, must be static for AC_INIT
|
# this defines the CORE version number, must be static for AC_INIT
|
||||||
AC_INIT(core, 9.0.2)
|
AC_INIT(core, 9.0.3)
|
||||||
|
|
||||||
# autoconf and automake initialization
|
# autoconf and automake initialization
|
||||||
AC_CONFIG_SRCDIR([netns/version.h.in])
|
AC_CONFIG_SRCDIR([netns/version.h.in])
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# auto-generated by RADVD service (utility.py)
|
# auto-generated by RADVD service (utility.py)
|
||||||
% for ifname, prefixes in values:
|
% for ifname, prefixes in ifaces:
|
||||||
interface ${ifname}
|
interface ${ifname}
|
||||||
{
|
{
|
||||||
AdvSendAdvert on;
|
AdvSendAdvert on;
|
||||||
|
|
|
@ -414,18 +414,16 @@ def load_logging_config(config_path: Path) -> None:
|
||||||
|
|
||||||
|
|
||||||
def run_cmds_threaded(
|
def run_cmds_threaded(
|
||||||
nodes: list["CoreNode"],
|
node_cmds: list[tuple["CoreNode", list[str]]],
|
||||||
cmds: list[str],
|
|
||||||
wait: bool = True,
|
wait: bool = True,
|
||||||
shell: bool = False,
|
shell: bool = False,
|
||||||
workers: int = None,
|
workers: int = None,
|
||||||
) -> tuple[dict[int, list[str]], list[Exception]]:
|
) -> tuple[dict[int, list[str]], list[Exception]]:
|
||||||
"""
|
"""
|
||||||
Run a set of commands in order across a provided set of nodes. Each node will
|
Run the set of commands for the node provided. Each node will
|
||||||
run the commands within the context of a threadpool.
|
run the commands within the context of a threadpool.
|
||||||
|
|
||||||
:param nodes: nodes to run commands in
|
:param node_cmds: list of tuples of nodes and commands to run within them
|
||||||
:param cmds: commands to run in nodes
|
|
||||||
:param wait: True to wait for status, False otherwise
|
:param wait: True to wait for status, False otherwise
|
||||||
:param shell: True to run shell like, False otherwise
|
:param shell: True to run shell like, False otherwise
|
||||||
:param workers: number of workers for threadpool, uses library default otherwise
|
:param workers: number of workers for threadpool, uses library default otherwise
|
||||||
|
@ -436,16 +434,16 @@ def run_cmds_threaded(
|
||||||
def _node_cmds(
|
def _node_cmds(
|
||||||
_target: "CoreNode", _cmds: list[str], _wait: bool, _shell: bool
|
_target: "CoreNode", _cmds: list[str], _wait: bool, _shell: bool
|
||||||
) -> list[str]:
|
) -> list[str]:
|
||||||
outputs = []
|
cmd_outputs = []
|
||||||
for _cmd in _cmds:
|
for _cmd in _cmds:
|
||||||
output = _target.cmd(_cmd, wait=_wait, shell=_shell)
|
output = _target.cmd(_cmd, wait=_wait, shell=_shell)
|
||||||
outputs.append(output)
|
cmd_outputs.append(output)
|
||||||
return outputs
|
return cmd_outputs
|
||||||
|
|
||||||
with concurrent.futures.ThreadPoolExecutor(max_workers=workers) as executor:
|
with concurrent.futures.ThreadPoolExecutor(max_workers=workers) as executor:
|
||||||
futures = []
|
futures = []
|
||||||
node_mappings = {}
|
node_mappings = {}
|
||||||
for node in nodes:
|
for node, cmds in node_cmds:
|
||||||
future = executor.submit(_node_cmds, node, cmds, wait, shell)
|
future = executor.submit(_node_cmds, node, cmds, wait, shell)
|
||||||
node_mappings[future] = node
|
node_mappings[future] = node
|
||||||
futures.append(future)
|
futures.append(future)
|
||||||
|
@ -463,19 +461,17 @@ def run_cmds_threaded(
|
||||||
|
|
||||||
|
|
||||||
def run_cmds_mp(
|
def run_cmds_mp(
|
||||||
nodes: list["CoreNode"],
|
node_cmds: list[tuple["CoreNode", list[str]]],
|
||||||
cmds: list[str],
|
|
||||||
wait: bool = True,
|
wait: bool = True,
|
||||||
shell: bool = False,
|
shell: bool = False,
|
||||||
workers: int = None,
|
workers: int = None,
|
||||||
) -> tuple[dict[int, list[str]], list[Exception]]:
|
) -> tuple[dict[int, list[str]], list[Exception]]:
|
||||||
"""
|
"""
|
||||||
Run a set of commands in order across a provided set of nodes. Each node will
|
Run the set of commands for the node provided. Each node will
|
||||||
run the commands within the context of a process pool. This will not work
|
run the commands within the context of a process pool. This will not work
|
||||||
for distributed nodes and throws an exception when encountered.
|
for distributed nodes and throws an exception when encountered.
|
||||||
|
|
||||||
:param nodes: nodes to run commands in
|
:param node_cmds: list of tuples of nodes and commands to run within them
|
||||||
:param cmds: commands to run in nodes
|
|
||||||
:param wait: True to wait for status, False otherwise
|
:param wait: True to wait for status, False otherwise
|
||||||
:param shell: True to run shell like, False otherwise
|
:param shell: True to run shell like, False otherwise
|
||||||
:param workers: number of workers for threadpool, uses library default otherwise
|
:param workers: number of workers for threadpool, uses library default otherwise
|
||||||
|
@ -486,7 +482,7 @@ def run_cmds_mp(
|
||||||
with concurrent.futures.ProcessPoolExecutor(max_workers=workers) as executor:
|
with concurrent.futures.ProcessPoolExecutor(max_workers=workers) as executor:
|
||||||
futures = []
|
futures = []
|
||||||
node_mapping = {}
|
node_mapping = {}
|
||||||
for node in nodes:
|
for node, cmds in node_cmds:
|
||||||
node_cmds = [node.create_cmd(x) for x in cmds]
|
node_cmds = [node.create_cmd(x) for x in cmds]
|
||||||
if node.server:
|
if node.server:
|
||||||
raise CoreError(
|
raise CoreError(
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "core"
|
name = "core"
|
||||||
version = "9.0.2"
|
version = "9.0.3"
|
||||||
description = "CORE Common Open Research Emulator"
|
description = "CORE Common Open Research Emulator"
|
||||||
authors = ["Boeing Research and Technology"]
|
authors = ["Boeing Research and Technology"]
|
||||||
license = "BSD-2-Clause"
|
license = "BSD-2-Clause"
|
||||||
|
|
|
@ -13,6 +13,7 @@ WORKDIR /opt
|
||||||
# install system dependencies
|
# install system dependencies
|
||||||
RUN yum -y update && \
|
RUN yum -y update && \
|
||||||
yum install -y \
|
yum install -y \
|
||||||
|
xterm \
|
||||||
git \
|
git \
|
||||||
sudo \
|
sudo \
|
||||||
wget \
|
wget \
|
||||||
|
@ -27,7 +28,8 @@ RUN yum -y update && \
|
||||||
tcpdump \
|
tcpdump \
|
||||||
make && \
|
make && \
|
||||||
yum-builddep -y python3 && \
|
yum-builddep -y python3 && \
|
||||||
yum autoremove -y
|
yum autoremove -y && \
|
||||||
|
yum install -y hostname
|
||||||
|
|
||||||
# install python3.9
|
# install python3.9
|
||||||
RUN wget https://www.python.org/ftp/python/3.9.15/Python-3.9.15.tgz && \
|
RUN wget https://www.python.org/ftp/python/3.9.15/Python-3.9.15.tgz && \
|
||||||
|
@ -44,7 +46,7 @@ RUN git clone https://github.com/coreemu/core && \
|
||||||
cd core && \
|
cd core && \
|
||||||
git checkout ${BRANCH} && \
|
git checkout ${BRANCH} && \
|
||||||
NO_SYSTEM=1 PYTHON=/usr/local/bin/python3.9 ./setup.sh && \
|
NO_SYSTEM=1 PYTHON=/usr/local/bin/python3.9 ./setup.sh && \
|
||||||
. /root/.bashrc && PYTHON=/usr/local/bin/python3.9 inv install -v -p ${PREFIX} --no-python
|
PATH=/root/.local/bin:$PATH PYTHON=/usr/local/bin/python3.9 inv install -v -p ${PREFIX} --no-python
|
||||||
|
|
||||||
# install emane
|
# install emane
|
||||||
RUN wget -q https://adjacentlink.com/downloads/emane/emane-1.3.3-release-1.el7.x86_64.tar.gz && \
|
RUN wget -q https://adjacentlink.com/downloads/emane/emane-1.3.3-release-1.el7.x86_64.tar.gz && \
|
||||||
|
|
|
@ -11,6 +11,7 @@ WORKDIR /opt
|
||||||
# install basic dependencies
|
# install basic dependencies
|
||||||
RUN yum -y update && \
|
RUN yum -y update && \
|
||||||
yum install -y \
|
yum install -y \
|
||||||
|
xterm \
|
||||||
git \
|
git \
|
||||||
sudo \
|
sudo \
|
||||||
wget \
|
wget \
|
||||||
|
@ -30,7 +31,8 @@ RUN yum -y update && \
|
||||||
pkg-config \
|
pkg-config \
|
||||||
make && \
|
make && \
|
||||||
yum-builddep -y python3 && \
|
yum-builddep -y python3 && \
|
||||||
yum autoremove -y
|
yum autoremove -y && \
|
||||||
|
yum install -y hostname
|
||||||
|
|
||||||
# install python3.9
|
# install python3.9
|
||||||
RUN wget https://www.python.org/ftp/python/3.9.15/Python-3.9.15.tgz && \
|
RUN wget https://www.python.org/ftp/python/3.9.15/Python-3.9.15.tgz && \
|
||||||
|
|
|
@ -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
|
4. You will be presented with sessions to join, select the one created by the script
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial-common/running-join.png" width="75%">
|
<img src="/core/static/tutorial-common/running-join.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
|
|
|
@ -6,7 +6,7 @@ This tutorial will cover some use cases when using a wired 2 node
|
||||||
scenario in CORE.
|
scenario in CORE.
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial1/scenario.png" width="75%">
|
<img src="/core/static/tutorial1/scenario.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## Files
|
## Files
|
||||||
|
@ -46,11 +46,11 @@ between nodes in CORE.
|
||||||
```
|
```
|
||||||
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario.xml**
|
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario.xml**
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial-common/running-open.png" width="75%">
|
<img src="/core/static/tutorial-common/running-open.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* You can now click on the **Start Session** button to run the scenario
|
* You can now click on the **Start Session** button to run the scenario
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial1/scenario.png" width="75%">
|
<img src="/core/static/tutorial1/scenario.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* Open a terminal on **n1** by double clicking it in the GUI
|
* Open a terminal on **n1** by double clicking it in the GUI
|
||||||
* Run the following in **n1** terminal
|
* 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**
|
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario.xml**
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial-common/running-open.png" width="75%">
|
<img src="/core/static/tutorial-common/running-open.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* You can now click on the **Start Session** button to run the scenario
|
* You can now click on the **Start Session** button to run the scenario
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial1/scenario.png" width="75%">
|
<img src="/core/static/tutorial1/scenario.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* Open a terminal on **n1** by double clicking it in the GUI
|
* Open a terminal on **n1** by double clicking it in the GUI
|
||||||
* Open a terminal on **n2** 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**
|
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario.xml**
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial-common/running-open.png" width="75%">
|
<img src="/core/static/tutorial-common/running-open.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* You can now click on the **Start Session** button to run the scenario
|
* You can now click on the **Start Session** button to run the scenario
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial1/scenario.png" width="75%">
|
<img src="/core/static/tutorial1/scenario.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* Right click the link between **n1** and **n2**
|
* Right click the link between **n1** and **n2**
|
||||||
* Select **Configure**
|
* Select **Configure**
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial1/link-config.png" width="75%">
|
<img src="/core/static/tutorial1/link-config.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* Update the loss to **25**
|
* Update the loss to **25**
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial1/link-config-dialog.png" width="50%">
|
<img src="/core/static/tutorial1/link-config-dialog.png" width="50%">
|
||||||
</p>
|
</p>
|
||||||
* Open a terminal on **n1** by double clicking it in the GUI
|
* Open a terminal on **n1** by double clicking it in the GUI
|
||||||
* Run the following in **n1** terminal
|
* 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**
|
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario.xml**
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial-common/running-open.png" width="75%">
|
<img src="/core/static/tutorial-common/running-open.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* You can now click on the **Start Session** button to run the scenario
|
* You can now click on the **Start Session** button to run the scenario
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial1/scenario.png" width="75%">
|
<img src="/core/static/tutorial1/scenario.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* Open a terminal on **n1** by double clicking it in the GUI
|
* Open a terminal on **n1** by double clicking it in the GUI
|
||||||
* Run the following in **n1** terminal
|
* 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**
|
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario_service.xml**
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial-common/running-open.png" width="75%">
|
<img src="/core/static/tutorial-common/running-open.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* You can now click on the **Start Session** button to run the scenario
|
* You can now click on the **Start Session** button to run the scenario
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial1/scenario.png" width="75%">
|
<img src="/core/static/tutorial1/scenario.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* Open a terminal on **n1** by double clicking it in the GUI
|
* Open a terminal on **n1** by double clicking it in the GUI
|
||||||
* Run the following in **n1** terminal
|
* Run the following in **n1** terminal
|
||||||
|
|
|
@ -30,7 +30,7 @@ XML scenario file, leveraging an NS2 mobility file.
|
||||||
* Navigate to and select this tutorials **scenario.xml** file
|
* Navigate to and select this tutorials **scenario.xml** file
|
||||||
* You can now click play to start the session
|
* You can now click play to start the session
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial2/wireless.png" width="75%">
|
<img src="/core/static/tutorial2/wireless.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* Note that OSPF routing protocol is included in the scenario to provide routes to other nodes, as they are discovered
|
* 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**
|
* 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
|
* Right click on the **wlan1** node and select **WLAN Config**, then set delay to 500000
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial2/wireless-config-delay.png" width="90%">
|
<img src="/core/static/tutorial2/wireless-config-delay.png" width="90%">
|
||||||
</p>
|
</p>
|
||||||
* Using the open terminal for node **n4**, ping **n2** again, expect about 2 seconds delay
|
* Using the open terminal for node **n4**, ping **n2** again, expect about 2 seconds delay
|
||||||
```shell
|
```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
|
* Right click on the **wlan1** node and select **WLAN Config**, set delay back to 5000 and loss to 10
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial2/wireless-configuration.png" width="90%">
|
<img src="/core/static/tutorial2/wireless-configuration.png" width="90%">
|
||||||
</p>
|
</p>
|
||||||
* Using the open terminal for node **n4**, ping **n2** again, expect to notice considerable loss
|
* Using the open terminal for node **n4**, ping **n2** again, expect to notice considerable loss
|
||||||
```shell
|
```shell
|
||||||
|
@ -111,7 +111,7 @@ gRPC python script and providing mobility over the gRPC interface.
|
||||||
* You will now have joined the already running scenario
|
* You will now have joined the already running scenario
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial2/wireless.png" width="90%">
|
<img src="/core/static/tutorial2/wireless.png" width="90%">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## Running Software
|
## Running Software
|
||||||
|
|
|
@ -71,7 +71,7 @@ file, leveraging an NS2 file for mobility.
|
||||||
known and when the routes are discovered, ping will work
|
known and when the routes are discovered, ping will work
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial3/motion_from_ns2_file.png" width="80%" >
|
<img src="/core/static/tutorial3/motion_from_ns2_file.png" width="80%" >
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## Running with the gRPC Script
|
## 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
|
* You will now have joined the already running scenario
|
||||||
* In the terminal running the **scenario.py**, hit a key to start motion
|
* In the terminal running the **scenario.py**, hit a key to start motion
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial3/mobility-script.png" width="80%" >
|
<img src="/core/static/tutorial3/mobility-script.png" width="80%" >
|
||||||
</p>
|
</p>
|
||||||
* Observe the link between **n3** and **n4** is shown and then as motion continues the link breaks
|
* Observe the link between **n3** and **n4** is shown and then as motion continues the link breaks
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial3/motion_continued_breaks_link.png" width="80%" >
|
<img src="/core/static/tutorial3/motion_continued_breaks_link.png" width="80%" >
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## Running the Chat App Software
|
## Running the Chat App Software
|
||||||
|
@ -151,5 +151,5 @@ API.
|
||||||
* Observe that node 2 moves and continues to move
|
* Observe that node 2 moves and continues to move
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial3/move-n2.png" width="80%" >
|
<img src="/core/static/tutorial3/move-n2.png" width="80%" >
|
||||||
</p>
|
</p>
|
||||||
|
|
|
@ -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
|
* Configure the Windows host VM to have a bridged network adapter
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial5/VM-network-settings.png" width="80%">
|
<img src="/core/static/tutorial5/VM-network-settings.png" width="80%">
|
||||||
</p>
|
</p>
|
||||||
* Make sure the **core-daemon** is running in a terminal
|
* Make sure the **core-daemon** is running in a terminal
|
||||||
```shell
|
```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
|
* Open the **scenario.xml** with the unassigned RJ45 node
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial5/rj45-unassigned.png" width="80%">
|
<img src="/core/static/tutorial5/rj45-unassigned.png" width="80%">
|
||||||
</p>
|
</p>
|
||||||
* Configure the RJ45 node name to use the bridged interface
|
* Configure the RJ45 node name to use the bridged interface
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial5/configure-the-rj45.png" width="80%">
|
<img src="/core/static/tutorial5/configure-the-rj45.png" width="80%">
|
||||||
</p>
|
</p>
|
||||||
* After configuring the RJ45, run the scenario:
|
* After configuring the RJ45, run the scenario:
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial5/rj45-connector.png" width="80%">
|
<img src="/core/static/tutorial5/rj45-connector.png" width="80%">
|
||||||
</p>
|
</p>
|
||||||
* Double click node **n1** to open a terminal and add a route to the Windows host
|
* Double click node **n1** to open a terminal and add a route to the Windows host
|
||||||
```shell
|
```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
|
* Configure the Windows host VM to have a bridged network adapter
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial5/VM-network-settings.png" width="80%">
|
<img src="/core/static/tutorial5/VM-network-settings.png" width="80%">
|
||||||
</p>
|
</p>
|
||||||
* Make sure the **core-daemon** is running in a terminal
|
* Make sure the **core-daemon** is running in a terminal
|
||||||
```shell
|
```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
|
* In the **core-gui** connect to the running session that was created
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial5/rj45-connector.png" width="80%">
|
<img src="/core/static/tutorial5/rj45-connector.png" width="80%">
|
||||||
</p>
|
</p>
|
||||||
* Double click node **n1** to open a terminal and add a route to the Windows host
|
* Double click node **n1** to open a terminal and add a route to the Windows host
|
||||||
```shell
|
```shell
|
||||||
|
|
|
@ -31,11 +31,11 @@ This section will cover running this sample tutorial that develops a scenario fi
|
||||||
|
|
||||||
* Create three MDR nodes
|
* Create three MDR nodes
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial6/create-nodes.png" width="80%">
|
<img src="/core/static/tutorial6/create-nodes.png" width="80%">
|
||||||
</p>
|
</p>
|
||||||
* Double click on each node for configuration, click the icon and set it to use the **drone.png** image
|
* Double click on each node for configuration, click the icon and set it to use the **drone.png** image
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial6/configure-icon.png" width="50%">
|
<img src="/core/static/tutorial6/configure-icon.png" width="50%">
|
||||||
</p>
|
</p>
|
||||||
* Use **Session -> Options** and set **Control Network 0** to **172.16.0.0./24**
|
* 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
|
* Add a WLAN Node
|
||||||
* Link the three prior MDR nodes to the WLAN node
|
* Link the three prior MDR nodes to the WLAN node
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial6/linked-nodes.png" width="50%">
|
<img src="/core/static/tutorial6/linked-nodes.png" width="50%">
|
||||||
</p>
|
</p>
|
||||||
* Click play to start the scenario
|
* Click play to start the scenario
|
||||||
* Observe wireless links being created
|
* Observe wireless links being created
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial6/wlan-links.png" width="50%">
|
<img src="/core/static/tutorial6/wlan-links.png" width="50%">
|
||||||
</p>
|
</p>
|
||||||
* Click stop to end the scenario
|
* Click stop to end the scenario
|
||||||
* Right click the WLAN node and select **Edit -> Hide**
|
* Right click the WLAN node and select **Edit -> Hide**
|
||||||
* Now you can view the nodes in isolation
|
* Now you can view the nodes in isolation
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial6/hidden-nodes.png" width="50%">
|
<img src="/core/static/tutorial6/hidden-nodes.png" width="50%">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
### Changing Canvas Background
|
### Changing Canvas Background
|
||||||
|
|
||||||
* Click **Canvas -> Wallpaper** to set the background to terrain.png
|
* Click **Canvas -> Wallpaper** to set the background to terrain.png
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial6/select-wallpaper.png" width="50%">
|
<img src="/core/static/tutorial6/select-wallpaper.png" width="50%">
|
||||||
</p>
|
</p>
|
||||||
* Click play to start the scenario again
|
* Click play to start the scenario again
|
||||||
* You now have a scenario with drone icons, terrain background, links displayed and hidden WLAN node
|
* You now have a scenario with drone icons, terrain background, links displayed and hidden WLAN node
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial6/scenario-with-terrain.png" width="80%">
|
<img src="/core/static/tutorial6/scenario-with-terrain.png" width="80%">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## Adding Mobility
|
## 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
|
* Let it run to see the link break as the node 1 drone approches the right side
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial6/only-node1-moving.png" width="80%">
|
<img src="/core/static/tutorial6/only-node1-moving.png" width="80%">
|
||||||
</p>
|
</p>
|
||||||
* Repeat for other nodes, double click on **n2** and **n3** and run the demo.py script
|
* Repeat for other nodes, double click on **n2** and **n3** and run the demo.py script
|
||||||
```shell
|
```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
|
* 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.
|
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">
|
<p align="center">
|
||||||
<img src="/static/tutorial6/scenario-with-motion.png" width="80%">
|
<img src="/core/static/tutorial6/scenario-with-motion.png" width="80%">
|
||||||
</p>
|
</p>
|
||||||
|
|
|
@ -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.
|
use or leverage when working with and creating EMANE based networks.
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial7/scenario.png" width="75%">
|
<img src="/core/static/tutorial7/scenario.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
For more detailed information on EMANE see the following:
|
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**
|
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario.xml**
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial-common/running-open.png" width="75%">
|
<img src="/core/static/tutorial-common/running-open.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* You can now click on the **Start Session** button to run the scenario
|
* You can now click on the **Start Session** button to run the scenario
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial7/scenario.png" width="75%">
|
<img src="/core/static/tutorial7/scenario.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* Open a terminal on **n2** by double clicking it in the GUI
|
* Open a terminal on **n2** by double clicking it in the GUI
|
||||||
* Run the following in **n2** terminal
|
* 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**
|
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario.xml**
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial-common/running-open.png" width="75%">
|
<img src="/core/static/tutorial-common/running-open.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* You can now click on the **Start Session** button to run the scenario
|
* You can now click on the **Start Session** button to run the scenario
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial7/scenario.png" width="75%">
|
<img src="/core/static/tutorial7/scenario.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* Open a terminal on **n2** by double clicking it in the GUI
|
* Open a terminal on **n2** by double clicking it in the GUI
|
||||||
* Open a terminal on **n3** 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**
|
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario.xml**
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial-common/running-open.png" width="75%">
|
<img src="/core/static/tutorial-common/running-open.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* You can now click on the **Start Session** button to run the scenario
|
* You can now click on the **Start Session** button to run the scenario
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial7/scenario.png" width="75%">
|
<img src="/core/static/tutorial7/scenario.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* Open a terminal on **n2** by double clicking it in the GUI
|
* Open a terminal on **n2** by double clicking it in the GUI
|
||||||
* Run the following in **n2** terminal
|
* 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**
|
* In the GUI menu bar select **File->Open...**, then navigate to and select **scenario_service.xml**
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial-common/running-open.png" width="75%">
|
<img src="/core/static/tutorial-common/running-open.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* You can now click on the **Start Session** button to run the scenario
|
* You can now click on the **Start Session** button to run the scenario
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="/static/tutorial7/scenario.png" width="75%">
|
<img src="/core/static/tutorial7/scenario.png" width="75%">
|
||||||
</p>
|
</p>
|
||||||
* Open a terminal on **n2** by double clicking it in the GUI
|
* Open a terminal on **n2** by double clicking it in the GUI
|
||||||
* Run the following in **n2** terminal
|
* Run the following in **n2** terminal
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
site_name: CORE Documentation
|
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
|
use_directory_urls: false
|
||||||
theme:
|
theme:
|
||||||
name: material
|
name: material
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue