From c3245034240df00e3042a8693525a057640607d6 Mon Sep 17 00:00:00 2001 From: Steven Galgano Date: Fri, 18 Aug 2023 14:03:54 -0400 Subject: [PATCH] Initial development. --- .github/workflows/pages.yml | 72 + LICENSE | 47 + examples/Makefile | 17 + .../antenna-30-degree-sector-24.25dbi.xml | 26 + .../antenna-omni-24.25dbi.xml | 13 + examples/bentpipe-01/Makefile | 10 + examples/bentpipe-01/experiment.cfg | 88 + examples/bentpipe-01/letce2.cfg | 2 + examples/bentpipe-01/node-poststart | 15 + examples/bentpipe-01/pathloss.eel | 2 + examples/bentpipe-02/Makefile | 10 + .../bentpipe-02/antennaprofilemanifest.xml | 15 + examples/bentpipe-02/experiment.cfg | 107 + examples/bentpipe-02/letce2.cfg | 2 + examples/bentpipe-02/locations.eel | 10 + examples/bentpipe-02/node-poststart | 15 + examples/commeffect-01/Makefile | 10 + examples/commeffect-01/experiment.cfg | 89 + examples/commeffect-01/letce2.cfg | 2 + .../commeffect-01/scenario-commeffect.eel | 20 + examples/ieee80211abg-01/Makefile | 10 + examples/ieee80211abg-01/batman-routes | 24 + examples/ieee80211abg-01/experiment.cfg | 120 + examples/ieee80211abg-01/letce2.cfg | 2 + examples/ieee80211abg-01/node-poststart | 7 + examples/ieee80211abg-01/pathloss.eel | 16 + .../emane-jammer-simple-control-example.sh | 5 + .../emane-jammer-simple-legacy-example.sh | 12 + .../scripts/emane-spectrum-analyzer.sh | 11 + examples/rfpipe-01/Makefile | 10 + examples/rfpipe-01/experiment.cfg | 78 + examples/rfpipe-01/letce2.cfg | 2 + examples/rfpipe-01/mgen | 7 + examples/scripts/batman-nexthop-monitor.py | 102 + .../flask-batman-originators-server.py | 19 + examples/scripts/tdma-slot-error-heatmap.py | 123 + examples/scripts/tdma-slot-status.py | 130 ++ examples/tdma-01/Makefile | 10 + examples/tdma-01/experiment.cfg | 69 + examples/tdma-01/letce2.cfg | 2 + .../otestpoint-labtools-tdma-slot-status | 130 ++ examples/tdma-01/node-poststart | 7 + examples/tdma-01/schedule.xml | 23 + .../templates/application-host/init.local | 69 + .../templates/application-host/otestpoint.xml | 10 + examples/templates/common/functions | 323 +++ .../common/otestpoint-probe-mgen.xml | 1 + .../templates/common/otestpoint-recorder.xml | 7 + examples/templates/host/eelgenerator.xml | 12 + examples/templates/host/eventservice.xml | 7 + examples/templates/host/otestpoint-broker.xml | 16 + examples/templates/host/prestart.local | 9 + examples/templates/host/scenario.eel | 18 + examples/templates/host/start.local | 45 + examples/templates/host/stop.local | 43 + .../jammer/emane-jammer-simple-service.xml | 8 + examples/templates/jammer/init.local | 25 + .../monitor/emane-spectrum-monitor.xml | 17 + examples/templates/monitor/init.local | 49 + ...int-probe-emane-spectrum-tools-monitor.xml | 7 + .../templates/monitor/otestpoint-recorder.xml | 7 + examples/templates/monitor/otestpoint.xml | 11 + .../emane-bentpipe-ground-radiomodel.xml | 136 ++ .../radio/bentpipe/emane-bentpipe-nem.xml | 42 + .../radio/bentpipe/emane-bentpipe-pcr.xml | 34 + .../emane-bentpipe-satellite-radiomodel.xml | 164 ++ .../radio/bentpipe/emane-platform.xml | 35 + .../otestpoint-probe-emane-bentpipe.xml | 11 + .../templates/radio/bentpipe/otestpoint.xml | 21 + .../radio/commeffect/emane-commeffect-nem.xml | 6 + .../emane-commeffect-utilitymodel.xml | 6 + .../radio/commeffect/emane-platform.xml | 33 + .../otestpoint-probe-emane-commeffect.xml | 7 + .../templates/radio/commeffect/otestpoint.xml | 16 + examples/templates/radio/common/batman-adv | 25 + .../templates/radio/common/emane-transraw.xml | 3 + .../radio/common/emane-transvirtual.xml | 3 + examples/templates/radio/common/init.local | 143 ++ .../otestpoint-probe-emane-physicallayer.xml | 7 + .../otestpoint-probe-emane-rawtransport.xml | 6 + ...testpoint-probe-emane-virtualtransport.xml | 7 + .../ieee80211abg/emane-ieee80211abg-nem.xml | 19 + .../ieee80211abg/emane-ieee80211abg-pcr.xml | 149 ++ .../emane-ieee80211abg-radiomodel.xml | 13 + .../radio/ieee80211abg/emane-platform.xml | 21 + .../otestpoint-probe-emane-ieee80211abg.xml | 15 + .../radio/ieee80211abg/otestpoint.xml | 21 + .../templates/radio/rfpipe/emane-platform.xml | 35 + .../radio/rfpipe/emane-rfpipe-nem.xml | 33 + .../radio/rfpipe/emane-rfpipe-pcr.xml | 47 + .../radio/rfpipe/emane-rfpipe-radiomodel.xml | 12 + .../rfpipe/otestpoint-probe-emane-rfpipe.xml | 9 + .../templates/radio/rfpipe/otestpoint.xml | 24 + .../templates/radio/tdma/emane-platform.xml | 21 + .../templates/radio/tdma/emane-tdma-nem.xml | 16 + .../templates/radio/tdma/emane-tdma-pcr.xml | 132 ++ .../radio/tdma/emane-tdma-radiomodel.xml | 14 + ...obe-emane-tdmaeventschedulerradiomodel.xml | 15 + examples/templates/radio/tdma/otestpoint.xml | 21 + extras/adjacentlink-foss-build.sh | 293 +++ extras/build-external-kmod-batman-adv-rpm.sh | 182 ++ extras/hosts-additions | 57 + guide/Makefile | 68 + guide/antenna-gain.txt | 152 ++ guide/antenna-patterns.txt | 422 ++++ guide/applications.txt | 292 +++ guide/bent-pipe-radio-model.txt | 571 +++++ guide/comm-effect-utility-model.txt | 437 ++++ guide/control-messages.txt | 270 +++ guide/doc-header-pdf.md | 78 + guide/eel-event-generator.txt | 183 ++ guide/events.txt | 77 + guide/getting-started.txt | 318 +++ guide/ieee80211abg-radio-model.txt | 373 +++ guide/images/adjacentlink.png | Bin 0 -> 3871 bytes guide/images/antennapattern.png | Bin 0 -> 46892 bytes ...erated-compatibility-mode-control-messages | 24 + ...ed-compatibility-mode-control-messages.png | Bin 0 -> 38883 bytes ...enerated-configuration-parameter-hierarchy | 24 + ...ated-configuration-parameter-hierarchy.png | Bin 0 -> 15152 bytes .../auto-generated-dont-run-multiple-nems.png | Bin 0 -> 21539 bytes .../auto-generated-incomplete-chapter.png | Bin 0 -> 22822 bytes ...enerated-no-packages-with-source-build.png | Bin 0 -> 23863 bytes .../auto-generated-pcr-representation.png | Bin 0 -> 20907 bytes .../images/auto-generated-run-bentpipe-01.png | Bin 0 -> 18069 bytes .../images/auto-generated-run-bentpipe-02.png | Bin 0 -> 17989 bytes .../auto-generated-run-commeffect-01.png | Bin 0 -> 17418 bytes .../auto-generated-run-ieee80211abg-01.png | Bin 0 -> 18167 bytes guide/images/auto-generated-run-rfpipe-01.png | Bin 0 -> 17790 bytes guide/images/auto-generated-run-tdma-01.png | Bin 0 -> 17930 bytes .../auto-generated-topology-bentpipe-01 | 13 + .../auto-generated-topology-bentpipe-01.png | Bin 0 -> 45468 bytes .../auto-generated-topology-bentpipe-02 | 18 + .../auto-generated-topology-bentpipe-02.png | Bin 0 -> 51988 bytes .../auto-generated-topology-commeffect-01 | 30 + .../auto-generated-topology-commeffect-01.png | Bin 0 -> 79115 bytes .../auto-generated-topology-ieee80211abg-01 | 26 + ...uto-generated-topology-ieee80211abg-01.png | Bin 0 -> 69481 bytes .../images/auto-generated-topology-rfpipe-01 | 19 + .../auto-generated-topology-rfpipe-01.png | Bin 0 -> 60941 bytes guide/images/auto-generated-topology-tdma-01 | 19 + .../auto-generated-topology-tdma-01.png | Bin 0 -> 60941 bytes guide/images/blockagepattern.png | Bin 0 -> 126729 bytes guide/images/cloud.png | Bin 0 -> 12402 bytes guide/images/emane.png | Bin 0 -> 448552 bytes guide/images/exclamation.png | Bin 0 -> 18804 bytes ...ieee80211abg-01-emane-spectrum-monitor.png | Bin 0 -> 23278 bytes guide/images/ieee80211pcr.png | Bin 0 -> 48603 bytes guide/images/pointing-finger.png | Bin 0 -> 16060 bytes guide/images/rfpipepcr.png | Bin 0 -> 13630 bytes guide/images/rollpitchyaw.png | Bin 0 -> 90109 bytes guide/images/tdma-01-slot-status-monitor.png | Bin 0 -> 37831 bytes guide/images/velocityvector.png | Bin 0 -> 46859 bytes guide/introduction.txt | 212 ++ guide/license.txt | 57 + guide/paradigms.txt | 445 ++++ guide/physical-layer.txt | 1147 ++++++++++ guide/preface.txt | 91 + guide/pygments.theme | 211 ++ guide/raw-transport.txt | 71 + guide/rf-pipe-radio-model.txt | 352 +++ guide/site/.gitignore | 5 + guide/site/404.html | 25 + guide/site/Gemfile | 37 + guide/site/Gemfile.lock | 103 + guide/site/_config.yml | 97 + guide/site/_includes/head_custom.html | 6 + guide/site/_includes/mathjax.html | 10 + guide/site/_layouts/mathjax.html | 12 + guide/site/antenna-gain.md | 153 ++ guide/site/antenna-patterns.md | 421 ++++ guide/site/applications.md | 545 +++++ guide/site/assets/js/mathjax-script-type.js | 18 + guide/site/assets/js/mathtex-script-type.js | 34 + guide/site/bent-pipe-radio-model.md | 1094 +++++++++ guide/site/comm-effect-utility-model.md | 788 +++++++ guide/site/control-messages.md | 736 ++++++ guide/site/eel-event-generator.md | 288 +++ guide/site/events.md | 130 ++ guide/site/getting-started.md | 370 +++ guide/site/ieee80211abg-radio-model.md | 2028 +++++++++++++++++ guide/site/images | 1 + guide/site/introduction.md | 208 ++ guide/site/license.md | 58 + guide/site/paradigms.md | 514 +++++ guide/site/physical-layer.md | 1602 +++++++++++++ guide/site/preface.md | 93 + guide/site/raw-transport.md | 198 ++ guide/site/rf-pipe-radio-model.md | 820 +++++++ guide/site/tdma-radio-model.md | 1273 +++++++++++ guide/site/virtual-transport.md | 455 ++++ guide/tdma-radio-model.txt | 669 ++++++ guide/virtual-transport.txt | 81 + 193 files changed, 22901 insertions(+) create mode 100644 .github/workflows/pages.yml create mode 100644 LICENSE create mode 100644 examples/Makefile create mode 100644 examples/antenna-patterns/antenna-30-degree-sector-24.25dbi.xml create mode 100644 examples/antenna-patterns/antenna-omni-24.25dbi.xml create mode 100644 examples/bentpipe-01/Makefile create mode 100644 examples/bentpipe-01/experiment.cfg create mode 100644 examples/bentpipe-01/letce2.cfg create mode 100755 examples/bentpipe-01/node-poststart create mode 100644 examples/bentpipe-01/pathloss.eel create mode 100644 examples/bentpipe-02/Makefile create mode 100644 examples/bentpipe-02/antennaprofilemanifest.xml create mode 100644 examples/bentpipe-02/experiment.cfg create mode 100644 examples/bentpipe-02/letce2.cfg create mode 100644 examples/bentpipe-02/locations.eel create mode 100755 examples/bentpipe-02/node-poststart create mode 100644 examples/commeffect-01/Makefile create mode 100644 examples/commeffect-01/experiment.cfg create mode 100644 examples/commeffect-01/letce2.cfg create mode 100644 examples/commeffect-01/scenario-commeffect.eel create mode 100644 examples/ieee80211abg-01/Makefile create mode 100755 examples/ieee80211abg-01/batman-routes create mode 100644 examples/ieee80211abg-01/experiment.cfg create mode 100644 examples/ieee80211abg-01/letce2.cfg create mode 100755 examples/ieee80211abg-01/node-poststart create mode 100644 examples/ieee80211abg-01/pathloss.eel create mode 100755 examples/ieee80211abg-01/scripts/emane-jammer-simple-control-example.sh create mode 100755 examples/ieee80211abg-01/scripts/emane-jammer-simple-legacy-example.sh create mode 100755 examples/ieee80211abg-01/scripts/emane-spectrum-analyzer.sh create mode 100644 examples/rfpipe-01/Makefile create mode 100644 examples/rfpipe-01/experiment.cfg create mode 100644 examples/rfpipe-01/letce2.cfg create mode 100644 examples/rfpipe-01/mgen create mode 100755 examples/scripts/batman-nexthop-monitor.py create mode 100755 examples/scripts/flask-batman-originators-server.py create mode 100755 examples/scripts/tdma-slot-error-heatmap.py create mode 100755 examples/scripts/tdma-slot-status.py create mode 100644 examples/tdma-01/Makefile create mode 100644 examples/tdma-01/experiment.cfg create mode 100644 examples/tdma-01/letce2.cfg create mode 100755 examples/tdma-01/monitors/otestpoint-labtools-tdma-slot-status create mode 100755 examples/tdma-01/node-poststart create mode 100644 examples/tdma-01/schedule.xml create mode 100644 examples/templates/application-host/init.local create mode 100644 examples/templates/application-host/otestpoint.xml create mode 100644 examples/templates/common/functions create mode 100644 examples/templates/common/otestpoint-probe-mgen.xml create mode 100644 examples/templates/common/otestpoint-recorder.xml create mode 100644 examples/templates/host/eelgenerator.xml create mode 100644 examples/templates/host/eventservice.xml create mode 100644 examples/templates/host/otestpoint-broker.xml create mode 100644 examples/templates/host/prestart.local create mode 100644 examples/templates/host/scenario.eel create mode 100644 examples/templates/host/start.local create mode 100644 examples/templates/host/stop.local create mode 100644 examples/templates/jammer/emane-jammer-simple-service.xml create mode 100644 examples/templates/jammer/init.local create mode 100644 examples/templates/monitor/emane-spectrum-monitor.xml create mode 100644 examples/templates/monitor/init.local create mode 100644 examples/templates/monitor/otestpoint-probe-emane-spectrum-tools-monitor.xml create mode 100644 examples/templates/monitor/otestpoint-recorder.xml create mode 100644 examples/templates/monitor/otestpoint.xml create mode 100644 examples/templates/radio/bentpipe/emane-bentpipe-ground-radiomodel.xml create mode 100644 examples/templates/radio/bentpipe/emane-bentpipe-nem.xml create mode 100644 examples/templates/radio/bentpipe/emane-bentpipe-pcr.xml create mode 100644 examples/templates/radio/bentpipe/emane-bentpipe-satellite-radiomodel.xml create mode 100644 examples/templates/radio/bentpipe/emane-platform.xml create mode 100644 examples/templates/radio/bentpipe/otestpoint-probe-emane-bentpipe.xml create mode 100644 examples/templates/radio/bentpipe/otestpoint.xml create mode 100644 examples/templates/radio/commeffect/emane-commeffect-nem.xml create mode 100644 examples/templates/radio/commeffect/emane-commeffect-utilitymodel.xml create mode 100644 examples/templates/radio/commeffect/emane-platform.xml create mode 100644 examples/templates/radio/commeffect/otestpoint-probe-emane-commeffect.xml create mode 100644 examples/templates/radio/commeffect/otestpoint.xml create mode 100755 examples/templates/radio/common/batman-adv create mode 100644 examples/templates/radio/common/emane-transraw.xml create mode 100644 examples/templates/radio/common/emane-transvirtual.xml create mode 100644 examples/templates/radio/common/init.local create mode 100644 examples/templates/radio/common/otestpoint-probe-emane-physicallayer.xml create mode 100644 examples/templates/radio/common/otestpoint-probe-emane-rawtransport.xml create mode 100644 examples/templates/radio/common/otestpoint-probe-emane-virtualtransport.xml create mode 100644 examples/templates/radio/ieee80211abg/emane-ieee80211abg-nem.xml create mode 100644 examples/templates/radio/ieee80211abg/emane-ieee80211abg-pcr.xml create mode 100644 examples/templates/radio/ieee80211abg/emane-ieee80211abg-radiomodel.xml create mode 100644 examples/templates/radio/ieee80211abg/emane-platform.xml create mode 100644 examples/templates/radio/ieee80211abg/otestpoint-probe-emane-ieee80211abg.xml create mode 100644 examples/templates/radio/ieee80211abg/otestpoint.xml create mode 100644 examples/templates/radio/rfpipe/emane-platform.xml create mode 100644 examples/templates/radio/rfpipe/emane-rfpipe-nem.xml create mode 100644 examples/templates/radio/rfpipe/emane-rfpipe-pcr.xml create mode 100644 examples/templates/radio/rfpipe/emane-rfpipe-radiomodel.xml create mode 100644 examples/templates/radio/rfpipe/otestpoint-probe-emane-rfpipe.xml create mode 100644 examples/templates/radio/rfpipe/otestpoint.xml create mode 100644 examples/templates/radio/tdma/emane-platform.xml create mode 100644 examples/templates/radio/tdma/emane-tdma-nem.xml create mode 100644 examples/templates/radio/tdma/emane-tdma-pcr.xml create mode 100644 examples/templates/radio/tdma/emane-tdma-radiomodel.xml create mode 100644 examples/templates/radio/tdma/otestpoint-probe-emane-tdmaeventschedulerradiomodel.xml create mode 100644 examples/templates/radio/tdma/otestpoint.xml create mode 100755 extras/adjacentlink-foss-build.sh create mode 100755 extras/build-external-kmod-batman-adv-rpm.sh create mode 100644 extras/hosts-additions create mode 100644 guide/Makefile create mode 100644 guide/antenna-gain.txt create mode 100644 guide/antenna-patterns.txt create mode 100644 guide/applications.txt create mode 100644 guide/bent-pipe-radio-model.txt create mode 100644 guide/comm-effect-utility-model.txt create mode 100644 guide/control-messages.txt create mode 100644 guide/doc-header-pdf.md create mode 100644 guide/eel-event-generator.txt create mode 100644 guide/events.txt create mode 100644 guide/getting-started.txt create mode 100644 guide/ieee80211abg-radio-model.txt create mode 100644 guide/images/adjacentlink.png create mode 100644 guide/images/antennapattern.png create mode 100644 guide/images/auto-generated-compatibility-mode-control-messages create mode 100644 guide/images/auto-generated-compatibility-mode-control-messages.png create mode 100644 guide/images/auto-generated-configuration-parameter-hierarchy create mode 100644 guide/images/auto-generated-configuration-parameter-hierarchy.png create mode 100644 guide/images/auto-generated-dont-run-multiple-nems.png create mode 100644 guide/images/auto-generated-incomplete-chapter.png create mode 100644 guide/images/auto-generated-no-packages-with-source-build.png create mode 100644 guide/images/auto-generated-pcr-representation.png create mode 100644 guide/images/auto-generated-run-bentpipe-01.png create mode 100644 guide/images/auto-generated-run-bentpipe-02.png create mode 100644 guide/images/auto-generated-run-commeffect-01.png create mode 100644 guide/images/auto-generated-run-ieee80211abg-01.png create mode 100644 guide/images/auto-generated-run-rfpipe-01.png create mode 100644 guide/images/auto-generated-run-tdma-01.png create mode 100644 guide/images/auto-generated-topology-bentpipe-01 create mode 100644 guide/images/auto-generated-topology-bentpipe-01.png create mode 100644 guide/images/auto-generated-topology-bentpipe-02 create mode 100644 guide/images/auto-generated-topology-bentpipe-02.png create mode 100644 guide/images/auto-generated-topology-commeffect-01 create mode 100644 guide/images/auto-generated-topology-commeffect-01.png create mode 100644 guide/images/auto-generated-topology-ieee80211abg-01 create mode 100644 guide/images/auto-generated-topology-ieee80211abg-01.png create mode 100644 guide/images/auto-generated-topology-rfpipe-01 create mode 100644 guide/images/auto-generated-topology-rfpipe-01.png create mode 100644 guide/images/auto-generated-topology-tdma-01 create mode 100644 guide/images/auto-generated-topology-tdma-01.png create mode 100644 guide/images/blockagepattern.png create mode 100644 guide/images/cloud.png create mode 100644 guide/images/emane.png create mode 100644 guide/images/exclamation.png create mode 100644 guide/images/ieee80211abg-01-emane-spectrum-monitor.png create mode 100644 guide/images/ieee80211pcr.png create mode 100644 guide/images/pointing-finger.png create mode 100644 guide/images/rfpipepcr.png create mode 100644 guide/images/rollpitchyaw.png create mode 100644 guide/images/tdma-01-slot-status-monitor.png create mode 100644 guide/images/velocityvector.png create mode 100644 guide/introduction.txt create mode 100644 guide/license.txt create mode 100644 guide/paradigms.txt create mode 100644 guide/physical-layer.txt create mode 100644 guide/preface.txt create mode 100644 guide/pygments.theme create mode 100644 guide/raw-transport.txt create mode 100644 guide/rf-pipe-radio-model.txt create mode 100644 guide/site/.gitignore create mode 100644 guide/site/404.html create mode 100644 guide/site/Gemfile create mode 100644 guide/site/Gemfile.lock create mode 100644 guide/site/_config.yml create mode 100644 guide/site/_includes/head_custom.html create mode 100644 guide/site/_includes/mathjax.html create mode 100644 guide/site/_layouts/mathjax.html create mode 100644 guide/site/antenna-gain.md create mode 100644 guide/site/antenna-patterns.md create mode 100644 guide/site/applications.md create mode 100644 guide/site/assets/js/mathjax-script-type.js create mode 100644 guide/site/assets/js/mathtex-script-type.js create mode 100644 guide/site/bent-pipe-radio-model.md create mode 100644 guide/site/comm-effect-utility-model.md create mode 100644 guide/site/control-messages.md create mode 100644 guide/site/eel-event-generator.md create mode 100644 guide/site/events.md create mode 100644 guide/site/getting-started.md create mode 100644 guide/site/ieee80211abg-radio-model.md create mode 120000 guide/site/images create mode 100644 guide/site/introduction.md create mode 100644 guide/site/license.md create mode 100644 guide/site/paradigms.md create mode 100644 guide/site/physical-layer.md create mode 100644 guide/site/preface.md create mode 100644 guide/site/raw-transport.md create mode 100644 guide/site/rf-pipe-radio-model.md create mode 100644 guide/site/tdma-radio-model.md create mode 100644 guide/site/virtual-transport.md create mode 100644 guide/tdma-radio-model.txt create mode 100644 guide/virtual-transport.txt diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml new file mode 100644 index 0000000..65447b5 --- /dev/null +++ b/.github/workflows/pages.yml @@ -0,0 +1,72 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +# Sample workflow for building and deploying a Jekyll site to GitHub Pages +name: Deploy Jekyll site to Pages + +on: + push: + branches: ["main"] + paths: + - "guide/site/**" + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow one concurrent deployment +concurrency: + group: "pages" + cancel-in-progress: true + +jobs: + # Build job + build: + runs-on: ubuntu-latest + defaults: + run: + working-directory: guide/site + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.1' # Not needed with a .ruby-version file + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + cache-version: 0 # Increment this number if you need to re-download cached gems + working-directory: '${{ github.workspace }}/guide/site + - name: Setup Pages + id: pages + uses: actions/configure-pages@v3 + - name: Build with Jekyll + # Outputs to the './_site' directory by default + run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}" + with: + working-directory: '${{ github.workspace }}/guide/site + env: + JEKYLL_ENV: production + - name: Upload artifact + # Automatically uploads an artifact from the './_site' directory by default + uses: actions/upload-pages-artifact@v1 + with: + path: "guide/site/_site" + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9e248e6 --- /dev/null +++ b/LICENSE @@ -0,0 +1,47 @@ +The EMANE Guide is licensed under the following terms: + +Copyright (c) 2014-2023 - Adjacent Link LLC, Bridgewater, New Jersey +All rights reserved. + +Except where otherwise noted, this work (the EMANE Guide) is licensed +under Creative Commons Attribution 4.0 International License +(https://creativecommons.org/licenses/by/4.0/). + + Copyright (c) 2014-2023 - Adjacent Link LLC, Bridgewater, New Jersey + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * 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. + * Neither the name of Adjacent Link LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + 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. + +Portions of the EMANE Guide derive from EMANE User Manual 0.8.1 which +has the following license: + +Copyright (c) 2013 - Adjacent Link LLC, Bridgewater, New Jersey +Copyright (c) 2012 - DRS CenGen, LLC, Bridgewater, New Jersey + +This work is licensed under the Creative Commons Attribution 3.0 +Unported License (http://creativecommons.org/licenses/by/3.0/). diff --git a/examples/Makefile b/examples/Makefile new file mode 100644 index 0000000..35d8d35 --- /dev/null +++ b/examples/Makefile @@ -0,0 +1,17 @@ +examples= \ + commeffect-01 \ + bentpipe-01 \ + bentpipe-02 \ + ieee80211abg-01 \ + rfpipe-01 \ + tdma-01 + +all: + @for example in $(examples); do \ + $(MAKE) -C $$example; \ + done + +clean: + @for example in $(examples); do \ + $(MAKE) -C $$example clean; \ + done diff --git a/examples/antenna-patterns/antenna-30-degree-sector-24.25dbi.xml b/examples/antenna-patterns/antenna-30-degree-sector-24.25dbi.xml new file mode 100644 index 0000000..934781b --- /dev/null +++ b/examples/antenna-patterns/antenna-30-degree-sector-24.25dbi.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/antenna-patterns/antenna-omni-24.25dbi.xml b/examples/antenna-patterns/antenna-omni-24.25dbi.xml new file mode 100644 index 0000000..50bc86c --- /dev/null +++ b/examples/antenna-patterns/antenna-omni-24.25dbi.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/examples/bentpipe-01/Makefile b/examples/bentpipe-01/Makefile new file mode 100644 index 0000000..90292db --- /dev/null +++ b/examples/bentpipe-01/Makefile @@ -0,0 +1,10 @@ +topdir=.. + +all: + letce2 \ + lxc \ + build \ + experiment.cfg + +clean: + letce2 lxc clean diff --git a/examples/bentpipe-01/experiment.cfg b/examples/bentpipe-01/experiment.cfg new file mode 100644 index 0000000..a020d21 --- /dev/null +++ b/examples/bentpipe-01/experiment.cfg @@ -0,0 +1,88 @@ +[!experiment] +@experiment_control_interface=letce0 + +[host:experiment] +__template.path=../templates/host:../templates/common +@bridge.0.name=%(@experiment_control_interface)s +@bridge.0.ipv4=10.99.0.100/16 +__template.file.100=bridge +__template.file.101=control +__template.file.102=start.local +__template.file.103=otestpoint-broker.xml +__template.file.104=stop.local +__template.file.105=functions +__template.file.106=pathloss.eel@mv{scenario.eel} +__template.file.107=eelgenerator.xml +__template.file.108=eventservice.xml +__template.file.109=prestart.local + +[!common:experiment] ++@lxc.interface.0.link =%(@experiment_control_interface)s ++@lxc.interface.0.ipv4=%(@control_ip_addr)s ++@lxc.interface.0.name=%(@control_interface)s +@control_interface=backchan0 +__template.file.001=lxc.conf +__template.file.002=lxc.hook.autodev.sh ++@control_ip_addr=10.99.0.%(@id)s/16 + +[!bentpipe:common] +__template.path=../templates/radio/bentpipe:../templates/radio/common:../templates/common +__template.file.100=init +__template.file.101=init.local +__template.file.102=functions +__template.file.103=emane-platform.xml +__template.file.104=emane-bentpipe-nem.xml +__template.file.105=emane-bentpipe-pcr.xml +__template.file.106=emane-transvirtual.xml +__template.file.107=otestpoint.xml +__template.file.108=otestpoint-probe-emane-physicallayer.xml +__template.file.109=otestpoint-probe-emane-bentpipe.xml +__template.file.110=otestpoint-probe-emane-virtualtransport.xml +__template.file.111=otestpoint-recorder.xml ++@lxc.interface.1.link=%(@lan_link)s ++@lxc.interface.1.ipv4=%(@lan_ip_addr)s ++@lxc.interface.1.name=%(@lan_interface)s +@waveform_interface=emane0 +@sub_id=1 +@tx_frequency_hz=29.910G +@rx_frequency_hz=29.910G ++@nem_id=%(@id)s +@radio_ip_addr=10.100.0.%(@nem_id)s/24 +@lan_link=r%(@id)s_0 +@lan_ip_addr=10.98.%(@id)s.1/24 +@lan_interface=lan0 +@tx_power_dbm=0 +@propagationmodel=precomputed +@tx_mtu_bytes=2048 + +[!application-host:common] +__template.path=../templates/application-host:../templates/common +__template.file.100=init +__template.file.101=init.local +__template.file.102=functions ++@lxc.interface.1.link=%(@lan_link)s ++@lxc.interface.1.name=%(@lan_interface)s ++@lxc.interface.1.ipv4=%(@lan_ip_addr)s +@lan_interface=lan0 +@lan_ip_addr=10.98.%(@id)s.2/24 +@lan_link=r%(@id)s_0 ++@gateway_ip_addr=10.98.%(@id)s.1/24 ++@control_ip_addr=10.99.1.%(@id)s/16 + +[!ground:bentpipe] +__template.file.200=emane-bentpipe-ground-radiomodel.xml@mv{emane-bentpipe-radiomodel.xml} +__template.file.201=node-poststart + +[node-1:ground] +@id=1 +@antenna.0=0:omni;0.5;0 + +[node-2:ground] +@id=2 +@antenna.0=0:omni;0;0 + +[host-1:application-host] +@id=1 + +[host-2:application-host] +@id=2 diff --git a/examples/bentpipe-01/letce2.cfg b/examples/bentpipe-01/letce2.cfg new file mode 100644 index 0000000..9d452ee --- /dev/null +++ b/examples/bentpipe-01/letce2.cfg @@ -0,0 +1,2 @@ +[lxc] +module=letce2.plugins.lxc diff --git a/examples/bentpipe-01/node-poststart b/examples/bentpipe-01/node-poststart new file mode 100755 index 0000000..5fdd215 --- /dev/null +++ b/examples/bentpipe-01/node-poststart @@ -0,0 +1,15 @@ +#!/bin/bash - + +node_name=$1 + +if (! route | grep -q 10.98.1.0 ) +then + echo "$node_name: ip route add 10.98.1.0/24 via 10.100.0.1" + ip route add 10.98.1.0/24 via 10.100.0.1 +fi + +if (! route | grep -q 10.98.2.0 ) +then + echo "$node_name: ip route add 10.98.2.0/24 via 10.100.0.2" + ip route add 10.98.2.0/24 via 10.100.0.2 +fi diff --git a/examples/bentpipe-01/pathloss.eel b/examples/bentpipe-01/pathloss.eel new file mode 100644 index 0000000..8040c76 --- /dev/null +++ b/examples/bentpipe-01/pathloss.eel @@ -0,0 +1,2 @@ +0.0 nem:1 pathloss nem:2,87.0 + diff --git a/examples/bentpipe-02/Makefile b/examples/bentpipe-02/Makefile new file mode 100644 index 0000000..90292db --- /dev/null +++ b/examples/bentpipe-02/Makefile @@ -0,0 +1,10 @@ +topdir=.. + +all: + letce2 \ + lxc \ + build \ + experiment.cfg + +clean: + letce2 lxc clean diff --git a/examples/bentpipe-02/antennaprofilemanifest.xml b/examples/bentpipe-02/antennaprofilemanifest.xml new file mode 100644 index 0000000..32ded77 --- /dev/null +++ b/examples/bentpipe-02/antennaprofilemanifest.xml @@ -0,0 +1,15 @@ + +<% +profile_dir=__top_dir + '/../antenna-patterns' +%> + + + + + + + + + diff --git a/examples/bentpipe-02/experiment.cfg b/examples/bentpipe-02/experiment.cfg new file mode 100644 index 0000000..fc4ea4e --- /dev/null +++ b/examples/bentpipe-02/experiment.cfg @@ -0,0 +1,107 @@ +[!experiment] +@experiment_control_interface=letce0 + +[host:experiment] +__template.path=../templates/host:../templates/common +@bridge.0.name=%(@experiment_control_interface)s +@bridge.0.ipv4=10.99.0.100/16 +__template.file.100=bridge +__template.file.101=control +__template.file.102=start.local +__template.file.103=otestpoint-broker.xml +__template.file.104=stop.local +__template.file.105=functions +__template.file.106=locations.eel@mv{scenario.eel} +__template.file.107=eelgenerator.xml +__template.file.108=eventservice.xml +__template.file.109=prestart.local + +[!common:experiment] ++@lxc.interface.0.link =%(@experiment_control_interface)s ++@lxc.interface.0.ipv4=%(@control_ip_addr)s ++@lxc.interface.0.name=%(@control_interface)s +@control_interface=backchan0 +__template.file.001=lxc.conf +__template.file.002=lxc.hook.autodev.sh ++@control_ip_addr=10.99.0.%(@id)s/16 + +[!bentpipe:common] +__template.path=../templates/radio/bentpipe:../templates/radio/common:../templates/common +__template.file.100=init +__template.file.101=init.local +__template.file.102=functions +__template.file.103=emane-platform.xml +__template.file.104=%(@antenna_profile_manifest)s +__template.file.105=emane-bentpipe-nem.xml +__template.file.106=emane-bentpipe-pcr.xml +__template.file.107=emane-transvirtual.xml +__template.file.110=otestpoint.xml +__template.file.111=otestpoint-probe-emane-physicallayer.xml +__template.file.112=otestpoint-probe-emane-bentpipe.xml +__template.file.113=otestpoint-probe-emane-virtualtransport.xml +__template.file.114=otestpoint-probe-emane-bentpipe.xml +__template.file.115=otestpoint-recorder.xml ++@lxc.interface.1.link=%(@lan_link)s ++@lxc.interface.1.ipv4=%(@lan_ip_addr)s ++@lxc.interface.1.name=%(@lan_interface)s +@waveform_interface=emane0 +@sub_id=1 ++@nem_id=%(@id)s +@radio_ip_addr=10.100.0.%(@nem_id)s/24 +@lan_link=r%(@id)s_0 +@lan_ip_addr=10.98.%(@id)s.1/24 +@lan_interface=lan0 +@antenna_profile_manifest=antennaprofilemanifest.xml +@tx_power_dbm=54 +@propagationmodel=freespace +@system_noise_figure_db=-26.4 + +[!application-host:common] +__template.path=../templates/application-host:../templates/common +__template.file.100=init +__template.file.101=init.local +__template.file.102=functions ++@lxc.interface.1.link=%(@lan_link)s ++@lxc.interface.1.name=%(@lan_interface)s ++@lxc.interface.1.ipv4=%(@lan_ip_addr)s +@lan_interface=lan0 +@lan_ip_addr=10.98.%(@id)s.2/24 +@lan_link=r%(@id)s_0 ++@gateway_ip_addr=10.98.%(@id)s.1/24 ++@control_ip_addr=10.99.1.%(@id)s/16 + +[!satcom:bentpipe] +__template.file.200=emane-bentpipe-satellite-radiomodel.xml@mv{emane-bentpipe-radiomodel.xml} + +[!ground:bentpipe] +__template.file.200=emane-bentpipe-ground-radiomodel.xml@mv{emane-bentpipe-radiomodel.xml} +__template.file.201=node-poststart + +[node-1:ground] +@id=1 +@txslots=1;3;5;7;9 +@txslotsize=1000 +@txslotperframe=10 +@tx_frequency_hz=29.745G +@rx_frequency_hz=20.505G +@antenna.0=0:1;291.11372919270093;69.66042286291453;0 + +[node-2:satcom] +@id=2 +@tx_mtu_bytes=2048 +@antenna.0=0:2;0;0;0 +@antenna.1=1:1;94.34439424144891;-86.98230090133954;0 +@antenna.2=2:1;237.5217814216051;-87.42647720511944;0 + +[node-3:ground] +@id=3 +@tx_mtu_bytes=2048 +@tx_frequency_hz=29.580G +@rx_frequency_hz=20.340G +@antenna.0=0:1;46.978501196479556;72.73376112146813;0 + +[host-1:application-host] +@id=1 + +[host-3:application-host] +@id=3 diff --git a/examples/bentpipe-02/letce2.cfg b/examples/bentpipe-02/letce2.cfg new file mode 100644 index 0000000..9d452ee --- /dev/null +++ b/examples/bentpipe-02/letce2.cfg @@ -0,0 +1,2 @@ +[lxc] +module=letce2.plugins.lxc diff --git a/examples/bentpipe-02/locations.eel b/examples/bentpipe-02/locations.eel new file mode 100644 index 0000000..083774d --- /dev/null +++ b/examples/bentpipe-02/locations.eel @@ -0,0 +1,10 @@ +# Carl Sagan final resting place +0.0 nem:1 location gps 42.4563980,-76.4930115,10.0 + +# satellite: somewhere over midwest USA +0.0 nem:2 location gps 46.349795,-100.219587,35786000.0 + +# area 51 +0.0 nem:3 location gps 37.274043,-115.799030,10.0 + + diff --git a/examples/bentpipe-02/node-poststart b/examples/bentpipe-02/node-poststart new file mode 100755 index 0000000..0a6c29d --- /dev/null +++ b/examples/bentpipe-02/node-poststart @@ -0,0 +1,15 @@ +#!/bin/bash - + +node_name=$1 + +if (! route | grep -q 10.98.1.0 ) +then + echo "$node_name: ip route add 10.98.1.0/24 via 10.100.0.1" + ip route add 10.98.1.0/24 via 10.100.0.1 +fi + +if (! route | grep -q 10.98.3.0 ) +then + echo "$node_name: ip route add 10.98.3.0/24 via 10.100.0.3" + ip route add 10.98.3.0/24 via 10.100.0.3 +fi diff --git a/examples/commeffect-01/Makefile b/examples/commeffect-01/Makefile new file mode 100644 index 0000000..90292db --- /dev/null +++ b/examples/commeffect-01/Makefile @@ -0,0 +1,10 @@ +topdir=.. + +all: + letce2 \ + lxc \ + build \ + experiment.cfg + +clean: + letce2 lxc clean diff --git a/examples/commeffect-01/experiment.cfg b/examples/commeffect-01/experiment.cfg new file mode 100644 index 0000000..a0e642f --- /dev/null +++ b/examples/commeffect-01/experiment.cfg @@ -0,0 +1,89 @@ +[!experiment] +@experiment_control_interface=letce0 + +[host:experiment] +__template.path=../templates/host:../templates/common +@bridge.0.name=%(@experiment_control_interface)s +@bridge.0.ipv4=10.99.0.100/16 +__template.file.100=bridge +__template.file.101=control +__template.file.102=start.local +__template.file.103=otestpoint-broker.xml +__template.file.104=stop.local +__template.file.105=functions +__template.file.106=scenario-commeffect.eel@mv{scenario.eel} +__template.file.107=eelgenerator.xml +__template.file.108=eventservice.xml +__template.file.109=prestart.local + +[!common:experiment] ++@lxc.interface.0.link =%(@experiment_control_interface)s ++@lxc.interface.0.ipv4=%(@control_ip_addr)s ++@lxc.interface.0.name=%(@control_interface)s +@control_interface=backchan0 +__template.file.001=lxc.conf +__template.file.002=lxc.hook.autodev.sh ++@control_ip_addr=10.99.0.%(@id)s/16 + +[!commeffect:common] +__template.path=../templates/radio/commeffect:../templates/radio/common:../templates/common +__template.file.100=init +__template.file.101=init.local +__template.file.102=functions +__template.file.103=emane-platform.xml +__template.file.104=emane-commeffect-utilitymodel.xml +__template.file.105=emane-commeffect-nem.xml +__template.file.106=emane-transraw.xml +__template.file.107=otestpoint.xml +__template.file.108=otestpoint-probe-emane-commeffect.xml +__template.file.109=otestpoint-probe-emane-rawtransport.xml +__template.file.110=otestpoint-recorder.xml ++@lxc.interface.1.link=%(@lan_link)s ++@lxc.interface.1.name=%(@lan_interface)s ++@nem_id=%(@id)s +@lan_link=r%(@id)s_0 +@lan_interface=lan0 + +[!application-host:common] +__template.path=../templates/application-host:../templates/common +__template.file.100=init +__template.file.101=init.local +__template.file.102=functions ++@lxc.interface.1.link=%(@lan_link)s ++@lxc.interface.1.name=%(@lan_interface)s ++@lxc.interface.1.ipv4=%(@lan_ip_addr)s +@lan_interface=lan0 ++@control_ip_addr=10.99.1.%(@id)s/16 +@lan_ip_addr=10.98.%(@id)s.2/16 +@lan_link=r%(@id)s_0 + +[node-1:commeffect] +@id=1 + +[host-1:application-host] +@id=1 + +[node-2:commeffect] +@id=2 + +[host-2:application-host] +@id=2 + +[node-3:commeffect] +@id=3 + +[host-3:application-host] +@id=3 + +[node-4:commeffect] +@id=4 + +[host-4:application-host] +@id=4 + +[node-5:commeffect] +@id=5 + +[host-5:application-host] +@id=5 + diff --git a/examples/commeffect-01/letce2.cfg b/examples/commeffect-01/letce2.cfg new file mode 100644 index 0000000..9d452ee --- /dev/null +++ b/examples/commeffect-01/letce2.cfg @@ -0,0 +1,2 @@ +[lxc] +module=letce2.plugins.lxc diff --git a/examples/commeffect-01/scenario-commeffect.eel b/examples/commeffect-01/scenario-commeffect.eel new file mode 100644 index 0000000..e728b46 --- /dev/null +++ b/examples/commeffect-01/scenario-commeffect.eel @@ -0,0 +1,20 @@ +<% +import re +nems=set() +for node,items in __share.items(): + for item in items: + if item == 'nem_id': + nems.add(items[item]) + +targets=set(nems) +%> +% for a in sorted(list(nems)): +<% + targets.remove(a) +%> +% for b in sorted(list(nems)): +% if a != b: +<%block>0.0 nem:${a} commeffect nem:${b},0,0,0,0,1000000,1000000 +% endif +% endfor +% endfor diff --git a/examples/ieee80211abg-01/Makefile b/examples/ieee80211abg-01/Makefile new file mode 100644 index 0000000..90292db --- /dev/null +++ b/examples/ieee80211abg-01/Makefile @@ -0,0 +1,10 @@ +topdir=.. + +all: + letce2 \ + lxc \ + build \ + experiment.cfg + +clean: + letce2 lxc clean diff --git a/examples/ieee80211abg-01/batman-routes b/examples/ieee80211abg-01/batman-routes new file mode 100755 index 0000000..e015cfa --- /dev/null +++ b/examples/ieee80211abg-01/batman-routes @@ -0,0 +1,24 @@ +#!/bin/bash - + +node_name=$1 + +if [ -f batman-adv ] +then + if (! route | grep -q 10.98.1.0 ) + then + echo "$node_name: ip route add 10.98.1.0/24 via 10.100.0.1" + ip route add 10.98.1.0/24 via 10.100.0.1 + fi + + if (! route | grep -q 10.98.2.0 ) + then + echo "$node_name: ip route add 10.98.2.0/24 via 10.100.0.2" + ip route add 10.98.2.0/24 via 10.100.0.2 + fi + + if (! route | grep -q 10.98.3.0 ) + then + echo "$node_name: ip route add 10.98.3.0/24 via 10.100.0.3" + ip route add 10.98.3.0/24 via 10.100.0.3 + fi +fi diff --git a/examples/ieee80211abg-01/experiment.cfg b/examples/ieee80211abg-01/experiment.cfg new file mode 100644 index 0000000..afc1a19 --- /dev/null +++ b/examples/ieee80211abg-01/experiment.cfg @@ -0,0 +1,120 @@ +[!experiment] +@experiment_control_interface=letce0 + +[host:experiment] +__template.path=../templates/host:../templates/common +@bridge.0.name=%(@experiment_control_interface)s +@bridge.0.ipv4=10.99.0.100/16 +__template.file.100=bridge +__template.file.101=control +__template.file.102=start.local +__template.file.103=otestpoint-broker.xml +__template.file.104=stop.local +__template.file.105=functions +__template.file.106=pathloss.eel@mv{scenario.eel} +__template.file.107=eelgenerator.xml +__template.file.108=eventservice.xml +__template.file.109=prestart.local +@scenario_all_nodes_pathloss_db=70 + +[!common:experiment] ++@lxc.interface.0.link =%(@experiment_control_interface)s ++@lxc.interface.0.ipv4=%(@control_ip_addr)s ++@lxc.interface.0.name=%(@control_interface)s +@control_interface=backchan0 +__template.file.001=lxc.conf +__template.file.002=lxc.hook.autodev.sh ++@control_ip_addr=10.99.0.%(@id)s/24 + +[!ieee80211abg:common] +__template.path=../templates/radio/ieee80211abg:../templates/radio/common:../templates/common +__template.file.100=init +__template.file.101=init.local +__template.file.102=functions +__template.file.103=emane-platform.xml +__template.file.104=emane-ieee80211abg-radiomodel.xml +__template.file.105=emane-ieee80211abg-nem.xml +__template.file.106=emane-ieee80211abg-pcr.xml +__template.file.107=emane-transvirtual.xml +__template.file.110=otestpoint.xml +__template.file.111=otestpoint-probe-emane-physicallayer.xml +__template.file.112=otestpoint-probe-emane-ieee80211abg.xml +__template.file.113=otestpoint-probe-emane-virtualtransport.xml +__template.file.114=otestpoint-recorder.xml +__template.file.115=batman-adv +__template.file.116=batman-routes +__template.file.117=node-poststart ++@lxc.interface.1.link=%(@lan_link)s ++@lxc.interface.1.ipv4=%(@lan_ip_addr)s ++@lxc.interface.1.name=%(@lan_interface)s + +@waveform_interface=emane0 +@sub_id=1 +@frequency_hz=2.4G ++@nem_id=%(@id)s +@radio_ip_addr=10.100.0.%(@nem_id)s/24 + +@lan_link=r%(@id)s_0 +@lan_ip_addr=10.98.%(@id)s.1/24 +@lan_interface=lan0 + +@batman_interface=bat0 +@batman_orig_interval=500 + +[!application-host:common] +__template.path=../templates/application-host:../templates/common +__template.file.100=init +__template.file.101=init.local ++@lxc.interface.1.link=%(@lan_link)s ++@lxc.interface.1.name=%(@lan_interface)s ++@lxc.interface.1.ipv4=%(@lan_ip_addr)s +@lan_interface=lan0 ++@control_ip_addr=10.99.1.%(@id)s/16 +@lan_ip_addr=10.98.%(@id)s.2/24 +@lan_link=r%(@id)s_0 +@gateway_ip_addr=10.98.%(@id)s.1/24 + +[!jammer:common] +__template.path=../templates/jammer:../templates/common +__template.file.100=init +__template.file.101=init.local +__template.file.102=emane-jammer-simple-service.xml ++@control_ip_addr=10.99.0.%(@id)s/16 ++@nem_id=%(@id)s + +[!monitor:common] +__template.path=../templates/monitor:../templates/common +__template.file.100=init +__template.file.101=init.local +__template.file.102=functions +__template.file.103=otestpoint.xml +__template.file.104=otestpoint-recorder.xml +__template.file.105=otestpoint-probe-emane-spectrum-tools-monitor.xml +__template.file.106=emane-spectrum-monitor.xml ++@control_ip_addr=10.99.0.%(@id)s/16 ++@nem_id=%(@id)s + + +[node-1:ieee80211abg] +@id=1 + +[host-1:application-host] +@id=1 + +[node-2:ieee80211abg] +@id=2 + +[host-2:application-host] +@id=2 + +[node-3:ieee80211abg] +@id=3 + +[host-3:application-host] +@id=3 + +[jammer-4:jammer] +@id=4 + +[monitor-5:monitor] +@id=5 diff --git a/examples/ieee80211abg-01/letce2.cfg b/examples/ieee80211abg-01/letce2.cfg new file mode 100644 index 0000000..9d452ee --- /dev/null +++ b/examples/ieee80211abg-01/letce2.cfg @@ -0,0 +1,2 @@ +[lxc] +module=letce2.plugins.lxc diff --git a/examples/ieee80211abg-01/node-poststart b/examples/ieee80211abg-01/node-poststart new file mode 100755 index 0000000..e4ca756 --- /dev/null +++ b/examples/ieee80211abg-01/node-poststart @@ -0,0 +1,7 @@ +#!/bin/bash - + +node_name=$1 + +${__top_dir}/../scripts/flask-batman-originators-server.py \ + &> \ + ../persist/$node_name/var/log/flask-batman-originators-server.log & diff --git a/examples/ieee80211abg-01/pathloss.eel b/examples/ieee80211abg-01/pathloss.eel new file mode 100644 index 0000000..d92a155 --- /dev/null +++ b/examples/ieee80211abg-01/pathloss.eel @@ -0,0 +1,16 @@ + + +0.0 nem:1 pathloss nem:2,70 +0.0 nem:1 pathloss nem:3,75 +0.0 nem:1 pathloss nem:4,70 +0.0 nem:1 pathloss nem:5,70 + +0.0 nem:2 pathloss nem:3,70 +0.0 nem:2 pathloss nem:4,70 +0.0 nem:2 pathloss nem:5,70 + +0.0 nem:3 pathloss nem:4,70 +0.0 nem:3 pathloss nem:5,70 + +0.0 nem:4 pathloss nem:5,70 + diff --git a/examples/ieee80211abg-01/scripts/emane-jammer-simple-control-example.sh b/examples/ieee80211abg-01/scripts/emane-jammer-simple-control-example.sh new file mode 100755 index 0000000..ab42986 --- /dev/null +++ b/examples/ieee80211abg-01/scripts/emane-jammer-simple-control-example.sh @@ -0,0 +1,5 @@ +#!/bin/bash - + +emane-jammer-simple-control -v node-4:45715 on 4 2360000000,5 2460000000,5 2410000000,5 -a omni + +echo 'use `emane-jammer-simple-control node-4:45715 off` to stop' diff --git a/examples/ieee80211abg-01/scripts/emane-jammer-simple-legacy-example.sh b/examples/ieee80211abg-01/scripts/emane-jammer-simple-legacy-example.sh new file mode 100755 index 0000000..f1b4e86 --- /dev/null +++ b/examples/ieee80211abg-01/scripts/emane-jammer-simple-legacy-example.sh @@ -0,0 +1,12 @@ +#!/bin/bash - + +emane-jammer-simple \ + --power 5 \ + -i letce0 \ + --bandwidth 20000000 \ + 4 \ + 2360000000 \ + 2460000000 \ + 2410000000 + $@ + diff --git a/examples/ieee80211abg-01/scripts/emane-spectrum-analyzer.sh b/examples/ieee80211abg-01/scripts/emane-spectrum-analyzer.sh new file mode 100755 index 0000000..1b4551a --- /dev/null +++ b/examples/ieee80211abg-01/scripts/emane-spectrum-analyzer.sh @@ -0,0 +1,11 @@ +#!/bin/bash - + +emane-spectrum-analyzer \ + 10.99.0.5:8883 \ + -100 \ + --with-waveforms \ + --hz-min 2350000000 \ + --hz-max 2500000000 \ + --subid-name 1,IEEE802.11 + + diff --git a/examples/rfpipe-01/Makefile b/examples/rfpipe-01/Makefile new file mode 100644 index 0000000..90292db --- /dev/null +++ b/examples/rfpipe-01/Makefile @@ -0,0 +1,10 @@ +topdir=.. + +all: + letce2 \ + lxc \ + build \ + experiment.cfg + +clean: + letce2 lxc clean diff --git a/examples/rfpipe-01/experiment.cfg b/examples/rfpipe-01/experiment.cfg new file mode 100644 index 0000000..199099e --- /dev/null +++ b/examples/rfpipe-01/experiment.cfg @@ -0,0 +1,78 @@ +[!experiment] +@experiment_control_interface=letce0 + +[host:experiment] +__template.path=../templates/host:../templates/common +@bridge.0.name=%(@experiment_control_interface)s +@bridge.0.ipv4=10.99.0.100/16 +__template.file.100=bridge +__template.file.101=control +__template.file.102=start.local +__template.file.103=otestpoint-broker.xml +__template.file.104=stop.local +__template.file.105=functions +__template.file.106=scenario.eel +__template.file.107=eelgenerator.xml +__template.file.108=eventservice.xml +__template.file.109=prestart.local +@scenario_all_nodes_pathloss_db=70 + +[!common:experiment] ++@lxc.interface.0.link =%(@experiment_control_interface)s ++@lxc.interface.0.ipv4=%(@control_ip_addr)s ++@lxc.interface.0.name=%(@control_interface)s +@control_interface=backchan0 +__template.file.001=lxc.conf +__template.file.002=lxc.hook.autodev.sh ++@control_ip_addr=10.99.0.%(@id)s/24 + +[!rfpipe:common] +__template.path=../templates/radio/rfpipe:../templates/radio/common:../templates/common +__template.file.100=init +__template.file.101=init.local +__template.file.102=functions +__template.file.103=emane-platform.xml +__template.file.104=emane-rfpipe-radiomodel.xml +__template.file.105=emane-rfpipe-nem.xml +__template.file.106=emane-rfpipe-pcr.xml +__template.file.107=emane-transvirtual.xml +__template.file.110=otestpoint.xml +__template.file.111=otestpoint-probe-emane-physicallayer.xml +__template.file.112=otestpoint-probe-emane-rfpipe.xml +__template.file.113=otestpoint-probe-emane-virtualtransport.xml +__template.file.114=otestpoint-probe-mgen.xml +__template.file.115=otestpoint-recorder.xml +__template.file.116=batman-adv +__template.file.117=mgen + +@waveform_interface=emane0 +@sub_id=1 +@rx_frequency_hz=2.4G +@tx_frequency_hz=2.4G +@tx_power_dbm=0 +@propagationmodel=precomputed + ++@nem_id=%(@id)s +@radio_ip_addr=10.100.0.%(@nem_id)s/24 + +@batman_interface=bat0 +@batman_orig_interval=500 + +@mgen_monitor_listen_address=0.0.0.0 +@mgen_monitor_listen_port=8883 + +[node-1:rfpipe] +@id=1 + +[node-2:rfpipe] +@id=2 + +[node-3:rfpipe] +@id=3 + +[node-4:rfpipe] +@id=4 + +[node-5:rfpipe] +@id=5 + diff --git a/examples/rfpipe-01/letce2.cfg b/examples/rfpipe-01/letce2.cfg new file mode 100644 index 0000000..9d452ee --- /dev/null +++ b/examples/rfpipe-01/letce2.cfg @@ -0,0 +1,2 @@ +[lxc] +module=letce2.plugins.lxc diff --git a/examples/rfpipe-01/mgen b/examples/rfpipe-01/mgen new file mode 100644 index 0000000..9cc6522 --- /dev/null +++ b/examples/rfpipe-01/mgen @@ -0,0 +1,7 @@ +TTL 64 + +0.0 LISTEN UDP 5001 + +0.0 JOIN 225.1.20.1 INTERFACE ${batman_interface} + +1.0 ON 1 UDP SRC 5001 DST 225.1.20.1/5001 PERIODIC [1 512] INTERFACE ${batman_interface} diff --git a/examples/scripts/batman-nexthop-monitor.py b/examples/scripts/batman-nexthop-monitor.py new file mode 100755 index 0000000..d4c53e4 --- /dev/null +++ b/examples/scripts/batman-nexthop-monitor.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python3 + +from argparse import ArgumentParser +import urllib.request, json +from collections import defaultdict +from prettytable import PrettyTable +import time + +argument_parser = ArgumentParser() + +argument_parser.add_argument('node-count', + type=int, + help="number of nodes.") + +argument_parser.add_argument('--node-name-format', + type=str, + default='node-{}', + help="node name format. [default: %(default)s]") + +ns = argument_parser.parse_args() + +args = vars(ns) + +max_threshold_msecs = 1000 + +table = defaultdict(lambda : defaultdict(lambda : (0,max_threshold_msecs))) + +# only three batman nodes in this example +node_ids = range(1,args['node-count'] + 1) + +nexthop_table = PrettyTable(padding_width=4) + +nexthop_table.field_names = ['Reporter'] + sorted(node_ids) + +def id_from_address(address): + node_id = 0 + if address.startswith('02:02:00:00'): + mac = [int(x) for x in address.split(':')] + node_id = mac[4] * 256 + mac[5] + + return node_id + +while True: + table.clear() + + nexthop_table.clear_rows() + + # request the one-hop neighbors from all batman nodes + for node in node_ids: + try: + with urllib.request.urlopen('http://' + + args['node_name_format'].format(node) + + ':5001', + timeout=1) as url: + + for originator in json.load(url): + orig_id = id_from_address(originator['orig_address']) + + if orig_id: + neighbor_id = id_from_address(originator['neigh_address']) + + if neighbor_id: + + if 'best' in originator and originator['best'] == True: + table[node][orig_id] = (neighbor_id,int(originator['last_seen_msecs'])) + except: + pass + + # build the neighbor display table + for reporter_node_id in sorted(node_ids): + + row = [reporter_node_id] + + for originator_node_id in sorted(node_ids): + + if originator_node_id != reporter_node_id: + next_hop, threshold_msecs = table[reporter_node_id][originator_node_id] + + if threshold_msecs < max_threshold_msecs: + + if originator_node_id != next_hop: + row.append(next_hop) + else: + row.append('*') + else: + # last seen above display threshold + row.append('') + else: + # self node + row.append('--') + + nexthop_table.add_row(row) + + # print the matrix, clearing the screen of previous table '\x1b[2J\x1b[H', + print('\x1b[2J\x1b[H', + time.strftime('%a, %d %b %Y %H:%M:%S'), + '\n == B.A.T.M.A.N. Next Hop Matrix ==', + flush=True) + + print(nexthop_table,flush=True) + + time.sleep(1) diff --git a/examples/scripts/flask-batman-originators-server.py b/examples/scripts/flask-batman-originators-server.py new file mode 100755 index 0000000..38237fd --- /dev/null +++ b/examples/scripts/flask-batman-originators-server.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 + +from flask import Flask +import subprocess + +app = Flask(__name__) + +@app.route('/') +def originators(): + p = subprocess.Popen(['batctl', 'bat0', 'originators_json'], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + + stdout, stderr = p.communicate() + + return stdout + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5001) diff --git a/examples/scripts/tdma-slot-error-heatmap.py b/examples/scripts/tdma-slot-error-heatmap.py new file mode 100755 index 0000000..cb37405 --- /dev/null +++ b/examples/scripts/tdma-slot-error-heatmap.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2016-2017 - Adjacent Link LLC, Bridgewater, New Jersey +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * 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. +# * Neither the name of Adjacent Link LLC nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# 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. +# +# See toplevel COPYING for more information. +# + +from argparse import ArgumentParser +import sys + +from otestpoint.labtools import Stream, Transform, \ + TableColumns, Delta, View + +argument_parser = ArgumentParser() + +argument_parser.add_argument('endpoint', + type=str, + help="OpenTestPoint publish endpoint.") + +argument_parser.add_argument('node-count', + type=int, + help="number of nodes.") + +argument_parser.add_argument('-t', + '--table', + action='store_true', + dest='table', + help='show table not plot [default: %(default)s].') + +argument_parser.add_argument('--node-name-format', + type=str, + default='node-{}', + help="node name format. [default: %(default)s]") + + +ns = argument_parser.parse_args() + +args = vars(ns) + +# create a stream of data by specifying the probes you want to receive +stream = Stream(args['endpoint'], + 'EMANE.TDMAEventSchedulerRadioModel.Tables.Status.Slot') + +# create variables using the Measurement name and attribute +varRxSlotStatusTable = stream.variable('Measurement_emane_tdmaeventschedulerradiomodel_tables_status_slot', + 'rxslotstatustable') + +varTxSlotStatusTable = stream.variable('Measurement_emane_tdmaeventschedulerradiomodel_tables_status_slot', + 'txslotstatustable') + +# create a Model +model = stream.model(Delta(Transform(varRxSlotStatusTable, + TableColumns(4,5,6,7,8))), + Delta(Transform(varTxSlotStatusTable, + TableColumns(4,5))), + labels=['Rx Slot Error', + 'Tx Slot Error'], + by_tag=True) + +# start the data stream +stream.run() + +if args['table']: + import time + import pandas as pd + + event_prev = 0 + + pd.set_option('display.max_columns', None) + pd.set_option('display.expand_frame_repr', False) + + while True: + df,event_cur,(_,timestamp) = model.data(ts=False, + index=None) + + if event_cur != event_prev: + print("\x1b[2J\x1b[H",time.strftime('%a, %d %b %Y %H:%M:%S', + time.localtime(timestamp))) + print(df) + + event_prev = event_cur + + time.sleep(1) +else: + # view the model + view = View(model, + kind='heat', + title='TDMA Slot Error') + + view.show(View.Plot(*[args['node_name_format'].format(x) + ':Rx Slot Error' for x in range(1,args['node-count'] + 1)], + title='Rx Slot Errors', + ylim=(0,10)), + View.Plot(*['node-%s:Tx Slot Error' % x for x in range(1,args['node-count']+1)], + title='Tx Slot Errors', + ylim=(0,10))) diff --git a/examples/scripts/tdma-slot-status.py b/examples/scripts/tdma-slot-status.py new file mode 100755 index 0000000..578c5cf --- /dev/null +++ b/examples/scripts/tdma-slot-status.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python +# +# Copyright (c) 2016-2017 - Adjacent Link LLC, Bridgewater, New Jersey +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * 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. +# * Neither the name of Adjacent Link LLC nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# 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. +# +# See toplevel COPYING for more information. +# +from __future__ import absolute_import, division, print_function + +from argparse import ArgumentParser +import sys + +from otestpoint.labtools import Stream, Transform, \ + TableColumns, Delta, View + +argumentParser = ArgumentParser() + +argumentParser.add_argument('endpoint', + type=str, + help="OpenTestPoint publish endpoint.") + +argumentParser.add_argument('-t', + '--table', + action='store_true', + dest='table', + help='show table not plot [default: %(default)s].') + +ns = argumentParser.parse_args() + +args = vars(ns) + +# create a stream of data by specifying the probes you want to receive +stream = Stream(args['endpoint'], + 'EMANE.TDMAEventSchedulerRadioModel.Tables.Status.Slot') + +# create variables using the Measurement name and attribute +varRxSlotStatusTable = stream.variable('Measurement_emane_tdmaeventschedulerradiomodel_tables_status_slot', + 'rxslotstatustable') + +varTxSlotStatusTable = stream.variable('Measurement_emane_tdmaeventschedulerradiomodel_tables_status_slot', + 'txslotstatustable') + +# create a Model +model = stream.model(Delta(Transform(varRxSlotStatusTable, + TableColumns(3))), + Delta(Transform(varRxSlotStatusTable, + TableColumns(4,5,6,7,8))), + Delta(Transform(varTxSlotStatusTable, + TableColumns(3))), + Delta(Transform(varTxSlotStatusTable, + TableColumns(4,5))), + labels=['Rx Slot Success', + 'Rx Slot Error', + 'Tx Slot Success', + 'Tx Slot Error'], + by_tag=True) + +# start the data stream +stream.run() + +if args['table']: + import time + import pandas as pd + + event_prev = 0 + + pd.set_option('display.max_columns', None) + pd.set_option('display.expand_frame_repr', False) + + while True: + df,event_cur,(_,timestamp) = model.data(ts=False, + index=None) + + if event_cur != event_prev: + print("\x1b[2J\x1b[H",time.strftime('%a, %d %b %Y %H:%M:%S', + time.localtime(timestamp))) + print(df) + + event_prev = event_cur + + time.sleep(1) +else: + # view the model + view = View(model, + kind='bar', + title='TDMA Slot Activity', + model_ts=False, + model_index=None) + + view.show(View.Plot('Node', + 'Rx Slot Error', + 'Rx Slot Success', + title='Rx Slot Status', + ylabel='Count', + yticks=list(range(0,201,25)), + legend=True), + View.Plot('Node', + 'Tx Slot Error', + 'Tx Slot Success', + title='Tx Slot Status', + ylabel='Count', + yticks=list(range(0,201,25)), + legend=True)) diff --git a/examples/tdma-01/Makefile b/examples/tdma-01/Makefile new file mode 100644 index 0000000..90292db --- /dev/null +++ b/examples/tdma-01/Makefile @@ -0,0 +1,10 @@ +topdir=.. + +all: + letce2 \ + lxc \ + build \ + experiment.cfg + +clean: + letce2 lxc clean diff --git a/examples/tdma-01/experiment.cfg b/examples/tdma-01/experiment.cfg new file mode 100644 index 0000000..c83c67c --- /dev/null +++ b/examples/tdma-01/experiment.cfg @@ -0,0 +1,69 @@ +[!experiment] +@experiment_control_interface=letce0 +@frequency_hz=2.4G + +[host:experiment] +__template.path=../templates/host:../templates/common +@bridge.0.name=%(@experiment_control_interface)s +@bridge.0.ipv4=10.99.0.100/16 +__template.file.100=bridge +__template.file.101=control +__template.file.102=start.local +__template.file.103=otestpoint-broker.xml +__template.file.104=stop.local +__template.file.105=functions +__template.file.106=scenario.eel +__template.file.107=eelgenerator.xml +__template.file.108=eventservice.xml +__template.file.109=schedule.xml +__template.file.110=prestart.local +@scenario_all_nodes_pathloss_db=80 + +[!common:experiment] ++@lxc.interface.0.link =%(@experiment_control_interface)s ++@lxc.interface.0.ipv4=%(@control_ip_addr)s ++@lxc.interface.0.name=%(@control_interface)s +@control_interface=backchan0 +__template.file.001=lxc.conf +__template.file.002=lxc.hook.autodev.sh ++@control_ip_addr=10.99.0.%(@id)s/24 + +[!tdma:common] +__template.path=../templates/radio/tdma:../templates/radio/common:../templates/common +__template.file.100=init +__template.file.101=init.local +__template.file.102=functions +__template.file.103=emane-platform.xml +__template.file.104=emane-tdma-radiomodel.xml +__template.file.105=emane-tdma-nem.xml +__template.file.106=emane-tdma-pcr.xml +__template.file.107=emane-transvirtual.xml +__template.file.110=otestpoint.xml +__template.file.111=otestpoint-probe-emane-physicallayer.xml +__template.file.112=otestpoint-probe-emane-tdmaeventschedulerradiomodel.xml +__template.file.113=otestpoint-probe-emane-virtualtransport.xml +__template.file.114=otestpoint-recorder.xml +__template.file.115=batman-adv +__template.file.116=node-poststart +@waveform_interface=emane0 +@sub_id=7 ++@nem_id=%(@id)s +@radio_ip_addr=10.100.0.%(@nem_id)s/24 ++@is_tdma=1 +@batman_interface=bat0 +@batman_orig_interval=500 + +[node-1:tdma] +@id=1 + +[node-2:tdma] +@id=2 + +[node-3:tdma] +@id=3 + +[node-4:tdma] +@id=4 + +[node-5:tdma] +@id=5 diff --git a/examples/tdma-01/letce2.cfg b/examples/tdma-01/letce2.cfg new file mode 100644 index 0000000..9d452ee --- /dev/null +++ b/examples/tdma-01/letce2.cfg @@ -0,0 +1,2 @@ +[lxc] +module=letce2.plugins.lxc diff --git a/examples/tdma-01/monitors/otestpoint-labtools-tdma-slot-status b/examples/tdma-01/monitors/otestpoint-labtools-tdma-slot-status new file mode 100755 index 0000000..049ef80 --- /dev/null +++ b/examples/tdma-01/monitors/otestpoint-labtools-tdma-slot-status @@ -0,0 +1,130 @@ +#!/usr/bin/env python +# +# Copyright (c) 2016-2017 - Adjacent Link LLC, Bridgewater, New Jersey +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * 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. +# * Neither the name of Adjacent Link LLC nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# 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. +# +# See toplevel COPYING for more information. +# +from __future__ import absolute_import, division, print_function + +from argparse import ArgumentParser +import sys + +from otestpoint.labtools import Stream, Transform, \ + TableColumns, Delta, View + +argumentParser = ArgumentParser() + +argumentParser.add_argument('endpoint', + type=str, + help="OpenTestPoint publish endpoint.") + +argumentParser.add_argument('-t', + '--table', + action='store_true', + dest='table', + help='show table not plot [default: %(default)s].') + +ns = argumentParser.parse_args() + +args = vars(ns) + +# create a stream of data by specifying the probes you want to receive +stream = Stream(args['endpoint'], + 'EMANE.TDMAEventSchedulerRadioModel.Tables.Status.Slot') + +# create variables using the Measurement name and attribute +varRxSlotStatusTable = stream.variable('Measurement_emane_tdmaeventschedulerradiomodel_tables_status_slot', + 'rxslotstatustable') + +varTxSlotStatusTable = stream.variable('Measurement_emane_tdmaeventschedulerradiomodel_tables_status_slot', + 'txslotstatustable') + +# create a Model +model = stream.model(Delta(Transform(varRxSlotStatusTable, + TableColumns(3))), + Delta(Transform(varRxSlotStatusTable, + TableColumns(4,5,6,7,8))), + Delta(Transform(varTxSlotStatusTable, + TableColumns(3))), + Delta(Transform(varTxSlotStatusTable, + TableColumns(4,5))), + labels=['Rx Slot Success', + 'Rx Slot Error', + 'Tx Slot Success', + 'Tx Slot Error'], + by_tag=True) + +# start the data stream +stream.run() + +if args['table']: + import time + import pandas as pd + + event_prev = 0 + + pd.set_option('display.max_columns', None) + pd.set_option('display.expand_frame_repr', False) + + while True: + df,event_cur,(_,timestamp) = model.data(ts=False, + index=None) + + if event_cur != event_prev: + print("\x1b[2J\x1b[H",time.strftime('%a, %d %b %Y %H:%M:%S', + time.localtime(timestamp))) + print(df) + + event_prev = event_cur + + time.sleep(1) +else: + # view the model + view = View(model, + kind='bar', + title='TDMA Slot Activity', + model_ts=False, + model_index=None) + + view.show(View.Plot('Node', + 'Rx Slot Error', + 'Rx Slot Success', + title='Rx Slot Status', + ylabel='Count', + yticks=list(range(0,101,10)), + legend=True), + View.Plot('Node', + 'Tx Slot Error', + 'Tx Slot Success', + title='Tx Slot Status', + ylabel='Count', + yticks=list(range(0,501,100)), + legend=True)) diff --git a/examples/tdma-01/node-poststart b/examples/tdma-01/node-poststart new file mode 100755 index 0000000..e4ca756 --- /dev/null +++ b/examples/tdma-01/node-poststart @@ -0,0 +1,7 @@ +#!/bin/bash - + +node_name=$1 + +${__top_dir}/../scripts/flask-batman-originators-server.py \ + &> \ + ../persist/$node_name/var/log/flask-batman-originators-server.log & diff --git a/examples/tdma-01/schedule.xml b/examples/tdma-01/schedule.xml new file mode 100644 index 0000000..bd58750 --- /dev/null +++ b/examples/tdma-01/schedule.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/templates/application-host/init.local b/examples/templates/application-host/init.local new file mode 100644 index 0000000..87d62b3 --- /dev/null +++ b/examples/templates/application-host/init.local @@ -0,0 +1,69 @@ +#!/bin/bash - +<% +from letce2.utils.network import CIDRNotation +%> + +top_dir=$1 +node_name=$2 +start_time=$3 + +echo "top_dir: $top_dir" +echo "node_name: $node_name" +echo "start_time: $start_time" + +cd "$top_dir/$node_name" + +# load common functions +. ./functions + +% if gateway_ip_addr: +route add default gw ${CIDRNotation.address(gateway_ip_addr)} +% endif + +% if ipv6_gateway_ip_addr: +ip -6 route add default via ${ipv6_gateway_ip_addr} dev ${lan_interface} +% endif + +if [ -f otestpoint-recorder.xml ] && + [ ! -f NO-otestpoint-recorder ] +then + start_otestpoint_recorder \ + $node_name \ + otestpoint-recorder.xml \ + $top_dir/persist/$node_name/var/log/otestpoint-recorder.log \ + $top_dir/persist/$node_name/var/run/otestpoint-recorder.pid \ + $top_dir/persist/$node_name/var/run/otestpoint-recorder.uuid +fi + +if [ -f otestpoint.xml ] && + [ ! -f NO-otestpointd ] +then + start_otestpointd \ + $node_name \ + otestpoint.xml \ + $top_dir/persist/$node_name/var/log/otestpoint.log \ + $top_dir/persist/$node_name/var/run/otestpoint.pid \ + $top_dir/persist/$node_name/var/run/otestpoint.uuid +fi + +if [ -f mgen ] && + [ ! -f NO-mgen ] +then +% if mgen_monitor_listen_address and mgen_monitor_listen_port: + start_mgen_monitor \ + $node_name \ + ${mgen_monitor_listen_address} \ + ${mgen_monitor_listen_port} \ + $top_dir/persist/$node_name/var/log/mgen.out \ + $top_dir/persist/$node_name/var/run/mgen-monitor.pid \ + $top_dir/persist/$node_name/var/log/mgen-monitor.log +% endif + + start_mgen \ + $node_name \ + mgen \ + $top_dir/persist/$node_name/var/log/mgen.out \ + $top_dir/persist/$node_name/var/run/mgen.pid \ + $top_dir/persist/$node_name/var/log/mgen.log \ + "$start_time" +fi diff --git a/examples/templates/application-host/otestpoint.xml b/examples/templates/application-host/otestpoint.xml new file mode 100644 index 0000000..a05cfef --- /dev/null +++ b/examples/templates/application-host/otestpoint.xml @@ -0,0 +1,10 @@ +<% +from letce2.utils.network import CIDRNotation +%> + + + + + diff --git a/examples/templates/common/functions b/examples/templates/common/functions new file mode 100644 index 0000000..fd5381d --- /dev/null +++ b/examples/templates/common/functions @@ -0,0 +1,323 @@ +#!/bin/bash - +# +# Copyright (c) 2014-2017 - Adjacent Link LLC, Bridgewater, New Jersey +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * 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. +# * Neither the name of Adjacent Link LLC nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# 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. + +start_emane() +{ + local node_name=$1 + local xml=$2 + local logfile=$3 + local pidfile=$4 + local uuidfile=$5 + + if [ -f $xml ]; then + + echo "$node_name: starting emane: $xml" + + emane "$xml" -r -d -l 3 -f "$logfile" \ + --pidfile "$pidfile" --uuidfile "$uuidfile" + + retval=$? + else + echo "$node_name: missing emane XML: $xml [!!]" + retval=1 + fi + + return $retval +} + +start_emane_spectrum_monitor() +{ + local node_name=$1 + local xml=$2 + local logfile=$3 + local pidfile=$4 + local uuidfile=$5 + + if [ -f $xml ]; then + + echo "$node_name: starting emane-spectrum-monitor: $xml" + + emane-spectrum-monitor --config "$xml" -r -d -l 3 -f "$logfile" \ + --pidfile "$pidfile" --uuidfile "$uuidfile" + + retval=$? + else + echo "$node_name: missing emane-spectrum-monitor XML: $xml [!!]" + retval=1 + fi + + return $retval +} + +start_mgen() +{ + local node_name=$1 + local mgeninput=$2 + local mgenoutput=$3 + local pidfile=$4 + local logfile=$5 + local start_utc="$6" + + local startoption="" + + if [ -n "$start_utc" ]; then + startoption="start $(date --date "$start_utc" "+%H:%M:%S" --utc)GMT" + echo "$node_name: starting mgen input $mgeninput output $mgenoutput $startoption" + else + echo "$node_name: starting mgen input $mgeninput output $mgenoutput now" + fi + + nohup mgen \ + ipv4 \ + input $mgeninput \ + output $mgenoutput \ + flush \ + $startoption \ + txlog &> $logfile & + + echo $! > $pidfile +} + + +start_mgen_monitor() +{ + local node_name=$1 + local address=$2 + local port=$3 + local mgenoutput=$4 + local pidfile=$5 + local logfile=$6 + + echo "$node_name: starting mgen-monitor $address $port $mgenoutput" + + mgen-monitor \ + -d \ + --log-file $logfile \ + --pid-file $pidfile \ + $address \ + $port \ + $mgenoutput +} + + +start_otestpointd() +{ + local node_name=$1 + local xml=$2 + local logfile=$3 + local pidfile=$4 + local uuidfile=$5 + + if [ -f $xml ]; then + + echo "$node_name: starting otestpointd: $xml" + + otestpointd "$xml" -r -d -l 3 -f "$logfile" \ + --pidfile "$pidfile" --uuidfile "$uuidfile" + + retval=$? + else + echo "$node_name: missing otestpointd XML: $xml [!!]" + retval=1 + fi + + return $retval +} + + +start_otestpoint_recorder() +{ + local node_name=$1 + local xml=$2 + local logfile=$3 + local pidfile=$4 + local uuidfile=$5 + + if [ -f $xml ]; then + + echo "$node_name: starting otestpoint-recorder: $xml" + + otestpoint-recorder "$xml" -d -l 3 -f "$logfile" \ + --pidfile "$pidfile" --uuidfile "$uuidfile" + + retval=$? + else + echo "$node_name: missing otestpoint-recorder XML: $xml [!!]" + retval=1 + fi + + return $retval +} + +start_otestpoint_broker() +{ + local node_name=$1 + local xml=$2 + local logfile=$3 + local pidfile=$4 + local uuidfile=$5 + + if [ -f $xml ] + then + echo "$node_name: starting otestpoint-broker: $xml" + + otestpoint-broker "$xml" -d -l 3 -f "$logfile" \ + --pidfile "$pidfile" --uuidfile "$uuidfile" + + retval=$? + else + echo "$node_name: missing otestpoint-broker XML: $xml [!!]" + retval=1 + fi + + return $retval +} + +wait_for_device() +{ + local node_name=$1 + local device=$2 + local timeout=$3 + local waited=0 + + echo "$node_name: waiting for $device" + + while(! ip route show | grep -q $device); do + + if [ $waited -lt $timeout ]; then + sleep 1 + waited=$(($waited + 1)) + else + echo "$node_name: $device not found [!!]" + return 1 + fi + done + + echo "$node_name: $device found" + return 0 +} + +wait_for_device_ip_link() +{ + local node_name=$1 + local device=$2 + local timeout=$3 + local waited=0 + + echo "$node_name: waiting for $device" + + while(! ip link show $device &> /dev/null); do + + if [ $waited -lt $timeout ]; then + sleep 1 + waited=$(($waited + 1)) + else + echo "$node_name: $device not found [!!]" + return 1 + fi + done + + echo "$node_name: $device found" + return 0 +} + +wait_for_tcp_service() +{ + local node_name=$1 + local port=$2 + local timeout=$3 + local waited=0 + + + echo "$node_name: waiting for TCP service port $port" + + while(! netstat -tpan | grep -q $port); do + + if [ $waited -lt $timeout ]; then + sleep 1 + waited=$(($waited + 1)) + else + echo "$node_name: port $port not found [!!]" + return 1 + fi + done + + + echo "$node_name: port $port found" + return 0 +} + +load_arp_cache() +{ + local node_name=$1 + local device=$2 + local ethers=$3 + + echo "$node_name: load_arp_cache $ethers $device" + + arp -i $device -f "$ethers" +} + +start_emaneeventservice() +{ + local node_name=$1 + local xml=$2 + local logfile=$3 + local pidfile=$4 + local uuidfile=$5 + local starttime="$6" + + local startoption="" + + if [ -n "$starttime" ]; then + startoption="--starttime $(date --date "$starttime" "+%H:%M:%S")" + fi + + if [ -f $xml ] + then + echo "$node_name: starting emaneeventservice: $xml at $starttime" + + emaneeventservice -d "$xml" -l 3 -f "$logfile" \ + --pidfile "$pidfile" --uuidfile "$uuidfile" \ + $startoption + + retval=$? + else + + echo "$node_name: missing emaneeventservice XML: $xml [!!]" + + retval=1 + fi + + return $retval +} + diff --git a/examples/templates/common/otestpoint-probe-mgen.xml b/examples/templates/common/otestpoint-probe-mgen.xml new file mode 100644 index 0000000..05cffae --- /dev/null +++ b/examples/templates/common/otestpoint-probe-mgen.xml @@ -0,0 +1 @@ + diff --git a/examples/templates/common/otestpoint-recorder.xml b/examples/templates/common/otestpoint-recorder.xml new file mode 100644 index 0000000..6d96ef0 --- /dev/null +++ b/examples/templates/common/otestpoint-recorder.xml @@ -0,0 +1,7 @@ + +<% +from letce2.utils.network import CIDRNotation +%> + + + diff --git a/examples/templates/host/eelgenerator.xml b/examples/templates/host/eelgenerator.xml new file mode 100644 index 0000000..b50eb26 --- /dev/null +++ b/examples/templates/host/eelgenerator.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/examples/templates/host/eventservice.xml b/examples/templates/host/eventservice.xml new file mode 100644 index 0000000..23a8dd8 --- /dev/null +++ b/examples/templates/host/eventservice.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/examples/templates/host/otestpoint-broker.xml b/examples/templates/host/otestpoint-broker.xml new file mode 100644 index 0000000..8289d8f --- /dev/null +++ b/examples/templates/host/otestpoint-broker.xml @@ -0,0 +1,16 @@ + +<% +from letce2.utils.network import CIDRNotation + +daemon_addrs = set() +for node,items in __share.items(): + for item in items: + if item == 'control_ip_addr': + daemon_addrs.add(items[item]) +%> + +% for addr in sorted(daemon_addrs): + +% endfor + diff --git a/examples/templates/host/prestart.local b/examples/templates/host/prestart.local new file mode 100644 index 0000000..2f2835a --- /dev/null +++ b/examples/templates/host/prestart.local @@ -0,0 +1,9 @@ +#!/bin/bash - + +top_dir=$1 +start_time=$2 + +cd "$top_dir/host" + +echo "host: modprobe batman-adv" +modprobe batman-adv diff --git a/examples/templates/host/scenario.eel b/examples/templates/host/scenario.eel new file mode 100644 index 0000000..eaeaab4 --- /dev/null +++ b/examples/templates/host/scenario.eel @@ -0,0 +1,18 @@ +<% +import re +nems=set() +for node,items in __share.items(): + for item in items: + if item == 'nem_id': + nems.add(items[item]) + +targets=set(nems) +%> +% for a in sorted(list(nems)): +<% + targets.remove(a) +%> +% for b in sorted(list(targets)): +<%block>0.0 nem:${a} pathloss nem:${b},${scenario_all_nodes_pathloss_db} +% endfor +% endfor diff --git a/examples/templates/host/start.local b/examples/templates/host/start.local new file mode 100644 index 0000000..6985343 --- /dev/null +++ b/examples/templates/host/start.local @@ -0,0 +1,45 @@ +#!/bin/bash - + +top_dir=$1 +start_time=$2 + +cd "$top_dir/host" + +# load common functions +. ./functions + +if [ -f eventservice.xml ] && + [ ! -f NO-emaneeventservice ] +then + start_emaneeventservice \ + 'host' \ + eventservice.xml \ + $top_dir/persist/host/var/log/emaneeventservice.log \ + $top_dir/persist/host/var/run/emaneeventservice.pid \ + $top_dir/persist/host/var/run/emaneeventservice.uuid \ + "$start_time" +fi + +if [ -f otestpoint-broker.xml ] && + [ ! -f NO-otestpoint-broker ] +then + start_otestpoint_broker \ + 'host' \ + otestpoint-broker.xml \ + $top_dir/persist/host/var/log/otestpoint-broker.log \ + $top_dir/persist/host/var/run/otestpoint-broker.pid \ + $top_dir/persist/host/var/run/otestpoint-broker.uuid +fi + +if [ -f schedule.xml ] + then + now=$(date "+%s") + start=$(date --date "$start_time" "+%s") + + if [[ $start > $now ]] + then + echo "host: TDMA schedule publish delayed until $start" + sleep $(($start - $now)) + emaneevent-tdmaschedule schedule.xml -i ${experiment_control_interface} + fi +fi diff --git a/examples/templates/host/stop.local b/examples/templates/host/stop.local new file mode 100644 index 0000000..d4dc38a --- /dev/null +++ b/examples/templates/host/stop.local @@ -0,0 +1,43 @@ +#!/bin/bash - +# +# Copyright (c) 2017 - Adjacent Link LLC, Bridgewater, New Jersey +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * 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. +# * Neither the name of Adjacent Link LLC nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# 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. + +top_dir=$1 + +if [ -f "$top_dir/persist/host/var/run/emaneeventservice.pid" ] +then + kill -QUIT $(cat $top_dir/persist/host/var/run/emaneeventservice.pid) +fi + +if [ -f "$top_dir/persist/host/var/run/otestpoint-broker.pid" ] +then + kill -QUIT $(cat $top_dir/persist/host/var/run/otestpoint-broker.pid) +fi diff --git a/examples/templates/jammer/emane-jammer-simple-service.xml b/examples/templates/jammer/emane-jammer-simple-service.xml new file mode 100644 index 0000000..50f0242 --- /dev/null +++ b/examples/templates/jammer/emane-jammer-simple-service.xml @@ -0,0 +1,8 @@ + + + + diff --git a/examples/templates/jammer/init.local b/examples/templates/jammer/init.local new file mode 100644 index 0000000..a482cfb --- /dev/null +++ b/examples/templates/jammer/init.local @@ -0,0 +1,25 @@ +#!/bin/bash - +<% +from letce2.utils.network import CIDRNotation +%> + +top_dir=$1 +node_name=$2 +start_time=$3 + +echo "top_dir: $top_dir" +echo "node_name: $node_name" +echo "start_time: $start_time" + +cd "$top_dir/$node_name" + +if [ -f emane-jammer-simple-service.xml ] + then + emane-jammer-simple-service \ + --config-file emane-jammer-simple-service.xml \ + --log-file $top_dir/persist/$node_name/var/log/emane-jammer-simple-service.log \ + --pid-file $top_dir/persist/$node_name/var/run/emane-jammer-simple-service.pid \ + --daemonize \ + --log-level debug +fi + diff --git a/examples/templates/monitor/emane-spectrum-monitor.xml b/examples/templates/monitor/emane-spectrum-monitor.xml new file mode 100644 index 0000000..3a055f8 --- /dev/null +++ b/examples/templates/monitor/emane-spectrum-monitor.xml @@ -0,0 +1,17 @@ + + + + + + + + + %if spectralmaskmanifesturi: + + %endif + + + + + diff --git a/examples/templates/monitor/init.local b/examples/templates/monitor/init.local new file mode 100644 index 0000000..a7bc9c3 --- /dev/null +++ b/examples/templates/monitor/init.local @@ -0,0 +1,49 @@ +#!/bin/bash - + +top_dir=$1 +node_name=$2 +start_time=$3 + +echo "top_dir: $top_dir" +echo "node_name: $node_name" +echo "start_time: $start_time" + +cd "$top_dir/$node_name" + +# load common functions +. ./functions + +if [ -f emane-spectrum-monitor.xml ] && + [ ! -f NO-emane-spectrum-monitor ] +then + start_emane_spectrum_monitor \ + $node_name \ + emane-spectrum-monitor.xml \ + $top_dir/persist/$node_name/var/log/emane-spectrum-monitor.log \ + $top_dir/persist/$node_name/var/run/emane-spectrum-monitor.pid \ + $top_dir/persist/$node_name/var/run/emane-spectrum-monitor.uuid +fi + +if [ -f otestpoint-recorder.xml ] && + [ ! -f NO-otestpoint-recorder ] +then + start_otestpoint_recorder \ + $node_name \ + otestpoint-recorder.xml \ + $top_dir/persist/$node_name/var/log/otestpoint-recorder.log \ + $top_dir/persist/$node_name/var/run/otestpoint-recorder.pid \ + $top_dir/persist/$node_name/var/run/otestpoint-recorder.uuid +fi + +if [ -f otestpoint.xml ] && + [ ! -f NO-otestpointd ] +then + start_otestpointd \ + $node_name \ + otestpoint.xml \ + $top_dir/persist/$node_name/var/log/otestpoint.log \ + $top_dir/persist/$node_name/var/run/otestpoint.pid \ + $top_dir/persist/$node_name/var/run/otestpoint.uuid +fi + + diff --git a/examples/templates/monitor/otestpoint-probe-emane-spectrum-tools-monitor.xml b/examples/templates/monitor/otestpoint-probe-emane-spectrum-tools-monitor.xml new file mode 100644 index 0000000..dce993d --- /dev/null +++ b/examples/templates/monitor/otestpoint-probe-emane-spectrum-tools-monitor.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/examples/templates/monitor/otestpoint-recorder.xml b/examples/templates/monitor/otestpoint-recorder.xml new file mode 100644 index 0000000..6d96ef0 --- /dev/null +++ b/examples/templates/monitor/otestpoint-recorder.xml @@ -0,0 +1,7 @@ + +<% +from letce2.utils.network import CIDRNotation +%> + + + diff --git a/examples/templates/monitor/otestpoint.xml b/examples/templates/monitor/otestpoint.xml new file mode 100644 index 0000000..0f4d550 --- /dev/null +++ b/examples/templates/monitor/otestpoint.xml @@ -0,0 +1,11 @@ +<% +from letce2.utils.network import CIDRNotation +%> + + + + + diff --git a/examples/templates/radio/bentpipe/emane-bentpipe-ground-radiomodel.xml b/examples/templates/radio/bentpipe/emane-bentpipe-ground-radiomodel.xml new file mode 100644 index 0000000..c038159 --- /dev/null +++ b/examples/templates/radio/bentpipe/emane-bentpipe-ground-radiomodel.xml @@ -0,0 +1,136 @@ + +<% +import re +antennas = [] +for key in context.keys(): + m = re.match(r'antenna\.(\d+)',key) + if m: + antennas.append(context[key]) +%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + % if txslots: + + %else: + + %endif + + + + + % if txslotsize: + + % else: + + % endif + + + + + % if txslotperframe: + + % else: + + % endif + + + + + % if tx_mtu_bytes: + + % else: + + % endif + + + + + + + + + + + + + + + + + + + + + + + + + % for antenna in antennas: + + % endfor + + + + + + + + + + + diff --git a/examples/templates/radio/bentpipe/emane-bentpipe-nem.xml b/examples/templates/radio/bentpipe/emane-bentpipe-nem.xml new file mode 100644 index 0000000..a8b7abf --- /dev/null +++ b/examples/templates/radio/bentpipe/emane-bentpipe-nem.xml @@ -0,0 +1,42 @@ + + + + + + + + + %if bandwidth_hz: + + %else: + + %endif + %if tx_frequency_hz: + + %endif + %if rx_frequency_hz: + + %endif + + %if system_noise_figure_db: + + %else: + + %endif + + + % if fixedantennagainenable: + + %else: + + %endif + + + + %if spectralmaskindex: + + %endif + + + + diff --git a/examples/templates/radio/bentpipe/emane-bentpipe-pcr.xml b/examples/templates/radio/bentpipe/emane-bentpipe-pcr.xml new file mode 100644 index 0000000..15896d2 --- /dev/null +++ b/examples/templates/radio/bentpipe/emane-bentpipe-pcr.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/templates/radio/bentpipe/emane-bentpipe-satellite-radiomodel.xml b/examples/templates/radio/bentpipe/emane-bentpipe-satellite-radiomodel.xml new file mode 100644 index 0000000..5c40704 --- /dev/null +++ b/examples/templates/radio/bentpipe/emane-bentpipe-satellite-radiomodel.xml @@ -0,0 +1,164 @@ + +<% +import re +antennas = [] +antenna_index_set = set() + +for key in context.keys(): + m = re.match(r'antenna\.(\d+)',key) + if m: + antennas.append(context[key]) + m = re.match(r'^(\d+):.+$',context[key]) + if m: + antenna_index_set.add(int(m.group(1))) +%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + % if tx_mtu_bytes: + + + + % else: + + + + % endif + + + + + + + + + + + + + + + + % for antenna in antennas: + + % endfor + + + + + + + + + + + diff --git a/examples/templates/radio/bentpipe/emane-platform.xml b/examples/templates/radio/bentpipe/emane-platform.xml new file mode 100644 index 0000000..df5ed59 --- /dev/null +++ b/examples/templates/radio/bentpipe/emane-platform.xml @@ -0,0 +1,35 @@ + +<% +from letce2.utils.network import CIDRNotation +%> + + + + + + + + + %if otamanagermtu: + + %endif + %if stats_ota_maxpacketcountrow: + + %endif + +%if antenna_profile_manifest: + +%endif + + %if spectralmaskmanifesturi: + + %endif + + + + + + + + + diff --git a/examples/templates/radio/bentpipe/otestpoint-probe-emane-bentpipe.xml b/examples/templates/radio/bentpipe/otestpoint-probe-emane-bentpipe.xml new file mode 100644 index 0000000..f37dea3 --- /dev/null +++ b/examples/templates/radio/bentpipe/otestpoint-probe-emane-bentpipe.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/templates/radio/bentpipe/otestpoint.xml b/examples/templates/radio/bentpipe/otestpoint.xml new file mode 100644 index 0000000..fc25162 --- /dev/null +++ b/examples/templates/radio/bentpipe/otestpoint.xml @@ -0,0 +1,21 @@ +<% +from letce2.utils.network import CIDRNotation +%> + + + + + + + + + + + + + diff --git a/examples/templates/radio/commeffect/emane-commeffect-nem.xml b/examples/templates/radio/commeffect/emane-commeffect-nem.xml new file mode 100644 index 0000000..d02fefc --- /dev/null +++ b/examples/templates/radio/commeffect/emane-commeffect-nem.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/examples/templates/radio/commeffect/emane-commeffect-utilitymodel.xml b/examples/templates/radio/commeffect/emane-commeffect-utilitymodel.xml new file mode 100644 index 0000000..e931f34 --- /dev/null +++ b/examples/templates/radio/commeffect/emane-commeffect-utilitymodel.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/examples/templates/radio/commeffect/emane-platform.xml b/examples/templates/radio/commeffect/emane-platform.xml new file mode 100644 index 0000000..40cec4f --- /dev/null +++ b/examples/templates/radio/commeffect/emane-platform.xml @@ -0,0 +1,33 @@ + +<% +from letce2.utils.network import CIDRNotation +%> + + + + + + + + + %if otamanagermtu: + + %endif + %if stats_ota_maxpacketcountrow: + + %endif + +%if antenna_profile_manifest: + +%endif + + %if spectralmaskmanifesturi: + + %endif + + + + + + + diff --git a/examples/templates/radio/commeffect/otestpoint-probe-emane-commeffect.xml b/examples/templates/radio/commeffect/otestpoint-probe-emane-commeffect.xml new file mode 100644 index 0000000..79287ce --- /dev/null +++ b/examples/templates/radio/commeffect/otestpoint-probe-emane-commeffect.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/examples/templates/radio/commeffect/otestpoint.xml b/examples/templates/radio/commeffect/otestpoint.xml new file mode 100644 index 0000000..459e2f6 --- /dev/null +++ b/examples/templates/radio/commeffect/otestpoint.xml @@ -0,0 +1,16 @@ +<% +from letce2.utils.network import CIDRNotation +%> + + + + + + + + + diff --git a/examples/templates/radio/common/batman-adv b/examples/templates/radio/common/batman-adv new file mode 100755 index 0000000..c402544 --- /dev/null +++ b/examples/templates/radio/common/batman-adv @@ -0,0 +1,25 @@ +#!/bin/bash - + +node_name=$1 + +# remove waveform address for interface to reassign to batman interface +ip addr flush dev ${waveform_interface} + +batctl meshif ${batman_interface} interface add ${waveform_interface} + +%if batman_orig_interval: +batctl meshif ${batman_interface} orig_interval ${batman_orig_interval} +%endif + +ip addr add ${radio_ip_addr} dev ${batman_interface} + +%if batman_mac_addr: +ip link set dev ${batman_interface} address ${batman_mac_addr} +%endif + +ip link set ${batman_interface} up + +if [ -f batman-routes ] +then + ./batman-routes $node_name +fi diff --git a/examples/templates/radio/common/emane-transraw.xml b/examples/templates/radio/common/emane-transraw.xml new file mode 100644 index 0000000..f4b3ceb --- /dev/null +++ b/examples/templates/radio/common/emane-transraw.xml @@ -0,0 +1,3 @@ + + + diff --git a/examples/templates/radio/common/emane-transvirtual.xml b/examples/templates/radio/common/emane-transvirtual.xml new file mode 100644 index 0000000..6dd8cda --- /dev/null +++ b/examples/templates/radio/common/emane-transvirtual.xml @@ -0,0 +1,3 @@ + + + diff --git a/examples/templates/radio/common/init.local b/examples/templates/radio/common/init.local new file mode 100644 index 0000000..63bd50a --- /dev/null +++ b/examples/templates/radio/common/init.local @@ -0,0 +1,143 @@ +#!/bin/bash - +# +# Copyright (c) 2016-2017,2021 - Adjacent Link LLC, Bridgewater, +# New Jersey +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * 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. +# * Neither the name of Adjacent Link LLC nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# 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. + +top_dir=$1 +node_name=$2 +start_time=$3 + +echo "top_dir: $top_dir" +echo "node_name: $node_name" +echo "start_time: $start_time" + +cd "$top_dir/$node_name" + +# load common functions +. ./functions + +if [ -f ./node-prestart ] +then + bash ./node-prestart $node_name +fi + +if [ -f emane-platform.xml ] && + [ ! -f NO-emane ] +then + start_emane \ + $node_name \ + emane-platform.xml \ + $top_dir/persist/$node_name/var/log/emane.log \ + $top_dir/persist/$node_name/var/run/emane.pid \ + $top_dir/persist/$node_name/var/run/emane.uuid +fi + +if [ -f emane-spectrum-monitor.xml ] && + [ ! -f NO-emane-spectrum-monitor ] +then + start_emane_spectrum_monitor \ + $node_name \ + emane-spectrum-monitor.xml \ + $top_dir/persist/$node_name/var/log/emane-spectrum-monitor.log \ + $top_dir/persist/$node_name/var/run/emane-spectrum-monitor.pid \ + $top_dir/persist/$node_name/var/run/emane-spectrum-monitor.uuid +fi + +% if waveform_interface: + wait_for_device $node_name ${waveform_interface} 30 +% else: + sleep 4 +%endif + +if [ -f batman-adv ] && + [ ! -f NO-batman-adv ] +then + bash ./batman-adv $node_name + +% if batman_interface: + wait_for_device $node_name ${batman_interface} 30 +% endif +fi + +if [ -f otestpoint-recorder.xml ] && + [ ! -f NO-otestpoint-recorder ] +then + start_otestpoint_recorder \ + $node_name \ + otestpoint-recorder.xml \ + $top_dir/persist/$node_name/var/log/otestpoint-recorder.log \ + $top_dir/persist/$node_name/var/run/otestpoint-recorder.pid \ + $top_dir/persist/$node_name/var/run/otestpoint-recorder.uuid +fi + +if [ -f otestpoint.xml ] && + [ ! -f NO-otestpointd ] +then + start_otestpointd \ + $node_name \ + otestpoint.xml \ + $top_dir/persist/$node_name/var/log/otestpoint.log \ + $top_dir/persist/$node_name/var/run/otestpoint.pid \ + $top_dir/persist/$node_name/var/run/otestpoint.uuid +fi + +if [ -f ./node-preapplication ] +then + + bash ./node-preapplication $node_name +fi + +if [ -f mgen ] && + [ ! -f NO-mgen ] +then +% if mgen_monitor_listen_address and mgen_monitor_listen_port: + start_mgen_monitor \ + $node_name \ + ${mgen_monitor_listen_address} \ + ${mgen_monitor_listen_port} \ + $top_dir/persist/$node_name/var/log/mgen.out \ + $top_dir/persist/$node_name/var/run/mgen-monitor.pid \ + $top_dir/persist/$node_name/var/log/mgen-monitor.log +% endif + + start_mgen \ + $node_name \ + mgen \ + $top_dir/persist/$node_name/var/log/mgen.out \ + $top_dir/persist/$node_name/var/run/mgen.pid \ + $top_dir/persist/$node_name/var/log/mgen.log \ + "$start_time" +fi + +if [ -f ./node-poststart ] +then + bash ./node-poststart $node_name +fi diff --git a/examples/templates/radio/common/otestpoint-probe-emane-physicallayer.xml b/examples/templates/radio/common/otestpoint-probe-emane-physicallayer.xml new file mode 100644 index 0000000..d9adbc4 --- /dev/null +++ b/examples/templates/radio/common/otestpoint-probe-emane-physicallayer.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/examples/templates/radio/common/otestpoint-probe-emane-rawtransport.xml b/examples/templates/radio/common/otestpoint-probe-emane-rawtransport.xml new file mode 100644 index 0000000..21b3ba0 --- /dev/null +++ b/examples/templates/radio/common/otestpoint-probe-emane-rawtransport.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/examples/templates/radio/common/otestpoint-probe-emane-virtualtransport.xml b/examples/templates/radio/common/otestpoint-probe-emane-virtualtransport.xml new file mode 100644 index 0000000..03c3e9b --- /dev/null +++ b/examples/templates/radio/common/otestpoint-probe-emane-virtualtransport.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/examples/templates/radio/ieee80211abg/emane-ieee80211abg-nem.xml b/examples/templates/radio/ieee80211abg/emane-ieee80211abg-nem.xml new file mode 100644 index 0000000..860e997 --- /dev/null +++ b/examples/templates/radio/ieee80211abg/emane-ieee80211abg-nem.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/examples/templates/radio/ieee80211abg/emane-ieee80211abg-pcr.xml b/examples/templates/radio/ieee80211abg/emane-ieee80211abg-pcr.xml new file mode 100644 index 0000000..59676ff --- /dev/null +++ b/examples/templates/radio/ieee80211abg/emane-ieee80211abg-pcr.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
diff --git a/examples/templates/radio/ieee80211abg/emane-ieee80211abg-radiomodel.xml b/examples/templates/radio/ieee80211abg/emane-ieee80211abg-radiomodel.xml new file mode 100644 index 0000000..b167afa --- /dev/null +++ b/examples/templates/radio/ieee80211abg/emane-ieee80211abg-radiomodel.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/examples/templates/radio/ieee80211abg/emane-platform.xml b/examples/templates/radio/ieee80211abg/emane-platform.xml new file mode 100644 index 0000000..d67fe2e --- /dev/null +++ b/examples/templates/radio/ieee80211abg/emane-platform.xml @@ -0,0 +1,21 @@ + +<% +from letce2.utils.network import CIDRNotation +%> + + + + + + + + + + + + + + + + + diff --git a/examples/templates/radio/ieee80211abg/otestpoint-probe-emane-ieee80211abg.xml b/examples/templates/radio/ieee80211abg/otestpoint-probe-emane-ieee80211abg.xml new file mode 100644 index 0000000..ad15a9a --- /dev/null +++ b/examples/templates/radio/ieee80211abg/otestpoint-probe-emane-ieee80211abg.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/examples/templates/radio/ieee80211abg/otestpoint.xml b/examples/templates/radio/ieee80211abg/otestpoint.xml new file mode 100644 index 0000000..d2a2084 --- /dev/null +++ b/examples/templates/radio/ieee80211abg/otestpoint.xml @@ -0,0 +1,21 @@ +<% +from letce2.utils.network import CIDRNotation +%> + + + + + + + + + + + + + diff --git a/examples/templates/radio/rfpipe/emane-platform.xml b/examples/templates/radio/rfpipe/emane-platform.xml new file mode 100644 index 0000000..74c021d --- /dev/null +++ b/examples/templates/radio/rfpipe/emane-platform.xml @@ -0,0 +1,35 @@ + +<% +from letce2.utils.network import CIDRNotation +%> + + + + + + + + + %if otamanagermtu: + + %endif + %if stats_ota_maxpacketcountrow: + + %endif + +%if antenna_profile_manifest: + +%endif + + %if spectralmaskmanifesturi: + + %endif + + + + + + + + + diff --git a/examples/templates/radio/rfpipe/emane-rfpipe-nem.xml b/examples/templates/radio/rfpipe/emane-rfpipe-nem.xml new file mode 100644 index 0000000..1d84f18 --- /dev/null +++ b/examples/templates/radio/rfpipe/emane-rfpipe-nem.xml @@ -0,0 +1,33 @@ + + + + + + + + + %if bandwidth_hz: + + %else: + + %endif + + + + + + + % if fixedantennagainenable: + + %else: + + %endif + + + + %if spectralmaskindex: + + %endif + + + diff --git a/examples/templates/radio/rfpipe/emane-rfpipe-pcr.xml b/examples/templates/radio/rfpipe/emane-rfpipe-pcr.xml new file mode 100644 index 0000000..a8d7b36 --- /dev/null +++ b/examples/templates/radio/rfpipe/emane-rfpipe-pcr.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
diff --git a/examples/templates/radio/rfpipe/emane-rfpipe-radiomodel.xml b/examples/templates/radio/rfpipe/emane-rfpipe-radiomodel.xml new file mode 100644 index 0000000..3db776e --- /dev/null +++ b/examples/templates/radio/rfpipe/emane-rfpipe-radiomodel.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/examples/templates/radio/rfpipe/otestpoint-probe-emane-rfpipe.xml b/examples/templates/radio/rfpipe/otestpoint-probe-emane-rfpipe.xml new file mode 100644 index 0000000..c419c6f --- /dev/null +++ b/examples/templates/radio/rfpipe/otestpoint-probe-emane-rfpipe.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/examples/templates/radio/rfpipe/otestpoint.xml b/examples/templates/radio/rfpipe/otestpoint.xml new file mode 100644 index 0000000..f2afc12 --- /dev/null +++ b/examples/templates/radio/rfpipe/otestpoint.xml @@ -0,0 +1,24 @@ +<% +from letce2.utils.network import CIDRNotation +%> + + + + + + + + + + + + + + + + diff --git a/examples/templates/radio/tdma/emane-platform.xml b/examples/templates/radio/tdma/emane-platform.xml new file mode 100644 index 0000000..7fe925f --- /dev/null +++ b/examples/templates/radio/tdma/emane-platform.xml @@ -0,0 +1,21 @@ + +<% +from letce2.utils.network import CIDRNotation +%> + + + + + + + + + + + + + + + + + diff --git a/examples/templates/radio/tdma/emane-tdma-nem.xml b/examples/templates/radio/tdma/emane-tdma-nem.xml new file mode 100644 index 0000000..d520904 --- /dev/null +++ b/examples/templates/radio/tdma/emane-tdma-nem.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/examples/templates/radio/tdma/emane-tdma-pcr.xml b/examples/templates/radio/tdma/emane-tdma-pcr.xml new file mode 100644 index 0000000..efb9066 --- /dev/null +++ b/examples/templates/radio/tdma/emane-tdma-pcr.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/templates/radio/tdma/emane-tdma-radiomodel.xml b/examples/templates/radio/tdma/emane-tdma-radiomodel.xml new file mode 100644 index 0000000..e247d71 --- /dev/null +++ b/examples/templates/radio/tdma/emane-tdma-radiomodel.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/examples/templates/radio/tdma/otestpoint-probe-emane-tdmaeventschedulerradiomodel.xml b/examples/templates/radio/tdma/otestpoint-probe-emane-tdmaeventschedulerradiomodel.xml new file mode 100644 index 0000000..b3905a0 --- /dev/null +++ b/examples/templates/radio/tdma/otestpoint-probe-emane-tdmaeventschedulerradiomodel.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/examples/templates/radio/tdma/otestpoint.xml b/examples/templates/radio/tdma/otestpoint.xml new file mode 100644 index 0000000..1212518 --- /dev/null +++ b/examples/templates/radio/tdma/otestpoint.xml @@ -0,0 +1,21 @@ +<% +from letce2.utils.network import CIDRNotation +%> + + + + + + + + + + + + + diff --git a/extras/adjacentlink-foss-build.sh b/extras/adjacentlink-foss-build.sh new file mode 100755 index 0000000..dfeac26 --- /dev/null +++ b/extras/adjacentlink-foss-build.sh @@ -0,0 +1,293 @@ +#!/bin/bash - +# +# Copyright (c) 2017-2023 - Adjacent Link LLC, Bridgewater, New Jersey +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * 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. +# * Neither the name of Adjacent Link LLC nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# 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. + +# Python 3 build +export PYTHON=python3 + +# set to 1 to build emane-model-lte and srsRAN-emane +with_lte=1 + +dev_dir=$PWD + +# read only access +clone_base=https://github.com/adjacentlink + +# read only access +clone_base_environments_foss=https://github.com/sgalgano + +# branches +emane_branch=master +openstatistic_branch=master +opentestpoint_branch=master +opentestpoint_probe_emane_branch=master +opentestpoint_probe_iproute_branch=master +opentestpoint_probe_iptraffic_branch=master +opentestpoint_probe_system_branch=master +opentestpoint_probe_mgen_branch=master +opentestpoint_labtools_branch=master +python_etce_branch=master +emane_node_director_branch=master +letce2_branch=master +letce2_plugin_lxc_branch=master +emane_spectrum_tools_branch=master +emane_jammer_simple_branch=master +emane_model_lte_branch=master +srsRAN_emane_branch=master +opentestpoint_probe_lte_branch=master +waveform_resource_branch=master + +clone() +{ + pushd $dev_dir + + if [ ! -d $1 ] + then + git clone $clone_base/$1 + + pushd $1 + + git checkout $2 + + else + pushd $1 + + git checkout $2 + + git pull + fi + + # apply any patches + if [ -f ../$1.patch ] + then + patch -p 1 < ../$1.patch + fi + + popd + + popd +} + +build() +{ + echo "building: $dev_dir/$1" + + pushd $dev_dir/$1 + + if [ -f ./autogen.sh ] + then + ./autogen.sh -c + + ./autogen.sh + + ./configure + + make + + elif [ -f CMakeLists.txt ] + then + mkdir build + pushd build + if (( $(echo "$(ldd --version | head -n 1 | awk '{print $4}') > 2.17" |bc -l) )); + then + cmake3 .. + else + cmake3 -DUSE_GLIBC_IPV6=0 .. + fi + make + popd + else + make + fi + + popd +} + +build_all() +{ + # clone + clone emane $emane_branch + clone openstatistic $openstatistic_branch + clone opentestpoint $opentestpoint_branch + clone opentestpoint-probe-emane $opentestpoint_probe_emane_branch + clone opentestpoint-probe-iproute $opentestpoint_probe_iproute_branch + clone opentestpoint-probe-iptraffic $opentestpoint_probe_iptraffic_branch + clone opentestpoint-probe-system $opentestpoint_probe_system_branch + clone opentestpoint-probe-mgen $opentestpoint_probe_mgen_branch + clone opentestpoint-labtools $opentestpoint_labtools_branch + clone python-etce $python_etce_branch + clone emane-node-director $emane_node_director_branch + clone letce2 $letce2_branch + clone letce2-plugin-lxc $letce2_plugin_lxc_branch + clone emane-spectrum-tools $emane_spectrum_tools_branch + clone emane-jammer-simple $emane_jammer_simple_branch + clone waveform-resource $waveform_resource_branch + + if [ $with_lte -eq 1 ] + then + clone emane-model-lte $emane_model_lte_branch + clone srsRAN-emane $srsRAN_emane_branch + clone opentestpoint-probe-lte $opentestpoint_probe_lte_branch + fi + + # clone and build latest environments-foss + pushd $dev_dir + git clone $clone_base_environments_foss/environments-foss + pushd environments-foss + if [ -f ../environments-foss.patch ] + then + patch -p 1 < ../environments-foss.patch + fi + make PYTHON=$PYTHON DEV_ROOT=$dev_dir + popd + popd + + # build base projects + build emane + build openstatistic + build opentestpoint + + # load emane environment + . $dev_dir/environments-foss/adjacentlink-foss.env + + # build the rest + build opentestpoint-probe-emane + build opentestpoint-probe-iproute + build opentestpoint-probe-iptraffic + build opentestpoint-probe-system + build opentestpoint-probe-mgen + build opentestpoint-labtools + build python-etce + build emane-node-director + build letce2 + build letce2-plugin-lxc + build emane-spectrum-tools + build waveform-resource + + if [ $with_lte -eq 1 ] + then + + build emane-model-lte + + build srsRAN-emane + + build opentestpoint-probe-lte + fi +} + +clean_all() +{ + rm -rf \ + emane \ + emane-jammer-simple \ + emane-spectrum-tools \ + environments-foss \ + letce2 \ + letce2-plugin-lxc \ + openstatistic \ + opentestpoint \ + opentestpoint-labtools \ + opentestpoint-probe-emane \ + opentestpoint-probe-iproute \ + opentestpoint-probe-iptraffic \ + opentestpoint-probe-system \ + opentestpoint-probe-mgen \ + python-etce \ + emane-node-director\ + waveform-resource + + if [ $with_lte -eq 1 ] + then + rm -rf \ + emane-model-lte \ + srsRAN-emane \ + opentestpoint-probe-lte + fi +} + +make_patch_all() +{ + for project in emane \ + emane-jammer-simple \ + emane-spectrum-tools \ + environments-foss \ + letce2 \ + letce2-plugin-lxc \ + openstatistic \ + opentestpoint \ + opentestpoint-labtools \ + opentestpoint-probe-emane \ + opentestpoint-probe-iproute \ + opentestpoint-probe-iptraffic \ + opentestpoint-probe-system \ + opentestpoint-probe-mgen \ + python-etce \ + emane-node-director\ + waveform-resource + do + make_patch $project + done + + if [ $with_lte -eq 1 ] + then + make_patch emane-model-lte + make_patch srsRAN-emane + make_patch opentestpoint-probe-lte + fi +} + +usage() +{ + echo + echo " usage: adjacentlink-foss-build < build | clean >" + echo +} + + +case "$1" in + build) + build_all + ;; + + clean) + clean_all + ;; + + help) + usage + exit 0 + ;; + + *) + usage + exit 1 + ;; +esac diff --git a/extras/build-external-kmod-batman-adv-rpm.sh b/extras/build-external-kmod-batman-adv-rpm.sh new file mode 100755 index 0000000..1438617 --- /dev/null +++ b/extras/build-external-kmod-batman-adv-rpm.sh @@ -0,0 +1,182 @@ +#!/bin/bash - +# +# Copyright (c) 2022-2023 - Adjacent Link LLC, Bridgewater, New Jersey +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * 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. +# * Neither the name of Adjacent Link LLC nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# 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. + +with_build_rpm=1 +with_clean=1 + +app_name=$(basename $0) + +kernel_release=$(uname -r) + +if [ $# == 1 ] +then + kernel_release=$1 +fi + +kernel_rpm_version=$(echo $kernel_release -r | awk -F \- '{print $1}') + +kernel_release_no_arch=${kernel_release%.$(arch)} + +kernel_src_version=${kernel_rpm_version%\.0} + +rpm_release=$(echo $kernel_release -r | awk -F \- '{print $2}' | awk -F \. '{print $1}') + +kernel_major_version=$(echo $kernel_rpm_version | awk -F \- '{print $1}' | awk -F \. '{print $1}') + +kernel_src=linux-$kernel_src_version.tar.xz + +cwd=$(pwd) + +if [ ! -f $kernel_src ] +then + wget https://mirrors.edge.kernel.org/pub/linux/kernel/v${kernel_major_version}.x/$kernel_src + + if [ $? -ne 0 ] + then + echo "$app_name abort: unable to download $kernel_src" + exit 1 + fi +fi + +if [ ! -d linux-$kernel_src_version ] +then + echo "$app_name: building batman-adv module" + + tar xf $kernel_src + + if [ $? -ne 0 ] + then + echo "$app_name abort: unable to unroll $kernel_src" + exit 1 + fi +fi + +pushd linux-$kernel_src_version/net/batman-adv + +echo "$app_name: building batman-adv module" + +make \ + -C /lib/modules/$(uname -r)/build \ + M=$(pwd) \ + CFLAGS_MODULE="-DCONFIG_BATMAN_ADV_NC \ + -DCONFIG_BATMAN_ADV_DAT \ + -DCONFIG_BATMAN_ADV_BLA \ + -DCONFIG_BATMAN_ADV_BATMAN_V" \ + CONFIG_BATMAN_ADV=m \ + CONFIG_BATMAN_ADV_BATMAN_V=y \ + CONFIG_BATMAN_ADV_BLA=y \ + CONFIG_BATMAN_ADV_DAT=y \ + CONFIG_BATMAN_ADV_NC=y + +if [ $? -ne 0 ] +then + echo "$app_name abort: unable to build batman-adv module" + exit 1 +fi + +if [ $with_build_rpm -eq 1 ] +then + echo "$app_name: building batman-adv kmod rpm" + + mkdir -p .rpmbuild/BUILD \ + .rpmbuild/SPECS \ + .rpmbuild/SOURCES \ + .rpmbuild/SRPMS \ + .rpmbuild/RPMS/noarch \ + .rpmbuild/tmp + + cat < .rpmbuild/SPECS/batman.spec +%define source_date_epoch_from_changelog 0 + +Name: kmod-batman-adv-$kernel_release +Version: $kernel_src_version +Release: 1%{?dist} +License: GPLv2 and Redistributable, no modification permitted +Requires: kernel-core == $kernel_release_no_arch +BuildRequires: kernel-devel == $kernel_release_no_arch +Summary: batman-adv kernel module for $kernel_release + +%description +This package provides the batman-adv kernel modules built for the Linux +kernel $kenrel_release for the x86_64 family of processors. + +%install +mkdir -p \${RPM_BUILD_ROOT}/lib/modules/$kernel_release/extra/batman-adv +cp $(pwd)/batman-adv.ko \${RPM_BUILD_ROOT}/lib/modules/$kernel_release/extra/batman-adv + +%post +/usr/sbin/depmod -a $kernel_release + +%postun +/usr/sbin/depmod -a $kernel_release + +%files +%defattr(-,root,root,-) +/lib/modules/$kernel_release/extra/batman-adv/* + +EOF + + rpmbuild --clean -ba .rpmbuild/SPECS/batman.spec \ + --define "_topdir $(pwd)/.rpmbuild" \ + --define "_tmppath $(pwd)/.rpmbuild/tmp" + + if [ $? -ne 0 ] + then + echo "$app_name abort: unable to build batman-adv rpm" + exit 1 + fi + + find .rpmbuild -name "*.rpm" -exec cp {} $cwd \; + + if [ $with_clean -eq 1 ] + then + rm -rf .rpmbuild + fi +fi + +popd + +if [ $with_clean -eq 1 ] +then + rm -rf linux-$kernel_src_version +fi + +echo +echo +echo "To sign the kernel module after rpm install (secure boot):" +echo +echo "sudo /usr/src/kernels/$kernel_release/scripts/sign-file \\" +echo " sha256 \\" +echo " /path/to/your/mok.priv \\" +echo " /path/to/your/mok.der \\" +echo " /lib/modules/$kernel_release/extra/batman-adv/batman-adv.ko" +echo diff --git a/extras/hosts-additions b/extras/hosts-additions new file mode 100644 index 0000000..39514a4 --- /dev/null +++ b/extras/hosts-additions @@ -0,0 +1,57 @@ +# +# emane-guide container address mapping +# +10.99.0.1 node-1 +10.99.0.2 node-2 +10.99.0.3 node-3 +10.99.0.4 node-4 +10.99.0.5 node-5 +10.99.0.6 node-6 +10.99.0.7 node-7 +10.99.0.8 node-8 +10.99.0.9 node-9 +10.99.0.10 node-10 +10.99.0.100 node-server + +10.99.1.1 host-1 +10.99.1.2 host-2 +10.99.1.3 host-3 +10.99.1.4 host-4 +10.99.1.5 host-5 +10.99.1.6 host-6 +10.99.1.7 host-7 +10.99.1.8 host-8 +10.99.1.9 host-9 +10.99.1.10 host-10 + +10.98.1.1 radio-1-lan +10.98.1.2 host-1-lan +10.98.2.1 radio-2-lan +10.98.2.2 host-2-lan +10.98.3.1 radio-3-lan +10.98.3.2 host-3-lan +10.98.4.1 radio-4-lan +10.98.4.2 host-4-lan +10.98.5.1 radio-5-lan +10.98.5.2 host-5-lan +10.98.6.1 radio-6-lan +10.98.6.2 host-6-lan +10.98.7.1 radio-7-lan +10.98.7.2 host-7-lan +10.98.8.1 radio-8-lan +10.98.8.2 host-8-lan +10.98.9.1 radio-9-lan +10.98.9.2 host-9-lan +10.98.10.1 radio-10-lan +10.98.10.2 host-10-lan + +10.100.0.1 radio-1 +10.100.0.2 radio-2 +10.100.0.3 radio-3 +10.100.0.4 radio-4 +10.100.0.5 radio-5 +10.100.0.6 radio-6 +10.100.0.7 radio-7 +10.100.0.8 radio-8 +10.100.0.9 radio-9 +10.100.0.10 radio-10 diff --git a/guide/Makefile b/guide/Makefile new file mode 100644 index 0000000..0696e9e --- /dev/null +++ b/guide/Makefile @@ -0,0 +1,68 @@ +DOCUMENT=emane-guide.pdf + +BUILD_DIR_PDF=pdf +BUILD_DIR_SITE=site + +INPUTS= \ + preface.txt \ + getting-started.txt \ + introduction.txt \ + paradigms.txt \ + applications.txt \ + physical-layer.txt \ + control-messages.txt \ + events.txt \ + antenna-patterns.txt \ + rf-pipe-radio-model.txt \ + ieee80211abg-radio-model.txt\ + tdma-radio-model.txt \ + bent-pipe-radio-model.txt \ + comm-effect-utility-model.txt \ + virtual-transport.txt \ + raw-transport.txt \ + eel-event-generator.txt \ + antenna-gain.txt + +MARKDOWN_PDF = \ + $(addprefix $(BUILD_DIR_PDF)/,$(INPUTS:.txt=.md)) + +MARKDOWN_SITE = \ + $(addprefix $(BUILD_DIR_SITE)/,$(INPUTS:.txt=.md)) \ + $(BUILD_DIR_SITE)/license.md + +.PHONY: site pdf + +$(BUILD_DIR_PDF)/%.md: %.txt + -mkdir -p $(BUILD_DIR_PDF) + adjacentlink-doc -i $< -o $@ + +$(BUILD_DIR_SITE)/%.md: %.txt + -mkdir -p $(BUILD_DIR_SITE) + adjacentlink-doc -i $< -o $@ -t site + +all: + +pdf: $(BUILD_DIR_PDF)/$(DOCUMENT) + +site: $(MARKDOWN_SITE) + +$(BUILD_DIR_PDF)/$(DOCUMENT): doc-header-pdf.md $(MARKDOWN_PDF) + pandoc \ + -i doc-header-pdf.md \ + $(MARKDOWN_PDF) \ + --number-sections \ + --highlight-style pygments.theme \ + -f markdown+raw_tex+header_attributes+multiline_tables \ + -V colorlinks \ + -o $(BUILD_DIR_PDF)/$(DOCUMENT) + +clean: site-clean pdf-clean + rm -f images/auto-generated-* + +pdf-clean: + rm -rf $(BUILD_DIR_PDF) + +site-clean: + rm -f $(MARKDOWN_SITE) + cd site && bundle exec jekyll clean + diff --git a/guide/antenna-gain.txt b/guide/antenna-gain.txt new file mode 100644 index 0000000..ebe9645 --- /dev/null +++ b/guide/antenna-gain.txt @@ -0,0 +1,152 @@ +~{{frontmatter +layout: default +title: Computing Antenna Gain +nav_order: 18 +permalink: /computing-antenna-gain}}~ + +~{{layout type=newpage}}~ + +# Computing Antenna Gain + +This below step-by-step process is used to determine the antenna gain +when utilizing antenna profiles. It should be noted that antenna gains +are computed as part of the OTA receive packet processing. + +The following steps 1 through 12 define the process of determining the +$rxAntennaGain$ when the receiving node is configured to use antenna +profiles. Steps 2 through 12 would be required to compute the +$txAntennaGain$ if the transmitter was also configured to use antenna +profiles. + +1. Transform the positions from WGS84 (lat/long/alt) to ECEF (Earth Centered Earth Fixed) + + 1. Define the WGS84 ellipsoid constants + + ``` + semi_major=6378137 + semi_minor=6356752.3142 + f=1/298.257223563 + e2 = 2*f - f^2 + ``` + + 2. Compute the prime vertical radius of curvature + + ``` + N = semi_major/sqrt(1-e2*sin(latitude)^2) + ``` + + 3. Perform the following coordinate transformation + + ``` + X = (N + altitude) * cos(latitude) * cos(longitude) + Y = (N + altitude) * cos(latitude) * sin(longitude) + U = (N*(1-e2) + altitude) * sin(latitude) + ``` + + 4. Perform above transformation for both the transmitter and receiver + + ``` + [Xt, Yt, Ut] = Transmitter Position ECEF + [Xr, Yr, Ur] = Receiver Position ECEF + ``` + + 5. Compute the ECEF vector between receiver and transmitter + + ``` + X = Xt-Xr + Y = Yt-Yr + Z = Ut-Ur + ``` + +2. Transform ECEF to NEU (North, East Up) in receiving NEM's frame + + ``` + N1 = -X*sin(latitude)*cos(longitude) - Y*sin(latitude)*sin(longitude) + Z*cos(latitude) + E1 = -X*sin(longitude) + Y*cos(longitude) + U1 = X*cos(latitude)*cos(longitude) + Y*cos(latitude)*sin(longitude) + Z*sin(latitude) + ``` + +3. Adjust yaw and pitch angles to account for velocity vector + + ``` + yaw = yaw + V_azimuth + pitch = pitch + V_elevation + ``` + +4. Perform the following transformation to account for yaw, pitch and roll + + 1. Define the transformation matrix + + ``` + a11 = cos(pitch)cos(yaw) + a12 = cos(pitch)sin(yaw) + a13 = sin(pitch) + a21 = sin(pitch)cos(yaw)sin(roll) - cos(roll)sin(yaw) + a22 = cos(roll)cos(yaw) + sin(pitch)sin(roll)sin(yaw) + a23 = -cos(pitch)sin(roll) + a31 = -cos(yaw)sin(pitch)cos(roll) - sin(yaw)sin(roll) + a32 = -sin(yaw)sin(pitch)cos(roll) + sin(roll)cos(yaw) + a33 = cos(pitch)cos(roll) + ``` + + ``` + | a11 a12 a13 | + | a21 a22 a23 | = A + | a31 a32 a33 | + ``` + + 2. Perform the transformation + + ``` + N = N1 * a11 + E1 * a12 + U1 * a13 + E = N1 * a21 + E1 * a22 + U1 * a23 + U = N1 * a31 + E1 * a32 + U1 * a33 + ``` + +5. Update NEU to include receiving node's location on the platform + + ``` + N = N + north + E = E + east + U = U + up + ``` + + Where, *north*/*east*/*up* are obtained from the antenna profile manifest for the receiving node. + +6. Rotate transmitter's antenna placement into receiver's coordinate frame using the same transformation defined in Step 4 above replacing N1, E1 and U1 with the transmitter's antenna placement values obtained from the antenna profile manifest. + + ``` + N = N + north(transformed) + E = E + east(transformed) + U = U + up(transformed) + ``` + +7. Compute range from receiver to transmitter + + ``` + range = sqrt(N^2 + E^2 + U^2) + ``` + +8. Compute bearing and elevation from receiver to transmitter + + ``` + bearing = atan(E/N) + elevation = asin(U/range) + ``` + +9. Look up the blockage value for the receiver (if provided) based on the blockage pattern associated with the receiver's antenna profile Id and the bearing and elevation values from Step 8. + +10. Adjust bearing and elevation to account for receiving NEM's antenna pointing (if provided) + + ``` + bearing = bearing - AzPointing + elevation = elevation - ElPointing + ``` + +11. Look up antenna gain value for the receiver based on the antenna pattern associated with the receiver's antenna profile Id and the bearing and elevation values from Step 10. + +12. Compute *rxAntennaGain* + + ``` + rxAntennGain = antennaGain + blockage + ``` diff --git a/guide/antenna-patterns.txt b/guide/antenna-patterns.txt new file mode 100644 index 0000000..a9d8774 --- /dev/null +++ b/guide/antenna-patterns.txt @@ -0,0 +1,422 @@ +~{{frontmatter +layout: default +title: Antenna Patterns +nav_order: 9 +permalink: /antenna-patterns}}~ + +~{{layout type=newpage}}~ +# Antenna Patterns + +~{{imagemagick + file="images/incomplete-chapter.png" + scale=75 + images/exclamation.png -resize 20% \( -size 800x -font DejaVu-Sans-Mono-Bold + -gravity east label:" This chapter is incomplete " \) + +append -transparent white}}~ + +The antenna profile manifest is an XML file that provides a list of +all antenna profiles to be utilized within an emulation +experiment. The antenna profile manifest is specified using the +`antennaprofilemanifesturi` configuration parameter. + +```xml + + + + + + + + + + +``` + +The Antenna Profile Manifest is defined using an XML file. The +document consists of a single *\* element that contains one +or more elements. Each *\* element corresponds to +a unique antenna profile where: + +1. The *id* attribute is required and must be unique among all + profiles. + +2. The *antennapatternuri* attribute is required and must be specified + as an absolute URI. + +3. The *blockagepatteruri* attribute is optional and when specified + must be an absolute URI. + +4. The *\* subelement is optional and defines the location + of the antenna relative to the platform. + +The location event provides the position of the platform and when +computing azimuth and elevation between the transmitter and receiver, +the antenna placement of the local and/or remote NEM is accounted for +within the physical layer by performing a translation and/or rotation +as required. + +Where: + +1. The *north* attribute defines the longitudinal offset in meters of + the antenna location on the platform. + +2. The *east* attribute defines the latitudinal offset in meters of + the antenna location on the platform. + +3. The *up* attribute defines the vertical offset in meters of the + antenna location on the platform. + +## Defining Antenna Patterns + +The antenna pattern is an XML file that defines the antenna gain (i.e +radiation pattern) associated with a given antenna for all elevation +and bearing pairs. The antenna pattern is defined in the platform's +reference frame assuming to be pointing (if directional) at an +elevation and bearing of 0 degrees. The physical layer will make the +proper adjustments to account for platform orientation and antenna +pointing when computing the gain + +The below sample antenna pattern XML files show an ideal omni and an +ideal 30 degree directional sector antenna. Elevation and bearing are +defined in whole degrees and as such, a single XML file can contain a +maximum of 64800 (180x360) gain values. + +Ideal omni antenna XML definition: + +~{{verbatim type=xml -- + + + + + + + + + + +}}~ + + +30 degree directional sector antenna XML definition: + +~{{verbatim type=xml -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +}}~ + +Rendering of the above 30 degree directional sector antenna: + +~{{image file="images/antennapattern.png" scale=60}}~ + +## Defining Blockage Patterns + +The blockage pattern is an XML file that defines the blockage +associated with a given antenna mounted on a specific platform for all +elevation and bearing pairs. The blockage pattern is also defined in +the platform's reference frame and the emulator physical layer will +make the proper adjustments to account for platform orientation. The +blockage pattern is optional. When defined, it is used in conjunction +with the antenna pattern to determine the actual antenna gain. + +Sample blockage pattern XML file with full blockage aft (90 degrees <= +bearing <= 270 degrees) of the platform and at elevations above and +below 10 degrees: + +~{{verbatim type=xml -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +}}~ + +Rendering of the above blockage pattern: + +~{{image file="images/blockagepattern.png" scale=60}}~ + diff --git a/guide/applications.txt b/guide/applications.txt new file mode 100644 index 0000000..ca3ebb3 --- /dev/null +++ b/guide/applications.txt @@ -0,0 +1,292 @@ +~{{frontmatter +layout: default +title: Applications +nav_order: 5 +permalink: /applications}}~ + +~{{layout type=newpage}}~ + +# EMANE Applications + +Most *EMANE* experiments will have four XML configuration files per +running `emane` application and an additional two XML configuration +files for a single `emaneeventservice` application responsible for +instantiating and configuring event generators used to direct the +experiment scenario. + +## Emulator + +The `emane` application processes a set of XML configuration files in +order to determine the type of radio model to load, how the radio +model and physical layer should be configured and what +general application level settings to apply. + +~{{ditaa file="images/configuration-parameter-hierarchy" + scale=75 + no-shadows=true + transparent=true + caption="Configuration parameter value hierarchy for values + specified in multiple files where the highest priority + value for the same configuration parameter is used." + -- + Configuration Parameter XML Value Hierarchy + + /---------------\ + | | + Priority 1 | Emulator | Highest + | Platform | + | cFFB | ^ + \---------------/ | + : + -=-------------------------------------------------------------------- | + | + /---------------\ | + | | | + Priority 2 | NEM | | + | cFFB | | + \---------------/ | + | + -=-------------------------------------------------------------------- | + | + /---------------\ /---------------\ /---------------\ V + | | | | | | + Priority 3 | Radio Model | | Boundary | | Shim | Lowest + | cFFB | | cFFB | | cFFB | + \---------------/ \---------------/ \---------------/ +}}~ + + +1. *Emulator Platform XML*: The initial configuration file processed + by the `emane` application. Contains all the emulator + infrastructure configuration as well as a reference to the *NEM* + XML along with the *NEM* structure, potentially including + *NEM* component configuration values. + + *NEM* structure is defined using an `` element with a + `definition` attribute specifying the *NEM* XML configuration file + and an `id` attribute specifying the *NEM id*. + + If configuration values are specified for an NEM component: + ``, ``, `` or ``, the XML configuration + file for that component must also be supplied in component's + respective `definition` attribute. + + Emulator platform XML configuration parameter values specified + for *NEM* components will override the same configuration + parameters, if present, in *NEM* XML or the same configuration + parameters, if present, in the specific *NEM* component's XML. + + The below emulator platform configuration for `node-1` in the + `rfpipe-01` example illustrates including boundary configuration + via a sequence of `` elements within the `` + component and specifying the boundary configuration XML file as + `emane-transvirtual.xml`. Values are provided for the `device`, + `address`, and `mask` configuration parameters. + + ~{{file + path="../examples/rfpipe-01/node-1/emane-platform.xml" + type=xml + skip=1 + showname=true + blank=true + path-cut="../examples" + path-replace="emane-guide/examples" + indent=3}}~ + + + For legacy reasons it is possible to configure an emulator instance + to instantiate more than one *NEM*. For performance reasons, stick + to one and only one *NEM* per emulator instance. + + ~{{imagemagick + file="images/dont-run-multiple-nems.png" + scale=75 + images/exclamation.png -resize 20% \( -size 800x -font DejaVu-Sans-Mono-Bold + -gravity east label:" Do not run multiple NEMs in a single emulator instance. " \) + +append -transparent white}}~ + + +2. *NEM XML*: The configuration file specified in the emulator + platform XML when defining the *NEM* structure. All *NEM* + components are defined: ``, ``, `` and/or + ``, along with their respective `definition` attribute + specifying the appropriate component XML configuration file. + + *NEM* XML is the most appropriate place to specify physical layer + configuration using the `` element. + + *NEM* XML configuration parameters specified within any *NEM* + component will override the same configuration parameters, if + present, in the specific *NEM* component's XML. + + The below *NEM* configuration for `node-1` in the `rfpipe-01` + example illustrates how to define the *NEM* structure and configure + the physical layer. The order of components within the `` + element is important and maps directly to how they will be + connected. Always order *NEM* components from *upstream* to + *downstream*. + + ~{{file + path="../examples/rfpipe-01/node-1/emane-rfpipe-nem.xml" + type=xml + skip=1 + showname=true + blank=true + path-cut="../examples" + path-replace="emane-guide/examples" + indent=3}}~ + + +2. *Radio Model XML*: The configuration file specified in the *NEM* XML + `` `definition` attribute. It contains the name of the plugin + to instantiate within the `library` attribute of its `` + element. + + Radio model XML configuration parameters specified within the + `` component will be overridden by the same configuration + parameters, if present, within *NEM* XML or the emulator platform + XML, if present. + + The below radio model XML configuration for `node-1` in the + `rfpipe-01` example illustrates the available configuration + parameters for the ~{{link name="RF Pipe" + file="rf-pipe-radio-model.md" section="#rf-pipe-radio-model"}}~ + radio model. + + ~{{file + path="../examples/rfpipe-01/node-1/emane-rfpipe-radiomodel.xml" + type=xml + skip=1 + showname=true + blank=true + path-cut="../examples" + path-replace="emane-guide/examples" + indent=3}}~ + +3. *Boundary XML*: The configuration file specified in the *NEM* XML + `` `definition` attribute. It contains the name of the plugin + to instantiate within within the `library` attribute of its `` + element. + + Boundary XML configuration parameters specified within the + `` component will be overridden by the same configuration + parameters, if present, within *NEM* XML or the emulator platform + XML, if present. + + The below boundary XML configuration for `node-1` in the + `rfpipe-01` example provides no configuration parameter values, + leaving all the ~{{link name="Virtual Transport" + file="virtual-transport.md" section="#virtual-transport"}}~ + configuration parameters to their default values unless otherwise + set in *NEM* XML or emulator platform XML. + + ~{{file + path="../examples/rfpipe-01/node-1/emane-transvirtual.xml" + type=xml + skip=1 + showname=true + blank=true + path-cut="../examples" + path-replace="emane-guide/examples" + indent=3}}~ + +4. *Bit Error Rate or Packet Completion Rate XML*: Most radio models + employ *Bit Error Rate* (BER) or *Packet Completion Rate* (PCR) + curves to factor *Signal to Noise and Interference Ratio* (SINR) into + their reception success or failure logic. + + The below packet completion rate XML for `node-1` in the + `rfpipe-01` example illustrates the format used by the ~{{link + name="RF Pipe" file="rf-pipe-radio-model.md" + section="#rf-pipe-radio-model"}}~ model. There is no standard BER + or PCR curve XML format. + + ~{{file + path="../examples/rfpipe-01/node-1/emane-rfpipe-pcr.xml" + type=xml + skip=1 + showname=true + blank=true + path-cut="../examples" + path-replace="emane-guide/examples" + indent=3 + lines=25}}~ + +### `emane` configuration + +~{{emaneinfo plugin=nemmanager type=config indent=0}}~ + +### `emane` statistics + +~{{emaneinfo plugin=nemmanager type=stat indent=0}}~ + +### `emane` Statistic Tables + +The `emane` application processes a set of XML configuration files in +order to determine the type of radio model to load, how the radio +model and physical layer should be configured and what +general application level settings to apply. + +~{{emaneinfo plugin=nemmanager type=table indent=0}}~ + +## Event Service + +The `emaneeventservice` application processes a configuration file in +order to determine the types of event generator plugins to +instantiate, how the plugins should be configured and what general +application level settings to apply. + +1. *Event Service XML*: The initial configuration file processed by + the `emaneeventservice` application. Contains all the event service + infrastructure configuration as well as the event generators to + load. + + Event generators are loaded by `emaneeventservice` based on an + `` element's `definition` attribute which specifies the + event generator XML. More than one `` element may be + present, resulting in more than one generator being loaded by the + event service. + + The below event service configuration for `host` in the + `rfpipe-01` example illustrates configuring the event service to + load the ~{{link name="EEL" file="eel-event-generator.md" + section="#eel-event-generator"}}~ event generator. + + ~{{file + path="../examples/rfpipe-01/host/eventservice.xml" + type=xml + skip=1 + showname=true + blank=true + path-cut="../examples" + path-replace="emane-guide/examples" + indent=3}}~ + +2. "*Event Generator XML*: The configuration file specified in the Event Service XML + `` `definition` attribute. It contains the name of the plugin + to instantiate within the `library` attribute of its `` + element. + + Event generator XML configuration parameters are specified as a + sequence of `` or `` elements within ``. + + The below event generator XML configuration for `host` in the + `rfpipe-01` example illustrates using some of the available + configuration parameters for the ~{{link name="EEL" + file="eel-event-generator.md" section="#eel-event-generator"}}~ + event generator. + + ~{{file + path="../examples/rfpipe-01/host/eelgenerator.xml" + type=xml + skip=1 + showname=true + blank=true + path-cut="../examples" + path-replace="emane-guide/examples" + indent=3}}~ + + +### `emaneeventservice` configuration + + ~{{emaneinfo plugin=eventgeneratormanager type=config indent=3}}~ diff --git a/guide/bent-pipe-radio-model.txt b/guide/bent-pipe-radio-model.txt new file mode 100644 index 0000000..b67a79b --- /dev/null +++ b/guide/bent-pipe-radio-model.txt @@ -0,0 +1,571 @@ +~{{frontmatter +layout: default +title: Bent Pipe Radio Model +nav_order: 13 +permalink: /bent-pipe-radio-model}}~ + +~{{layout type=newpage}}~ +# Bent Pipe Radio Model + +The Bent Pipe radio model is a generic regenerative bent-pipe (u-bend) +satellite model. The model supports configuration of one or more +transponders, where each transponder may operate in `ubend` or +`process` mode. A transponder operating in `ubend` mode will relay any +successfully received over-the-air uplink frame over its downlink +channel. A transponder operating in `process` mode will forward any +successfully received over-the-air frame up the stack for processing. +Bent Pipe differentiates between operating as a satellite or ground +station solely based on transponder configuration, specifically the +configuration parameter `transponder.receive.action` either set to +`ubend` or `process`, and can be configured as a satellite with +inter-satellite links by using a combination of `ubend` and `process` +transponders. + +## Features + +The Bent Pipe radio model provides the following set of features: +[Multiple Transponders](#multiple-transponders), [Configurable Channel +Access](#configurable-channel-access), [Multiple +Antenna](#multiple-antenna), [Aggregation and +Fragmentation](#aggregation-and-fragmentation), [Boundary Transponder +Selection](#boundary-transponder-selection), and [Packet Completion +Rate Curves](#packet-completion-rate-curves). + +### Multiple Transponders + +The Bent Pipe radio model can be configured with multiple transponders +where each is configured using a set of configuration parameters with +a `:` format. Where `` is +a 0 based sequential index used to identify the transponders +instantiated by the model. + +Each transponder needs both receive and transmit configuration and +must be included as an entry in each of the `transponder.receiver.*` +and `transponder.transmit.*` configuration parameter values. + +Failure to include a referenced transponder in any of the required +configuration, using non-sequential transponder indices, or mixing +`na` and non-`na` values for the same transponder in +`transponder.transmit.*` TDMA channel access parameters, will result +in a configuration exception at emulator start. + +The below radio model XML snippet from `node-1` in the `bentpipe-01` +example shows `transponder.receiver.*` configuration for a Bent Pipe +model configured with a single transponder in `process` mode. + +~{{snippet path="../examples/bentpipe-01/node-1/emane-bentpipe-radiomodel.xml" +type=xml +start-regex="\s*.*" +stop-regex="\s* .*" +showname=true +path-cut="../examples" +path-replace="emane-guide/examples"}}~ + +Comparing the above snippet with the following from `node-2` in the +`bentpipe-02` example, highlights the `transponder.receiver.*` +similarities and differences when configuring multiple transponders +and operating in `ubend` mode -- mainly the number of `` +items with unique transponder indices. + +~{{snippet path="../examples/bentpipe-02/node-2/emane-bentpipe-radiomodel.xml" +type=xml +start-regex="\s*.*" +stop-regex="\s* .*" +showname=true +path-cut="../examples" +path-replace="emane-guide/examples"}}~ + +### Configurable Channel Access + +A transponder can be configured to use either TDMA or No-Protocol (no +channel access) channel access when transmitting. Specifying a +non-`na` value for `transponder.transmit.slotsize`, +`transponder.transmit.slotperframe`, and +`transponder.transmit.txslots` configuration parameters selects TDMA +channel access. Transponders instantiated by a Bent Pipe instance may +have different slot and frame sizes, and different tx slot +allocations. + +The following snippet from `node-1` in the `bentpipe-02` example +illustrates the configuration necessary for a TDMA transmit channel +with 10 1000 msec slots per frame and the assigning of individual +transmit slots to `node-1`. + +~{{snippet path="../examples/bentpipe-02/node-1/emane-bentpipe-radiomodel.xml" +type=xml +start-regex="\s*.*" +stop-regex="\s*.*" +showname=true +path-cut="../examples" +path-replace="emane-guide/examples"}}~ + +Specifying those same configuration parameters as `na`, as does +`node-3` in the `bentpipe-02` example, selects no-protocol channel +access, which is functionally equivalent to the ~{{link name="RF Pipe +Model" file="rf-pipe-radio-model.md" +section="#rf-pipe-radio-model"}}~. + +~{{snippet path="../examples/bentpipe-02/node-3/emane-bentpipe-radiomodel.xml" +type=xml +start-regex="\s*.*" +stop-regex="\s*.*" +showname=true +path-cut="../examples" +path-replace="emane-guide/examples"}}~ + + +### Multiple Antenna + +The Bent Pipe radio model can be configured with multiple antennas +using the configuration parameter `antenna.defines`. Each antenna is +defined as a parameter value entry using the format `:`. Where `` is a 0 based +unique index used to identify a specific antenna. + +Ideal omni antennas are defined using the following format: + +`:omni;;` + + +Profile defined antennas are defined using the following format: + + +`:;;;` + +Below is the antenna definition used by the `node-2` in the +`bentpipe-02` example showing the definition for three profile defined +antennas: + +~{{snippet path="../examples/bentpipe-02/node-2/emane-bentpipe-radiomodel.xml" +type=xml +start-regex="\s*.*antenna.defines.*" +stop-regex="^\s*$" +showname=true +path-cut="../examples" +path-replace="emane-guide/examples"}}~ + +A transponder must be associated with a receive and transmit antenna, +which may be the same, using the configuration parameters +`transponder.receive.antenna` and `transponder.transmit.antenna`, +respectively. An antenna is identified by the *antenna index* used in +`antenna.defines`. + +Below is the transponder receive and transmit antenna mappings for +`node-2` in the `bentpipe-02` example. + +~{{snippet path="../examples/bentpipe-02/node-2/emane-bentpipe-radiomodel.xml" +type=xml +start-regex="\s*.*transponder\.receive.antenna\.*" +stop-regex="\s*.*" +showname=true +path-cut="../examples" +path-replace="emane-guide/examples"}}~ + +~{{snippet path="../examples/bentpipe-02/node-2/emane-bentpipe-radiomodel.xml" +type=xml +start-regex="\s*.*transponder\.transmit.antenna\.*" +stop-regex="\s*.*" +showname=true +path-cut="../examples" +path-replace="emane-guide/examples"}}~ + +### Aggregation and Fragmentation + +The Bent Pipe radio model can be configured to aggregate small +over-the-air messages up to a certain maximum transmission unit (MTU) +and/or fragment ones larger than the same MTU. Aggregation is enabled +using the configuration parameter +`queue.aggregationenable`. Fragmentation is enabled using the +configuration parameter `queue.fragmentationenable`. + +MTU definition is transponder specific. When using TDMA channel +access, the MTU is calculated using the +`transponder.transmit.slotsize` and `transponder.transmit.datarate` +configuration parameters. When using no-protocol channel access the +MTU is specified using the configuration parameter +`transponder.transmit.mtu`. + +### Boundary Transponder Selection + +When using `process` mode, downstream messages that are communicated +to the Bent Pipe model for over-the-air transmission use a TOS or DSCP +mapping to transponder index in order to direct over-the-air messages, +depending on what is provided by the boundary component in use. Both +the ~{{link name="Raw Transport" file="raw-transport.md" +section="#raw-transport"}}~ and ~{{link name="Virtual Transport" +file="virtual-transport.md" section="#virtual-transport"}}~ use DSCP. + +The below configuration from `node-1` in the `bentpipe-01` example +directs all downstream over-the-air messages to *transponder 0*. + +~{{snippet path="../examples/bentpipe-01/node-1/emane-bentpipe-radiomodel.xml" +type=xml +start-regex="\s*.*transponder\.transmit\.tosmap.*" +stop-regex="^\s*$" +showname=true +path-cut="../examples" +path-replace="emane-guide/examples"}}~ + +### Packet Completion Rate Curves + +The Bent Pipe radio model Packet Completion Rate is specified as +curves defined via XML. The curve definitions are composed of a series +of SINR values along with their corresponding probability of reception +for a given index which is assigned to a transponder using the +configuration parameter `transponder.transmit.pcrcurveindex`. + +A curve definition must contain a minimum of two points with one SINR +representing *POR = 0* and one SINR representing *POR = 100*. Linear +interpolation is preformed when an exact SINR match is not found. + +Specifying a packet size (`` attribute +`packetsize`) in the curve file will adjust the POR based on received +packet size. Specifying a `packetsize` of 0 disregards received packet +size when computing the POR. + +The POR is obtained using the following calculation when a non-zero +`packetsize` is specified: + +~{{math POR = POR_0 ^ {S_1/S_0}}}~ + +Where, + +~{{math POR_0}}~ is the POR value determined from the PCR curve for the given SINR value + +~{{math S_0}}~ is the packet size specified in the curve file `packetsize` + +~{{math S_1}}~ is the received packet size + +The below PCR curve file is used by all nodes in +the `bentpipe-01` example. These curves are for illustrative +purposes only. Packet Completion Rate curves should be representative +of the waveform being emulated. + +~{{file path="../examples/bentpipe-01/node-1/emane-bentpipe-pcr.xml" +type=xml +showname=true +blank=false +path-cut="../examples" +path-replace="emane-guide/examples"}}~ + +~{{imagemagick + file="images/pcr-representation.png" + scale=75 + images/exclamation.png -resize 20% \( -size 800x -font DejaVu-Sans-Mono-Bold + -gravity east label:" PCR curves should be representative of the waveform being emulated. " \) + +append -transparent white}}~ + +## Configuration +~{{emaneinfo plugin=emane-model-bentpipe type=config}}~ + +## Statistics +~{{emaneinfo plugin=emane-model-bentpipe type=stat}}~ + +## Statistic Tables +~{{emaneinfo plugin=emane-model-bentpipe type=table}}~ + +## Examples + +This guide includes two Bent Pipe examples: + +1. `bentpipe-01`: A two node example where both nodes use a single + transponder in `process` mode. + +2. `bentpipe-02`: A three node example where two ground stations, each + with a single transponder in `process` mode, communicate through a + satellite with three transponders in `ubend` mode. + +### bentpipe-01 + +~{{graphviz + file="images/topology-bentpipe-01" scale=65 caption="bentpipe-01 experiment components" -- + digraph hierarchy { +rankdir="LR"; +node[shape=circle,style=filled] +"OTA" [image="images/cloud.png",shape=none,fillcolor=none] +"node-1" [fillcolor=green] +"node-2" [fillcolor=green] +"host-1" [fillcolor=gray,shape=square] +"host-2" [fillcolor=gray,shape=square] +"host-1"->"node-1" [dir="both",label="[.2] 10.98.1.0/24 [.1]"] +"node-1"->OTA [dir="both",label="10.100.0.1/24"] +OTA->"node-2" [dir="both",label="10.100.0.2/24"] +"node-2"->"host-2" [dir="both",label="[.2] 10.98.2.0/24 [.1]"] +} +}}~ + +The `bentpipe-01` example contains two ground nodes, each with a host +hanging off their respective `lan0` interface. Both nodes use a single +transponder in `process` mode. + +All physical layers are configured to use the `precomputed` propagation +model and `emaneeventservice` publishes ~{{link +name="`PathlossEvents`" file="events.md" section="#pathlossevent"}}~ +using the values in `pathloss.eel`. + +~{{file path="../examples/bentpipe-01/pathloss.eel" +type=txt +showname=true +blank=true +path-cut="../examples" +path-replace="emane-guide/examples"}}~ + +This experiment illustrates the versatility of the Bent Pipe model in +`process` mode, allowing its use in a similar fashion as you would the + ~{{link name="RF Pipe" file="rf-pipe-radio-model.md" +section="#rf-pipe-radio-model"}}~ radio model. + +~{{imagemagick + file="images/run-bentpipe-01.png" + scale=75 +images/pointing-finger.png -resize 25% \( -size 800x -font DejaVu-Sans-Mono-Bold +-gravity east label:" Run emane-guide/examples/bentpipe-01 and give it a try. " \) ++append -transparent white}}~ + +With `emane-guide/examples/bentpipe-01` running, we can query `node-1` to +take a look at its transponder configuration. + +~{{verbatim type=txt -- +$ emanesh node-1 get table nems mac TransponderStatusTable TransponderStatusExTable AntennaStatusTable +nem 1 mac AntennaStatusTable +| Index | Profile | Bandwidth | Rx Frequency | Fixed Gain | Azimuth | Elevation | Mask | +| 0 | NA | 150000000 | 29910000000 | 0.5 | NA | NA | 0 | + +nem 1 mac TransponderStatusExTable +| Idx | Tx U_Delay | Tx Slots/Frame | Tx Slot Size | MTU | +| 0 | 0 | 0 | 0 | 2048 | + +nem 1 mac TransponderStatusTable +|Idx|Rx Hz |Rx Bw |Rx Ant|Rx Enable|Action |Tx Hz |Tx Bw |Tx Bps |Tx Ant|Tx dBm|Tx Enable| +|0 |29910000000|150000000|0 |on |process|29910000000|150000000|200000000|0 |0.0 |on |}}~ + +From these tables we see that `node-1` has an ideal omni antenna with +a fixed gain of 0.5 dBi using the default spectral mask; a single +transponder tuned to transmit and receive at 29.910 GHz with both a +transmit and receive bandwidth of 150 MHz; receives and transmits +using the same antenna; uses no-protocol channel access, and is +configured in `process` mode. Querying `node-2` will show similar +configuration. + +We can verify connectivity between the attached `lan0` hosts using `ping`: + +~{{verbatim type=txt -- +$ ssh host-1 ping -R -c 5 host-2-lan +PING host-2-lan (10.98.2.2) 56(124) bytes of data. +64 bytes from host-2-lan (10.98.2.2): icmp_seq=1 ttl=62 time=1.23 ms +RR: host-1-lan (10.98.1.2) + radio-1 (10.100.0.1) + radio-2-lan (10.98.2.1) + host-2-lan (10.98.2.2) + host-2-lan (10.98.2.2) + radio-2 (10.100.0.2) + radio-1-lan (10.98.1.1) + host-1-lan (10.98.1.2) + +64 bytes from host-2-lan (10.98.2.2): icmp_seq=2 ttl=62 time=2.23 ms (same route) +64 bytes from host-2-lan (10.98.2.2): icmp_seq=3 ttl=62 time=2.33 ms (same route) +64 bytes from host-2-lan (10.98.2.2): icmp_seq=4 ttl=62 time=2.15 ms (same route) +64 bytes from host-2-lan (10.98.2.2): icmp_seq=5 ttl=62 time=2.18 ms (same route) + +--- host-2-lan ping statistics --- +5 packets transmitted, 5 received, 0% packet loss, time 4006ms +rtt min/avg/max/mdev = 1.231/2.023/2.325/0.400 ms}}~ + + +### bentpipe-02 + +~{{graphviz + file="images/topology-bentpipe-02" scale=65 caption="bentpipe-02 experiment components" -- + digraph hierarchy { +rankdir="TB"; +node[shape=circle,style=filled] +"node-2" [fillcolor=green, xlabel="satellite"] +"OTA" [image="images/cloud.png",shape=none,fillcolor=none] +"node-1" [fillcolor=green, xlabel="ground"] +"node-3" [fillcolor=green, xlabel="ground"] +"host-1" [fillcolor=gray,shape=square] +"host-3" [fillcolor=gray,shape=square] +"host-1"->"node-1" [dir="both",label="[.2] 10.98.1.0/24 [.1]"] +"node-1"->OTA [dir="both",label="10.100.0.1/24"] +OTA->"node-3" [dir="both",label="10.100.0.3/24"] +"node-3"->"host-3" [dir="both",label="[.2] 10.98.3.0/24 [.1]"] +OTA->"node-2" [dir="both"] + +{rank = min; "node-2";} +{rank = same; "node-1"; "node-3"; OTA; "host-1"; "host-3";} +} +}}~ + +The `bentpipe-02` example experiment contains two ground nodes, each +with a host hanging off their respective `lan0` interface, and one +satellite node. + +The ground nodes have a single transponder, with `node-1` using TDMA +channel access and `node-3` using no-protocol channel access. The +satellite node has three transponders and three antennas. *Transponder +0* uses a profile defined omni antenna, and *transponder 1* and +*transponder 2* both make use of the other two directional antennas, +where one antenna points at `node-1` and the other at `node-3`. All +satellite transponders use no-protocol channel access. + +All physical layers are configured to use the `freespace` propagation +model and `emaneeventservice` publishes ~{{link +name="`LocationEvents`" file="events.md" section="#locationevent"}}~ +using the locations in `locations.eel`. + +~{{file path="../examples/bentpipe-02/locations.eel" +type=txt +showname=true +blank=true +path-cut="../examples" +path-replace="emane-guide/examples"}}~ + +~{{imagemagick + file="images/run-bentpipe-02.png" + scale=75 +images/pointing-finger.png -resize 25% \( -size 800x -font DejaVu-Sans-Mono-Bold +-gravity east label:" Run emane-guide/examples/bentpipe-02 and give it a try. " \) ++append -transparent white}}~ + +With `emane-guide/examples/bentpipe-02` running, we can query `node-2` to +take a look at its transponder configuration. + +~{{verbatim type=txt -- +$ emanesh node-2 get table nems mac TransponderStatusTable TransponderStatusExTable AntennaStatusTable +nem 2 mac AntennaStatusTable +| Index | Profile | Bandwidth | Rx Frequency | Fixed Gain | Azimuth | Elevation | Mask | +| 0 | 2 | 150000000 | 29910000000 | NA | 0.0 | 0.0 | 0 | +| 1 | 1 | 150000000 | 29745000000 | NA | 94.34439424144891 | -86.98230090133954 | 0 | +| 2 | 1 | 150000000 | 29580000000 | NA | 237.5217814216051 | -87.42647720511944 | 0 | + +nem 2 mac TransponderStatusExTable +| Idx | Tx U_Delay | Tx Slots/Frame | Tx Slot Size | MTU | +| 0 | 0 | 0 | 0 | 2048 | +| 1 | 0 | 0 | 0 | 2048 | +| 2 | 0 | 0 | 0 | 2048 | + +nem 2 mac TransponderStatusTable +|Idx|Rx Hz |Rx Bw |Rx Ant|Rx Enable|Action|Tx Hz |Tx Bw |Tx Bps |Tx Ant|Tx dBm|Tx Enable| +|0 |29910000000|150000000|0 |on |ubend |20175000000|150000000|100000000|0 |54.0 |on | +|1 |29745000000|150000000|1 |on |ubend |20340000000|150000000|100000000|2 |54.0 |on | +|2 |29580000000|150000000|2 |on |ubend |20505000000|150000000|100000000|1 |54.0 |on |}}~ + +From these three tables we see that `node-2` has three antennas, all +of which are profile defined and use the default spectral mask; three +transponders in `ubend` mode, where *transponder 0* uses *antenna 0* +for receive and transmit, *transponder 1* receives on *antenna 1* and +transmits on *antenna 2*, and *transponder 2* receives on *antenna 2* +and transmits on *antenna 1*; and all transponders use no-protocol +channel access. + +The satellite node, `node-2`, does not have an attached host. Any +over-the-air message it receives on a transponder will be relayed +(*bent*) back over-the-air using the transponder's associated transmit +antenna. + +Using `ping` to verify connectivity the same way we did in the +`bentpipe-01` example shows a less than complete topology picture due +to the fact that the relay occurs in the radio model not `node-2`'s +kernel space, so route records for `node-2` are not added to the ICMP +messages. + +~{{verbatim type=txt -- +$ ssh host-1 ping -R -c 5 host-3-lan +PING host-3-lan (10.98.3.2) 56(124) bytes of data. +64 bytes from host-3-lan (10.98.3.2): icmp_seq=1 ttl=62 time=967 ms +RR: host-1-lan (10.98.1.2) + radio-1 (10.100.0.1) + radio-3-lan (10.98.3.1) + host-3-lan (10.98.3.2) + host-3-lan (10.98.3.2) + radio-3 (10.100.0.3) + radio-1-lan (10.98.1.1) + host-1-lan (10.98.1.2) + +64 bytes from host-3-lan (10.98.3.2): icmp_seq=2 ttl=62 time=484 ms (same route) +64 bytes from host-3-lan (10.98.3.2): icmp_seq=3 ttl=62 time=482 ms (same route) +64 bytes from host-3-lan (10.98.3.2): icmp_seq=4 ttl=62 time=484 ms (same route) +64 bytes from host-3-lan (10.98.3.2): icmp_seq=5 ttl=62 time=483 ms (same route) + +--- host-3-lan ping statistics --- +5 packets transmitted, 5 received, 0% packet loss, time 4002ms +rtt min/avg/max/mdev = 482.364/580.068/966.982/193.458 ms}}~ + +We can verify the topology using the `NeighborStatusTable` for all 3 nodes. + +~{{verbatim type=txt -- +$ for i in $(seq 1 3); do emanesh node-$i get table nems mac NeighborStatusTable; done +nem 1 mac NeighborStatusTable +|NEM|Transponder|SINR_wma |NF_wma |Samples|SINR_avg |NF_avg |Timestamp | +|2 |0 |11.29777283855799|-118.63908740944319|7 |11.29777283855799|-118.63908740944318|1686943938679630| + +nem 2 mac NeighborStatusTable +|NEM|Transponder|SINR_wma |NF_wma |Samples|SINR_avg |NF_avg |Timestamp | +|1 |1 |8.066688845808386|-118.63908740944319|7 |8.066688845808386|-118.63908740944318|1686943938801503| +|3 |2 |8.137849777137916|-118.63908740944319|7 |8.137849777137916|-118.63908740944318|1686943938558921| + +nem 3 mac NeighborStatusTable +|NEM|Transponder|SINR_wma |NF_wma |Samples|SINR_avg |NF_avg |Timestamp | +|2 |0 |11.390794198620853|-118.63908740944319|7 |11.390794198620853|-118.63908740944318|1686943938921888|}}~ + +Taking a look at `node-2`, we see that it sees `node-1` on +*transponder 1* and `node-3` on *transponder 2*. Both `node-1` and +`node-2` see `node-3` on their respective *transponder 0*. + +We can use `emanesh` and change the frequencies of all three nodes in +order to switch the `ubend` on node-2 to *transponder 0*, which uses +the profile defined omni antenna, *antenna 0*. + +~{{verbatim type=txt -- +$ emanesh node-1 set config nems mac \ + transponder.receive.frequency=0:29.910G \ + transponder.transmit.frequency=0:29.910G +nem 1 mac configuration updated + +$ emanesh node-2 set config nems mac \ + transponder.receive.frequency="0:29.910G,1:29.745G,2:29.580G" \ + transponder.transmit.frequency="0:29.910G,1:20.340G,2:20.505G" +nem 2 mac configuration updated + +$ emanesh node-3 set config nems mac \ + transponder.receive.frequency=0:29.910G \ + transponder.transmit.frequency=0:29.910G +nem 3 mac configuration updated}}~ + +Notice how even though we only want to change the frequency of +`node-2`'s *transponder 0*, we still have to specify values for all +three transponders since `transponder.receive.frequency` and +`transponder.transmit.frequency` are configuration parameters that +hold multiple values. + +Similarly, if we want to change the antenna associated with `node-2`'s +*transponder 0* to an ideal omni, we need to specify the other antenna +defines still in use: + +~{{verbatim type=txt -- +$ emanesh node-2 set config nems mac + antenna.defines="0:omni;24.25;0,1:1;94.34439424144891;-86.98230090133954;0,2:1;237.5217814216051;-87.42647720511944;0"}}~ + +Looking at `node-2`'s `AntennaStatusTable` and `NeighborStatusTable`, +we can see that *antenna 0* is now an ideal omni indicated by the `NA` +in the `Profile` column, and `node-2` sees `node-1` and `node-3` via +*transponder 0*. + +~{{verbatim type=txt -- +$ emanesh node-2 get table nems mac NeighborStatusTable AntennaStatusTable +nem 2 mac AntennaStatusTable +| Index | Profile | Bandwidth | Rx Frequency | Fixed Gain | Azimuth | Elevation | Mask | +| 0 | NA | 150000000 | 29910000000 | 24.25 | NA | NA | 0 | +| 1 | 1 | 150000000 | 29745000000 | NA | 94.34439424144891 | -86.98230090133954 | 0 | +| 2 | 1 | 150000000 | 29580000000 | NA | 237.5217814216051 | -87.42647720511944 | 0 | + +nem 2 mac NeighborStatusTable +|NEM| Transponder| SINR_wma | NF_wma | Samples| SINR_avg | NF_avg | Timestamp | +|1 | 0 | 8.018640050401672| -118.63908740944318| 908 | 8.018640050401698| -118.63908740944602| 1687204399299503| +|1 | 1 | 8.066688845808386| -118.63908740944318| 38 | 8.06668884580838 | -118.63908740944319| 1687203545323503| +|3 | 0 | 8.041484909729036| -118.63908740944318| 909 | 8.041484909728947| -118.63908740944602| 1687204400057385| +|3 | 2 | 8.137849777137916| -118.63908740944318| 38 | 8.137849777137921| -118.63908740944319| 1687203545081237|}}~ + +The `NeighborStatusTable` does not delete entries. Use the `Timestamp` +column value to determine an entry has gone stale, i.e. not updated in +some time. diff --git a/guide/comm-effect-utility-model.txt b/guide/comm-effect-utility-model.txt new file mode 100644 index 0000000..201d86b --- /dev/null +++ b/guide/comm-effect-utility-model.txt @@ -0,0 +1,437 @@ +~{{frontmatter +layout: default +title: Comm Effect Utility Model +nav_order: 14 +permalink: /comm-effect-utility-model}}~ + +~{{layout type=newpage}}~ +# Comm Effect Utility Model + +The Comm Effect Utility Model allows emane to function and an IPv4 +network impairment tool. + +## Features + +The Comm Effect utility model provides the following features: +[Network Impairments](#network-impairments) and [Static +Filters](#static-filters). + +### Network Impairments + +The Comm Effect Utility Model supports the following network +impairments controlled via ~{{link name="`CommEffectEvents`" +file="comm-effect-utility-model.md" section="#commeffectevent"}}~ or +[static filter](#static-filters): + +1. Loss: The percentage of packets that will be dropped utilizing a + uniform distribution model. + +2. Latency: The average delay for a packet to traverse the + network. The total delay is composed of a fixed and variable + component. The fixed amount of the delay is defined via a latency + parameter and the variable amount via a jitter parameter. Both + parameters are defined via ~{{link name="`CommEffectEvent`" + file="comm-effect-utility-model.md" section="#commeffectevent"}}~ + or [static filter](#static-filters). The jitter component to + latency is determined randomly by applying a value pulled from a + uniform random distribution of +/- the jitter parameter value. The + randomly generated jitter value is then added to the fixed latency + to determine the total delay. + +3. Duplicates: The percentage of packets that will be duplicated at + the receiver. + +4. Unicast Bitrate: The bitrate for packets destined for the *NEM* or + handled in promiscuous mode. + +5. Broadcast Bitrate: The bitrate for packets destined for the *NEM* + broadcast address. + +## Static Filters + +The Comm Effect Utility Model supports the ability to define static +filters to control network impairments. Filters are defined via an XML +configuration file and have the following characteristics: + +1. The filter file used by a given *NEM* within the emulation is + identified at initialization time via the *NEM*'s `filterfile` + configuration parameter. Each filter defined in the `filterfile` is + characterized by one or more target elements and a single effect + element. + +2. Currently only IPv4 Ethernet packet filter targets are + supported. The target element has the following format within the + filter XML file: + + ~{{verbatim type=xml -- + + + + + + }}~ + +3. All of the `` attributes are optional: + + 1. `src`: Source address in IPv4 header. Valid range 0.0.0.0 - + 255.255.255.255, where 0.0.0.0 implies don't care. + + 2. `dst`: Destination address in IPv4 header. Valid range 0.0.0.0 - + 255.255.255.255, where 0.0.0.0 implies don't care. + + 3. `len`: Total length in IPv4 header. Valid range 0 - 65535, where + 0 implies don't care. + + 4. `ttl`: Time to live in IPv4 header. Valid range 0 - 255, where 0 + implies don't care. + + 5. `tos`: Type of Service/Differentiated Services in IPv4 + header. Valid range 0-255, where 0 implies don't care. + + In addition, a filter can be defined via the IPv4 protocol field in + the header. The communication protocol can be defined by name or + numerical value. Currently, udp is the only protocol that can be + defined by name. All other protocols must be identified via + numerical value. + + 1. ``: Used to identify UDP protocol by name. When using this + mechanism to define the udp protocol, sport and/or dport can + also be identified for the udp protocol header. The valid range + for sport and dport are 0 to 65535, where 0 implies don't care. + + ~{{verbatim type=xml -- + + + + + }}~ + + 2. ``: Used when identifying the communication protocol + based on numerical value. The type attribute identifies the + numerical value for the IPv4 communication protocol with a + valid range from 0 to 255. + + ~{{verbatim type=xml -- + + + + + }}~ + +4. Each filter is assigned static network impairments (loss, latency, + jitter, duplicates, unicastbitrate and broadcastbitrate). + + ~{{verbatim type=xml -- + + 20 + 0 + + + 1024 + 8096 + }}~ + + The effect element has the following format: + + 1. ``: The loss 0 to 100 in percentage to be applied to the + packets that match the associated target. + + 2. ``: The duplicates 0 to 100 in percentage to be applied + to the packets that match the associated target. + + 3. ``: The fixed average delay to be applied to the packets + that match the associated target. + + *sec*: Seconds have a valid range 0 to 65535. + *usec*: Microseconds have a valid range 0 to 999999. + + 4. ``: The random variation applied to the packets that match + the associated target. + + *sec*: Seconds have a valid range 0 to 65535. + *usec*: Microseconds have a valid range 0 to 999999. + + 5. ``: The bitrate (bps) applied to packets + addressed to the *NEM* or received in promiscuous mode matching + the associated target. The bitrate has a valid range from 0, + meaning unused, to max unsigned 64 bit number. + + 6. ``: The bitrate (bps) applied to packets + addressed to the *NEM* broadcast address matching the associated + target. The bitrate has a valid range from 0, meaning unused, to + max unsigned 64 bit number. + + The filters and their associated impairments are defined at + initialization and cannot be altered during emulation. + +6. Filter ordering determines the network impairment, and as such, + more specific filters should be defined first. Each received packet + is evaluated against the defined filters in order and the first + match determines the impairment to be applied. In the below + example, a packet as it is received by a node will be evaluated + against each of the four filters (OSPF, TOS, UDP, DEFAULT) in order + and the respective effect will be applied based on the first + match. + + It should be noted that the inclusion of the DEFAULT filter should + only be used when ~{{link name="`CommEffectEvents`" + file="comm-effect-utility-model.md" section="#commeffectevent"}}~ + are not being utilized since the filters take precedence. When + filters are used in conjunction with ~{{link + name="`CommEffectEvents`" file="comm-effect-utility-model.md" + section="#commeffectevent"}}~, the event driven impairments serve + as the default effect for all packets that do not match a filter + target. + + ~{{verbatim type=xml -- + + + + OSPF Packets + + + + + + + 0 + 0 + + + + + + TOS (Type of Service) = 192 + + + + + + 10 + 150 + + + + + + UDP Multicast (destination address = 224.1.2.3 and destination port = 12345) + + + + + + + 20 + 0 + + + + + + DEFAULT: All Other Packets + + + 40 + 30 + + + 8096 + 8096 + + + }}~ + +## `CommEffectEvent` + +~{{file path="$emane_SRC_ROOT/src/libemane/commeffectevent.proto" +type=protobuf +showname=true +blank=false +skip=33 +path-cut="$emane_SRC_ROOT" +path-replace="emane"}}~ + +## NEM XML Structure + +The Comm Effect utility model is not a radio model and does not use a +physical layer. It is a special class of plugin called a +*shim*. *Shims* follow all the same paradigms found in ~{{link +name="EMANE Paradigms" file="paradigms.md" +section="#emane-Paradigms"}}~, and it is possible to build an *NEM* +that contains one or more shims. In practice, this is usually never +necessary. + +The *NEM* XML definition for a Comm Effect utility model instance only +contains a `` and `` element. In order to be +accepted by the emulator as valid, the `` `type` attribute must +be set to `unstructured` in order to relax checks that aim to prevent +incorrect *NEM* configuration. + +~{{file path="../examples/commeffect-01/node-1/emane-commeffect-nem.xml" +type=xml +skip=1 +showname=true +blank=true +path-cut="../examples" +path-replace="emane-guide/examples"}}~ + +## Configuration + +~{{emaneinfo plugin=commeffectshim type=config}}~ + +## Statistics + +~{{emaneinfo plugin=commeffectshim type=stat}}~ + +## Statistic Tables + +~{{emaneinfo plugin=commeffectshim type=table}}~ + +## Examples + +This guide includes the IEEE 802.11abg example: + +1. `commeffect-01`: A five host example where each host is configured +on a flat 10.98.0.0/16 network and connected via `lan0` to an *NEM* +using a ~{{link name="Raw Transport" file="raw-transport.md" +section="#raw-transport"}}~. + +### commeffect-01 + + +~{{graphviz + file="images/topology-commeffect-01" scale=65 caption="commeffect-01 experiment components" -- + digraph hierarchy { +rankdir="TB"; +node[shape=circle,style=filled] +"host-2" [fillcolor=gray,shape=square] +"node-2" [fillcolor=green] +"Network" [image="images/cloud.png",shape=none,fillcolor=none] +"node-1" [fillcolor=green] +"node-3" [fillcolor=green] +"host-1" [fillcolor=gray,shape=square] +"host-3" [fillcolor=gray,shape=square] +"host-1"->"node-1" [dir="both",label="10.98.1.2/16"] +"node-1"->Network [dir="both"] +Network->"node-3" [dir="both"] +"node-3"->"host-3" [dir="both",label="10.98.3.2/16"] +Network->"node-2" [dir="both"] +"node-2"->"host-2" [dir="both",label="10.98.2.2/16"] +"host-4" [fillcolor=gray,shape=square] +"node-4" [fillcolor=green] +"node-5" [fillcolor=green] +"host-5" [fillcolor=gray,shape=square] + +Network->"node-4" [dir="both"] +Network->"node-5" [dir="both"] + +"node-4"->"host-4" [dir="both", label="10.98.4.2/16"] +"node-5"->"host-5" [dir="both", label="10.98.5.2/16"] + +{rank = min; "node-2";"host-2";} +{rank = same; "node-1"; "node-3"; Network; "host-1"; "host-3";} +} +}}~ + + +The `commeffect-01` example experiment contains five hosts configured +on a flat 10.98.0.0/16 network and connected via `lan0` to an *NEM* +using a ~{{link name="Raw Transport" file="raw-transport.md" +section="#raw-transport"}}~. This configuration illustrates how you +can connect physical or virtual network appliances to *EMANE*, in a +manner in which the appliance is unaware of the emulator's presence, +whether using a physical interface, tunnel, vif, etc. Here, the +network appliances are LXCs but they can just as easily be physical +devices connected to an *EMANE* server. + +Each host has a `lan0` interface that is monitored by a host +corresponding *NEM*. All outbound host `lan0` traffic is routed into +the emulation and if successfully received by the *NEM* associated +with the destination(s), will be written the destination(s)'s +corresponding `lan0`. + +All Comm Effect utility model instance are initialized with network +impairments via the `emaneeventservice` which publishes ~{{link +name="`CommEffectEvents`" file="comm-effect-utility-model.md" +section="#commeffectevent"}}~ using values in `scenario.eel`. + +~{{file path="../examples/commeffect-01/host/scenario.eel" +type=txt +showname=true +blank=true +path-cut="../examples" +path-replace="emane-guide/examples"}}~ + +~{{imagemagick + file="images/run-commeffect-01.png" + scale=75 +images/pointing-finger.png -resize 25% \( -size 800x -font DejaVu-Sans-Mono-Bold +-gravity east label:" Run emane-guide/examples/commeffect-01 and give it a try. " \) ++append -transparent white}}~ + +All hosts are configured similarly, taking a look at `host-1` +interfaces we can see the `lan0` interface is configured as +10.98.1.2/16. + +~{{verbatim type=txt -- +$ ssh host-1 ip addr show dev lan0 +3: lan0@if102: mtu 1500 qdisc noqueue state UP group default qlen 1000 + link/ether 7e:9a:ba:30:f0:90 brd ff:ff:ff:ff:ff:ff link-netnsid 0 + inet 10.98.1.2/16 brd 10.98.255.255 scope global lan0 + valid_lft forever preferred_lft forever + inet6 fe80::7c9a:baff:fe30:f090/64 scope link + valid_lft forever preferred_lft forever}}~ + +Looking at `host-1` routes shows a flat network which is different +than the host configuration in previous experiments which used a +tiered topology with radio nodes acting as gateways for hosts. + +~{{verbatim type=txt -- +$ ssh host-1 ip route show +10.98.0.0/16 dev lan0 proto kernel scope link src 10.98.1.2 +10.99.0.0/16 dev backchan0 proto kernel scope link src 10.99.1.1}}~ + +Pinging from `host-1` to all other hosts over the `lan0` interface +shows 100% completion and minimal latency. + +~{{verbatim type=txt -- +$ ssh host-1 fping host-2-lan host-3-lan host-4-lan host-5-lan -C 2 +host-2-lan : [0], 64 bytes, 2.42 ms (2.42 avg, 0% loss) +host-3-lan : [0], 64 bytes, 2.70 ms (2.70 avg, 0% loss) +host-4-lan : [0], 64 bytes, 2.61 ms (2.61 avg, 0% loss) +host-5-lan : [0], 64 bytes, 2.70 ms (2.70 avg, 0% loss) +host-2-lan : [1], 64 bytes, 3.37 ms (2.90 avg, 0% loss) +host-3-lan : [1], 64 bytes, 3.35 ms (3.03 avg, 0% loss) +host-4-lan : [1], 64 bytes, 3.28 ms (2.95 avg, 0% loss) +host-5-lan : [1], 64 bytes, 3.11 ms (2.90 avg, 0% loss) + +host-2-lan : 2.42 3.37 +host-3-lan : 2.70 3.35 +host-4-lan : 2.61 3.28 +host-5-lan : 2.70 3.11}}~ + +Using the `emaneevent-commeffect` utility, we can set the latency of +all links to 100ms. + +~{{verbatim type=txt -- +$ emaneevent-commeffect 1:5 latency=.1 -i letce0}}~ + +Reissuing the same `ping` command verifies 100ms of latency in each +directions. + +~{{verbatim type=txt -- +$ ssh host-1 fping host-2-lan host-3-lan host-4-lan host-5-lan -C 2 +host-2-lan : [0], 64 bytes, 201 ms (201 avg, 0% loss) +host-3-lan : [0], 64 bytes, 201 ms (201 avg, 0% loss) +host-4-lan : [0], 64 bytes, 201 ms (201 avg, 0% loss) +host-5-lan : [0], 64 bytes, 201 ms (201 avg, 0% loss) +host-2-lan : [1], 64 bytes, 202 ms (202 avg, 0% loss) +host-3-lan : [1], 64 bytes, 202 ms (201 avg, 0% loss) +host-4-lan : [1], 64 bytes, 201 ms (201 avg, 0% loss) +host-5-lan : [1], 64 bytes, 201 ms (201 avg, 0% loss) + +host-2-lan : 201 202 +host-3-lan : 201 202 +host-4-lan : 201 201 +host-5-lan : 201 201}}~ + diff --git a/guide/control-messages.txt b/guide/control-messages.txt new file mode 100644 index 0000000..ebb0ccc --- /dev/null +++ b/guide/control-messages.txt @@ -0,0 +1,270 @@ +~{{frontmatter +layout: default +title: Control Messages +nav_order: 7 +permalink: /control-messages}}~ + +~{{layout type=newpage}}~ +# Control Messages + +~{{imagemagick + file="images/incomplete-chapter.png" + scale=75 + images/exclamation.png -resize 20% \( -size 800x -font DejaVu-Sans-Mono-Bold + -gravity east label:" This chapter is incomplete " \) + +append -transparent white}}~ + +## `AntennaProfileControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/antennaprofilecontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + + +## `FlowControlControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/flowcontrolcontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + +## `FrequencyControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/frequencycontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + +## `FrequencyOfInterestControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/frequencyofinterestcontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + + +## `MIMOReceivePropertiesControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/mimoreceivepropertiescontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + +## `MIMOTransmitPropertiesControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/mimotransmitpropertiescontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + +## `MIMOTxWhileRxInterferenceControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/mimotxwhilerxinterferencecontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + + +## `OTATransmitterControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/otatransmittercontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + +## `R2RINeighborMetricControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/r2rineighbormetriccontrolmessage.h" +type=cpp caption="." +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + +## `R2RIQueueMetricControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/r2riqueuemetriccontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + +## `R2RISelfMetricControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/r2riselfmetriccontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + +## `ReceivePropertiesControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/receivepropertiescontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + +## `RxAntennaAddControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/rxantennaaddcontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + +## `RxAntennaRemoveControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/rxantennaremovecontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + +## `RxAntennaUpdateControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/rxantennaupdatecontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + +## `SpectrumFilterAddControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/spectrumfilteraddcontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + +## `SpectrumFilterDataControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/spectrumfilterdatacontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + +## `SpectrumFilterRemoveControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/spectrumfilterremovecontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + +## `TimestampControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/timestampcontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + +## `TransmitterControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/transmittercontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + + +## `TxWhileRxInterferenceControlMessage` + +~{{file path="$emane_SRC_ROOT/include/emane/controls/txwhilerxinterferencecontrolmessage.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-private=false +cpp-show-comment=false}}~ + diff --git a/guide/doc-header-pdf.md b/guide/doc-header-pdf.md new file mode 100644 index 0000000..3395763 --- /dev/null +++ b/guide/doc-header-pdf.md @@ -0,0 +1,78 @@ +--- +title: | + | The EMANE GUIDE +geometry: margin=1in +documentclass: book +classoption: + - openany +header-includes: + - \usepackage{titling} + - \pretitle{\begin{center} + \includegraphics[width=3in,height=3in]{images/adjacentlink.png}\\ + \url{https://adjacentlink.com} + \vspace{1.5cm}\LARGE\\} + - \posttitle{\end{center} + \vspace{5cm}\scriptsize + \noindent\makebox[\textwidth][c]{ + \fbox{ + \begin{minipage}{6in} + Copyright \textcopyright\ 2014-2023 - Adjacent Link LLC, Bridgewater, New Jersey\\ + \smallskip\\ + Except where otherwise noted, this work (the \textit{EMANE Guide}) is licensed under + \href{https://creativecommons.org/licenses/by/4.0/}{Creative Commons Attribution 4.0 International License}.\\ + \url{https://creativecommons.org/licenses/by/4.0/}\\ + \smallskip\\ + \textbf{All source code accompanying the \textit{EMANE Guide} is released under the + following BSD 3-clause license}:\\ + \smallskip\\ + \noindent\makebox[\textwidth][c]{ + \begin{minipage}{5.25in} + Copyright \textcopyright~2014-2023 - Adjacent Link LLC, Bridgewater, New Jersey\\ + All rights reserved.\\ + \smallskip\\ + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met:\\ + \begin{itemize} + \item[*] Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + \item[*] 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. + \item[*] Neither the name of Adjacent Link LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + \end{itemize} + \smallskip + 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.\\ + \end{minipage}} + \smallskip\\ + \textbf{Portions of the \textit{EMANE Guide} derive from \textit{EMANE User Manual 0.8.1} + which has the following license}:\\ + \smallskip\\ + \noindent\makebox[\textwidth][c]{ + \begin{minipage}{5.25in} + Copyright \textcopyright\ 2013 - Adjacent Link LLC, Bridgewater, New Jersey\\ + Copyright \textcopyright\ 2012 - DRS CenGen, LLC, Bridgewater, New Jersey\\ + This work is licensed under the \href{http://creativecommons.org/licenses/by/3.0/}{Creative Commons Attribution 3.0 Unported License}.\\ + \url{http://creativecommons.org/licenses/by/3.0/} + \end{minipage}} + \end{minipage}}}} + - \usepackage{fancyhdr} + - \pagestyle{fancy} + - \usepackage[firstpage]{draftwatermark} +--- +\setcounter{tocdepth}{2} +\tableofcontents diff --git a/guide/eel-event-generator.txt b/guide/eel-event-generator.txt new file mode 100644 index 0000000..f05e329 --- /dev/null +++ b/guide/eel-event-generator.txt @@ -0,0 +1,183 @@ +~{{frontmatter +layout: default +title: EEL Event Generator +nav_order: 17 +permalink: /eel-event-generator}}~ + +~{{layout type=newpage}}~ +# EEL Event Generator + +~{{imagemagick + file="images/incomplete-chapter.png" + scale=75 + images/exclamation.png -resize 20% \( -size 800x -font DejaVu-Sans-Mono-Bold + -gravity east label:" This chapter is incomplete " \) + +append -transparent white}}~ + +## Features + +The Emulation Event Log (EEL) Generator creates EMANE events from +input files in EEL Format. EEL format was developed by the [Protean +Research Group at Naval Research +Laboratory](http://www.nrl.navy.mil/itd/ncs). + +> This (EEL) file format is a linear, text file format that can be + used to convey the value of properties or parameters identified by a + keyword. This file allows for ”events” affecting modeling system + components and/or their properties that occur over time to be + expressed (e.g. as a file format to ”drive” event generation over + time) or to be logged (e.g. as a log file format for ”capturing” + run-time events for replay or post-processing analysis). The EEL + file is a text format consisting of lines (a.k.a. ”sentences”) that + each contain a timestamp, some ”module identifier” and an event type + ”keyword” that implies the format and interpretation of the + remainder of the line.The ”keyword” approach allows a mixture of + event types to be included within an EEL file and expanded over time + as needed. Tools that process EEL file may choose to process a + subset of event types as needed. The format also lends itself to + simple filtering by event type, module identifier, etc using + commonly-available tools (e.g., ”grep”, etc). + +>The linear, time-ordered format also allows it to be incrementally + processed such that even very bulky files can be handled as + needed. Note that, in the interest of compactness, it is typically + expected that the events included will represent ”deltas” + (i.e. changes) to any previously established state. However, one + could choose to have each time epoch (or at some less granular + interval such as once per minute) include the complete modeling + system state (e.g. all current node locations, adjacencies, + etc). This would result in a more bulky EEL file but could enable + processing tools to ”skip” to desired sections of the file without + need to process the entire file from its beginning. This + specification does not dictate or preclude such either usage. + +> Thus, the skeleton format of lines within the EEL format is: + +> \ \ \ \ + +\[[Emulation Schema Description](http://downloads.pf.itd.nrl.navy.mil/docs/mnmtools/EmulationScriptSchemaDescription.pdf), Protean Research Group\] + + +The EEL Event Generator loads EEL sentence parsing plugins to parse +and build EMANE events. Plugins are associated with event type +keywords and are capable of producing either *full* or *delta* event +updates. A *delta* event update contains EMANE events corresponding to +EEL entries loaded since the last request for events made to the +plugin. A *full* event update contains all the EMANE events necessary +to convey the complete current state for all *moduleID* information +loaded by the respective plugin. + +Any EEL entries encountered that are not handled by a loaded parser are ignored. + +## Sentence Parser Plugins + +There are four EEL sentence parsing plugins: + +1. Pathloss Parser - Parses pathloss sentences and builds the resulting event. + + *\ nem:\ pathloss nem:\,\\[,\\] \[nem:\,\\[,\\]\]...* + + Where, + *pathoss* is the pathloss in dB + *reversePathloss* is the reverse pathloss in dB + +2. Location Parser - Parses location sentences and builds the resulting event. + + *\ nem:\ location gps \,\,\\[,msl|agl\]* + + Where, + *latitude* is the latitude in degrees + *longitude* is the longitude in degrees + *altitude* is the altitude in meters + + *\ nem:\ orientation \,\,\* + + Where, + *pitch* is the pitch in degrees + *roll* is the roll in degrees + *yaw* is the yaw in degrees + + *\ nem:\ velocity \,\,\* + + Where, + *azimuth* is the azimuth in degrees + *elevation* is the elevation in degrees + *magnitude* is the mgnitude in meters/second + +3. Antenna Profile Parser - Parses antenna profile sentences and builds the resulting event. + + *\ nem:\ antennaprofile \,\,\* + + Where, + *profileId* is the antenna profile id + *azimuth* is the antenna azimuth in degrees + *elevation* is the antenna elevation degrees + +4. Comm Effect Parser - Parses comm effect sentences and builds the resulting event. + + *\ nem:\ commeffect nem:\,\ \[nem:\,\\]...* + + *CommEffectEntryList := \,\,\,\,\,\* + + Where, + *latencySeconds* is the latency seconds (float) + *jitterSeconds* is the jitter seconds (float) + *probabilityLoss* is the probability of loss (float) + *probabilityDuplication* is the probability of duplication (float) + *unicastBitRate* is the unicast bit rate in bits/second (uint64) + *multicastBitRate* is the multicast bit rate in bits/second (uint64) + +5. Fading Selection Parser - Parses fading selection sentences and builds the resulting event. + + *\ nem:\ fadingselection nem:\,'none'|'nakagami' [nem:\,'none'|'nakagami']...* + + +### Example Sentences + +~{{verbatim type=txt -- +0.0 nem:70 pathLoss nem:22,96.3 nem:23,95.0 nem:24,95.1 nem:25,95.2 nem:26,95.3 nem:27,95.4 nem:28,95.5 nem:29,95.0 nem:30,95.1 nem:31,95.2 nem:32,95 +0.0 nem:70 pathLoss nem:42,95.3 nem:43,95.4 nem:44,95.5 nem:45,95.0 nem:46,95.1 nem:47,95.2 nem:48,95.3 nem:49,95.4 nem:50,95.5 nem:51,95.5 nem:52,95.6 +0.0 nem:70 pathLoss nem:62,95.2 nem:63,95.3 nem:64,95.4 nem:65,94.2 nem:66,94.2 nem:67,96.3 nem:68,96.3 nem:69,123.3 +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:3 location gps 40.031227,-74.523247,3.000000 +0.0 nem:4 location gps 40.031290,-74.523095,3.000000 +0.0 nem:1 antennaprofile 1,0,90 +0.0 nem:2 antennaprofile 1,0,270 +0.0 nem:3 antennaprofile 1,0,90 +0.0 nem:4 antennaprofile 1,0,270 +0.0 nem:1 commeffect nem:2,1.050000,2.000300,10.000000,12.000000,45,54 nem:3,0.050000,0.025000,0.000000,0.000000,0,0 nem:4,0.000000,0.000000,50.000000,0.000000,0,0 +0.0 nem:2 commeffect nem:1,11.055000,22.000330,11.000000,13.000000,46,55 nem:3,0.000000,0.000000,0.000000,0.000000,10000,10000 nem:4,0.000000,0.000000,0.000000,0.000000,5000,5000 +0.0 nem:3 commeffect nem:1,0.050000,0.025000,0.000000,0.000000,0,0 nem:2,0.000000,0.000000,0.000000,0.000000,10000,10000 nem:4,0.000000,0.000000,0.000000,10.000000,0,0 +0.0 nem:4 commeffect nem:1,0.000000,0.000000,50.000000,0.000000,0,0 nem:2,0.000000,0.000000,0.000000,0.000000,5000,5000 nem:3,0.000000,0.000000,0.000000,10.000000,0,0 +0.0 nem:1 fadingselection nem:2,none nem:3,nakagami nem:4,none}}~ + +## Configuration + +~{{emaneinfo plugin=eelgenerator type=config}}~ + +## Example XML + +~{{verbatim type=xml -- + + + + + + + + + + + + + +}}~ + +## Statistics + +~{{emaneinfo plugin=eelgenerator type=stat}}~ + +## Statistic Tables + +~{{emaneinfo plugin=eelgenerator type=table}}~ diff --git a/guide/events.txt b/guide/events.txt new file mode 100644 index 0000000..9af85c7 --- /dev/null +++ b/guide/events.txt @@ -0,0 +1,77 @@ +~{{frontmatter +layout: default +title: Events +nav_order: 8 +permalink: /events}}~ + +~{{layout type=newpage}}~ +# Events + +~{{imagemagick + file="images/incomplete-chapter.png" + scale=75 + images/exclamation.png -resize 20% \( -size 800x -font DejaVu-Sans-Mono-Bold + -gravity east label:" This chapter is incomplete " \) + +append -transparent white}}~ + +A scenario is a set of *events* that are sent to one or more *NEMs* in +order to change environmental characteristics such as locations, +pathloss and antenna pointing. Events are delivered opaquely to +registered radio model and physical layer instances so individual +radio models may use their own specialized events. + +## `AntennaProfileEvent` + +An `AntennaProfileEvent` is used to set the antenna profile and +pointing information (azimuth and elevation) for an *NEM's* default +antenna (index 0). + +~{{file path="$emane_SRC_ROOT/src/libemane/antennaprofileevent.proto" +type=protobuf +showname=true +blank=false +skip=33 +path-cut="$emane_SRC_ROOT" +path-replace="emane"}}~ + +## `LocationEvent` + +A `LocationEvent` is used to set the location and optionally the +velocity and/or orientation of an *NEM*. + +~{{file path="$emane_SRC_ROOT/src/libemane/locationevent.proto" +type=protobuf +showname=true +blank=false +skip=33 +path-cut="$emane_SRC_ROOT" +path-replace="emane"}}~ + +## `PathlossEvent` + +A `PathlossEvent` is used to set the pathloss used at a receiving +*NEM* for over-the-air transmissions from one or more specified source +*NEMs*. + +~{{file path="$emane_SRC_ROOT/src/libemane/pathlossevent.proto" +type=protobuf +showname=true +blank=false +skip=33 +path-cut="$emane_SRC_ROOT" +path-replace="emane"}}~ + +## `FadingSelectionEvent` + +A `FadingSelectionEvent` is used to set the fading model in use at a +receiving *NEM* for over-the-air transmission from one or more +specified source *NEMs*. Required when the physical layer +`fading.model` configuration parameter is set to `event`. + +~{{file path="$emane_SRC_ROOT/src/libemane/fadingselectionevent.proto" +type=protobuf +showname=true +blank=false +skip=33 +path-cut="$emane_SRC_ROOT" +path-replace="emane"}}~ diff --git a/guide/getting-started.txt b/guide/getting-started.txt new file mode 100644 index 0000000..694e0d8 --- /dev/null +++ b/guide/getting-started.txt @@ -0,0 +1,318 @@ +~{{frontmatter +layout: default +title: Getting Started +nav_order: 2 +permalink: /getting-started}}~ + +~{{layout type=newpage}}~ +# Getting Started + +This guide includes a set of +[*letce2*](https://github.com/adjacentlink/letce2) (*Lightweight +Experiment Template Configuration Environment*) defined example +experiments that highlight various *emane* features of interest. + +*lecte2* provides a hierarchical mechanism for generating experiment + configuration using the [Mako](https://https//www.makotemplates.org) + template engine and supports a plugin architecture for defining test + environment execution controls. More details on *letce2* can be found + in the + [*letce2-tutorial*](https://github.com/adjacentlink/letce2-tutorial). + +For the purpose of this guide, a set of configuration file templates +(`example/templates`) are used to produce per node configuration +specific files based on experiment specific `experiment.cfg` +definition files. These templates provide the ability to run and +interact with example experiments. + +~{{file path="../examples/rfpipe-01/experiment.cfg" +type=txt +caption="RF Pipe example experiment.cfg snippet." +lines=25 +path-cut="../examples" +path-replace="emane-guide/examples" +showname=true}}~ + +Examples use the *letce2* LXC plugin to create one LXC container per +experiment node. A *makefile* is used to simplify issuing *letce2* +commands for generating experiment node configuration, with resulting +files partitioned into directories named by *experiment.cfg* section, +which are experiment node names. + + +~{{verbatim type=txt caption="Contents of node-1 configuration directory output after issuing make." -- +$ tree emane-guide/examples/rfpipe-01/node-1 +examples/rfpipe-01/node-1 +|-- batman-adv +|-- emane-platform.xml +|-- emane-rfpipe-nem.xml +|-- emane-rfpipe-pcr.xml +|-- emane-rfpipe-radiomodel.xml +|-- emane-transvirtual.xml +|-- functions +|-- init +|-- init.local +|-- lxc.conf +|-- lxc.hook.autodev.sh +|-- mgen +|-- otestpoint-probe-emane-physicallayer.xml +|-- otestpoint-probe-emane-rfpipe.xml +|-- otestpoint-probe-emane-virtualtransport.xml +|-- otestpoint-probe-mgen.xml +|-- otestpoint-recorder.xml +`-- otestpoint.xml}}~ + +To start an example, change directory to the example directory and +issue the *letce2* start command: + +~{{verbatim type=txt -- +$ pushd emane-guide/examples/rfpipe-01 +$ letce2 lxc start}}~ + +To stop an example, issue the *letce2* stop command from the same +example directory: + +~{{verbatim type=txt -- +$ letce2 lxc stop}}~ + +If running from built source, both the *letce2* start and stop +commands must contain an additional command line environment file +[option](#running-from-source-build) to add Adjacent Link FOSS +application, library, and Python package build paths to individual LXC +container environments. + +## Installation from Pre-built Packages + +Adjacent Link +[distributes](https://github.com/adjacentlink/emane/wiki/Install) +pre-built packages for all *emane* and experiment support software in +bundles versioned by corresponding *emane* version and a release +index. All bundles are signed using the Adjacent Link code signing +[key](https://adjacentlink.com/downloads/emane/RPM-GPG-KEY-adjacentlink). + +All software dependencies are available using standard +distribution repositories. + +At the time of this writing, the latest *emane* version is 1.4.1. + +### Fedora Linux + +To use `wget` to download the latest release bundle for Fedora Linux: + +~{{verbatim type=txt -- +$ wget https://adjacentlink.com/downloads/emane/emane-1.4.1-release-1.f37.x86_64.tar.gz +$ wget https://adjacentlink.com/downloads/emane/emane-1.4.1-release-1.f37.x86_64.tar.gz.asc +$ gpg2 --verify emane-1.4.1-release-1.f37.x86_64.tar.gz.asc}}~ + +To unpack and install bundle software: + +~{{verbatim type=txt -- +$ tar zxvf emane-1.4.1-release-1.f37.x86_64.tar.gz +$ sudo dnf install $(find emane-1.4.1-release-1 -name '*.rpm' -print | egrep -v '(devel|debug)')}}~ + +### Rocky Linux + +To use `wget` to download the latest release bundle for Rocky Linux +and verify the release signature with *gpg2*: + +~{{verbatim type=txt -- +$ wget https://adjacentlink.com/downloads/emane/emane-1.4.1-release-1.el8.x86_64.tar.gz +$ wget https://adjacentlink.com/downloads/emane/emane-1.4.1-release-1.el8.x86_64.tar.gz.asc +$ gpg2 --verify emane-1.4.1-release-1.el8.x86_64.tar.gz.asc}}~ + +To unpack and install bundle software: + +~{{verbatim type=txt -- +$ tar zxvf emane-1.4.1-release-1.el8.x86_64.tar.gz +$ dnf install epel-release +$ dnf config-manager --set-enabled powertools +$ sudo dnf install $(find emane-1.4.1-release-1 -name '*.rpm' -print | egrep -v '(devel|debug)')}}~ + +At the time of this writing, the lxc rpm distributed via Rocky 8 +repositories is missing a build dependency in the spec file which +causes the `configure` call invoked during rpm build to not build +`lxc.init.static`. Adjacent Link distributes a bundle with pre-built +lxc packages which include the necessary static components. + +To use `wget` to download the latest release bundle for Rocky Linux +lxc rpms with *static init* and verify the release signature with +`gpg2`: + +~{{verbatim type=txt -- +$ wget https://adjacentlink.com/downloads/emane/lxc-3.0.4-2.static_init-release-1.el8.tar.bz2 +$ wget https://adjacentlink.com/downloads/emane/lxc-3.0.4-2.static_init-release-1.el8.tar.bz2.asc +$ gpg2 --verify lxc-3.0.4-2.static_init-release-1.el8.tar.bz2.asc}}~ + +To unpack and install the bundle software: + +~{{verbatim type=txt -- +$ tar xf lxc-3.0.4-2.static_init-release-1.el8.tar.bz2 +$ sudo dnf install \ + lxc-3.0.4-2.static_init-release-1/rpms/el8/x86_64/lxc-3.0.4-2.static_init.el8.x86_64.rpm \ + lxc-3.0.4-2.static_init-release-1/rpms/el8/x86_64/lxc-libs-3.0.4-2.static_init.el8.x86_64.rpm}}~ + +The examples in this guide that use a MANET routing protocol, as well +as those in the +[*letce2-tutorial*](https://github.com/adjacentlink/letce2-tutorial), +use [Better Approach to Mobile Ad-hoc Networking +(B.A.T.M.A.N.)](https://en.wikipedia.org/wiki/B.A.T.M.A.N.). Rocky 8 +does not build the `batman-adv` module as part of the distribution +kernel module package. In order to experiment with the examples using +`batman-adv`, either rebuild your kernel with the `batman-adv` module +or use the supplied `build-external-kmod-batman-adv-rpm.sh` script to +download and build a `batman-adv` kernel module rpm using the +[kernel.org](https://kernel.org) version of the currently running +kernel. + +To build and install the `batman-adv` kernel module + +~{{verbatim type=txt -- +$ sudo emane-guide/extras/build-external-kmod-batman-adv-rpm.sh +$ sudo dnf install kmod-batman-adv-*x86_64.rpm}}~ + +If you are using Secure Boot, follow the instructions at the +conclusion of `build-external-kmod-batman-adv-rpm.sh` to sign the +module with your Machine Owner Key (MOK). + +To sign the `batman-adv` kernel module replace with the full path to +the system mok key: + +~{{verbatim type=txt -- +sudo /usr/src/kernels/$(uname -r)/scripts/sign-file \ + sha256 \ + /replace/with/path/to/your/mok.priv \ + /replace/with/path/to/your/mok.der \ + /lib/modules/$(uname -r)/extra/batman-adv/batman-adv.ko}}~ + + +### Ubuntu + +To use `wget` to download the latest release bundle for Ubuntu and +verify the release signature with *gpg2*: + +~{{verbatim type=txt -- +$ wget https://adjacentlink.com/downloads/emane/emane-1.4.1-release-1.ubuntu-20_04.amd64.tar.gz +$ wget https://adjacentlink.com/downloads/emane/emane-1.4.1-release-1.ubuntu-20_04.amd64.tar.gz.asc +$ gpg2 --verify emane-1.4.1-release-1.ubuntu-20_04.amd64.tar.gz.asc}}~ + +To unpack and install bundle software: + +~{{verbatim type=txt -- +$ tar zxvf emane-1.4.1-release-1.ubuntu-20_04.amd64.tar.gz +$ cd emane-1.4.1-release-1/debs/ubuntu-20_04/amd64 +$ sudo dpkg -i $(find emane-1.4.1-release-1 -name '*.deb' -print | egrep -v '(dev|debug)') +$ apt-get install -f}}~ + +## Running From Source Build + +It is possible to run the examples in this guide directly from source +build. The `adjacentlink-foss-build.sh` script will clone and build +the latest release of all Adjacent Link FOSS projects. Running from +source build requires the use of the +[*environments-foss*](https://github.com/sgalgano/environments-foss) +package which adds Adjacent Link FOSS application, library, and Python +package build paths to the current shell environment. + +The following instructions for using `adjacentlink-foss-build.sh` +assume *emane-guide* has been cloned in `~/dev` which is also the +location to clone and build all Adjacent Link FOSS and that all the +Adjacent Link FOSS [build dependencies](#build-dependencies) are +installed. + +~{{verbatim type=txt -- +$ mkdir -p ~/dev +$ pushd ~/dev +$ git clone https://github.com/adjacentlink/emane-guide +$ emane-guide/extras/adjacentlink-foss-build.sh build}}~ + +The *emane* dtd and schema must be copied to `/usr/share/emane`. These +are core files that never change, regardless of which version of +*emane* you are running. + +~{{verbatim type=txt -- +$ sudo mkdir -p /usr/share/emane/{dtd,schema} +$ sudo cp ~/dev/emane/schema/*.xsd /usr/share/emane/schema +$ sudo cp ~/dev/emane/dtd/*.{dtd,ent} /usr/share/emane/dtd}}~ + +Every time you want to start or stop one of the *emane-guide* +examples, use the `letce2` `-e` option to load the +`adjacentlink-foss.env` environment in each lxc runtime environment. +Be sure to also source `adjacentlink-foss.env` and `letce2.env` in +your shell environment prior to issuing the `lecte2` commands. For +example: + +~{{verbatim type=txt -- +$ . ~/dev/environments-foss/adjacentlink-foss.env +$ . ~/dev/environments-foss/letce2.env +$ pushd ~/dev/emane-guide/examples/rfpipe-01 +$ letce2 lxc start -e ~/dev/environments-foss/adjacentlink-foss.env +... +$ letce2 lxc stop -e ~/dev/environments-foss/adjacentlink-foss.env}}~ + +~{{imagemagick + file="images/no-packages-with-source-build.png" + scale=100 + images/exclamation.png -resize 25% \( -size 800x -font DejaVu-Sans-Mono-Bold + -gravity east label:" Adjacent Link FOSS distribution packages CANNOT be installed when using source build. " \) + +append -transparent white}}~ + + +### Build Dependencies + +All Adjacent Link FOSS project build dependencies are available from +standard distribution repositories. + +#### Fedora Linux + +To install build dependencies in Fedora Linux: + +~{{verbatim type=txt -- +$ sudo dnf install autoconf automake boost-devel cmake fftw3-devel gcc-c++ git \ + libconfig-devel libpcap-devel libtool libuuid-devel libxml2-devel lksctp-tools-devel \ + make mbedtls-devel pcre-devel protobuf-devel python3-devel python3-protobuf \ + python3-setuptools redhat-lsb-core rpm-build sqlite-devel zeromq-devel}}~ + +#### Rocky Linux + +To install build dependencies in Rocky Linux: + +~{{verbatim type=txt -- +$ sudo dnf install epel-release +$ sudo dnf config-manager --set-enabled powertools +$ sudo dnf install autoconf automake boost-devel cmake fftw3-devel gcc-c++ git \ + libconfig-devel libpcap-devel libtool libuuid-devel libxml2-devel lksctp-tools-devel \ + make mbedtls-devel pcre-devel protobuf-devel python3-devel python3-protobuf \ + python3-setuptools redhat-lsb-core rpm-build sqlite-devel zeromq-devel}}~ + + +#### Ubuntu + +To install build dependencies in Ubuntu Linux: + +~{{verbatim type=txt -- +$ sudo apt-get install autoconf automake cmake debhelper dh-python g++ gcc git \ + libboost-program-options-dev libconfig++-dev libfftw3-dev libmbedtls-dev libpcap-dev \ + libpcre3-dev libprotobuf-dev libsctp-dev libsqlite3-dev libtool libxml2-dev libzmq3-dev \ + libzmq5 lsb-release pkg-config protobuf-compiler python3-dev python3-lxml python3-protobuf \ + python3-setuptools python3-zmq sqlite3 uuid-dev}}~ + +## `/etc/hosts` Additions + +Adding the contents of `hosts-additions` to your system `/etc/hosts` +is recommended. These additions contain common *emane-guide* +honstname-to-ip-address mapping that make it easier to generate and +monitor traffic. + +~{{file path="../extras/hosts-additions" +type=txt +caption="emane-guide host name address mapping snippet." +path-cut="../extras" +path-replace="emane-guide/extras" +lines=15 +showname=true}}~ + +You can cut-and-paste `hosts-additions` contents into `/etc/hosts` or +use the following command: + +~{{verbatim type=txt -- +$ sudo sh -c 'cat ~/dev/emane-guide/extras/hosts-additions >> /etc/hosts'}}~ diff --git a/guide/ieee80211abg-radio-model.txt b/guide/ieee80211abg-radio-model.txt new file mode 100644 index 0000000..1ba16a8 --- /dev/null +++ b/guide/ieee80211abg-radio-model.txt @@ -0,0 +1,373 @@ +~{{frontmatter +layout: default +title: IEEE 802.11abg Radio Model +nav_order: 11 +permalink: /ieee80211abg-radio-model}}~ + +~{{layout type=newpage}}~ +# IEEE 802.11abg Radio Model + +The IEEE 802.11abg radio model is a behavioral representation of an +IEEE 802.11abg radio. + +## Features + +The IEEE 802.11abg radio model provides the following set of features: +[DSS and OFDM Modes and Rates](#dss-and-ofdm-modes-and-rates), [DCF +Channel Access](#dcf-channel-access), and [Packet Completion Rate +Curves](#packet-completion-rate-curves). + +### DSS and OFDM Modes and Rates + +The IEEE 802.11abg radio supports the following waveform modes and +data rates with the appropriate timing: + + 1. 802.11b (DSS rates: 1, 2, 5.5 and 11 Mbps) + + 2. 802.11a/g (OFDM rates: 6, 9, 12, 18, 24, 36, 48 and 54 Mbps) + + 3. 802.11b/g (DSS and OFDM rates) + +### DCF Channel Access + +The IEEE 802.11abg radio model supports Distributed Coordination +Function (DCF) channel access. + +### Unicast and Broadcast Transmissions + +The IEEE 802.11abg radio model supports both unicast and broadcast +transmissions. Unicast transmissions include the ability to emulate +control message (RTS/CTS) behavior as well as retries without actually +transmitting the control messages or the re-transmission of the data +message. The emulation of unicast does not replicate exponential +growth of the contention window as a result of detected failures. + +### Wi-Fi Multimedia + +The IEEE 802.11abg radio model supports Wi-Fi multimedia (WMM) +capabilities with the ability to classify four different traffic +classes: Background, Best Effort, Video, and Voice, where the higher +priority classes (Voice and Video) are serviced first. + +### Packet Completion Rate Curves + +The IEEE 802.11abg Packet Completion Rate is specified as curves +defined via XML. Each curve definition comprises a series SINR values +along with their corresponding probability of reception for a given +data rate index. A curve definition must contain a minimum of two +points with one SINR representing *POR = 0* and one SINR representing +*POR = 100*. Linear interpolation is preformed when an exact SINR +match is not found. + +The IEEE 802.11abg radio model does adjust the interference on a +per packet basis based on detected collisions and as such supports +negative SINR values. + +Specifying a packet size (`` attribute `pktsize`) in the +curve file will adjust the POR based on received packet +size. Specifying a `pktsize` of 0 disregards received packet size when +computing the POR. + +The POR is obtained using the following calculation when a non-zero +`pktsize` is specified: + +~{{math POR = POR_0 ^ {S_1/S_0}}}~ + +Where, + +~{{math POR_0}}~ is the POR value determined from the PCR curve for +the given SINR value + +~{{math S_0}}~ is the packet size specified in the curve file +`pktsize` + +~{{math S_1}}~ is the received packet size + +The below default PCR curves are provided for each of the supported +802.11 modulation and data rate combinations based on theoretical +equations for determining Bit Error Rate (BER) in an Additive White +Gaussian Noise (AWGN) channel. + +~{{file path="../examples/ieee80211abg-01/node-1/emane-ieee80211abg-pcr.xml" + type=xml + skip=1 + showname=true + blank=false + path-cut="../examples" + path-replace="emane-guide/examples" + lines=26}}~ + +~{{image file="images/ieee80211pcr.png" + scale=90 + caption="IEEE 802.11b DSS (left). IEEE 802.11ag OFDM (right)." +}}~ + +## Limitations + +1. The IEEE 802.11abg radio model does not support Point Coordination +Function (PCF) channel access or the concept of beacons to discover +and join an access point. + +2. The IEEE 802.11abg uses a radio model specific +[`OneHopNeighborsEvent`](#onehopneighborsevent) to communicate one-hop +neighbors to behaviorally emulate the csma/ca channel access protocol +without actual transmission of RTS and CTS packets. The neighbor +information in the event allows each node to estimate channel activity +associated from one and two hop neighbors to emulate collisions not +only from immediate neighbors but also from 2-hop hidden neighbors. + +If the emulator is oversubscribed and can no longer process IEEE +802.11abg radio model transmissions as fast as they are received, the +radio model channel activity estimator will estimate less activity +within the estimation period, leading to a failure condition with +better network performance then would be experienced with real radios. + +## `OneHopNeighborsEvent` + +A `OneHopNeighborsEvent` is used to communicate one-hop neighbors to +other IEEE 802.11abg radio model instances running in an emulation in +order to behaviorally emulate the csma/ca channel access protocol +without actual transmission of RTS and CTS packets + +~{{file path="$emane_SRC_ROOT/src/models/mac/ieee80211abg/onehopneighborsevent.proto" +type=protobuf +showname=true +blank=false +skip=33 +path-cut="$emane_SRC_ROOT" +path-replace="emane"}}~ + +## Configuration + +~{{emaneinfo plugin=ieee80211abgmaclayer type=config}}~ + + +## Statistics + +~{{emaneinfo plugin=ieee80211abgmaclayer type=stat}}~ + + +## Statistic Tables + +~{{emaneinfo plugin=ieee80211abgmaclayer type=table}}~ + +## Examples + +This guide includes the IEEE 802.11abg example: + +1. `ieee80211abg-01`: A three node example using precomputed pathloss and + running the B.A.T.M.A.N manet protocol with a jammer and monitor node. + +### ieee80211abg-01 + +~{{graphviz + file="images/topology-ieee80211abg-01" + scale=65 + caption="ieee80211abg-01 experiment components: Three nodes with one host each, monitor node, and jammer node." + -- + digraph hierarchy { +rankdir="TB"; +node[shape=circle,style=filled] +"node-2" [fillcolor=green] +"host-2" [fillcolor=gray,shape=square] +"host-2"->"node-2" [dir="both",label="[.2] 10.98.2.0/24 [.1]"] +"OTA" [image="images/cloud.png",shape=none,fillcolor=none] +"node-1" [fillcolor=green] +"node-3" [fillcolor=green] +"monitor-4" [fillcolor=yellow] +"monitor-4"->OTA +"jammer-5" [fillcolor=red] +"jammer-5"->OTA +"host-1" [fillcolor=gray,shape=square] +"host-3" [fillcolor=gray,shape=square] +"host-1"->"node-1" [dir="both",label="[.2] 10.98.1.0/24 [.1]"] +"node-1"->OTA [dir="both",label="10.100.0.1/24"] +OTA->"node-3" [dir="both",label="10.100.0.3/24"] +"node-3"->"host-3" [dir="both",label="[.2] 10.98.3.0/24 [.1]"] +OTA->"node-2" [dir="both",label=" 10.100.0.2/24"] + +{rank = min; "host-2";} +{rank = min; "node-2";} +{rank = same; "node-1"; "node-3"; OTA; "host-1"; "host-3";} +{rank = max; "monitor-4"; "jammer-5";} +} +}}~ + +The `ieee80211abg-01` example contains three nodes, each with a host +hanging off their respective `lan0` interface, a jammer node, and +monitor node. + +All physical layers are configured to use the `precomputed` propagation +model and `emaneeventservice` publishes ~{{link +name="`PathlossEvents`" file="events.md" section="#pathlossevent"}}~ +using the values in `pathloss.eel`. + +~{{file path="../examples/ieee80211abg-01/pathloss.eel" +type=txt +showname=true +blank=true +path-cut="../examples" +path-replace="emane-guide/examples"}}~ + +~{{imagemagick + file="images/run-ieee80211abg-01.png" + scale=75 +images/pointing-finger.png -resize 25% \( -size 800x -font DejaVu-Sans-Mono-Bold +-gravity east label:" Run emane-guide/examples/ieee80211abg-01 and give it a try. " \) ++append -transparent white}}~ + +With `emane-guide/examples/ieee80211abg-01` running, we can use +`otestpoint-labtools-mtabletool` to subscribe to all +`EMANE.IEEE80211abg.Tables.Neighbor` probes, and build a combined +Neighbor interval average SINR table showing the number of received +packets in each measurement interval and the measurement interval +average computed from long running averages of SINR. + +~{{verbatim type=txt -- +$ otestpoint-labtools-mtabletool \ + localhost:9002 \ + Measurement_emane_ieee80211abg_tables_neighbor@neighbormetrictable \ + EMANE.IEEE80211abg.Tables.Neighbor \ + --actions \ + "pass(c=(0));" \ + "delta(c=(1))=>|{}_intvl|;" \ + "iavg(c=(7),n=(1))=>|{}_intvl|;"}}~ + +The displayed combined neighbor interval average SINR table shows a +lower SINR between `node-1` and `node-3` due to the higher pathloss +between the nodes, 75dB, as compared to 70dB between all other nodes. + +~{{verbatim type=txt -- + Measurement_emane_ieee80211abg_tables_neighbor@neighbormetrictable + _Publisher NEM Rx Pkts_intvl SINR Avg_intvl +0 node-1 2 29 26.9897 +1 node-1 3 29 21.9897 +2 node-1 65535 0 NaN +3 node-2 1 29 26.9897 +4 node-2 3 29 26.9897 +5 node-2 65535 0 NaN +6 node-3 1 29 21.9897 +7 node-3 2 29 26.9897 +8 node-3 65535 0 NaN}}~ + +We can monitor the B.A.T.M.A.N. Next Hop Matrix using +`batman-nexthop-monitor.py`. + +~{{verbatim type=txt -- +$ ~/dev/emane-guide/examples/scripts/batman-nexthop-monitor.py 3}}~ + +The displayed matrix shows the node reporting it's next hops +(`Reporter`) followed by column for each final destination, where '`--`' +indicates the self-identify entry, '`*`' indicates the final destination +is the next hop, and a *node id* indicates the next hop to the +destination. + +~{{verbatim type=txt -- +== B.A.T.M.A.N. Next Hop Matrix == ++----------------+----------+----------+----------+ +| Reporter | 1 | 2 | 3 | ++----------------+----------+----------+----------+ +| 1 | -- | * | * | +| 2 | * | -- | * | +| 3 | * | * | -- | ++----------------+----------+----------+----------+}}~ + +As shown, the network is fully informed with all nodes a single hop +from each other. + +Using `emane-jammer-simple-control`, we can instruct the jammer, +`node-4`, to create a continuous tone centered at 2.39GHz with a 20MHz +(default) bandwidth, and -20dBm transmit power. + +~{{verbatim type=txt -- +$ emane-jammer-simple-control -v node-4:45715 on 4 2390000000,-20 -a omni}}~ + +The resulting tone can be viewed using the monitor, `node-5`, and +`emane-spectrum-analyzer`. + +~{{verbatim type=txt -- +$ emane-spectrum-analyzer \ + 10.99.0.5:8883 \ + -100 \ + --with-waveforms \ + --hz-min 2350000000 \ + --hz-max 2500000000 \ + --subid-name 1,IEEE802.11}}~ + +~{{image file="images/ieee80211abg-01-emane-spectrum-monitor.png" + scale=75 + caption="Monitor view of spectrum during jamming activity." +}}~ + +From the combined neighbor interval average SINR table, we can see +that the SINR between all nodes drops by ~4dB. + +~{{verbatim type=txt -- + _Publisher NEM Rx Pkts_intvl SINR Avg_intvl +0 node-1 2 30 23.0103 +1 node-1 3 29 18.0103 +2 node-1 65535 0 NaN +3 node-2 1 30 23.0103 +4 node-2 3 29 23.0103 +5 node-2 65535 0 NaN +6 node-3 1 30 18.0103 +7 node-3 2 30 23.0103 +8 node-3 65535 0 NaN}}~ + +For `node-1` and `node-3` this drop in SINR has big implications when +running at 54Mbps. + +~{{verbatim type=txt -- +$ emanesh node-1 get config nems mac mode unicastrate multicastrate +nem 1 mac mode = 3 +nem 1 mac multicastrate = 12 +nem 1 mac unicastrate = 12}}~ + +Since the bidirectional link between `node-1` and `node-3` started at +a higher pathloss, the change in SINR from 21.9dB to 18.01dB results +in a probability of reception of almost 0. This can be verified by +consulting +`emane-guide/examples/rfpipe-01/node-1/emane-ieee80211abg-pcr.xml`. + +All nodes in this example are using the same PCR definitions. For +54Mbps, an SINR of 21dB results in 71.3% probability of reception and an +SINR of 18dB results in 0.2% probability of reception. + +This can be seen in the B.A.T.M.A.N. Next Hop Matrix, where now +`node-1` and `node-3` must hop through `node-2` in order to complete +traffic. + +~{{layout type=newpage}}~ + +~{{verbatim type=txt -- +== B.A.T.M.A.N. Next Hop Matrix == ++----------------+----------+----------+----------+ +| Reporter | 1 | 2 | 3 | ++----------------+----------+----------+----------+ +| 1 | -- | * | 2 | +| 2 | * | -- | * | +| 3 | 2 | * | -- | ++----------------+----------+----------+----------+}}~ + +One way to restore single hop connectivity between `node-1` and +`node-3` is to reduce their data rate, which causes a different PCR +curve to be used. Setting both nodes to 36Mbps will result in 100% +probability of reception for SINR greater than or equal to 18dB. + +~{{verbatim type=txt -- +$ emanesh node-1 set config nems mac unicastrate=10 multicastrate=10 && \ + emanesh node-3 set config nems mac unicastrate=10 multicastrate=10}}~ + +The B.A.T.M.A.N. Next Hop Matrix now shows `node-1` and `node-3` +directly connected. + +~{{verbatim type=txt -- +== B.A.T.M.A.N. Next Hop Matrix == ++----------------+----------+----------+----------+ +| Reporter | 1 | 2 | 3 | ++----------------+----------+----------+----------+ +| 1 | -- | * | * | +| 2 | * | -- | * | +| 3 | * | * | -- | ++----------------+----------+----------+----------+}}~ + diff --git a/guide/images/adjacentlink.png b/guide/images/adjacentlink.png new file mode 100644 index 0000000000000000000000000000000000000000..f4b487e93c3a0bd65a2328ab88490da212dbc172 GIT binary patch literal 3871 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 h39DJUqmD=ErrQBY8(;J+7iRQL(U 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%0AYfA23DP!MFf= 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 HGd$xTg}bIz literal 0 HcmV?d00001 diff --git a/guide/images/auto-generated-compatibility-mode-control-messages b/guide/images/auto-generated-compatibility-mode-control-messages new file mode 100644 index 0000000..9b54bed --- /dev/null +++ b/guide/images/auto-generated-compatibility-mode-control-messages @@ -0,0 +1,24 @@ + Compatibility Mode 1 Compatibility Mode 2 + + /---------------\ | /---------------\ + | | | | | + | Radio Model | | | Radio Model | + | cFFB | | | cFFB | + \---------------/ | \---------------/ + ^ | | ^ | +o ReceivePropertiesControlMessage | | o AntennaProfileControlMessage | o MIMOReceivePropertiesControlMessage | | o MIMOTransmitPropertiesControlMessage + | | o FrequencyOfInterestControlMessage | | | o MIMOTxWhileRxInterferenceControlMessage + | | o SpectrumFilterAddControlMessage | | | o RxAntennaAddControlMessage + | | o SpectrumFilterDataControlMessage | | | o RxAntennaRemoveControlMessage + | | o SpectrumFilterRemoveControlMessage | | | o RxAntennaUpdateControlMessage + | | o TimestampControlMessage | | | o SpectrumFilterAddControlMessage + | | o TxWhileRxInterferenceControlMessage | | | o SpectrumFilterDataControlMessage + | | | | | o SpectrumFilterRemoveControlMessage + | | | | | o TimestampControlMessage + | v | | v + /----------------\ | /----------------\ + | | | | | + | Physical Layer | | | Physical Layer | + | cFFB | | | cFFB | + \----------------/ | \----------------/ + | diff --git a/guide/images/auto-generated-compatibility-mode-control-messages.png b/guide/images/auto-generated-compatibility-mode-control-messages.png new file mode 100644 index 0000000000000000000000000000000000000000..5210c91841188915f84eb34849d1b2be71dd26df GIT binary patch literal 38883 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 bYgNdpayjCxr-)$oh3K6#K3jPD>L33DkyD2H literal 0 HcmV?d00001 diff --git a/guide/images/auto-generated-configuration-parameter-hierarchy b/guide/images/auto-generated-configuration-parameter-hierarchy new file mode 100644 index 0000000..9abc9a0 --- /dev/null +++ b/guide/images/auto-generated-configuration-parameter-hierarchy @@ -0,0 +1,24 @@ + Configuration Parameter XML Value Hierarchy + + /---------------\ + | | + Priority 1 | Emulator | Highest + | Platform | + | cFFB | ^ + \---------------/ | + : + -=-------------------------------------------------------------------- | + | + /---------------\ | + | | | + Priority 2 | NEM | | + | cFFB | | + \---------------/ | + | + -=-------------------------------------------------------------------- | + | + /---------------\ /---------------\ /---------------\ V + | | | | | | + Priority 3 | Radio Model | | Boundary | | Shim | Lowest + | cFFB | | cFFB | | cFFB | + \---------------/ \---------------/ \---------------/ diff --git a/guide/images/auto-generated-configuration-parameter-hierarchy.png b/guide/images/auto-generated-configuration-parameter-hierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..e3ef47be662235d114a3742391cee92fa14eb88f GIT binary patch literal 15152 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 literal 0 HcmV?d00001 diff --git a/guide/images/auto-generated-dont-run-multiple-nems.png b/guide/images/auto-generated-dont-run-multiple-nems.png new file mode 100644 index 0000000000000000000000000000000000000000..bcfd527b2c17cc52755075cd8fd32ced7dfa66c5 GIT binary patch literal 21539 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

~TK^Vb^Q!(*r3%C{Hn42DD@9@%T zOoupE(D%^lq;Fi>u})^p*2>eT^^eMI)$uYQAqn>!P{%dSxET1vK6ve4 z+9@UP$Dy=WQg{-2R!?1RSwUS!C^!G=7KFk`H%8U%DH~Cxkkf2A@+Bb<((Oh42%y>D zp1twho2zPWfE=xMA?n(hDQ+zL5ybw3I1RUvyKGIt8+EaU^z+t%ixI?XMI>8UUpM|_ z91BeOv62~N3EIz9nsr5F9U_7Zs68M{A!J7NhBN}NxuF92fB40X)th=misAv$Mw~_B z0VJ-qLI}6tTl{=Kr)cm74m|_`LEfV^a{w1H-?Q!UU$SmoL<46|6)#O!4OxM6jxTlgXHuG|m)#$$I1QK1LbYq0zjK1BRVERCqp<0#hUL+)Pae=g1IBvNg_ zN<72^5v4{J@2g!kBmTHjI3t@-t*7=>BL4h*6_eM~c8x%Ccjb8FYkP4wE(|b7KZw-6klP#zqf%r>e1Rz>7p~OJH zJd6QUd=ee>Sw*e5tc%0&pE;+9vIg;9Be%9v9Tr333Vqaio2)Q7aJz?s(Bu0K&9R@8 znBBj}qVwZ-8aXfh|M@S}+DsNGtsAlk)dF)=`&`7(p~IQ$(5e`!J_}VD0TwNk*s;z6 zk(7_gj_`;9>QvZ= z{kIn#VIqC!o9ItxKy0+3NZ}W$XD_T($C8e(Rf22uPjU7tsAc55xtY)DvLw`}4d0FC zcE;oLtW%aOANS;_)8cwY4r9bZAT6X#%vTC3*%tI3-VP0Fx*NQ?gF>r~20U38Ej_Rx z-M&@EcPI44-L_TwSvqt2W_ICaCF+~!uc$u={I!>BX&()dVvgR%{hOz#nEkpl!1*sX z`K~5@V-V+c9mKVQGwU;uD{Zue4!ru^h}(N#caw5!dt##IlU`RP(2$|^X|!N_L7=nZ z>5q?X*!zP#zoOWE;+_-Ry0@w5=eOomk?BU*TKQUPs~MIdau!4q-i#j?!M1t7V`@E4 zL&2=Sr>Qc!ztxAFLOaU@^*a02sM9-gos(caZ&#`VAO4h%Xoot-r@cYz6O@=5A%#r!Uio0pZpd7gt_t@Zd% znXmGrZ@Pe~CMgl>hWjWFX`>1+&h7csUUFv~SQb_CLIJr+|2-PbthYqQ|BZh0E0@0V z7p&#CUaaIgoxcX0LC<`0q6cuUQV_eR2{5qjopOJv&*SXjEMU;xEn>As95(R%ctpeB z1NqG7PAPy|{6eXuOgsyL4&*w8Dmh{SSGBhhEJ_)CHWPUd!0LZe)w*bXepJ{6@fJ5G z?5Exjj>rI2TOu7Q#jR*;a1Y8`$XcHFQ}dvOr})WieNx1|i62bAZs@v`S@Ln(3}vI2 ziHp2PfB(F;V)Mw{OGE(YvU8c$D;LK?0_J3lvF9LZye)v>xS)HJR3&QB44v!T(P zoJFJB_h~F9H!RtU7ewRn*e$}fa$FPOs!6$sis_3wa|2V zG3#f3t`R2r&oGQ_ye-G1WlcWJbG6kCjLZ`RjDqrTa?k$q%v@!tbtj9E2+aHe1nAtg zT`!R7OeC&MK?qsPd9)MOc7syUAnLfq!n9pbKv^*Alar9D(ckNNC z0TGZ2KI?J*wUFEaMA%0Jic~k!3B|iWo07(pb0mhnTh7m)@=djV)O4B7Mfvv=Cu5my zg%Qi`p&|VW*Qho5cT1$X0!j@lax(R}Mum4m0sB!U;FcC7okSt_S1lRVrmd*G${*ZF(FF`n|yyWYpy1LGC; z-LDK(n#rin0}Y>=ij_N_>#y2?KvnVPjJ@x8D7YVLd{ReP!s43f%K8nEZwN>12tz$f z17V4_19#eDItWvN^JvK)`mFc>djGLje7wa<>z*>w^XotGiW-KEY$-K5W7h96y&?XA zD$sgD2pZMZ+$7r!I6QyrbWL89UB%9=?Cl%S~O-SpJZO7Ej2$vjj z+WSN%r3~pqw{KExrC}d59mABCi-)X`fkC@;Y$K3|kLUgwB1uAgfOfkpRK)2T5@9a~ zudigvF-_P0Mm}Oz<}((R#CU+){k6x9<?vWciKi#(MJ1_1!+(rEGD=!vpaNQL5tCJE)ou$qcJKz~pmLYMCFlLC^I4Oi zn{yrWbNw!~2Vi|6Iq4~p-7-XUeW!k_{fY)vWQCqpCNu?wcXqk&lhR~oKsDGz6h)Qi z!_jd@Gs1c%y09otxKJkQeoV-(qF&Y#)0f>^+hw8Rz6+RpEb<>{gJ)S{ij}^0geO~m zi^1%G@rmJ^4we?{WA_qhiE#1#GHsFJf0)7{-o87E%R5L8TH1wcT%FH>t4A$!6iyGV z*t5&L>(|P-D|$+fZEZ|?%WEKeuT2Z9HRg*{C1!8+G$Go}lbCe5(AJf&*93X@7L_wZ63k+)Grmqo=M2me%Pcs_>efKanan5dG--chLFzx+o00u>-$;446^jt zxamXlx?hMLw;q@ZW0M-_Lt{QEdKe&6U#(&Q$p3U$5aiD&`XMj>Io$_0OyskgMGxsj z0u`4bS)<7M4%E)c*`l;eHOVMq8f`L)+OFplU{OTzOB5{Xd2;a#GJyDBcqC0d0MbN5 z{cM{AzQMevW(L7)Wd8_}oNXcE17PC0oq)gzybhTpWC~bnbJuY5oTVLMjopdy%r_Sz z!A!@oghA>n357>O)qbhM(Mh8s(Ci@%frK0qUy2N*Hr(@C3)xTFP=%@OG{6QoF{Kp> z&4Uyi@E_OF6PzH<5!K{avA=|)GSY>*EGI-pwcZocb13_f9{NJvELn>rmlh+Qz5nt& z(y%kQPYd50RWt1biLW-{@u9rrUGNd#)a?~I9qYQhp`c%kF^QE9o58Z+>K-Z)_Txcy z3vuMbKi@)0N!j^E>-zW$?{4z`SRhh6MCL0O5w=4w^&{#F5v6z#d9DpV{1pxgH;2s7 zX$FguB3X8b=}Wcrwyjj%S9Bf(7pG)}pGxVJD<6O;WR0J%fAJs{Vq;>7xEEz|!n_sW z=lw$_hGw%l>-DmRM?s4fqFBST;l6YlYDTx%?Wf(=#3`nVPlmW*7BzAwF)?I%vH&3f4HMmc%m zOPK)PK$W^v_SYLXxLtJQkrV3@Iva13`>OJ);^L!7Ng=ej#7N+vBFa2(%!ju$eFMrUU6DE#)5{ueT>B#5?osrMD4nNftBX$1;H#&GarET6X);k~`_+L~*sboH90cE~YaO&5} zxk==*BWuz|XL`B>|H3=JDz4qzn>ak4c!(Sv5_q}#nKtkegCy7IoL1Jx^as1-ac7fA z-wZkIslupDyuG0qGy|*`@iE~(8^cEWMM_vM3cOs$DQ)!!%&r(DXKl#()!(jdAyJ@rxB-3pbPtnRIZMc8E$nQFuN9~AX%M~F zZeW|pmwi-b5x@smiyr_8p-U}(kjKt=DJO$_F5lUj;hxu7&SqcKZqimkYXd1x- zR#C>#Hd#S#(k)0|CF1 zGHdyzlTK2S?l#55L@in@um~OEfsdQgC+^z#u$ECD{^D5+<_p}Vu6-s(-HwCvJ%6YNgFw^~85c-F$r z0r2P+v6k>gghiL-tFmh1X)U~BB+o&bF!yY|;i9WUFZQ;9NwI#dV70>VG+{mFID51B zu3MG$2TY3(Vws1kctjr+;7HMY)*BSljoW z0dfYTjBtQOGi>l6Uln)vF5A}|31=<=$*a*%hTLJM#r;(uil6FKCqd+W&*d--KzS=X zh1&1H8tqQ$$@aQW-K{|?Rj+2+j3NdwUWnjMRG82Ze2MvXd%lx-IxsidfZO)r8q8Rx z9_BdJw#=~c9K06%7J4ygXxH51n0n~(&ds1t9rRSkBxQ|GmJM*O@{xm+s~h9(%y53( zvO<6xfu-j+_JACfTnRz{H{qedZf2&5KI;3F$SwNj@yc?`;8%se>B?ZV|@pWAP5COklNvyamgwPvr7?1%Lj z-9BVepjXQmWabiA67VKG#Bl*SshyqLlwOeb{!iY1wv-Hw)yyE8vY!#MfqpDMl9tgK^#{NZ+;u$5+Lf@nH&lD&Y&hzhls>tEH%z@cLsu4%kJ`__ogN*99@TG&_!rrg z>RgvKnXMbW@vHN&q4DhWsGMz}JZvbUeL5-fdja@wUdx3ab$wtvkYiEbSRIWJqrS9+&RMwe_z}rQ4{UFFLDq?)IZaRBoD#yH^)|-&5c7Py5>$ZmdSKZ zen`z8C%HzKADZju4{a7g8qtkNBgzVKWaa(RnnNb!?91RDn6WT*UdH7dy5y)AWRyG6 zXsN7Y7^!NLr4TFb07;A>Yo19R$26q8l9zry-WKQ+$4*E=AWE!$e1_~7a~p352CcH@ z`vIk`?QY7&-y<|1?VqbC8SwY9g*xRuX1d3)W&-)x+ ze#$DPv}@q>4w|!*Jg?;Pg1oi)+b>*xr$$fwSl#8tV|3q_%IUf~b4~uh%Kcd{BBXwM zDm>x5PZ3Y=PKzMs`KB+^o2TCNYNh44RfF+5PJ%bpPQ?I=F+_8q{U^3H3#A24&!m6h zTmee0%OT&|od$jjq*SOo4qU~hwPFeod&pa+1bHa!XBmJN_=R*|BkaV6BSWSpC{n3E z^(5b)^&7C{y8NVNfR^WJ{>)D&u*S3Ud*dO`vfUTs9+t|nCKZ})b7LQk3oJRFKvKSJ zn!~UFw?pAR$?PMJzc_5&pZ4 zB(wN}VMO`r!{0BYj23c2uvL1+nCpM|_)NZQIX{-4~V=Ky;;Z6 zv(#3YZ0(Mbn^#Dk0L%aPv0^y ze_x%Ib%|4;7i!l&ONLqyg#!H)5d`VGKw@bw`u$l^$|x-z9=1bK^sdMQ{dq7u7^lE6 zmAE?Vlk04z__P)h7?l19@umzn`M#Uzo!1qTt2UQQDm$A=9_~m?-3IR57|%YfS3@BJ za+ul|2j+3lEdSzTp%{@eL!JP-`&M4W@cil^XM&++@K6t%a!pIe!uEj_J;Cp~yEXz# zHsB`{c3*Jg2Q@ryPjWd!(jd_tJyI)sv+rXSP->x*_-pR1A%CrXEiISK8277jo7pQ@ zfmCqn_tVoGf%kqY+;8k+-fmY?4HkTC#iSJryu4gp#}RCgbXv>Y2wcrMxtH0;R2}Ir z(YX@V_Q22l^&4yrw7TUHga;c;wI??te$t?0SfdGih1T;=4@s%2EjR(#)9pCO}7x117j`XdE{ z5c$SXJB~l$*aXk!{3D07o?{z02paRqei^D_{IKW7WnLucfNDtww;=H*#_uCNah%7p zcVA3w7BDNST{!J;b3WXo6SLoWKb4-28QoSIQYa|pOt*Y_WT|c!V1srZk5MH?$xNi3~fZ(I@nX$(5P~~^ulJN6GQa#K7!fzXa8b}8*LJ>7zn@x1kED|Pzh1-nZ zodpq@ksBwv=BlQ`oQbagg>Kr7Z3ItIq(4&KN*QKhc&@V$lq&pD(L-G7(4ajJ*(qe# zNfCa1o}9;^}9&oN#~DG7<=NCmt(7Pi`pIFX{i%`!KfV75l*iX z#l)C{BCvQt;L|aB?$`&)l4;G$c-Fe(2&CTqP4!rgE~pNEwyD1JD&CzY;5H6#IxBl55iD z^!bPJUr8vDi()jB&IR=6$&C`_6_Br&>GQ*~Hg1>g3_p|>WV7&ZF+t_BXTe6uYmt}Yb9 z#P|%~oVDfj+1R!o_uI;KnV72~Iq%H@%WE<9sv`F1z`JJwn_f1J_O^;KrAB$D z&W!lY7&Wgp{2O258SUhB^a@-IY+a=~`1`%_5so2FBa!p7VC?}Vq_JduY|&xWX4O6} zS7y)B7Alh?bZ*>tUR2sdis47yt z<7kj9TYK1M;l*rZmSWGLmFHWK2XhHsLSSZjU~VPPISYviK1#{yQ9QJ4+6e!zXWoG( zR9W1l2FALmMz7Hgl<#+sHDYn%dHWqtjFpo?=liLuVbtZ%u2#5P1_hfLh&p1tf~5Kn zuU0;9K!J(NIZhggARhh&g*~UrySmZB8HCgrYnI8_0g$D@S?2lCr;@Nmt!!35$qGBJ z#F<3>=;>SGL znq~?Jw6Iu1$=(*V+uVrd`^iI-4vvlgz(b+fhj8!JE--P9_!DQd`m_ntz_uHSXoEu# z&RI8&WzC1LUtc?w4I1t>EP~;a_>pr_&j5RRT3cF4>!M6QTplabIL=_(1H!($5gl(^ zH(ronnF(2Zc^v?f7?TRQkHlw4Lb$>>gXG>H6y{-*c2sBN68VGT@%(crwh#V) zc|^r!s{MYB5WNj)o~0Y<5%&EcZmF>cgPQt<)$n&+Q^KzZ%OvQ&1W9>czN$wz10mTO zGA88+is9zULrIQyXXgfexbfHW{>vMhFe94ZyHVw?=~V}*%bV0juj-#VvA~Q#FuuCh z)aky1QNiItx|Y#j8+JJ=`=aGpM-;CBVEe46T4O+|?t$ zv>>BfFKYR2F5R6ri*vYNN^f&+A_k}AbJ8w`2pIxQW3d3(+2&*%aO(Rs!qzJa&iyQz zkyck0o`W!xH9UCK1^NDY-)20`*6Of0pBli4sMJ~a?7+vXp6M>cf3(5=qmmZC7Pd2v zz%^G;)HiEl@!G@oH%&T*ntSB2pX@V#R!GL?WnsOwph4Z)w%6t;#t&NFvn~}e!6Sff z#ieXXNO{|jheTAx3lm0`hLj7ZwoCge50KdZSJ-Rf+Hnx&TjtOG=3!DumtrsZupLuZ zPk#>>wn81!zAlUFKK%AANrc3P{dk`rgN6H6nVow43y~@dT;>EQuH@tD=BGa^T2r*H zlC>7%HC`rNE4#Ls^&On}c|u?Ekj)3syfA_L7x+z4iA`80%f5_T5KQldGiH=o2)_DN z$ctB{K2&nVn)gps48XCn>h)RM>!7HewJkSqxuRVl=l=P#3$m9vCONabp=-r*rtuvN zA;DI%qu;WhX}r^|ud}zCPvKU9Kq(*`GkT?6UNX~2^ACkm9`df-@2fkH^<7(Nu&<$T zc9{JN6~|-&!IQYuO?ycwtgP%Bu14kMI%)PWRim{m`M)lQQqGuK7Iqd34vZHcNazNo z9%SE_b9_${c1)6M^aR}}T72S%ZbgKkxfP>dx=4vd@<=+?B=d75uy9d$d2Ve%dsf#P zjRKzsRM6;Yt(UH0v(LShR`Xv(w4do-eogl~64=5;#QrVbq ztI{^FsBCqRKxiF8YMQ&fv_BK6<7zOtmHb!CMEA!9X%r}?^H}1kqPx6(S-&GH?$E5= zWEjQsFBS1wY(NNg=*n0M^lBjHIp_%mD*E(}W&4{XEN=+=w!7WuixvKK7J$W7Eg0nx z{2@nAp+xXS@h^em+`!(l%GJV4%3u$E6H76MX@%n!w}X4n1eRh6^mGG z{W@qUD~zz-KB1wMcSaKx7JKN5(M-`X4cWb0?Zh@kF`J|JuWyjxb$rit=!f1Z0*3{j zEaV>ER|9R7hM6^?T8or@N=+912?%l%fRZQ)R@@pCqLe}}HDcc_$jSJ=BNc8En&qb~ ztrBdXCk&W<*3=%fb8J;SF|{s7qK9Gg?TNtI&js;El)tIt?tp_674Qb!*M3jErY5hZrj1%?q(&)XF|^ z-(DgKPZwlAJox%tYqHR{6wV;nEXo=1yMGWCLp-aRB*#SO+AN`<8~_Bfge8!UVT_?6*m)M9l$ z76Kh_o3~z&Vww4)G+OpgO3-4oCva51brq*a8O1ce@7ch(MCW1HjVNpzkD{e4j=L)# z1M&br*(FIIJZC~;A|$?OOe=(e^pIW^ooHLNKGVCQ+d%)q{SW3yoCg`_TV>;^%IS&clQ@BEg_f{?)@NO^al@|J`E84p=o`Su&`zjyCI zK9>pqQIcafugwP!o41alP~b84n~*Yr8Eq8s8MQRo@B$v0r|S$mATFS#GWJqAdX^-t>kxq1s)5j{yUn{ zsiNJg&z#@yk~|G@Skw2W0WweV_z^euNF3q;D#4 zX#UOpB1QUnV?<^sDvi89cr&v;O{Xjf(dzp*lF#3wSJ4=fG)@I=N6H$3;M3Oi=rvtcx5y{HsS8Xl!HR@WUTdb?`mb9-gE0b zC3PeoIwQnL2-(d}P!38QRPh-@9nD=jwBGJehw{HbqT7349^b6-2i$}5yEtOfg9wdi zLWGR==-;1-;P+6HPl)2pgz+j+HXkPsm-PEN5ec1^sp{Eu281xpA(GVP2^eqhq1-%cv^KxH~O}C|G8ut*h z>{GJoP)th+Vkz%DY0mQ{xR(TE$tg*}to-;U_~M0H)^u1&EaStAuviinvYC;|=onSa8ueymBu+ z&59DDOQ3OXHW5b(%glQKs0pamPpdgNO&D$Ns86JN<^JN-He{EZ^MdD!#tBIy&Xg5A zZmqLK$Qlrga{POny2A#|u`;w6t$7xLf?aFiPO*2&6E>``<>-_jV+Mrp6J2mv7@L8lp$w<^SO9d&eskOOkfTO#~n}#|nwCpJSK*!&i+t+KL_|XzY&L8Xu zttvuv%>%xosiigugkB&qbMsn*H8c#T?qC+Ze0|i9<9%FfHOKy=7J4dlW^dA#Vr8X~ zu(-XI1i_Mol{}VJtdfx3##Zn6)Bgl!7v^`WhOhXk^D42Y_|;_#{auTq0B2J9<*SwJ z72YH>mHNf(#Y%Hs`djl!@X4*M*nooP%B}F$6d3HPW><5tH6pc0yFfqPwqxUAqJkn< ze5L%fA;PZBGwQMHr5rvl5Gj?e{Au{)gk$1iuW?s!t8~L#(e}}fdZW1INhPe&0(>13 zt6kLwYuU)G1Vw9U3FxF?seS?W`X#?e`H4|{;r}hrpBb1~LRwNJXZDr1;yc#cYos0l zA?d-=MN5r@QkzT&jABJzlG3{GSGb{iV0`B+mb78rH3zf(svhdcFC=?*?w+E?{Qf#~ zVHu9(%j#+q%UH2Va|th3B!*UhIWL2se^?Pt6;`Om=V6{h(oWx=rr(Cx`y(L&M*B_4 zE&Xe>@Q`=?T)_l;D}s<3Aw2rAQ+TX@=@o{z%-0~Q!1vf_=Gp-dS4F(50glf2 zHvQ2dWpil~35~=@-{{(zkkr7Bx0t5rc(uNy3keqijC*{4;S+mFWp-zVco8u^F>!N+ zEP~p6wHR~cFbM+|Pf>DekgJ&c_83CA;L7DTztbF)NPr$oX*Ov<=OCEqsg#(Dn|RO- zI>s45eKAq$yu7y~vzcz)x_xB#(4tAdt5dcdS))zG$Y@11bUOH?!lapMOTGXlsB))6 z<*Cn4H=t;JZhRHmZI$7W|5VjK(1#T?Zjt$>G~$O6QWB4#^j;SILmFp0EwqXBiM*L; zwWpfbsQ6A3J0Tqb=VSR#QK;6mYuG9J#>Tm&uhEsr`u20&LY5wH>31xcV+7}y5-tKv z`C~V5sADCcX-6e9%nu-JQQ*#C<%SVJcYt2mqfwm@{KuF>f_&*?)_z<3 zB0+7}=O?p?q0t#WkD*)#M%Ud86n*#f=sFZm5?Y@Jds=_?1nB?b*9SH@8rS-aZ^^8C zmCZGM07rdiN!Q!2+g=c@AFSvApM1Z6VLeRC22E*HFYWl2P^2R6POLX26EpU^O|9#c zb#M^? z_wUfdgqgRr1WkWPD9m^8mw0;ik(4uncg93_4%o)f;ymXS^gf1(7E~5oK$H83fAodq zw^&J_#hImt*8TywGSAIBtE1iG_YC2X?g(NQbebQGPA$K=HPLgSf;@61D&Splk11gym zq2K=ux26(DPtnei+aI6LKB2DR`;DqZ{3?Pc{)UWN?FV`+V9iiJ*p~Wd9ZFTLl^|?e zdk99yL{8!~i=nf#ibQHtJtySwtH|ccnVBG0)<8NvS76IReH7Wg`tu&d>MaA?0%_agzTO zHvCvcsoV+aIi=j?F$rD9D%3>!pR%aa#5H}%H+(MDJow3sGDG-R-;y^ zLF#H;V+=({gy7F8yvt=;yg3~ezq>vi%}~`{V32gg1O-5sy+8q0l{PQhB{I@c`n3kf zj6+kTkgdV7Y~Ex5Y=KTlrh{@A+MRgLGLL7zqv>sx(`%cr*IWuPAgZx(zHWHXWy!UE z7I*kb^$5YGn$2PNozggvf-N%)Jzei!kn6jGo|8+g85*qXae_4>?k9s%(X&9RH5ISO z5kbbNBG2%JB&{14VMG=Rd=N$bJ~x2N_lr{&=uIae)QvJ-+CTuQMqYn6EUb)DX&zR< z0@31%hg2$jFdEr+NZdmgE^Y6)QtsFB)E25bf4mj>_@;BD@#2h%D9pk0{B+kE>UK#w zJG&C4!P_ZLq3ONoa@#*MydwL@$0Busnp(i*EHMrDLTYU#F|e>Vy?mLA*odZC1S><- z`r^m@r`N+qRLy+uHr`^XH>_}ti^A+7*MrriuBP7Q75+oT5)tZ}p!( zd6LmMwn?ZRb6@?|cXsUtTMI5{Io;wB2x@#K()45DP59}N7xt+)7%bvn3DK+QSXPjt zeWP=cWv3>xCkqCO(a!B2+R?hdYs1N6}23J{R-@#;+5$_5e^ z%Mfx}|7FM^TfPvA>!Y$$yHCHnceu^9`M$8s(`lDq?>nPFqXX4aQd~j!| z_T8NxYt#Rt9YS9&}N|ItS@Sv zPq8AnYS_(WUHgMaOp0kQ|2U79oqgdu_YcsE!u)sxX9XteIhZgEqN^`s=!Y=xR`5S>Zd)7>7TIm0BOQ z(&oN{xOC6_6!{47rx7#vjd|paXQiu?9{XG@Di*sEbQQ0as$x#ou*}@N4-$QKwJ4zS zdiWm^(ID~CQkg7)wv>zMa0oxn3?P|8OJCDw95xr9%_u7CD{y$y*t<>>>o>>pwT@$^ zT6b_m)MyH6@iLuw5#$8yUvyUFo$?!q`ke{GH6r9^5)%&w35RjGXM7R~prhs!^7+jmo4!GfKbLlpj zS`I~-(|!vOx}dk%>zu~d;WoTs?Kz|dI$gKFZ<{<*niNz5r8#$`zHxNp!{O*@pq}?- zG~F@@vReMAW0;<~&e98>Re0OqQ>6wNs7WZTOnjUfNn6#_)p}&9wlDTr23)zqH7Odz zfByRsmYMut93A~;Yb-X62KE*Pj-Ql?^wVM8iA4r7dEw68R`w`D$?5}0eXg~ zfF`^)o}Sg6Fyse2Pu{05e{x`uF|@L-^ud0jQQUehx*>cI%}BH%{uqh0wsd(7&tI0e zBvcmLOq5jIg>*!rl$q!(L~)jgw3FmNHCGI+{DGaUbkZ0LR&+R@P$qhgiWivk0aW&2 zGt-EqspCmvl#G#^$tIul2L3SYy{A-|t%agD9VSnhSUkVl4?csAEWnJ6i;>S?Fh=n& z0xG^IgxDrMIsp67P5ZAA@8RT;*uRV(dGUW^=c(Q6GmESr*jkAdRZcHoRp&MGvEQsp z?!EV`{9E(u-Qw>`zj$Lt_+D$AYSx`jkLbJsIao@8BH9T9G8-s`T{iy4KQi*X12^CM z;}d#{1%71&=e+W2*!6$-rR*%=?8)6WEb1KA3pQw~!G&0APb=oHJa7w)FuC`S$ZAfo zZa{P(x5+_EQ04dB2MW_>&qse}zx3%@?rQffz3MiO4>R!F46PT2^gDHEHrWk%?SPgAE!o2s9*ptBGD!>?a(&6+(o(Iu(` zy4U>O=lnhv5-;n~H9}?}?JxGuUrDcaghA*%$=3B-I$ru$HMR_(Cs|Y!M|v_~PV73m z{T!bAlzk+MycnDR0||a5+;e%4=KhMRA-mDfjj&VYkI(d3GI%;#gZ6FeICz17)XkhSC9 z?A?L2J?;6;z^(t&#+img6~BG_3?Y<3_Pt5=ec$(yj4UHWvLx$BWhcuBGnQn{5~(a% zV~}lZ6Irt*LS)HS6lO%$>B0P;|Mgr~&wal*zgOqF&Utapb${>g=bNY`)@=y*WvOn7 z!{eZi?5c1lspUM zHBUxP+=P&nKnjWsPM?~NW@k1kbdXTwAMuembvYTJg7f#rSW0jyy@+FfYUs*U5wSvw z$y4Kd1E}HD!{FK$#PCXrJvG-1u3ah)8P9NWVqrU}VrqA%RU);CQWr@bVecYQTHi|3VJE66Q+~vV$dGf|7;@ivEb;r#` z_YeAb_6AWnjeNS+S3}tQ#G-gwSw663|Ich;S=bkFyqHdy?9P99yk|*igdC{8C4J+F z(N~Z2>8JI$_Ybsh1MZcCDn@;A?Kv>$U}=<0T^lC-9tHnuZmraxz7|ox%c!d?Oy&UyxD$8I4HesE7V_J zT4n2|5&ip&9^Y8FLo(-U(xgWdbGpVlL(LqneUBX_J z5Y$SVv5=?4>6X3#`{xkXg87b&wZ!TB%)+O`G65I2oXY2`-S<$YzB7Z6+mGKowu8=I z5#FE%iwp!@33hmf4L_5d%0S>4G%=@jWy-{kEjJUs6*+$%l zIZa5a6ON5Q!8fGSEsWl_8lR%P5II6qh-Tp-5BEvEk#0!aD7!B9@U#$vvG4a728v4P zX>fnajy+jhGXS6%W-v?OkQ9#)6|I!<2I8Q6u%s5h_?(BZDvNZ*l^dVxcG@}TiT45 z_?I0wImH@lxjlv`T)!T7(iw%KVilN%_S?tE2Il+J-8 zy?(Z=fMBr%0*L8t7ElOV@?34WoZmxI(98d({G5beoJ*h)Po{#xazPl*CMk}{eyi;B zN7GQV0eoIZ!1&A!O2r3mezXoRuA7x=zxI+CmVb%R8VBYQ?ZSWW=d(VVGC^p*IeOcP z7rtjc^Sb#Omg6_yckSUwf9^3C57}Dl2;I25C(ST+OQFfre==mG-Z

t_q&E?9GeD zu;u-%*u+Xb``A{-^Zl+{lOY#W7N509ZdYBu%eNZVBydZC?B|m=Uv?IvLrX;Mur1TO zdlv%x%hMYDYd>cfWDa9r zcrN9>o=V|tCb_hFkit6+vXEZEkVzVS^>pCL?p~Ij>whY1HE0{_IsN5L?M+0zGPg_l zi>k1${inK2sVAM2+s;0C|4H-Lb?qjqUp!H5G*i5Fnx5evN6vL0JToTA&YiQqh%66w z{QdEJwwCX~YWlVb;9{K6ijdk4CEscCh@X6#SQIF=lZU-^SLr32=#OSI+cQ??_1XWV zk+ho@0|lGA1yz_1|0vM3+G`J^c{SnQ3}YVUg{qybQpbVVu_2<_Bb4Uic)6e1}< zJ#+Xyp4hLh=&g)CQzac|)2HDW$y`e#>Al8|sJ!v?zK2lLrx3X1D^mu_=>@G=v2&ZaWB?K2b-(BavDO4AwE6T&+r-HR7 z-j&Y4>Tg&43`+`Kd8?f0>^`-~>PkMyTOpfurQ7nc@WyAF&w*f7K-ge0a#sUjL2Xd{ zlhzaU!*u?##KO`fhtPYKs^I551gGABlvyDvd_m$B&D>(ZQtIb}iE5goxz`Q7b`ZsB zCWW|yJ1tP7KGTdkXCMsn%+m2)T;|6mc08R<#>e%<;lt#ADCUf(hY}OL{6oM zx>8~(<5lv}s}Ze<x7*ueoO~eW_3G8PfX=6feh(B&t`R)Ye624M zuW_dri7N=Mz%&pWk>KE&`AT<$%xp9_Cr)!o$H) zZSLQCV8KtJw2V}Nw#7Ld6aK%yZ&wjzKFY6`qwbn0xu%cuP(U468_4u2s@vGxkIfM3! z+w!n@!dcoN4sR~Y%dhKi;C@%u99`JUaky zpy&eJBF95ikmDss4XVhsl1g|Huq*3lT}p#X9mS2Neot@+6WGRn^E8Z3bmTR8R*Al{ zDnb;Uic&7&h7a6N6C~s{i;3i4Knw^#qS_W*_j~~1S5rEF<{ggbZxvgC{AQI0O z4HUdo83cVtrR)MPsW`rIAcZW`pW>L*?pVxmn^U6q>;w0G$&Cs2d+DKn_5yig*EuuD z0FBIj{KfzKX+J$naf!6@)=#9*jZE~LU=C7sColR7jfGo-(vV||1Pp%zD z-kCJD7`^x0XjAtd<+VfjXqlp4+>j0XRI#q~c32BAfv#9qAA`XpYcf%`s|W z(+-g(4V_78OGP}-qad}!*eWf4Cex782-_GJ%Z*tGc%6WLmp;)Ix%)#4mecMi*A|dw zwXhR1k*}w5c6?&QlqyZ{{MNm{6Ac>_LW}YxQEn$7u~J|Lopj^GwGxU z+0o@>H7-!D*_!+Q=OPI?ozT&CXwjKshbMW)&Pk7M@GlYRUd8AeCSn9ar_qy8y@b8=Et0to{ jS495ve|*FT%>4xvIcbk!ye~p0p~P3A#(EVx4v+o^UyYO8 literal 0 HcmV?d00001 diff --git a/guide/images/auto-generated-no-packages-with-source-build.png b/guide/images/auto-generated-no-packages-with-source-build.png new file mode 100644 index 0000000000000000000000000000000000000000..53290750ed748cd009f960607e955cd039bb8c4c GIT binary patch literal 23863 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 AWdHyG literal 0 HcmV?d00001 diff --git a/guide/images/auto-generated-pcr-representation.png b/guide/images/auto-generated-pcr-representation.png new file mode 100644 index 0000000000000000000000000000000000000000..2ed5fef2240e98977f7929d76462ebae67acc881 GIT binary patch literal 20907 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 V5k>P(E&q66ehiBWZQOmR^l!?(n-%~7 literal 0 HcmV?d00001 diff --git a/guide/images/auto-generated-run-bentpipe-02.png b/guide/images/auto-generated-run-bentpipe-02.png new file mode 100644 index 0000000000000000000000000000000000000000..aaa39ee1aae1df5e93033ecf1593ddb8680a7945 GIT binary patch literal 17989 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 Yxzy&?8NNg2pmSS1UHx3vIVCg!0IdJ~&;S4c literal 0 HcmV?d00001 diff --git a/guide/images/auto-generated-run-commeffect-01.png b/guide/images/auto-generated-run-commeffect-01.png new file mode 100644 index 0000000000000000000000000000000000000000..d6cb18c82235e301a4e490741665b7d9159a1639 GIT binary patch literal 17418 zcmY&<1yoy6vo4eZ#ih6wE5)t2wMZ%M?oiw{IJ9ViLUD)U5Zv9}T>}Jn2pS|n9{0X? z|MhOxIyuR)+53#``DW&~ijoW#IvF|w0s@xocPTXl1f-DH-@LeQU%z)sxjJ8WAI!h2 zDIy^Fd_+J9dOi90dMM}+0l|Y40pZvL0YNAg0fE>#vsG2(^~4)9c^N4cKmFJWe4reK*-OKDhgJLs1O!QIS*foYUaMzW058IU zr66#}QRv(6C1|`i8@@6&vtLzwG{36g_J{rY@M|`s#2VwOT?`G zJ(Bs}^;U%Z=a^W8OIY=ub1AvKH!{)L&$D70A4$F9U0FQY6B6ssWPiTp&scv>hZ9DB z?tJFG!2T6&ihGFJ0+4*E`x{8Jiya;$e=M$y<1Cc*bYjGTArB5OZQGh|u2L31nxJM2KAaPDIl0D)J#3GH+{AHMVFp$`z zme-DOc*{ka*{G*2z#H+rF4iq*oQg1x9qQbqF|}U&g(c+w4UFv1#|CGmLeP9z?b%jC z{`7};R~v7aBwa)Z-%KW;Md$QbU^EYWgLrlY0%De`^{-hwtz;g&LoJ8ky8vC(jdMWx z%SiqT$FM^a4=x|3PI^Gitv&MHUpmEukW+R}VIanrY)+E8cfh;QT&KRcQk$%;{}BFm zop;eL^A1C@lxMmOx&9C%4JfqsgyT&5wo+^+r==17B*PJ05kQq~l~G6@z@7unt-G7` zrh>5__U=`S6juHzZ`@rhq|K2A^I;yDD1=h<;Htb`OYdISb#A0w8$r+UoZxYk>Dws8 zrZ{pJo#%Daf9UsY%IDeKQK}YsuLCLa7-S5iqM82>lS&8NG~PX*NW{udp9t-?I|!fX zz4JTYSUy(YQdznwjG4H!^W>X1pQ%Y|X*HO{BfzU|g&8+p6_bdue3cyq=oOEIlKO%a(~eoRH=;6I9Sgz~i#X zdO-W%%of23z2GSk!xAIM@#yWjA_^K)-VD6=iuH5i=+u5pvQRuG5}y6H@+hWK!3=*~k71w?7PtV1aY0!tz)ha-!En%*j z)u)q7Km3nx%*{;yC7f(bMzyuK<-Qy&Mg>}}%gF~F5^?4-VOHSayvcSV68CQB{SVVW z@_zq9W@IbdWn)(_4~i%)i8uZIUyX=k1Qo~7{4Sw^bt6(V=A$K@c5928DbD>SZLbA zsndjM)(WiN6Y5)jP@zNbF2T}$G^jB4hV+{|DcyJO_q#V8U{7Le!euk0i~>=)m49)( zDYMXf>cPwjR>a6|+<)U$je!y!4Cz9)3#(^C57m12pUErQnj$#-+aMqzM;OS9CuU`( zR=6h_RQ#1rYNFu%>4G=N&gN6CSzuYD)uYFAWrp3{j4Z)=@qzmstKomK+v>0#8@;0YO~45xw(5S7`ejAjn2*bM{2@c;(a7FP zm&|aZBSF4xoYzee9lNsjXd33EDI&&wXjoQvVr%_Ih4MpRrf*WR1*KrNL zAHeB_EY=l4tRu;{M59YalCa+C|GYM!xwT^h{RSV3m3q_&Ice**m}tG&v3t41VKYL) z7J0nJb|zZB|GtQDH&TJ3ie*)O^Y&m@s)B~|^HvuV;) zW9(@2KhA?p(GPR^1yO@+PlF2Rkm>IbEK_9+Y{y@zn$#44A`74f*|7~TlYUeT!4o}h zOw}@-N!#S-{-gW*A&O3MCY#oT|v+w10QMCaQX zVj7{p>FjqR*kpHTe?-x_#=eLl5&c|KWaV9|sCFjyTc={rTA=&?T@&Y~y~A+bq{Ev% z{WbFX^XIB>u*8;(YFa{9;>kPAa!~&8;&^!2Ze}e1E>@>U$?esh(Ic=gc0zmUFNEAa z;3bZTi*-+OFraO!DNwl#)$5tz;d*qRHXw)X({3PanRDuRDNoO!L+fh&!SsN=NcmHH zlzhXlE@1~O`wLutucK9rb24QYlbh|Sz|pM8TwWwQADux}+ivkKvW%~^~(Qx_q* zj$KlZa8&hNE8_a^7--Y=g8?-BuTEcuQQA{5{WSmSHgfaw$h+Z7n;v_d+5$kEi+~|& zN};#BSabZt>~nbM3y!jo;ct)B{nlQb4L?Qt`;7XMcmFY&`++!C7p<5k1d&W0HiwrZ z7JahrfL>Oy>cZ4L5fm_@3gMO2>e545$%9AJnF5;y?x4~rH!J<_-oqlt5t?&Xw#%_f zE?Ki?+0W}-*pSGEm&%#SO{W;8XZtNQC37l%+9Oj8ApkLt#*7gB>vr;AUi`T`hQK<3 z>yKT=;&oG<$zU#`XbTgHH|E^m1^PSPEXr=V-xpF2zcnG~??lqCa_lMnyq58wY{iVROl|f%B(_f9Hk#^TnGyjC7%65kO zXT*$NKR#=ohP3*c_V8(PvCx$4JsJB?kK%II{M>g*(xXs=Blhj>D~j#WOJB|x?9+1; zb*Em&9u*gX2u@eMIx{vF!1D>9SlgoQin5(OK(5|;=Bj;fmSHZ5A?mx{kW3U2n_m5s zZ=o+>j@Mze>n;nQ%CU8A?WN;rI=)_~`+*LjkC?w{;Io|GSdDNel5n69ACcK=Q5bhK zg!kUtb+NmSZUe0gy!Id;q&Kh??lRr*o`4A@S>~HrCiehEY^9s8W3P5CN@xRSRuC~R z%9i5pQ=yRSweHXo=fA)FH_AABRz08qPFh^g0Q9D|%b7E69Jt=$F2Kp>g+gC5bhwe5 z_v#WX5spn8w)M%#i1y*?xBD@Dt#8x!QAplQL1w`7xR8)(?{!%U*uVH(^&7z2*C2IW0T8WedAerdPo8Mez4fbXqYn zTB4{c$oUI+63n74)#~wnB-^l%H!vWMMpBBFZl_q7TWz;EN2(P-jE2sAJr9C)CCEU} zdT_*_0JDWN1t>($S8q8Dx_S9XX+$(XAuxZ@2t73FzB!T{@5QQzr@3*Y)TQyoq133p%SJ4337+V;#Id5lS@ky1XKR;o_}>ylTe zM4PBp>E5LkW09W7hn|An%@E^#Ja+B_tKr zqQoIVAd1Rvy>{B2Wr)iO)S?VSLM`&JHxiMOBI6IU82do~*32v(yUrr&`%-1KFMmjQ z*~WSO{*8^g;7AH&W$5tABF=Ts1Zv;xLr6=vbz?)qhe^g4l1ehQ4SSM)cGH58>oC2IJ%2=H zrEW;>lMx}Vn`cOqZZt*6Qs==Z9h*Jcqxv0&?3#D}e|gn+;ypSyUM66DkSf>oKKdXx zY7ube)16w~M*`-zOO-vx3%GcQS}g4__Ii6JGm^(0o$H&oC}e|C8*3bf=*3E3lUb)* z-1LU_2mWbuSWkbUoXW-ud`?>Al1q2lNsON>!6RTP0#!6;3L+g$mYORolL!;d7Hgl& zCE;UV-+}jCl9+);0>Z%w>Uzcd4>MIcYHtx;_d`aLwqnIMU;K5ts5;?PK6gq2+RX;o4v8(KPH<0|XJm`K+zw})qC@^tWyPuD~nGA5C^R?`y z&~QQ~?M2O#iN^feWY2?qGqM6TMooU0-tR9Q7;VGVgxrIuMCXU*lG$h%%F3=&IQlMk zRGOXjhE(#sJEN&80$@;N0HESKf=0PD2_Xw`hfQC~$UXD|>VOB5$(v9K9*nEzylz&Z z@j9s}IBE4yU98BJ42MIn@yM93PO6TV$1ob5!cSMQcBaG^4w<|8!2--7VqzB$2P(zb z8s+b(sBkkfbxq0s><5PG1ma!_QW7rk83%{UK5XdmTd7>Kjg~~m8TS{@{k7TvINx}X z@P45TTpFuV$hXgl9&bMz)FczpTlSF#K4yx&&pg_(Blbf&?|^L4Z)=E5UJbj`dM{C5 zW^%K^ru7rH!RFnEa&?|GFO^oX#h)P} zyrn`~B^l{xSz4tXsZ8t$0e{Bro3MyEeOe`$6ssw%Jz-5Iz6;aGZRpPkm>sPnB&yjG zuf~tVY=y>*DQQ}5(pTT~hv@}W@kF|iBfj3rskKNMU@)F3)^W62Kk`%+;D7xznzaA0 z)i-gSj;>7%=lyZoew3XP-D-CpapS*bt?8}GSy=fglkp!$Ivzyy_iz%O- z&Qq27N_FSl9hN^_ZH3#e$F#K#%X9qB6iRYl#i79Ue)fp7Uzr!>w!pWUmHP4gXw`J+ zw`}9FXwC2Ckr20{PrrT()Ei zDt{xjAFgOYjlbJrl}C0@_xD>%m4x1Vgm{60NydnX%rB@oA33`C>{VnoHfWn187THo zb>p%{rCs+4Ts#OzQdN_-s=9<8VfcQu9wZ4jwQLUorwh-lnS|we3N-lVvQJtjN+F$Ittgrq z$H^%!l2E!6ZbZ+wI1{MySBOkhuRx7qugl*zE{a&%c2VPwSyyfM!j#Yv=D7!+P;6jZ zsV((O=aKpG;HtSKA}TH9N$@+yvwf*AoYvUC@M>&vBk2H%~ZiI)~N7Ib62yV^r*;*U*u zeM5^%FHdzxwllr$$qT@3D;UQ)PuleL(cY~+R_N1ZxZaXZL4<8^X4V2M*Qn#(Aub~S zGHInw6PCu3!rXSXC+&F}LH&_gt|FTwSM%tYwvj5tgo7jLMZ{ZUg<3TIsvaaR{##aJYJ7L3 z=;W+P(;%If2TX{J5m~NFcXg2~WOeO(_;;tFw^u_fI34J-C2>r8g=p4=f@eHcQnJJ> zk}I(+NiW$&6aTkMw9r(IDs_$^W+@aVO$jIdS=MK|m2$CxK!S(e;Ir~l_atg5Ir*OL zn+L3{1itu8rNnjXpxW5Zs^$Y5z4AXmxrMu1#l=)PR;B0KRG!a2`b&((2UfOf{n$OC zb0jYh42sZh)H%@3xP=Mi-ai`*!gHR|aIzJ$?3KQoO?^Go(Ya)(&wk^`8-FMF1dbbG z3hDF&UjKeSr9@M%$r7Mo6ezlfvwH?Q&Zpy|E|eE$&TbS~8Ny0*wSt__k6{^SHdGrMGt;)z<8i`BiP94ny_y#TMU7CA`kk&8@y0l*^CofM`hEP(@yJ0()*Q9ahI=8R|*4k;74%%7C1m9n;B@;OFK zPJ944!ro`tjyPjuYle=X*l&qXZ+`wf9_Ey)GzQ$5!=Fyq?Op&6wcO0fI^%XrTHiv| z^kO*jB&_XX@!!81VDlk0&seKmTt1sTq22fLfjMIPEwSRB?aBVdfGnZXV$4VclUo!# zaI30n6^^e&sB>~eU;+*P(vEVt*6k&OF+nQg;I;vMbg0lOYUpI}-TcRv2^>uU~cCJ{XCvsmbh z)rM0YTbZVzsE9^H9EF@nXpUK?cI8lfZ( zNk8?%nGl}Lw(xy$tpzBvX!M&&{i91L?)+hie`oMcNq;EDzWgkwM%CJU=`mHK5gTLi zZmb^zJr@`7Zr$^vHhY{=hlVZ)rcf$DLRnFM{(O@_W?J){kSgJ|9g-ifS6@O#S_3&l zk_mObwoFp~cXhB1&v-bFi8vL0Cj(f69#Ovgsjv>wcjSIJ*Kd#=6{2FST9%KqnpOj((+g_GrZBT z>b*Il9f-<+gL;=)LjL)5``&4JbbGSE;glYtB6P< z^2lTsrLg_!N&Xq>XuLF&Gn867%MI zhzpBU zmFS{Fx~jgtJp(}m-PDX}FyE!HE8OcmY$w9(^8oC4p}NCngLb1gV0e2Gj!7`qoT3S{1d2y zThTX@f9A_6#(ai*qooJFyWej`Rwswf=)K6&_>~LI2Qjbh&Cs{D`Yc6oF_x|9F5+o+jBiluAoNoif4{dju$ z4R_SRNn`wOQz5^`pbDRs0C&5rflneMWlMKS9g>|@r~bRJQ7ZW&?N3^Mh6BAgP=(=k zYk1yiXYN_M)w&(T^9z#|_KX4SaEUg)?eG$K~x`OXOPvzTUx5FjY{xtM{FBktmBjai1KJB$ijF9 z!1#w1=D1V118S-N>we6R>iKnX!$cQt5WD&YvG{nC0=-hW`&s6K0%3#ngCWZI6pVI` zpGzs5T!;puL1nRH;Ca?3V#8BodtN&rN{hGKwfW={{|muDB6Em(F%bUhp2U+q&wL(H zudgiXT<-1wPxoE^`nN%=WcnZtX8lZiI^jkmu-QPOZ-2x+mb*gq@I(gM&>WP;l7toj zNe?(R_JPt#V3DOBbUh4;z_-Hp9}tl!AQn{`w?{koISb7ARN2-2&&|edi|(%p0wrH` zG*!8*v#wYA(D+RMcW1s|qlo!s@S$fsNy5%g2u;*3Q6S;fwx*+WZidU|6`wv~_wRbY ztrtdTrXXDzm4knFV%b;3tl5YPH&4>6jCa#|_X(R~zHu4xj>Eln8Fd8H#)aywnv+=B}s>WpDLE$Sb)rg3;QTTZ3H1!7^vcLY1_YGNp z<7+Jvmd-!&TIfqDhBvmj?mA~S`rHD^j+#2OPeBDj9^=l6>HRrck1z-t%YCs@TIIig z1#@_WNzSm;>6_IhBOXH@tMsXJeW%|yho&!9zBvr^Q}Q&?!m}0$$!v;C;&A$MT&*g{ zMNOD00gM!z+Rr4r%3wutU^*+8CJ@*-q5aAQJ8f&yFbla0jn)v{NtYJ2V3DfyYZmlJWUOjR`BjdR-^q=S^aWt?v=^Q!E|m4y zp?mTidVb9c>gL%ha`VdnO8*_}~d>?u{^>=nrBq2spHrf2sua&|Bf^Glf9 z#?#-ZRzNlv&=Ct)c&u@BD=pd zd&s9@!4IfQv?ef5&ME@@{U`$G3e~&f;(%Q4E?k(ew+pyR`M*6~&Q)lXkrEh`mLlC| z()e^)k3_(RUZypm3|np3ciA7e?TDCgFvbTp2^+!2Nr!X9x1MzCzmxu|uCYt;UIQj^ zC;vOQA~{?At&sh6V-bgsP4zjp%>xMshp=k45G(&RJe$ba3D<3!6oKBjk8|jgu3o*a z=6Awzu!(f5zfg9;19~rOIT8$7C?J;?xjUk#E-qZr)PV#{`b2qoo5Oe>omR>v#^Nt- zdpr3GiyS&1T<%xL}nZYxHS%_ zo5$$+-vk}m%t*pa;n7qA|3(o$C{tOl&fmaR?QG?v%Cr}*1CA4IedF~%q9sK&HQ5q( zv`d|DD7I7ZJ8+*!zdSYix!Xe=*MbhMm)nSK7kpY>{nSo#1|&ig8I)jN78Afm^LH4* z=0pEQW9uSC=h(l}iMI7Eek#W3kF|{{lLn*J>K;$5enKxRLX~PouYoT?51Rm>bYeW;19sv&El{x&>u*c37GK>x0tA%tXnBs z*VSgV^*B`MV3MK3lwWFFkRy2E^XttM!gwT}5Wc>O0}n|g+>M7#oxPo=FW(P$G@kG3 zEG|)YE-lA^yzF|qDelUMp7`&s6}x21<|fs^ z_b(eArVC`Z1FDPx?x152v#x(+QpCg!Ty9N{(5mnd+3__m*ICD$WE`qGS-CZL5wxYs zv>_;U&EIO;482!_PBr8|vpt^dXTbVzdAW_R zvJHJx5;O`GfWH|Trk~7(fjrw!-f?R!SbdFuBAc3y-D^#a!{JZrvStQdFJSd|sMw$H zwiTmONg|>NeuG>R(i52y>T^8L<^y{1@T#3@qRAOwS9TA9diHF4m?itG?@N?s(Q^@J z5${P$5S2hXFj8{=)9VO(ht74s{QfE`I=9akf+_hAXTHwjBxc1(7Cmf4++IKDE`*CY zFa^bmpVaJ1##ZYpL$!?b^>&pmI<>?%#C6TtZ`#LRl!=X=U56%ym9#Gpec*W(_m7xW zmR-{#|7-^sjPKa=PMwTaT?6NcluPC*G7p0L-z5LhRYLY_|K!=v&sG(%{c?iE-*l9L zB-ZMBKJ>^h@2=a>cola;%6@JSdf4JF=0|v1;~*Z*V!s!rop2vNL5tG&n)Gp=^_o`@ z9Y(%m&z1EkQVw4-*2b9zfJ@zs1JIm0nas$gy@*6&KhiTHPh=Mu75p|7=hOPJ`Q_TE zP`=C`=(?vyjZ7)j{ri1vtg`ED_FBD&qLBS^*ApAj5PZ9JF0$D>NoAw3ehspQmnLRN zDef5ci?K!7y?*DDjzV;V13k(7&|(awZ9z{q7P-`EQV;YjSCM>y&VMKDVFpg`BFl{B zGPTmCew8VvNa^Xy9sPP$ky0o!hDLbe0#Hm$t5PH1OeQ8`ca%`vlAJ&CbgfkE93Mo? z&aV8(`f*ph&|xJZxo`r0?Fdn$6D=jJDyI3+EfQ0v0kUl9zfB>-B>S;%m@NXFtNwz> z8~OCQK76PBDn_x_@bV3C=>xXy>|1;Nh;qZSWV_{!h1(P1nD6kE%e)AGE34;6 z+e9{BPiHrEO3%i)n__<)Q5F%AcxZxHhiSbn1GiK5aga{q_?isA)#QAJplK`*C&GQ2 z`G-zf)M`E%tSrQNl;Z09042pFK7cZW!TxZ=BU~)d{Yp|82aeE)CCvC01;^Ha_3aT| zkM+Riw9p4PglIv@0Dq6CJbAjgaO|slxa@n?yF-ts2Ii2&OmTtbz~^@6g`#jG(u+Ic zfu?l`@5@IDbR;^R00Teofb~x4I!&W?SCa+11Rnc8I$Md)?(0`8e@d=MHcb9(e+ZgV z5!4Ns%>#%vd)wWIqx4CeoXC}|PLl{)s;!6O7-X&=Dbfjmi5=hO%D!)J$25Npak0n~ zUEL0_6|&G@A-l(#KpLr4raOM8BE$B&6-E4jXOC2I_)1xp)s#??%ca?H#!~xKmhe>3 z@A2e`r_JS-_skmKjr6Ye!zFs~K9$wn8by&wD)?M^Ro z7@f}&mW_Q}=5a_*XV$Ewn6J$85`aD4j&V#EDPBRiTnlz?KB;i5^o3Ij>zzImaA3O~ zq{GjaFa3bxlcK=-w$+B1E?=9g`{Di;?I-sqR-+`zzwWQ%p7 zq(ET+5HI#owuTD82|aV``rF=>Xa2SO5-j)YExAODh*`$zyz{CF9f5K4{r91TZ@zcwk=e00tj3N?#GNjZ^rbcn9BO*@?hx$j{nDLR z06XbEhH|2GuJkvuREM7OPXcA3pj(T-5NZpp!VvxqgifmNv+(L2Y8_-u zqc=_-KQp>|eZLNDzzTO#(T0Tf4XNLc+mF2+*4f+gJr`X0Zr=Rdc`yblYQO5k$;EK| zOxk{NFnW{$dwX-`s7*`98i8?sPg6^kvGyRQ{ki)QX1*>@U+Ryhp|gkU%PP0sh~d$sV>%AU z>_G;AW8ZL=KBdgJUdEi%+vTulpP_h$iO)HrWsSBq&rQxW1}%9pbymuL&*#_wd_3wp zU?&_6eB6~e5fOt}f35m+3 zYR}S2dp+RzzV4qArCY&qRac@ag^EY_;vz9q-r`1)8dMBQ>Hbg~@w|GGXaYY4H38ZH zWgZq&Z(x8|y>z}RXq9;l%*WHF_`pxkSoy9N9_@}<4u=2IM=nQMVgk-iF180oKN+r_ ztap@^M~Q=UKIR-~LeA6^*|SP9d#`;_MW?Jt=0BNiv>z`Aq`MX?#p3Y0MhTfmf{$`alQLRV}o`IFt4Jo%sT!1^(r8E>h@ zE;o35prfJ9;?)HUTgF<+Sz7`hf)!&=-j~hdg9I~0R~s;u7~J3%J1h(sD+Hp23h*&d++kDLy346uhhGz>$-%0((pRUaM{_3q{4yS2&&&I*jtBwAxzPl3` zM{{MWpH$|g#qYn6mVO`B8JW9+f`AA7+-gh$;n=_1pK5&`jN6KgvV}dncSlrmd*{}7 z_EI#b{H#m38`bNIYE|xFkbN0PgGd5Z>fBKYiqG~XtbCK{N%#KA9KQP zg_rDqTlH zRY9c*=@RI+j~;cFwua|>W20UQCyTULyi)!=yxtcBgDz4mr&D{8H@{ZNMN2uK(05uTB#fMx= zG)6d?wTV_b4L#Nf*~?ic_s2_*dtRP_*eUE4S4TFw9eVUPGff@O(d1{KUB|0lW0C29v%B1&F%}oTv?FtDHJ&9^GfdMg5s-{qb4F$mnx@$ zNfBjbwJXz&4x=EAKF(;zb*WP;6pczuWOR|2)!f{D{D1w?wW17M;z1Ek2PGw*5AhqG zW*!xpU!~DY92hfKBMGocuMB)>eW+b7FJb;k{1GJbQgWF(0hZne3QmhysCYa3R*GYb zrEylae}YQ2E7KxHqp zCgbv&Lhy@y@`g8$(UnQ224}zK_RE=1I|>69*-!xw%I}V{&hJWuly*-4)P!Y)S32dF zhly#c&Gnx~vB!c^H#X)2z67=4os_DhIi(xrhj~9WJ20LqVt|}XYb+H<$KhdNVgcrM z&Yu+>qvl>~<1!s`vVfXNppAYPuVx{BANSs++Z%$B%oTUYM%G2+`wae!1M!D`5$YxP zo3)nTP6|#51$-#Vase+ZE-a`S1gzFnL+fEZjo!XydsF}r8q7{q>9nb-8q7cX(b3Ts z%$6Zsx#A1+U%-D4d$edsKZ>?%72?uu<9iV^a2W{5z=fSjj;8P{Cc-a*cib#MB5Ssq zAGhAOI-ak^nA)>v==$nEzoz~78XXi(jg1{Zy30<&GkMazcTsIknToWu+Yn8ggl3S- z_^T}%yg_Rago4uP>5t~3GDT0kV&zlD{mZc_z8eYZRoGHj^!xR%hjVhP^#{;hHP602 zg?z5-p-9LI1ngUcvg-W^6ZIH%0io%`OhBO7MLu4;qBZEpd#8=hO`l~I@Og0H?TuO0 zNwR8F{t|Z-BKMc3_^UC}QcRg>56VY_H;whn5OK1m^*Zp0@>|O(rHv$FR7 zg!V|9@?~~lvev%jcme?SOV7!VjgXMyq)5VqgX<*iZ7?H!|60b4i^K8UYvvpco*>$` zll@cH0WZ#=#sNa89lx6Ta@Ld(2;VeuW1;qXYLw!ufr~}Kl)nGg`7&>Rt4#B2tCLJH?z%{YWhB$d?oo$*xbqh#B;9WgfIIHRxRJ4-C3?} zemwS-ke%NRg5HjU!!~G4jDjLaS$?B63|yU~YqT(?>}0d|Uu zKa@foqS8g2)hAv~l$6dj;L9DrvPw-BqnB@8u5715ezFtt7fQwiu~D^vxB? zT-zV5E*KEIJ=CW6qS{uhzB;-e&1Gd|9%;NRopI6ggJ3Xcqmy<%lP0iaMueD{cUGk` zlT0*SnBU@#L|~fJazahi=2Z~0{qw(7TSVz?!pp6}8=TNHb-TP@zY=)`UaJ9?s@mUx z{qny_sY!quffQqjsx~9(nzsfZ<+i%C$tEtV7`?jPvx;xjLY^8HaMrZXvVW8g#!I&~ zD>IMd*bD?NIdcMRNiz6KXa077(d6*=U-;f%R@JL4UTXA}yz9Bh2hMHri`_7uxJt+a zbLZ7Hs~I&{>$M$j<&JhZ8d?a>^F?-=hu22hn2(dVy)9K|bSpT!vfzm}B^it)1Qv^1 zDQN=gtir|oDJIs$?XeCiJja?74=my;O1s(w&ntR-)zkJR`MUxUas=i$jv$?Ld(l!jI&Tuw5 z1pj`&U|m_!F_y0RrxlyzpF%}3-_M`GwXR3GH1E4x-V@hQbl{(d7ufw)7!H4Q*NYmR z;A`B&`SYjk$KLG$TX)u6m|{jzcJ9*yWrd~KSiSoh@M>W}vtcM0wM-Wcs(!5YTKtN+ z6DvNyDBIYo)6r^6cUC-AoVZe#6qg=^kW`h#Qno?_%~xkClq2lZX;NZ)xVTWMGx34C z*Y{G~QQp)Ou-lWk6nhLAid)kG9B*GJxgLbCWs6jRtp^bT~Xd3mPLmy({}gM z6D03{7zz^n5>RcgAUEJGB-Unq%dr*^bF$aQCKpyT*32?5XnvCe`_>7n*;%lZ?pkhO zz4CC*DA|Thf)`7MV`J|O@O(2#m3Y9*`dvzOJN)EQh7>B?0-2dfy->j}qAc?A{BBpo z%%Lx>_M4fv`vQ;@$C#Mkf?2#LU{fqdNY$a|@$(g_#pmuG6i!#PezD?}k=K4QuKmf- zIJ$+^O8b>W)fh_Q`BggdKV*d-tU02lrnI-mUpsuJJkN?hdc1~Me~N(q{YE14L9caz zm-e8d@?T43jQAua-y*OnxtH$0`sH(wDY^={NbFA2G+6rYe!p&a_@<<{g&B|crJY8I z)R$g&4snNC@apH@+`;=A2}Bi_*&0=1mQ2S0y6QKzsO$zzA}-#IY5I=_M=!y5!fo7Z zwO@5Lzvgm_K@Zq5}zvr1Sw zP(v2vL}nG?fr_gfag1;p;D>N>_r=)5eiwC&Cz}|jngLg7a=7!yk9@QSs5Wbh`c*t? zw;lqvCx_Nqv0R-VmhQB_*`T*DxPu5&m%4%h1}`6f*CaHW2ns(}s(JD!Hs?+HgA+7v zGLJ-u$(r+X55a(H@I^haZg-o&`tOdVQ40&!&x}n2GS;jh@LX-sYulnUvxbTt0sx{# zga}zzKk=7K*08e_@_d3Y1^-v2zBku!3eJX?2WL z?UTN{ZT?-V@GlMbSmD0%<52CdM z1NDb;*^`HHz1NcbJn8?g!?%6_<6%g>V474|U`AUXKh z9>zlwe&NPr%EvEaTwJGAw+dmlAZWII%_>Uf@z3CE_YzXB<6A5jSrv5{Vu~P1T}99R z?*`ES?&c^UBJy&k=q5XD7oUozg~g*gL#X-}HHQ|-a4+@ZIN@2k$BAUf898w_F!Ep^ zJfK*2a24Uj80=rSml~iMsL$mi2M%ntU~Tzv#L%R5C1|lVThfhRW}M?!JGp-Or#5Md z=ffD8^&^pAH6?c-#!*(Tx9B}Lfl(H+VEQix;`--^sB`mlogta)iVh`-T-ybVtS(!l{S7!;UrmB9 zUymVM-CG`BMzYD>eM;lH@Vv~D7H({I>$kAcafEn)Y}+RmbQ@5bo_12=jl`YwcTNGm z$m<;X7G)X$pUtEhZ;haY!i<_0m9`-Mx`Qe6L}4BJ3$4aXeLCSiD4KD0!)owlWtMrq zJs_3@d1oU8X<)Y1`9JgdvoBa@_G-w}BQ?(W&wfU5v2*1d^qQD7{$i_r^1f|-9#_vV z_`XkWn#2Oh*uPc!iEk$r-Racuv%xSima$NErV;GD8|8>XyOARuFx%d%KZf9__>+op z^M@0Jw!*XXP7x})G^r~x;nge{b?+GS2}101Vt&xh$Rao)$OW!D4ZW}*qfS(YZv|62 zLWU^ZvYE_&$l9Zvr9Dntu{6i}UFnFE&-!53{8uZ<|H$$S;O%P*Lv30nZQ;f`?CfU` zsnd-vLYGvZFkLPLb6K76V=O{!;qu|3^@4408W*>^cK$(Gxgdv zOpSNR;v(kv^VU&3bq1jXU-ux*#iivZ4VnsquNAnq|IxLXJcfpWpyaA<<-+dkD0kzb z`6^D!Nnm7)RhQmz&t(On&|0VUGp^%;JlIlZ46_d4QBf0Um=qhmIr(6Bh25Q_Y2smb zxQ7_(yOKzD5dGH%mbJ;+0e8$in0G3aH(rHasGl%c^+lvDb@0_=h8qmzE}!-%($X1^ zwXSPdoQX0ltuH!Gev|pMye|c9l=kWOqpD}P`SI=DI!c!LR#X+wq(Nt$|}Y>GQ)2hHjvt$w&jJs4K}8?7gHY&SFn^SgD;59 z$gSh*V}AZelOK$Gf})MPpNw-~j1W>9H;J8_ejPxp%4CuS1C{rKolXoSskFx2_n_UU zihY)PmD7|TPFbw=(Y5%4{5<~2e6&8m5bT7(qqN^ny=XBSLokBh5Iw&Z?wJ4hBxU z==~F5iw*YFQoG-VoL7ZtZ;gtjC$U>*V~ET5zxrmQWSDhy8Sg#cCBo*nz)J{-0l&#v z+lit-VVW0ziN4O4UkEYd&oyMNKg4&#oB(_899B5n(1~%v;dD?Tp zSFSdvYID5rFBb6r22jsquuq@2ozI!^c>vFd_Zk| z3XK1=Lv5&Ab&nK2Z&>qqp@YSfdtCeO9uQ*UpLJmCr-EJPbLMmK^Q*uA^iEare$0wp z;#s{dMT-@lI~M#sb8q@mfgQcu{>{pJ5!&xFUw+rLuScG}|15sv?!F7V+xJ&~KXcV6 z`_!-AA32{soN3qpKBI1Z?`dlWxnPC*{joDo`On#~+^2V{X|*`_f2DVK{lklI8T|e$ z^O*nbs@fM(4%0o=SB1~0-@d22)uSQ#zSHD`1<%r=#G7nUHk!9i{N$}7zT8@12CG-A zUN{O&?_LuX^ zUiwR*q&OvBQK#xVWsc`I1-xSm+07$r<+RUdLS1dsy}b>;Pww6J)pSP`e;M21_4_ug z(z~NG@0z9`4~hYgSOYm^KQ!_*EBs#{kf%B2KF3jhr*~oxqUGkq%E{Xl+1~lXbS}2> z@8g8yUN&hJ)<@}yC*Un8iZ({L7J!TG1`LyMwZ{~}jy5m1X#KYuyyN=mefDYgAboFyt=akR{ E08x2D8UO$Q literal 0 HcmV?d00001 diff --git a/guide/images/auto-generated-run-ieee80211abg-01.png b/guide/images/auto-generated-run-ieee80211abg-01.png new file mode 100644 index 0000000000000000000000000000000000000000..30f4710652cf0cf2ded8e495285928f57e922c4a GIT binary patch literal 18167 zcmY&<1ytQYm~Ji?D^T3sio3Q@r1T=iT?)6jTPg0B;ts`~;_mJ(?#12R-R-fvZ{NPn zImslMlS$^!{QmvHit>_gQHW6h0C@XF3Ze`EV87RMUQGDc<3=H8+iOEu z0DJAcf4v3U1pr450NB?90D(jRAo!lzr1bH%1I|E367uqbTg*B9dWGchMNS-P2N@fS zgEwi@X7=?KrlG#P(`#$=y7Rv7|GC}GW8VRQgxVL#CsmjEqclek+}?*?5qD=h0%}@J z>L^Sd?2ir2&7bW8$CbafnAtf8;xjAfh*ki9(lS9}QJC~yG45X8Xg5o(gHY_CKjjx* zt?4sIhr@>>Ln9+2+~;91TkJW*jur&H`ZwRB!NwKJlqtoT`A@y$2Zi1u+P~&E zIgGH`&W-~wQBixnQODJDZptgGPx+fNR7|^s-`|s>2X?M~f1mn-A_iJ{7Sh{C*X)HG zLCKuu&2-^Vd}PnmBwf8seloR!@5?ZLX`)~PA<+TMWuO~;d@JI1v@*;e|8Iy#>UO-p zLNI&d%yq@gL(7f{-0x8I_pWe!zhUM$qArEpmzJWHm{Ch$Gu@)VZ||3WT_KF8fXvm; zLkF_Y>GlG1K;JZhP>>Z0(mL9?kaIiS{~BB@TA{uWRdpZT!4;Xu4r!4Z^yE&Q-U75h zs6=Pq?jit)dxbM-8zMHGN#wPkO|U-p_RzL)SY?#h5mE>V6r9Bb`s*sy{IREW5`cl@ z-Q)hW1?XdZwSLpAZlEGf0elZfz&`|8gadi#VDb`%U9_G5p^dG73po|bn^I|y*m5MS&2``Q{>V@=aVd=0+K6;<-l_)`BgOqs#!#5=bVIuv&cWB`r^Doj ztZ(iw@x-jilb zS*36#>FtfF-XF=ib>V*A=eA>>qxzlEgME6f^=fM3Mx;bXLd{xKDQV{2p&3LCN|BQd}97|l&^J&f_r@)?w>DJRvSSv*+b#ZRo*dPApA6ti4ej% z4GQHbw?DJrf4>%;zP-=b|DWa?wA(j{W@xzSa6nZ!%yW*TUHOXdgjv{R%2#dT+tkrK zL4g)R!8}QUQ7r!(8aVtM@W$3XzuU8t^pu7MVstr;h0l$%VP3hJp zxBY*V?(D~?VekvUf|b(iT@iC&0GG_*y-rx7F04Y7auHpzZh){%N=2^-^lyVE)0-F= zlFrd(bv-tccDy0N!|z6#zu7AdJF!6L(MtDz^RW@vj6MS=>7=Q6um5}BWftlzZVgS9TN`~7{0>rv>UDJ0;W zWPFlFcu|ki8kQezm`6>e2>_`ElrU}N66jloQj}{Yjs~&5SE2A<)ILWAiPC3|{aD4I z&vcN!{@LvYgwlgh6X0q~VF<#a!LC52F6dO)t=ThfC;OqS%3oKd>E9vxTfqTyf%)8f` zIas~O=YJ=t4p%fG-h3xI0_4IC9Emn@M%f_b;6yzWOL-&ZAb|?;d}5nKf8a(rAV>+I z(e{Ats60cC%eXGp_{fZKe(-=k7bTU}MSu>~=6{p^{hdGD?h%FynLk>^2b}hT zfmND1|9mnX<@ZO%o4#07OGZe_o@nlSj@89SRXjX3_jm3%h#Iau3!bsczrEqi-T<{g zhs9w2huXIqv<_yR*$-Diw{d5`VZrvx;w@cY-tQ|^+ETM{Yc5@h_nkF}n>}?V4oOlE z7XuV!aBlQZ8{}y%#w6c*Fd8oIMhSsGz=&sj46v>g_BIOzMU)Ry(TLtc4kSDEOn`@g zoeqbU;FAxAp?>zs_J*rh0GSh9u+{&!b|6Kkr-A$KO0DP^v4~XQYBTXrE%EueWcj13 zL#wmsKUvW=_}v*$i91*(0jNftv~3=69=-TSQIg0sh0gGi-a`Jaek0{s#oc{2hqW-= z`y{Pi1(M+bsIy*@xp>U&H&*_M-)RxFc{Co1no4I~r$L|8LTPvpSF7S9oL}4PD^*$B z6ZCn9UC62l{S$2A*Ntb%U%0;;MarG#1^jUYX?Xi~pPE1HNxrg3XVK5|`i=}tYj^~_>y3E&pbY2yX zo@}FY;3>V}d@>k5PxL_DrL65D)S8?gxJi(fLi-mmJAJ-Ajp5hs1q!(U zVyj~^KJ}Mr8Qs-fG?zWl#}$OWpI3P`H%!VOm}EJ(hTpA*bD#F$Bg+t=5v#F0(|pkG z3TS~7b9*B%?serLTT#yw)L=XP`2?oj=vVJlzJbGPg_F^@l2YK&bv@3RK zKf5vJtzqHQWkp4RU|hQ)CD6r>oxXf=?)ynjgyFawiRdXx@#5S5@R|@D62=1=`%x`a zQW&cv15ozK+0cB;VCcmnZZbL#H~JMMUQ#LN#fo2*06RsZB!%~LhgG0uzNhruTnHWD z*A!a{ClL?;DS9jRba-@P3*%AZB-S-o6dd?)(zBSQoIA=8Qy zq*kVv>&DTWlS;t98a56mehxleR3Px86o*8H#~4MBj~^*df!z#8E%ikplmMsIqd!72 z98L%7n)J%p)XvA4*7IEvgR!9dn-{Nxpj?^YpT2Wvr)#jl-kTJB`8>!A0%p=|PS@03 zZhu>e2T}vRBm2bJ6gLc6E@(gb2$fPfaYw@{Sh1v4cLjltSH&AK$PXP-rAVE}6k^~K z%UA0@?;d(>x%**8*J}}w3swv-81FC)fVjE2VrqQ6hi3@^m0f|=A#m+}aB3z1B(b%~ zanEV${@Gn>Ihu`o<@Ym@%3uFMZ|!gG_|WTX2m%=en@*7`7L^=Elq{q-( zw@XTFct=i7s`FFI{i)F1dETtl75~ou580BT#tvueEzAj)(-rQq44-mT&(Bx#6?z23 zFoWXRU+OOMOcn4)g+1GjT(bCdUxj4VR|3g}xR!kxLx^&n zte5T9|D0}XE5=f=0|$_S*kaf_4A?wZ=7p%<6%nO5E^3T}XpsBVpqZ54b$`j8 zvG(t911#A4jsoA%#xtVgD7?H53~nGJ8g}EF*>9COuGrBEr>Fga1nVsvOBj&<6=rIm zsmimeg~VWjPN;y}%G*?=@wu{4Dg~e4U8J$)$9l-^pY!d*3<8{Ly9C>a`C6Y(zOd<1 z(C5!i@`Xm0mb1)VYaT))BkQ;04>v2@^ZsBYSiSKtyfacb zvtYjs)Z11YGBan&5U5Xs)Q`O%ePR5&4J8DGGG?WQVd8M-y3+DGU8(VY9h!7g%z ziS}!n(*8khK5fT!<6Jnk;L^2{DHYq($Ed?Mv+NwRYNekFna&Xro0SiMLT%7*IK2jN zkS;!%8{gBJerp1*MJk-84m{cb&>!RDColRa@TYM=b~IjzPkqEjgA^%`jKP{UXoz| z+S@xM9N<;J`Z1}^+KB>V?JxKaVO;bA$!1S(PLCUr2xKWO8)2I%p8L3~N5cb_SNo8n zkuaGAO-YIlfvf2?P2ZGy%gx<3UH5lwvnkVPe9|K}%KZD+$N!Cs3 z^`dVJyI}7A`_xj_EU40VFl9&^=RM%dBT>$qRx@vxKeQy$?}w+BeoBLod)qxabbQ#7>2^l8!PO^4pTqhG&h~#jQ;T_5l!eHgu zdtye-SHKC|gq(8``(~IxY)r`s*>%-iEGEapZV36?_w&R8MbP1caKq!=OUcqHzPFKX zs};BzRRtRxRrx?uo9Czm%yC6?ykSz$QBs=Hw7OEX?Vo9NKhwVWNC_uOdBsTK%lL&t zs`4Rjxxr|3*hEfLT#2GNwhFY`GPJ0)zv5>26d(4eIhtwpER_Cz?wP~ei=`ai`w$G^0@OU zHU5C~^jNtmzP8mSSlzvrkrM-PLy^I6v}G<1iIlbmAc%;NsUoaa55@o)1^W3)Upd3G zOC$4t6EsXZi3M^bS02h=j^?ut4z;o}ybLTMXm5jwc_`iPRo&-L7OD2<E@`!Rcm%OQsRt|ucK0SA!znm(^Hq;Oei)p!yYsu>IbO2}a`74;6xQ6m zL8l{rA5~zcRF^(5pDfh*^f2{A|E|&zTEzXTR9}z~u==;wyou{BdPrn9-g%i3DdgD{Z>s-X_T??+!B`L&05tux znHkf)LhXdD#RLP~Uy= zPNqnAbX371O*qX_*mjP(DVcZT=w+I9EN;o%bfahQneIzQ@Afd{Xra2W%*2ExGA%7w zz=^iWP0d-z$UqF2KytF2;^A5IYZVtU_OG*VjEq*{CehS~PX+4XQ)lChWq}ypo}Q$5 z-RTq^<59^>--gO;vnRZ>>_QfL9(jQR5d_UE4K1&62TDL*;fA;@Pg&mUD8} zA2VN`V?9uy+`rF1l~iv#^;DtcMyFO(@RE=&Ut^A=6i&=y`xZ^pm0T!!_vvBLHNGj& z(9%*;YGr09$MYez_voZO*zLx|F*+{p*3)d9*7PJ++JV)vuV~r(Ue%$oxw^?-+ouU2fe z)BXyI+y|fKPQK8?Ee`|F_hf{E=!tkplSEnf3QiV(=CUFeM)q!O85ct9!#B;t)s*6S zX^Xz!C5{Fi9UFSJt}j(@Y!R!M>fC3K{O&#)c(Q+Ny*V_+KpSC-1R!(~dm#~}k_zMa z?Mrypws`f;547G@S}8g0z~2`j;u+mR6P@t3@O;ZXY6w@%-1zR+?wHYUJOT0!+PwW} z92`Mcr23^k5(RG(PeCm;#}1tMgWmCG|6RaX?&@Q?&R|dksggpdD%E7X6FYlW4bK(F z!*%6=l;urYr~FfM|F!Z z>E3Z7Kxd#rAG!G8%5_b{6`=Y#qo3bRvk- zeGz6)FHRg|%ozm+#x+!_v0a^t7ViFr0J>0D_;7cnF~(~d@3!-!H=@b#c(-8r`2Opi zI-Z#MgK|mEQ>)vs>onS#jLZXp>H<}ET$%7EYvY(&h zkoN44vL->j5U(ONG1~VPi2l|UKeCO7A^e`tvmuId$rY1Ci&$}VpG*Yfx5(DB82l1RBx!f0)na(;4 zUjAZjK^K_~xrY=;Y}#=!SoFtWpKJN@p0L)J3fO6judzEp^=YFk-$k!QY+gx_7}(C1 zgtsbniChOh9F*tu36qpCr&I5C!f`x>EEp~8^_TNH{#?uzrL?Cs-d|LLu5V6Y z@N`PO0fNe=+72tLW8^&+=;nmG9R=aw!}OyFTZCt3?w)R2>h4a)lzUPn`P35O?o!I` zx$)T1;Slke^2V2Q8yJA?>#Y4H5@ZajD#sLdr|S`?GtA~>R>yoxLg(bLyI08X;&g~vuGscbMf&MU zYi@5Uly|j?X{J~s^u)of$>}9uA=Fs;>#`$n9=$9kR6Mkb2ssoVORbbC-F8YEEhV-q z7In&7E~Tm^`J)!}%i{q%=TM=_x+@J$-fF4lpJfp>qPp65_qR%DI3&f|K78DUG*9Ez z7dxS4Yn{RAAN50emYN~sO|K>x_vp^7=9M!QWu_jk7!FR}>`01ajXk})1|mAH=Tvcm ztK_$A3E4BnE%pux54Ez3ovEjp;@*ME-@otgQW^Y|-xZ0Y@-gw)QLC8brhQIwOx(^D z(<~zm9o?UTc)tuw?B!l{<;tu-<(Ml?F&p+&M37E3Mv#fW6c+B&SVlw~3OU=Ww9Cum z{hg~8Pmt|dX0#^LSN1<$60D4f@>+0Y^h3f3DHHabd{QlEYsx_^d%per(biOw$C|kK zf`kWi)G~s>D?IfBOuJbtU8O5vN`dDW@Zz|?lI6Gg}WH-%{#j34& z_e!rrh=aomlIoG)Q)n)NoT7>v>u*$VwsND-`S5mv5 z*nUF>w!~n42FlXX^`Uc$$l3&s?Dj|1Vz*&^Z4ThuCkWWmS&QzRz1!X^| zgl_MRwsU0}iEVOWdZ!$`XMw_nc{pPU_|^#^pNsOb3GW zHy>d5&H-&)4TUW5m_$dBHj6(FbK0zxwM$rUWO9`}ZPbZt9h`ENSkYPb^Je0QW}(MA z2&4gURfaH3US`D=6YMf}g%+1&w& zKA^FDg+mdwR8<QAMmg6mMH18SpIX=GtcPSI{c>6-nKeRo zyzjq!6tPLYZ_SaOI$hg;VT`kK^W__}TFek;Z5kTtDh$%smn~FzN>K4vWSXnwVtR5( zVEh~#)$zF0Qn>s*hRJUni+>n#^WX0*=IUsSsY@1Xb(~;`IJj?C&}}zr*J4cUsXZ2# zkLztkk5r-ZdV6x~7Ua;EC5sa8xQvxbRHoS2188I+3UtLkCU zo40Bd=CMx71+>j5YrA7j2XK34We%I41=e$|@53F8R8u^{{bx%`!o2Qjw}Ydj-Aq3z zV;_7{Z@nmD3|y!W)i9fsdP;u&MP_j@IrfdfEP~_mfWB$ET;qkEDMW5>LRKqVf+#;r zA&setPF8PA6Axq0Y%&O|=|a8`x6^zYW1hAg_wVLrSQ;aflA{9=VbIC1JTZn+K{b^y zkh+&DTj7tnEQEy~U#Zp&xV{3+ynNGk^5qsS2gk#{eRr561BaoI?AN*>Z-2$=-zC3l zEyZUJ=U!zN4UHY0uLG|5Jm{qVz7Cck$w7Lg}WRQtk?a!(@>abveG zmBXqzLAyH}l1hK<9Pvh(;|%gcC^45Bv!8Xh2G*y_bw^uG?^(5orqtS0xk-Vn%*@5c zlLSqoDOF@aM`~$V+|HbQ9B3nTQ*Ow`Wa0dR=X~3hDwqq)0_pu9ecl%=*Z@+n=04~5zm$G z7|VvGL63=N%%(z~2DW~#Zi(aK_bl4k>3R=WoBCWjIO$};e?Oz{`1UrSni~@jftDUz zZv*1B4AEDMKOGvL@*WpwS$?|;FOhNNEowsK471oaPBsZ?d_q8 z-ZCiU<^()8HZ&XP=E2>=Ud;8l7jy04cz~FgQtk5o!yB=|cu2Ez^~>=h=<%`b@{P$5 zI|<3v2$*{Y zc9xnAzJ}m}zP0F`JjO8(vC1_E2D;5pOw0+&!owrNK_Jq(ZmpJjndCix#e~}LZ%lhn zR&b`uF+O@Azkkn>t!HP~5zpGu{sLEP@fzkTBB6;M&jb~FC-cTk$L>3Z(TTjE9WL}n z490=gO9#?Co|P}J5Y`U0_+mEZc~?7;)D>jD$RkoyYc88{8Th$;v?8o7D^i6UO|Nv^ z?dkbRSxOU#fducfC7Zz3(O}o{a5KN*bV0Yek^R&jL$B3#kR?y1wKdu;&l6rI@Y`Q5x0%FKAm3S zJzX9k4W$n+&p?}Dj4GPFO+}^34d1sHYlN@hoOX)t zs>cDz-Fsttr~Cuy(!}%fg~T8Q-J7a53d?xbMgg0%bhqZ7*dGh0+kbwGz~T+NLq=CQ zVeyr<-du@ux1CqY+rPKSp6?rmDbJ10N5LddC4|d=9nBl8)NU!Mha$L{+n8PbOK7}+ z@g3TD4-y%!`DC|&XsNSnLF>)R_Y3+i zm#&&ugirVH!OZ$uuFN4gI~0Rra;bc@xxNszFI-j&P>=3sFkQn5CV;9^_6dMS)Xa`tR*g5_<# zeBn#E*jLFG?-%2vxEBmk5&6j?yy6}1&l-0F?4+cCWbe?yduQiQ1<;h;L#@>_L%x)~ zbK}aAo83Q%BIn%8C_sr65xBs=1Wyc&DmfmZ@ z$A`l1VWxfgiJUNL@qjGsz9+EHB(-v1^Hz-{pIGgBm_(`Ql92~FNQ6QUP1PFA-~<d zD|L7S_VM_)a(#uaZQ#JAMS;nbUm zu4fiTxtU+Se7S2n$j`?Kr(j<$7DJdG++F`GJS*f@fkIV%YeauECpS2g^V$EhlO?9` zC4Y~Nf#*V6dwJ`!v9}AeRJ%8Vdm(F8<~Sy~NEjtPULuG14Wi~}1`bTKSw*46xoU{A zafQ2c9_j2{B}b7&XF}JzVji>f!BVB*a>mXdA4smWDt}(pEI0faF#k%tK)v?py7~u9 zO^^`ADd-%rJAju*`j+he>g;*mL2BYWSHJC;9D;;ivC-rxZj1>K^J2pzA>~y_2`Z+h zb{P&!%GTi3`zUg#}%v|K&XRueWx zV@FP!VI7yp#dB4Y+}=#ud>2X(I*{2WOhQ!lE$s;Eddrcyzc|qE%*OrFs8+@09xy-f zN&YpL zqq;B8R`J9gZP1yr;FqiYxR*0^fDlQK|0ht@CjhH@JNu6am_*pDBzpP?{gfsw-0U-3 z$p3gE_uz3(9~`I+2%p^e<-+2y9>rRKK_gMKNXfM;U>*+m8_)P4$TolBR%d)0De-a; z`Q^@!DzZscQnN8F=Ck$aVZk?hXv0l|3eBKS2t^eGb^`$_^6whQla#b8$=DwybvLuO z#3u<_P+0*c_Q#So1%0Y+q@RqLvVWieM~1Y5NBl9-2Tm@F9tAiPOb|gNh&LIfnt-MB zMdN4sU(C;AXf7Y%g1#fsgX!pgR(LedE@0t+OEmuoBQxd16*wfz8yWrSUQpulskhY7 z+ZkE3ErCZW&bK@H)-f#Cq97}Ktg0IkVPLpAfY&j@?{0o}s#kni(As zjuAsK3MFPAUfx?>4SQx~(X{mvgR}4LD!73&?JiQYip~3BoM{7HTFcow7!~o6Ppk5d zoU5J^!2}*)i|yshW7JnFd1w`$&9}OGddnWf8NzDLG8wHk3A+AbROFWOannQWQ&PQY zf=!a&c*kZ4{5TC^oQAUw?B3q--bIBeudKsuYJ$dZOa4H{0aR2Cv^wkFFCI)IJU&&o z)$t4kycKQtN(%fU_ilW~^sPuznB1_6T->y{Lrvn#ymUYj6)E#wnY(*v@6B=HLxTLu z#G>tW*PFU>Dl8S*$0v}rw5!+Is?Tj3*h;mhC!jkph=Gae;&gAXV=w`hLSo2wPxVLzZPTwabR@Ah(#a$s!C9Li;AjdIRGY*-KaCGwAh}f1a)i7o% z2Dvhn(n!a{lM6pyU$+bw6TYLvE{vB4N+K>Va8BZ*q8?V7T1J+xkLGI5XEphX#d+_c zh05F2U(Zp9L=P{Xa5K5IkQDjgcQ5E_#ng^SCK3qIt@shd@{B!&fFOBzI9pIJNOlM(SxwAb&6&MF{nEYfAfq+D$iS(9z_!uGyLOJ`i8@5`H5fA)bGw<%5R?WU$}+ zsLW)pXVE;!yuNC>V~wrjDWX3=K`3!!hPJI-X0K+!R#vD2dk{2^6w3&!Ag@@C``GF= zR*HAOP{MP^8Sl}H1oB#f5zFBrKIt^cy9;Gs5N#>)yrOeXMUc8g`o0xCyEEYaq*Mb4 zSe3oMbhg>nT$PLb8g@QmZXK#6Xw*O$C2cf0a#JZDbxw9%;dJqL&SrJ zUXYzp(@S>bpNhrtyXw|bW&PcuR^DIs8aIuyax-rDhAqJMd)#vsKCF*3mpIseOAMq( zm)cn6@mSTvO2fgkvA;PDCp%?6OAq1$hbtNGt}MpA=#?}yw0^s%`e!10)r$JY@5n_w z5?dd~)dEhIXqxOk%U%Uy3;B!T_0(6 z&W%KbyGRNCL4h;3VZvQ^(}IQ5nocYI7UKmY>Ny5T`&^&u9sB{V1eCu9yoT;tosMNH ztFYmx?kgJJ+j*Km;KzP{&Jr1(gLjqlniLg#n1e-eU59EUI82T4#A4khpjQ0o@}t`IYo zFF%5`T#ik#0m7wUM9_$R&x5&J>TMTvLXDgrV|sFJ<+I%?-*WXyopTPm4%>2y1%)rw zh{Cf(p2#c9Xc!|?WFBXe-H6smN9?(~_Uod1LVrA&uawopr38YEefZ0)n3t{e`bNXA z3`VaguD((oh=u@m}q4bbaAK<-qACrQVWAX=WWo z03>>mqvOqYdqWiw1A|2OOEbN7NY<*}QIB+6 zynZKas(6lJ@&2l0ZLxx?`29+|smcx<*vEJf*jwLb|E>QyQ<3W0DmzP)rVc7NjjSYB zKi;*VeK_oO_v^~7sS#_>q64mDtrJqD6tZh}=Ar!So|uTAKhw?eli5N%qa4I)K(F*G ztekypxixEyQm!Wqq?(4c(aVkVJXKV==SxLpMb_(!G?eM4qCfe%8A}fueRQ}C?{qm%}de2I`u0s5hgddJf z0F&1`xf0~I23MgER=V0R@ijbKC&gzXYjN#F)0-?C&Z{k&uKMsE;I%NiWDnoCK7yr@ zDHST0=rl9{wHB2%VT6Ci6Osp}E0&tXRm;g$7*^Vhjc@nW)XNKqyAs$q4F%H#aqjMd zv%{FxgKk)qX$@1ihYh!KWeCPN{Mn8dseVO7e3{{VdSE|2f5#m2v?pQV*&SH>!1x@|_rH)AyFY&y`n%XyRGpz9+;ntWm5lD3E2Xdwc; zqxs<8pOnbHh{0sIaw%K~dC$-50!3|}Q!~1C<}_s+l~u}~;7JnJTp2JbevrO;8Ezbr z91ZnQGLzv1ot>wAAUcGpQ?khX24KD!nx`ZAqE#b>+0v>7X8(}X?LI_U7rEXUI9DFH zGiyrAEUxsWNfN<-8s+I{)+L> z*cb%b9I|G+j2qb-iNwOH<;81-97b~EIN;tLQZfWO)K+a3h_2OtPID#cz&FjuB?vuP+&uJU$-GPDofVjb(U;*zB2^n-$zU56%!U zD2WYi#Iw#dV+38rr<1$Sj8WNN-g|&uL`Ut z*-8zn(-SNo=Zrr2?zi$|-2aZ4IK6W$!Jod;soiqN;gUL6hog+sHqOc-pFWgi zzI=K*#9xOv+h&+-_lk;3Q%O=OSMqI4V8!X|?yj^SZ*9pjuo}9?R&FeZPS|*9THrq> z=yqKw+s{G{v$HJ?-QtXDIbGDN-0Sbv(V5OJaU*%_^`nygrmq)y>(ipXF>^;Jm(TDZ zp>yDzhZ6_e42SP=FHCA{-zhV7J4n|*_Q}333vCCZZJ8#yAcqG`3W_nS*N<+Ai7`9Y zDWok@lX-B=eVG5kZ>C`__?tg~M;Ggcy>MVB0!*`nL*lY$+JlN2&02OIb}IhERP zxMkZrF`A&994JRC6n?GTZmb6(%*4-$pnaWHkx3wHMDcQ@AS*L_rh7`4_20K{( z8iF*jN~ou(g7@94_S_=y@%Qh_ngX|bE*m&S(B6-#@;pBcqw(xS==-f@)|jtKN+ja zy|(lW@9L@$lI4A2RE8`v!C}^O21krMPt|(*=05O99~j7ekuzSpEdNe<#Yt@b+fanmLWcFc5m|gV zS}65WJ{LVTIA}QD3#7;=>(5LAmy?XRhR}E3_iHSMCy~DOlOuq63>Wfj+fzGBy5{m- z__Ty$4pQH==FR2;F~~?B_O{)u&-&ebk}@6O36ce{jsLcn_cRZlsFRU8z0xp8#$TZe z8X~mu-R+?Ei6rm~CrSE51P1d#3$?iUuvhn!-Ocxw zp_n$yMwVHNOG&wWI5_b$!ztW@{?Mk)L-I7i>K)BWYMD@9ur@POnp6J#h-h~_t7vb; zVT(V)zv}#BMjPG1@mwp1CNm}c@`1QH1}&2VGp{E#%#jS!?Dmn75}mJ_Kzce$+iMyW zHJ<7DIpt~ykEzRTtNL@R+t2SOOk7vj z|E9l6d@DNGCHY(>W{QfeEd1J~x!%#&I#yUMZ%UDw?dZM_77eg>DGUpDT50axPgTyH zZMHP)8&}RpuYSIpP}tWu8ODb9_U4n`+Uy#r$bF}6I-QG3Qu-@7!`TtfPrF|8?z^+; zb9mS+cPe*aIIw$Ayb~P!#$BN&+|X`p#`K1m%dd2zrtbNAn#b#d4JyDdYfU1Qr?MnOM;Zj)x)9X$SPwk%{^K0u)w)Y^dQ38>ZkZT z?01@Ohlh#LRV4fyutY$dc+2uDCnlBGhtK#fDlPT2E!n{5<=Kft$az66? z+uixPosG5UWn4}RD2T;MMY$<#z|HS814(>I=K2*x+~8XmW## zAw-O1?~Wi8*8c})D(WR1zWDFF@q52abi|}|t|Z17ud~gwO+m7*aw)N3vhdT3={*C>I;Jk!(}g)VA7ZLXQe=PUB)(v86ws6?#UHctcgvEN z>sQ}oY@?NRu(C2rnJgpl9;`S{A=<(Ys~+&5 z_$e0RQTeOeh|4PEpLVtnm4w{eETI0i!^SHU}}D1Jh%E={Q#p&YATGF zH|V2Kx8smzrS+NlSTeE$zg$zE`rP-=_pC;t2_WleSe^_FX@Q0FryHlGx!nqgB6B#sL6odhh{IL3>xW(x$?gm zwyA3vIbzx>iz3khiE6<$EVMfeTdVQcWmFZvU>}faNVH-gkP4S;Jm}&~5(n*n8O%QM z)L|36!utD06^9P40_-ON!$j@#0vkEQ_$TZh_81RQwa|GOvG*h>3K?NiqDr8sE4c5w zmg603kKWxg38kPGr?)OQ5mz=^n!wgTrK7Hp`}2zm;%j9kee>mEKW_WO&0K+=n}D|E z(N6EQ{wu=jpzp-zY$FNpwO%19SJ(e%X{hD6pY?~$)s74rdQ(CY?!m=ZgguUBrJ*1g zLPwyyPCR5&MbEr~G=S@P<1sLe$y9`;CZ8(SNR}PQhu9X5Up~$qt7*;EB2C*o8evQl zBz@WNQsv&Ad=1fT;Xge%5r+%%w#| z`2H#Z^oduWdk=Q$RJ=*o>@Uvko{&Z7C|tPmVh8UenxBt8<|`;ZFu9SpyTIwsRj3zw zARIoEy;nj_JVz-Q!zh@MzV?6==TVL7XgezltX`m7`zZM2oZXfFPd)N$Z7LNQn;Zn= zQng!fY`qySf%CYB&zUjpl@_5a40SF!!h3Mr+5rfD^m}-9Mb@Hs*VL7v0(BR{=oa;Q z4&m*QBf7%t>LLd}9?)C(%oHXR-?#|%HXa6-4W>^%G!!IdM;^R?h!HLR)6q2uTe9d- z2Gy9uKa!(6EF$BYBlPLOMnq`3PBCIMlR_;&=RdQyShQ<;>z`z?hVUPeUTUH(lYo&f zfs(#YT>n!fx050P>av2<*=Cx+B(xjFk1rdu15?~(OMT-n39kw|r>*ILhKCLk9QBVD%Pt;`I ze&28W^C%s&T#TK`oe9oCb>}m z4{3%4`uyx$7yA_{=Q2s_zYtS&&Kl`Vtl@^YR)YDP)G zo$PP{)u{XCxR;~`|9c_BcVzLv*fJTE?v(h|SCXvAI6VkXO_?};@NpOjeQ!mqu)^1K z0L;jEzn7jB*Z8ow%o|d+*6ja4@hPY zm)d)m*;7IL6DPX!j)36au{atXpqPdWv;;$tN$YcetKH2%tLK^TrL?o%?V*d#YOOBf z>Ww3G4Ay7jetNBi|8HJ}0)`6B~FgL{HrX&^Y0w(Ull^Q7kk6Z6zu`{LcUS zf2uh1cc>FMj(@+#I7ZGgLzH9FNEvsLYtX3!$vD~^(K^O4<&N|nkxDswrle#hRwfmr z*rr?)+1W~A*L`Fh6B&$Sj4_N^?GHWcKlr?#=kt7i`Mh5*x}B)TF}*ua<%&l=PR6k> zYb}--cL6%4PT}o5>zvDKFHaGVmS$k$mwVn}b$F6C*0z{|-Xv_F`4TjX?!pT6DDnG^ zqYD?WHF;jLv@xF~3I4dzUn($s(j7ED%w1`9zgkHlA?5pfFcXMDuKg0z8G03Z)N&qLH@kN9k)c`2n>a+{O34F3X9e1%g zj~s&bZ+~~*`P^s6sA486Qnki`j}(F0ahSF@HiRNsmYbrQtIWi2;1=(NhD=ZJ7E_;% zd{U7T(-+MNt(=JNj@VmZ*jX`|dA`1Nbf6!gJ_A19l?)qFT~fXkDf??-z?A*U@<^m- zq`ZECsXJW<4=42q6Ds_k5m8-*4YZhJcuMyWBlRI8&6!cB`pwgmWXPKzJ+pG>r2?O0 zUj~2I4Y)6l%RMI8w zQ;L4WJ)=ia99(HBijz4QaM(SfCc zhmZF%UHoDYwNnfI!)-$ddza%=mU6UOS#yM8d&CK`N9cG`XZ2B&Ew~~x|IyXT@RCG) zS)6qZ-Ipwks=)J6yZ5VD-E&HN6|(=ftpBAZv;Ar0y9&fJ)4e%$kr}_h4OG;45-2l=FVSZ z1KHEq+ZxzMy;!ytw!H>gi#p|JYQ*rbzu3^*5q~KC$zT$9R?yftqE{Zfv^Dk$n>x-l zD107d#(90-Y-*-Koi^i+uFD1dt2FiPgkd^lz03+vo;5Bh)gpD+4$v|)rn%XlPMtiLdxf)RN-MH&nc%-_5b<^8LNf^ak)(33m?1eMae?D zUWHWFp!Avt`;K9a0Au`vj%IqwtVd?r!(TL4Bz+C$=Dpjg`whi!_Ah3zSPqwVQ59K! zi~)0#_eEk`mxbE_fh~VZ2-zUpNjp?k>GGM1!A|zu@hz-h5Jz0s_IA+uV zozqR4G@-J7y%seYn6;87y^-63m-7+;h`N@mXfmi9EMfFj;x$Tw$b>k2EDfDA|2f>~ zvD}8e89B2aw^&WKryS;70RI>+VGsj2XG`7O4iDD_M0wcv>Z}{mgjXoSWmUqGmUfW3 oQZ$_sC@vwS=lr~fV<@q-pHx84hvzKh57W%igC`G^JNl>o3-9d`W&i*H literal 0 HcmV?d00001 diff --git a/guide/images/auto-generated-run-rfpipe-01.png b/guide/images/auto-generated-run-rfpipe-01.png new file mode 100644 index 0000000000000000000000000000000000000000..367f622842452a1d4a29eed0416c3c2d05f564c3 GIT binary patch literal 17790 zcmY&<1ymeCv+nFJ76`C-fFOb3n&7?=AOv>^1P|`+uq0^k;7)Ld;JyTRLU0f65?q(Z z``@|u-8<(@kM!v|J=I;^Ro_P5RGCU=VzaqH1G3Bzllzg*Tep42wszFhY1)5pX5!bmN%bcTF$ z;EmM+Z;m&3o3)){?tV19$n;dCr!+aEY{;r#fzk@#XFAz2WG4q$9{T9Q?qF0*h#~^y z*#JpY0OCqv)o7vf*sVLy(vifoUZnh27&3yH69PA%LY)LrU*d#xtvc|(#MwrCiRl_g zfXYNbcZ?l+5W;p8LT@nP0+=ugw5ZR?Cx-=lU_86>)y10?z}NP9*2u$Pes=BY5D@eK z+CP2fGszqq)DCr#1w@1fnCb(|)9^l;juCPP4Ae4mP$$>d9|l0G0DO-awh;F%HE@DQ z1D87gS&U7gXzo&}UHoYScZZs;Atk(S6&CTaKIw?016AU`x)&0sXHm_RIuGkPhU2)y zr88l%?(ki@NyN8Ypf8{!#W1-P!EUg=QShqw<_+%BmqzCRG$};x_p|zy76Q z+@lSD#p4l5h)NuAFx;YW*F7W5+IVwYC8uvq&;o(KC*-tdQRadsb3!rn(WiDV%nP8qMvydn={IbKWaZG#6Vq?1opg4OcPB*uQy8Crz;?7rb}qm>kHn1E`tDPc z=v84+{3h$(rSF%W+-HPpJ@D;*UL3VcEEy1=MBoaYJpAf6_LP2I!CQWl)Sh2u~7teH-j*3}}b}oHrB>t-h67;{gkziH~ktHO={7$m?d$ z2gY4kl|A{COL&w^n3O%ZmH&VltM7&g9Cn_aIP?Er7_Pgzq|AMvB{pvTDKBzUdW-Cl zfb;4F=fx{1c`U>F*#{ZqG{~43HpjcE1Ikw-{+?<2>{ZuGG2@hN@g%k1Jb=sDL z*TwSWPuQ5X`vGXO2<$U~U1Sl^(5LSv^G2Ki^2OA-|g~~tgP*aV8@$) zy%{I^ID2%+C>EUQh$p>1QpeP}rs;~-_7xD?g7G{HQl^b&ap-iZ!uh|37z+dw%Kk-T zSWm9Z{KolL&NuK`FW8wFK)Q954Z>$C0Ye>1#-CSS`^?cH=h~VN-H|*AZz{Iwy3l`p zCgJD<>?Q(=y-Uz5ZcK?p?2c=oUjb@kw5kR=r~ujZ2Dn=R5Tye@qlEbY&|~!1&(ZPG zz+vP8fxfV{Pt-rKV`fQZlCfTIqJAF(f6xl(=BNHg6tjVqCk*+{1_)-&xj6l=H3+QS zi*sGW{nr@`OtJwimGS1pHDV8hRM(f;y&Rqa^)Y5u&5dUp+6MddSzlCQP!()2UcNwA z_ruuOe+DG_ziy~JIV0}76zR3cy}xmsO-O+CEPsqUxx0X~6~eD3;IcviiiKP_1im1L za`f6u%X!05{Ql{J7+h&l)!PXZgXrru&c%IJAIQsPLExSTbg)oU(NP|6cdtcJD!1ZOR~=KI3i8 z-G;t5kKKA_XAENABrjk5`B2AITaAeaJB zrTgd@jJR2A`(VRpxS8qt>`D+tYl1pSx>KUYlp-tmAUY+S*f+QUfp4jX z>fw#YDd57rwfw_6YBm1>PF@^E1qg#2Xr^9*q2Zl2cpATfl4UqO*9Yt8hF|;`m@&FV zP-sR$xZa>bG{E~2rGg6W``BkaOUM7x*q4erD1R3j|E7`d4Z^z#+*%Jg$ zdSWkTfGrk*2_3jEpW!bbL#xVWkeqLWD9)itpJcHn3`rWxHP}Wreogg=ZDcaTz>_}B zX5A1f>Vd_YvA*E_*lCK86dCZ&kzC*r!#+d|w^-VAkLqB-B`VX`{Jto>G)a!H2fr92zJU2?}f}_D%bv4Y@Gt@vV#$R z=&c@|S{MT9wXI%Kgroz=v^0oR_|`eS3r+|GP*IWO&=0*_>jBlJBC^sKN7}q42a4y5 zGBQBs+x`X_3X1g2?n<>JtQfPi_jjiQZ*agTdAxreCv7O1(S7d!?erU%&8vq_bI1fq zLB_mVW)3yhBF@UQzmOYY6F!SRZX>*Nl{g`LZF6Ef zzo&?);ID~*^i1rs_E6C-mbrKgax<^P6pj;lRAClO;boMf%w&|hOD1KexAFw%r>rM` zC_HvC0`oD-qwS(1*|a*Si6? z8sBWv_Vv-T?a_07(+Q~H@ux4!SL#caYSlc_$$=Z}&lDrO2C!{rVUzjc7Pz?RFDY*B z1_qY+1@YUw`;d?41e~UWh|1C6V0iGsc)cM+*tIar*m)!6vIRNVOeW)$j!QQCn z#fwSB9b-s3d%hPMXb1#M1sE%8wLE-p{CPBoHAnXxTtm_*kBL=^P!Ymz15wupoSY;^ zQw>{Pi#xMiR!C(vk~MsMcdLEhs2>ZL|1%7jZ;d4Om$>^jvMbD>R9fvWR44Zb1Oq3|g=)TCk}#>R$(> z-1Rkd2{DGmeTl)U(=F7uIG7_P84z&0M6ZO_8@WEF_zZ9SbhE=A0lGQ@si?qtFNAJ( zCj!QEJyRU3(Vd-h0w>k*%|=nABmTNZcMXhK0253=HZp1}^;}LcG-9+X0yXCQtpR{P zl1l=f%)8~AOWf+*uIJ;8p1f5@1%6;t4?}8?V4Wh=Ak7|=Qth_8#)ehFXk+AEfcfpw zs`2Ruj1V%|^ApRL@>LR5S)S+}6o6WQE^rC%P?hSZJ=kUih85eUxh~wHCw|I%k9P7N zZB$sp;W>RgTMS;Smi)C@o&Q`8UDK%=E@n*Gw0Isy{6>$$ZTE%pZHVeYhf$!ey%#lA zTO+h&g6e(>P=JM{V~VIq8*gWx$YL>>Z~CR8W=y*L#_qGgKwu;lad2wrIZ&A8IKSoyF|I>mg?@DlyxWvHd}nEvD|Ie@oU-afUY zPWt{1`K-6q-kV%hE-9wy}li^%Z zJo}p7_0#WBKk}m`<_UCKPVs!O6*joN4Yjr$bI}H!TMrxv;iQ6n4PTUDg?RhA%L!0? zzxqdO#CjVm1|=%LTzr(=j8ia;f+Pg=h=C_S+}@T=ajekMPZnT!%3J~tQ>i9MAr*>> z;_xFT?oPW-7OGi3xU23%TBGKUuU>|6eRp=nQiFnmApwJ1G}P1o!B$0*j8A=~kpe8+ zBL>#{)*e^80!X>4+uL1_STQn$%w1Up-X*a+87X7pak?-n*U+mpIo-D*4QOfBRvw2J zmrw(!)cXfmnPE>Jq{Lgp@6Yu78d0)U_WZ?QXDoZ>7uK$BFO_LfcE;%qf9F@dvKGTu z#se&pz-M1U{zSjq`Kk_HK(m_l==}?M!q>|HsMxsz+ zJxy#ecW%{yzMUAM^KwDyfz8=dkeT484-u6Z*wNAEFX!jbMcavjvZ#!%8+*so*W;T* z2Vw>k_s94zT#Pr8U7Wqf%d@Uk zv_a0gk1ln~HqnBtk8Pa$pMH*|t7lk&QA4r)u${Z!?u%)M|eSEuqU#=&o{sZhyY-cCA z-bX;kP;Q&hm7FTU8%cYAzB{pC zqBOnenM&yI4(wmfEON8eWJp-e$^H27NAG7H-M0wB2NZOIV)Y#F1ZGJlrW|i|!WR29 zUden}JOM#`OYX8|t#VmzS7sHLTH(iyRBfIIpMER^~fZ{HJa8;Gwp`d~9MQvdC69 zG3vY%dBb2$lAf-8GrLf8JMoitsIpd`>#c})wZEI2B$e16uKP~R{b0GSWD@&Nw_oG2 zb*4d>c-W-IjW!cpgO_qQ$fec~lSO#e{s#xz3!d3jH_d2Nz+%uJ;SsW_r_ zZ$@PosuNfuS40Uw(Nr~8Ir<_w#yzvn+*~HMvT^j1X?*+9TJvKw<#OkjZ2MO)DL#_U z6u)y>4@OoE43rr#>ZebQ(MW|7vl{y4du9quGggoeIL%_ zghzevp0B9vYR#j`R0{j1POr@V%o$nEyx>y3iYLsu*#9^u$X~_VKb24ycXvsOV3*Ib zn|0mSeE4^`m~!)CcsL?y>)Jz;L&%+;St}|MTR~nsOS4^gyhx?jxAN3s9Uli_+n$zm%s#pd2NKM&N zir~1C-EB3MFZ9I{ThX{$N==_ai3Esknk+1l&tkFu^uF=g;PRgj6a-iB7AnQ5W=cRkaF}|b>$U4F|>FaT5Jz3P9iA2gBIW66<6XH z=Y%>0%Us0t=Ml!vG18pjNSe`x$?JuxvxKT|hpBI#iv&lT!*_c?*19HQf6q}QXtEV4 z#x-*!r!fKp0wk?m=O-_AO%}gB?%>5178+4m@r-{XI^}l-8zJu{ZJdLI#|FLA1?g}( zd}FawNV)!OsWC&{b~?x;O!=v(9wg5Gt(X1cCd?{l8z0Z@Wm{m^J8yB>p>Ehl3vgKE ze_$8!He-b$|%fLryOS=t&kk^SSKPmb=by#|JYqAHdDyKrP^4rFmnx^aPJBh1WifU0u zM0~cC8=Hw1+e3_9t(bq3PRV%baTY9szUiz=mJe$*40xgV5gj|h){9;wz~S2A!S-7Q z#dw>y<%G@i0EYu@-fXQ~7iU_po41D|I26VbQ9nEm59dAy{hSxJyjv+txo>|TJ?NVy zmgUzv_X;{)p7yhHxox7C?Qq+A#thXiQ*-1h%Kz1SvXV!+NW zsg(JGLD2*&uq$|=k5KjOKXwS)U&<7D+Re27zAC!7YSlD-oO>+jK7aqqtgp@+ zpkbLIR9GN>*SjaTvV|En^G#sICx)v>5hYI;wbLBpT?n!z2ATPtvd{C==MqWa;*OVF zPL$zcC@9QTx)h)og6GrtdW-KJ9p$qV^e;}Rne}v*-xN_&pF-4zIWQFqwmD-R;uOomyM7tQzoJ`3A5wcg+$@!d;xS;uYFIWFu)lJUGWK zY41LmjlC>+Wi*luHhQ?Vx#(CiVCO7kfG)SDX!6HmdNfy~{lN?zoHLY@@k0|ZgnF0Bx^Z2n9eoQ0Vn1PYx zLzRuq)zx+Ni3SEW(tedDeH%wo;nk!E?0T~$1&YZdWw4^OY|b|y9y8RRI_R<&p-$~{ zD(Un7{$Ud-EV5}g7!cfUZfuu%`B1FIVVn9situ=Uo!0%S9b-BA;D_YVjLj>La~XX~ zD<13Pw$_bZS0@@wEH1^C?Ty#-(h)H$XHzUq$1DD0B4DHC*0M}KTiMBygw{v!AIyAN@o(f)XmA_Mm2||Kw~NO6vxm)= zSBT@}H#sANgC{uO4>*C^X&}~isk=KWPE?Kh)4PpX*3fuAv>B98d79~lhTN75o zz0ssFpJrPeeU9-5Sh+-LeQ>$rvTyZM{Z}B`^40&H9*sI3bMwC4#yz_JUhzY`V<`oK z^uim}NY3gVZ*u=zj@TQjXQix~@AVwD@m%ve#*0`k!wI&2z}b-vNpJ+x5c4@-J&4yE zqDv15>4Lp^0rZ>z6a9{2td2SCj=7xI8rP_^k)~1iM^2tjCvUWm$0X(9PF`EM5KmRSQ8k!3+#O&B%nk zc)^Hx>qw((+UBl=6plAdOCP33aj`=pCGqfb?n*RHt3q({vz9|KR63}5CJkv2p47cH2-)DIihn+k%WT-;y8KEKBwaaM+M> zYx_Xp`9KGjO(I^Q&|8#!no0OUaeoc#1s@*|Tgq3*BMY)hrmc@l3Ka*`L2S`}4etEuBHBI$?s(KD6G}WPurb>75`G zx4Yf#Kc>o^dJTl%$X?Xs;W%yA)$N1(O~No{ATXXIbUpWU&wNzX`fv@;rMh&LS#m`yhMl_q1_Td>Xj@xQQt#`^^Vz zzN6gr&^ju@6lP13h{=vkKG?-$O+SwkV4JJ>1m!sdJlp!?O(sV@Y1=lPVmhS#(Bzl# zOjorbVo%&_K`!5H^yPTL%YB(3<4EcDE^z??KEKv$8)K8O`391umlR@;&Vj?pBpe%B zPx@*wG3^)G&q^YzeTgN9YY*27^maQ0lq;4N_^oCl*-uPNgj{_zo8c;=OcF2OC0S5kmmthI0)D$ zflqOF7*iTrf&RLBZCW3or>7hm0poCxWdqxj?!DxMxkN|Ax3KAaPA7p05)>Tg&(|x| z7Ei5p=rTk1(5RcEdZsmPT3!9DW)!`TuZ};y6LO^4mq*9>T;O0du7&UmMwQ^;XwnVB z%qcgOYx+%-5&NeBTcue~)pLd84VBoSIab2W^(wk&XgV>*P&}UPAlvUj+c$rLZ>}Ai z(p)-VJKmP&&^0aF8Ya?))Id50SKL01X`jThM0DK)#QGe1vG-pMNZ zObY)6SKiKaO=7 z8~rWPu1~zd(B~cm8Z2e zmV_Y3r5e=Yq*omF42TI;fE_H4%zs<$>bcUHUt!ep$$t$Jpo1?L>-bw2IG`8&1`tjrRj_i&LH)oLp zx;Gq2US>eb6|7)`^Rl1*cV7GX#ejiH#4BiO%FiAmUu52x_qoM5oq?#MF|2tO_&maw zpJl=g=S1&NR!3E5dy9__`Uajz0$@eYiY^%Q5GM*jH0Fx#23JULHOJhYPT39_6k{R) z>;P)?#gdOi%^i7U@j%bM1XyM1&)tPwSKbk1Q@Zpa^5`-^_?Nzd2{UrGJPr&nbl}Gi z$(5BW*cZO4iof=IA^r^(&TSrgukBFSU3a1F4!_kJBKgeYlUvzVN0r_Ogy;nnchU-l z2X2Hv;|$nzo+wB#Q7mat5LtR(_X0`}DG7s5K$EaEDbS>R;b`!QF<2&EN7`+1{tvl| zxPUb;+-&$-s&#LEx^H7MShoQ@RcgNU@#p4H_~YRL%CF%F##b61NtxfS^7HbbdI=Wk zt&R|jiC~$%?Jo3U|G@6+{q`UlF8Txn6-9IRW#uX%mTKsu!c~5*{TBIWKfJXKBq#TVFZhUaFO&XJA11!eWshlx?9ResW6lrw#H1q22D~75?V6WyWQ&{c3CyP;Uz| zy<^8%OZaP;?Pj}PD8_eo&a@w{XfDwu?sdUiXfcVws4Drmz+tP@;tDYvHhf%ZH4=1v zcnCOLka`>)Ez9cvzzz6;0d>?sX@ED63g%5k{irUd04smb5&y2MO7c$j$C5F{w@-?r zxP~v`qkt#ifl|=tfI-a<;Y3$o048SO1(xZBuH!|!W*U^Q1zzi=#E)$jnTE$DogOaD z-%hWig&%cel~9iJ3=$d;bJ<&GD7=#+{`m0r`gjgjV`Ti*#*GSA!}vIErbgD@_UR9O z?WcCOaYS01P&{XW``0(A;tC?ffu)JTS9G1{$-+InbgY_nQdHEYy@hL)qTT$9@)WZM zS|DqXJkAU+XNIgh=M(!o1e#cJx{M`FnyCyh@B<-{Li=m|XFFNL+HW z*(~nS>uZi^=Sv&IA!0{r?M6;cvj{(gk&)!Zo@qPMf6!qp)F|)x8{ww2qiX_gMEm(t zJPq4|`Pc>l-EB0*uIi@^8OQ49Y@Jx9I-#Czg4lf4|2GGC9zO1$(%s_nt|X015sI7gn?*Q*X5yPo45IB<(pd?Q(t9K zIX*tm8`7^4w>dsH8*wAOd6sI1qc1NXXWwKSh}AFb_F|7mJAHYlV{g!Q+bp`dA|nA# z`|N$r=!`@Za11iPU68)J#*lbI=SbK&?-JSMsTY5~JD>Ogq0VR>d!`O(^VFj#bFBk9 zAnFW!9Whu2UwPKt2X_WupXt$Qp`7g~S&FY~d%}8C+4p@K*sbIhR?6qIC1_G&Wmd{> zO*OvmX_k^*E2L@Ub(HHDrXC$M<<7;@7d((mFAMB96c zAXs3^+@KmFy12S(M@(bLCCeqx>f}o>344UWIg^AfI)Jmq;fuNbZ0XfVA5~jGDJao; zjUE%{K=#wCzw6=YK86Nzs`vz8a$ds9!{w27mciXxUnYa^PQIm*Sp+0_u`ci*svzg> zw;~!JJ^-=QGUnb9D$R2#N)&?$gr?57z%+MWE>^!ZkLc?MN>1v3{We zf<;n2B~EvBT$50WMe-+FYDP4k@s+(jSGe62kI?TVg56Pg*^7eDyrbzBS197pJOazr z)dQ_UF;(-K)s6T$A#-dl^T9(gWIsJEKK`utl9E%fgy#AA+?$AzB96g97nz_olRj;s zF~7OG94U~!z2`x%)yiY}!6Fk0np}dh>D?;C8vSS~?rtoSc5=)zx5bs<(SBugvilQ) zUH|T=C4CfI_ti@rL#`w6=QKyaR<0_a3n;=ay0B65XiT1eGG@LMJ=2O>PEGc5tnKdN z0ZLULIe-J!za(pr4Fw=@x{>6GSiS(L%W&t%-HxV7CeDH%E&e@L%B{UWN6h>n>m0Ou zNwVj05N*Yy8JzUO&%3B*FMlf4JG(96+a6YPZ0bbDI|AX1;b+awb-y zD}ad6CjG*bt?(4eQk4S3W#*U_^q6evAIL?Orw5N7KuY+C3&wPm-R085dS60*qj(Tw zNP29Yzq`{p-6RMUdwk8Tqn_@X#*bH|t97I_-^xT@dUfn9NJ8Uz2DYl3HImQ5iJ;7= z(^I!7@=^X>LGeVt2rK%ss2F^8frEj&OHd@4sjX-NS1*Ubpm~qPJM0jR0(qT~>KtTp zD(06afml21iJ_#y>o6A*Qn~zqz9o4!gr)3k?~v!f>pUt�M5Igc8+wm8r?JTPGn;o&ax7pcLJpdW1`8 z`&+`8WNAWW-h!F2%}JeOZ+9rm_domzhs!@rVC6a=4FvV|jmiBV+ZPoCw5M!e4Kw8( zyXMPwa3DV08swGX4%S~zv8?0%y||E4rJ?DrUzwdO`nC3W5-=6E&@i#Wj#=eZx-hty zgL*P!&}3xdcqBeY!lq0A=n|H(k=AmP&M^N2vLKxi)8PiiCZ%a6VnMsU-ST-*26by9 zD8cH2>%jaiP%gt3VGmsVto3U}1Cf^n#DtNq-~!A3;86p}CFDf|#m)?cM+4-=)<>(^ zEIqT4mWBNOpBu_$8Y7T{QeQGNeJI0kLJzS&)yO%il?q*wcBY)UMz*xlEnCa=>6KDlHob02h+n2rB|5&u%O%k_2HGu;o0CWR#8Q`;jhc}tsO{`fkXy1RkR4a5rw+>DI zFdF1r&X4*2=I!=tvPkN97KZugmmgNdgwD72mF)~pPGS}e5X1-pPGUN_LBzuCcc05W zI*fxx=!5j`O5b}stqN*VGAQKq7E;xACRkm9ltDKetUX#V*N%ztQ%a3TNf)-{kLs2z zke0|wv(qTje)I4Z<(*@2(5@)wjMAr

  • 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 TFd?->pezd$N3y|2WlR{KA?S5f zSw%_7>cIBj818CCr6;=HRIb1(j%m*u4MOPMGj;P;8aEUn2^7 z5C9~iBZ+NYft7x*N13LCMDhjq(sp~QUhnT{oG8}_UD((y)}_Z zS-Q}*4hyS74nn0Xf3zuYX7>0-AEL)t(j!gnkJL`LRVFqMGc)#iHsj&6N}T@wfQg!) z!egTudZPJxZdC#E6sx?x+eohWoR8I-2PUig3u+b3=jV{eo1<2Tm59{H*mv0Bk+_dd zo!{#labHbZ^VCetbQ`*WNy_@a`y+G2w{eP!zEG@Qq-9-VcH-?fsWB|3!J^_210UqL z)2D;np$(&e@1Em{iB%_hhm^wF#Wfi^az$aPixDN7cQYj4HN)Tt^%lv6?cZU%^NSb~ z5xlxmRT&7r-U3i}=H?R4&o0=gC2NrtXqW2U4)b{P>Mi6-kB@>8XFd@&<;EWWZ6kANB4M%e`S~dr#k*R7`91lM zQ&V}79rIGJ*i?+%Th$tkkM4=T=009D(sK1(Nw&3xuo~m6qLWT_arljUS& z7*;3r%U)yHr?A1MidFX*+2`i|Z12+PC^Bg&x;R&rXWl;h;Th+c`&wA2HRo$~S2ZaY zD`j|GTG$U=eHP#!tUjFnxR8(dXyY=jeOaf`JO6b;d6 zNEKd9`CT8CidE)I*9KWzn-q;J3av^-anejKYAIHiZZRf3k&eou|146O*n4174_Pd1 z>n`xMb(l{c(CHF&xILJeRElcKuCC@VYPUW<+*4b32PrpKMvL2pRZx37M;ZyT4OW%vHQ`0qocijC1C2q^CvVi z<}USIz;H1o?sQn#uqQGxA?Ee|$E&TlHeY7oYTz11k+0`{(%(KY6^@P@enz1pMZ(o4 z?fhz9u6&XHQANIsc>+Lb5J+-Pl!3wM!IA}oEX`=4a%NElw5gdl6|BKP2bYiVO3yevu ziW8^BGU&Yg(+k%O_gNwaLB5Tn5!e?s)h6}II27r^0*^aY+FX?MLY=3p*r&_2`2|K= z7|)k+drjWe!Yd)~F0MTG;y;lnr4JqpP-2Xw7n;ytU0Iet5EimhNr-afIyE3(Vqz+O z^3mQoI4Cor7#YE#hg?0iI_q1Q{|-LL6*swgIbKewEiY2~L1bsZ%!5rggt+?+3&~}D zjuhgc_*25swV;+*ogzAxc8UxpH+pyeur=fq%+4CC^kL7PhtnL?(C%24W!v(J}hjGVX+!UTuG+s_SWk3iU`O&phF-m48ce zB-JhBj(^&>IJFQ1eANI@g`Pjxt?z!5jc5rNNIYtX76qFE*S zJhX{#@rk&7D6(XS?_0V6l9+1SQuk(M!9!Ry3#MzcNw!D2c@q;OIXsxerhY!PuAwOP z$DfZh)0SGF`bsBXY%0vWMX3U4F2uQ%~TLhmT4UsC4GyCrF}T&vVibnR~jj!%wAw@mFMw*@q|2J-PS`_iF{9_azN6;JQ zv4H60SOKpcsiHbMH>kb6JD@m9cnPW^N#7xyrVA(gp{33?&$pQv=FeWiLyB1V4Qu)2 zh&#BDIye?vqQ!JWChraZCPB?|y?~nw^Xpt!vpJc9!kx^w89Q2%(rjdOs6RSd_`Eqv ze6Jiz9?1R+(qa{LGMk%Qap`qMuVAs+Q-P+ZTeJIC(}qpYb38Xs^zmJYq~dx_4*B75 z0aF)r6HY=Y{cz4IL7$e^aizf)lbBd8;9tm_x}fbP;c5`JhS3cys=8 z#^BUp(C!WTK|^jU$`2fQx(d*OPTj0-SRaEA`zuwvh+U8EUVvt?v|3cpxPjkakYcZN zGNZ5foQd{b*6F6!?f&L#HfyB(!?}N)kC_cLJTJ1GbT|#IP0tfJ1E{hNDw&vex3qyGI$s%)Z`NNbD zPl0b(kbt@3dRa-Z@0^E>+u0#l1{y>I3}VTW{%C~djUk%;p^FmA9sC*RBVq)#A0{6` zxkhuw-amNX2K@C|!+!DS7h+aaziIFKoim3fHDuU{cdjN_EmdDvSn&0^((hBh+j`A$ z`$c7odS~wW&+kK3n>@jZf1&$UusO^UBV_txB8|qDXT;{Q9jphWn8DVQN}xfGOSK^t zF0u=(klfTN2PNnITlXRh!h5QVOYj@(Mh*o-WRWIQIr7LYEWD<6f?{HbrFe+a81iQ40H&KIULewfecinYSwN~!h>Bd!bw zKs5#K^m4X`RQ<<~37lKtv;!nkAl?|E zrQ_$-T8kgCvA>Dk1PNUV3igd*H<3qPyPTv1gUuXURe|)rnHx-KV#;XDl!(6Jxcix&~mB-i}2@LekFF;4fdR_5s zWwGV12H2*xBv7*S62q= zK3d@*Mhq37%Ica7lp5FSZuoQb7L+`Xzns(B%=!VTWTH}m7AQ?j@BjlDU*pP$;ZD_r zn*+P_af-^1e-Gwj^aT8^n$7cpxw90eD^?V*`Y>tu20OTs2!Nm?9CD-iEuF;Pq5~es zv|5E(7z&GUK(^D0AqBrV&tIM#?M@yrWA;!~@%MT1B)8u8d@HX1GrW@KgG3!ckxv!M zy-9;xMZ~4#6mXWzHImQDtJ6(pT+p-wZCHLQ=@Q%Pw2$=H@I_!_cGlALq1-_nxEMIw z9MGzo=s)&S*cLj025`I?n5%r*jmcuugdNzSmp4`}RR79y@K`J_Y;S(Xuxt=3D%mMj z5dC=WWs&vg_+>?J&3vG6i}7)@A=zw#gRg&Z9kP+K_ z$(K+z+FN>iT<;P{We82b$g~D`E!`*>4;}7>Apsvm`QP^C|2C9vQ-$pUB_p*Zd1NZ& zD6lx6ICp(e*^6>z42rwfIunMHBz*FozH`i$uj^ZI{IYD_lKk?T8w>kmJTkC5RpC)= zGP0s!0G3SF_(9irPUZmsdAyxkNW3|12~hmc5t!q9J{8KHU$iiGuF0{PHF85%~!Fe`jFj z$r}|)V+Y8RG0Q_1TQPhbw`?CYTMo`Dg`Ks&IpD7Ov^D0urcLCwq_aU;_fZWm%%7L2 zy+%;lv*an|da>Jz_7ph`JQ258z~~Mwfwk`L zK6+H9p#e_kfMNbXDnr7K!kl#hTcKaD!%#Zu<&@(RBVkzwRCA8Sv_}!PcM&NJ6 z&Mlk&Gq^1yLE8VpTyO!GdiVc|d2Wnbc5EB-G6XecKYyNVH}EL&6~>qyEZR!)YRag( zzG-zY>xbLa8prA+Km!EL0%GrhUq_+pUwI^AhR|GpJ#8jU$78cZirnX$_obv@1*vyw zzLQuw4LAfH|AkUn1#@O_VnxE;dR;$~i3nI)eb*JkPMRP++q)ZVP0;CT*muUKB3lMx zra-gzVHNjY#Arsx+8dpE1Hbu{B7>sW&3%kGmL$H55~<#TL--*A*s8x21+2MmdvB#} zn1_FL*es%D16&_va)Zb>&KW42ZH-aB5(UTq{|)JGU|>xKyyG$=cjr5RbQZubMc3u> z>$p9g4)VS1GQgpWN(0+LpfiGOYlYGJ>)-beAjrr#q!<}iOAGZA$<3jjm?fgW8h%~> zMPw?fUfIy(f1W>lvaAv*ozr2~wW+u-x-Md}`OH05`5xNFnCs8*f2uhDf2I>Sj(_&q zd^a1}k}mVOc$lIHorlEd;X0DU8Jmb!og);ks2S_CL+9H`zRMkRIc?I8`8Lg$Po^*W zqIx7AbZz5d$P|^?G3>hEZvVjh^~3w|dj0l%A}T)D&*`phGNW;o*Bw-u)|)P>yYSdy zvhfc>@TW09W=4e4yZ^)AtMbSQ^ubMlC;=Z(bwS$ksK~HkXPcE@DfT&a6hzbs4b;J{ zj>Q^3)x|;tg1P8E z)m0bO>9y=86&k6}gw$AQezJ#!x722;^Y#=@*}__>? zGc|HG1v#mLM~qEQ+6#2z{sH3%Mxl@J@QNZF8a7v%I#F%t(iR^yQ0TQ2N^Hr zkL67ilinLs>#okN;zVSI_+l<>h~K{)Rhq{4i&C3YPPuuYR`{**UC%Xg5kIzKR1u~L zthB`f%1ETmUAAO;ct2{u5FFah=9C~kc1TB28g1t3qGau8);sAH{my6%$H|GcZ|O4$ zD4JGgy+E`y0CBth95CkLU|AtLKN{1l2J(}w>uvE=g1!})?SM90j9FZ1l%rI4pl3DE z@7+*21DX`UAI*7tbL{8>sCTclz3a!KS7@=Jr$;~k(2zpP+)PeV;)0}9kLYpMN*TfB zvy}NZY2#s$uNZ|S+6JEI$!2}*V^f+PPy_Dl--IkSVk3+zz3CQyzY8lbM9Chj?vutGFWHD9p`6p z95Rpq@Bj(A3TI87w|6rZdYV-+aqgpAIoBDLS2naW7-akr=WbndzHw+CCcam"node-1" [dir="both",label="[.2] 10.98.1.0/24 [.1]"] +"node-1"->OTA [dir="both",label="10.100.0.1/24"] +OTA->"node-2" [dir="both",label="10.100.0.2/24"] +"node-2"->"host-2" [dir="both",label="[.2] 10.98.2.0/24 [.1]"] +} diff --git a/guide/images/auto-generated-topology-bentpipe-01.png b/guide/images/auto-generated-topology-bentpipe-01.png new file mode 100644 index 0000000000000000000000000000000000000000..071a2e79f13320cd1dbda2557557ad871cc6b8e6 GIT binary patch literal 45468 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 t=zo94>%Zsx-|r{"node-1" [dir="both",label="[.2] 10.98.1.0/24 [.1]"] +"node-1"->OTA [dir="both",label="10.100.0.1/24"] +OTA->"node-3" [dir="both",label="10.100.0.3/24"] +"node-3"->"host-3" [dir="both",label="[.2] 10.98.3.0/24 [.1]"] +OTA->"node-2" [dir="both"] + +{rank = min; "node-2";} +{rank = same; "node-1"; "node-3"; OTA; "host-1"; "host-3";} +} diff --git a/guide/images/auto-generated-topology-bentpipe-02.png b/guide/images/auto-generated-topology-bentpipe-02.png new file mode 100644 index 0000000000000000000000000000000000000000..fbbbd4759ee4ef89144fae5e9d129d5ceefe0bfe GIT binary patch literal 51988 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
  • 3|chS&(EDga|O2jksO*C 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 O&z)ssetM?MZ~q6$tfD^v literal 0 HcmV?d00001 diff --git a/guide/images/auto-generated-topology-commeffect-01 b/guide/images/auto-generated-topology-commeffect-01 new file mode 100644 index 0000000..fdea910 --- /dev/null +++ b/guide/images/auto-generated-topology-commeffect-01 @@ -0,0 +1,30 @@ + digraph hierarchy { +rankdir="TB"; +node[shape=circle,style=filled] +"host-2" [fillcolor=gray,shape=square] +"node-2" [fillcolor=green] +"Network" [image="images/cloud.png",shape=none,fillcolor=none] +"node-1" [fillcolor=green] +"node-3" [fillcolor=green] +"host-1" [fillcolor=gray,shape=square] +"host-3" [fillcolor=gray,shape=square] +"host-1"->"node-1" [dir="both",label="10.98.1.2/16"] +"node-1"->Network [dir="both"] +Network->"node-3" [dir="both"] +"node-3"->"host-3" [dir="both",label="10.98.3.2/16"] +Network->"node-2" [dir="both"] +"node-2"->"host-2" [dir="both",label="10.98.2.2/16"] +"host-4" [fillcolor=gray,shape=square] +"node-4" [fillcolor=green] +"node-5" [fillcolor=green] +"host-5" [fillcolor=gray,shape=square] + +Network->"node-4" [dir="both"] +Network->"node-5" [dir="both"] + +"node-4"->"host-4" [dir="both", label="10.98.4.2/16"] +"node-5"->"host-5" [dir="both", label="10.98.5.2/16"] + +{rank = min; "node-2";"host-2";} +{rank = same; "node-1"; "node-3"; Network; "host-1"; "host-3";} +} diff --git a/guide/images/auto-generated-topology-commeffect-01.png b/guide/images/auto-generated-topology-commeffect-01.png new file mode 100644 index 0000000000000000000000000000000000000000..384159da278ed3022cec3d50371640c9b3844a31 GIT binary patch literal 79115 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�Fqykt0R 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

    T5Spy~FkiZD6uph6RtR z7-ysnLi5UJ7#YB6sVnM3G_U>Fza#^Z)2H?Q4)j!aE!1aQ>|B7CEsa%%Wwi*A#R)TJ z4gl!vNb&m+K4DG&;#6vU6(CEQ`$1!*{b79WLF7FO>r#ajh-%F}flPY(h0sI1yDbS(mRh2-IAV_J8QI z_ZE;2c=M92Tk`4F)>a#!jbx@-Oa>o+2WMdGevilibfiCWP~%!dt92` zT$`iO=W3FD>JnuW&zD>Gkuab8@ZxGc&#a7$rse+7&9T%X-bkvxX>45iE}cRqUUV|# zH$REqd;9k7m+?K`e!0@AKJRO#WqCU1sZrz%zw5eDn&c5F7~jPtGxqG2?jn4#S+sc3 zw-A6Fty*US48i0m&nSlRLV;8kWAN!Tr25KFo>kP2=M~gIV)j8{C8hSRjuso<IKLyjDYVzOgB;}HTNr|Ku}pW`R0#C%dstFWmXOK3MhFjy$X0A5R^UT^UIXl*4!2HE-nQD)bDeD_<)*ru6r*OEdRu*w=pqrTh(d_GSuL zpB@il9@Y^%5Cwn7w2_#50NVzxi)L(3tit)=mRmMzJ>zA0@k@VJk!J{FTj1HM`;1hUGcqN(rjNI_YCRy!z|;zy$%mn z`s43+$&$0#;ygYR!^YzE|3mQqzn1AZYTe)#-V{yHbjpUb{7<%w_G#bncRkdpF8@!0 zM)>y|#r&DTjIc`w549DK99}0YwMAu{_UOP{w5`"node-2" [dir="both",label="[.2] 10.98.2.0/24 [.1]"] +"OTA" [image="images/cloud.png",shape=none,fillcolor=none] +"node-1" [fillcolor=green] +"node-3" [fillcolor=green] +"monitor-4" [fillcolor=yellow] +"monitor-4"->OTA +"jammer-5" [fillcolor=red] +"jammer-5"->OTA +"host-1" [fillcolor=gray,shape=square] +"host-3" [fillcolor=gray,shape=square] +"host-1"->"node-1" [dir="both",label="[.2] 10.98.1.0/24 [.1]"] +"node-1"->OTA [dir="both",label="10.100.0.1/24"] +OTA->"node-3" [dir="both",label="10.100.0.3/24"] +"node-3"->"host-3" [dir="both",label="[.2] 10.98.3.0/24 [.1]"] +OTA->"node-2" [dir="both",label=" 10.100.0.2/24"] + +{rank = min; "host-2";} +{rank = min; "node-2";} +{rank = same; "node-1"; "node-3"; OTA; "host-1"; "host-3";} +{rank = max; "monitor-4"; "jammer-5";} +} diff --git a/guide/images/auto-generated-topology-ieee80211abg-01.png b/guide/images/auto-generated-topology-ieee80211abg-01.png new file mode 100644 index 0000000000000000000000000000000000000000..2d3f449ef934e6d02c19b761d30d6c97801a3a51 GIT binary patch literal 69481 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 Rs}=cdal+a(@7SgAe*nvVSF`{C literal 0 HcmV?d00001 diff --git a/guide/images/auto-generated-topology-rfpipe-01 b/guide/images/auto-generated-topology-rfpipe-01 new file mode 100644 index 0000000..c3e9a1b --- /dev/null +++ b/guide/images/auto-generated-topology-rfpipe-01 @@ -0,0 +1,19 @@ + digraph hierarchy { +rankdir="TB"; +node[shape=circle,style=filled] +"node-2" [fillcolor=green] +"OTA" [image="images/cloud.png",shape=none,fillcolor=none] +"node-1" [fillcolor=green] +"node-3" [fillcolor=green] +"node-1"->OTA [dir="both",label="10.100.0.1/24"] +OTA->"node-3" [dir="both",label="10.100.0.3/24"] +OTA->"node-2" [dir="both",label="10.100.0.2/24"] +"node-4" [fillcolor=green] +"node-5" [fillcolor=green] + +OTA->"node-4" [dir="both",label="10.100.0.4/24"] +OTA->"node-5" [dir="both",label="10.100.0.5/24"] + +{rank = min; "node-2";} +{rank = same; "node-1"; "node-3"; OTA;} +} diff --git a/guide/images/auto-generated-topology-rfpipe-01.png b/guide/images/auto-generated-topology-rfpipe-01.png new file mode 100644 index 0000000000000000000000000000000000000000..62a667ba0f77a4abceafe18da7f9a09e09417d26 GIT binary patch literal 60941 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%0D{wVeprd*dYx+_$QWw|(hRS7E@OXL9cOa)S+$CrB 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 [dir="both",label="10.100.0.1/24"] +OTA->"node-3" [dir="both",label="10.100.0.3/24"] +OTA->"node-2" [dir="both",label="10.100.0.2/24"] +"node-4" [fillcolor=green] +"node-5" [fillcolor=green] + +OTA->"node-4" [dir="both",label="10.100.0.4/24"] +OTA->"node-5" [dir="both",label="10.100.0.5/24"] + +{rank = min; "node-2";} +{rank = same; "node-1"; "node-3"; OTA;} +} diff --git a/guide/images/auto-generated-topology-tdma-01.png b/guide/images/auto-generated-topology-tdma-01.png new file mode 100644 index 0000000000000000000000000000000000000000..62a667ba0f77a4abceafe18da7f9a09e09417d26 GIT binary patch literal 60941 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%0D{wVeprd*dYx+_$QWw|(hRS7E@OXL9cOa)S+$CrB z?~-6m^itN2X?Ee5pJIujgPY%#CS4Uz?kgV9xmA;LMl|=wqJo0u8t_t;D`yrR+@=>l zn_I~2jC^48Z~W8&qfze{4BNOhPPnidl^KD6Z*01{p$?8Q26QEQ-(Rj;UokSy<~E~D$1r?hWCP(#3E!_&tM@5WV%HfUX_cQ3zx zJK{jfE&C1&_#V%UG$&^=w(N*H3**OaVE1aK?r<-aVXzqj^grM&rmM4q|HKD1XTz{( zB#uEeH|*l#%*kpdMS~vnXLrFN|B6ON<8RZ(H=-w^_r*Qfa=)(Wl})rrH%+aFiG@pr zzg?GW;Lg&^NUbpc`0}oApKa~P^m|8hhR0i(4`qum{*n+@Ubo(KpQV{I>Io1?x2RHhDKHB*O^3V$@josZ}g{e=YUq zXU^Y>yFK|+-zQR~RjBHdsc#$hj|Zj1?{f*8YJ9@+EkTJptV9mnPtr974jN!PG-E zf{=)aW(JPBDU3A3G)#`>{gVG~5-`3hQ8*?(ZmPELvEtbT>HUe1L?4tSg>^a!QM;{I zct<;3Z_J!Gr6=%1(0;sQ*0Jh&qt3MK3A_wjN6&u4GYd`(-B>Td6yv$){-%r-u^5 zj29C-Ip&&3qr!D(AIly=?9S=C z2V&`?l0fg1X=dMR$_9?-uWqV4TF1BL6RW2Eh7%^eR8<8=-F6ZCq8|L^Tl$7T^0RKS z?;^aA=%3lVJ6k#El=x96{^+{zaG7c3nDK-=FKnpVQe`M9w0DfJfT=(w;>g)H?@zPS z%d|pWhI~wXdUr*>>J4o9KP`ZzNqh3?rS2l)YDLjItxF~O&jqY_4-`&--dC-qeGqS& zzcP|fN+Geg)nqka7+1M^wGcF>J#;vj3ZAa{_!OjSI*vmeun2miRMGQ87h$=wFL4%LHjd5kfe1Z2TAz0I++ zoG3UKvOlDb){uXz=*{OsD@VGXP-VAzX3)vyofmsoouv3ywNA74seAPUAP`oieKT*4 zz{pKWo*j3R9rHmU1);YN9Q&7y9l7pQhqIpLW{Hl><;`qW@HT$A@nh%nYt1WaZP!~B z8RpwA6mR{my;NWvLT-7}+C$fs6<#xH}{MXmA^Fs2cKd zx3Y*oFKfu_{#I4x4gJYq46f+y?bYw4dxZWP?dSl|$X^(5N9JRJ{i?_V#|(q318m)o zK-+DJ-i5}O*8KrUvJY;nuILL(TRwff6?3~*qgf~IQh$UbUXMt1-5;S6Yor%voG&)M zrxxVo_7CE&+{^8~H?(#3WR}==M&@#_@7syn4|f5{T0YXzX)R8pv@TF{`uz_Di8L)@ z2S95~+ItFReXCXwN@pBWsE^TX{Bt~mGKNfbXJ+PAKJsXA4SG+KgpEnjBt^KwHaO#$ z2mLDODl#G$bsPIn%txb0ru>rXvLtBgg_LBYrEqkECl7CPf1*2V8^2D5FcRZe;Z^ zMeFjxpo&o((~m&&B{y|L&Yp^isGzEUnzUNev0ga->0070I##npbirhntfQkC47o)B zFPfT4AfTJTAWKAxWA=d7 zc&Lcp43vN{M&9~ZTLCglk_%v0r@L2=%oxlM$5*jpyyoxU22?-*zE@P7r!+&*cc?z# z5&g0bP$N<+0A0L|qO+l)L1PB>I%c925NZZP9shmBWty<+iTEVby$RT3 zkCuHntWKvVh@@4LyNai22{j-PE56VwWMBkfanOKKLBjyiXPV7B6cVPGMM@k6gxSIP z8Vn`>VeI$;5#(?$ABXam17k!Mx^$EDYfcwI)hmaodWetm+`b7t9!I_ZBl?Vi;o)-F0`MmEu&mCl z2PQ%V;08pRJ%-5|nVQ}vR8>w+n~>W2_3N`Hc1d3UNJa=UiG72qo(L;oa6k*M!4%y* z5`5N89BiWjl;U_X_e%kCUUvU_S0vPw2}L6n8BPU?C+WhTRv87PI{YVr!+b{o79bqy zSX0QHQ9@K8u!Br7g|H4YV%16^iX}8COs$o8si1n2OloZ9yousiRD@uYgQ{pKNd68) z0WVae@R2uc-TFIkajX~p;ZZa~X*h5GZNXNG>>>nod0`UK;ls2T4WsqAk%HeQ@-`B- z^1skLi2S8F%L*ivJB?*MCWt14+X<%*qTH4t*vt4-(FM^XM@ol()nbSRfnyOR0aw@) zaMD}Y7^3V@lEQ8K7!~MC0L%CSJdNnMI9doaKzWdvW$?WCs@NcwR^alR6NQl3BgT^s zO}L7x>NQmb+EmOO0KZI5T@omb(C!A~YiCfLbzJ;^ZG8tg*Z;e|QKUg6DM_S=7Fm&z zy=U2^q?D0_L{`ZxGBdIg8dhYNQAv^{6j63INh0%qzw|rfI@jNIo$H+QjnC)(evN0` z&;302$^$@&?Io7q6;vR2nks7{<3A;3W#ln;xOP#Z^uK?Xp6r5&p57)*wjjEIB%J{) z2^evoXwbcc1fqlxA~BAm8HSp!YH&6inQ)B%vlaXjd?ZHa>H!|#TLJ_FqqQ86%adCL zv$@CSA{@gx+vwqUsH3T5Gznmk0aVELLL3Y=a+qq0xcKP~NikK4j8EPMQf@)4z zHdzaaNk~ANK^|xV;5H0GYRs!BD2T$7p$rMq87fGttqY71`M4=e|0=(a@(osN3RSwF z5Z5O2p)goQ8Dts_4GsN#Ehq#L+YMrAFLcew%OH_^H(>%tt(kX=nB@XMtl-+C&;5B7 z@F_V!m@S^zcv3Ay;R^-SNF6gy?>BE0iMBQ)Pg9>)6%2?^muYxAP3{|tJ85l;q^ zjd1&I9dB@Gq8_3OP~YtVd5Gvqpmh{JrTNhpJAY0nwINQ$7_DQNZ-_`ae0UTVW$H|6 z-p2bghgsK?B9Q$zajCh%T`+5zimIsFZiUni$+Hk`ba>8><$c#)LjYkoR1(%tg3nLL z4#LwMUn9(3m}|i*pw|i0W1`VB&$w+{5Fq8-ToaP8T6pqq4C&d9QJ1h9_=1O7S!2J; zeE)D=MJF+O@X3&9MmDx!kQUzyp%5Csa-cgQX^JCiiS{$XJ-`*bvP}|0Aketz3tIhu zN-@y%Db#r_nvH5AAa*=A$`6rTCOxG>!oo&w1>+#6pg9HitMz<6FUlF4aIcA`J#xeZ zs9pf714*?KzL2J|T@ibTQeHoTB#gTV!f+k(un!+57Zgl~58w!(jTD=62KNLF*4@3m zyK1vgIK8$4=s=>>4W#jUoW@yC9xt=rZQ#B>u2i%4=f{iR-lRV#$MjD4*}a18op`I)>Yx{r|aq4AyQc3=as&iHx^ zP3o9XbmiycBVtRK>VQE?=#VDrF$mysWz9sM-ux49Luf+i*CUGWAcFmNd!eqzBD02)+f~wy!%oD;mBz;G*tiX9C!xS2do>S z83A<)0G7PWLGiPiggSDayF@mi{0R;yI`t<(ke@=e>oO*hucwjA=tZX;+_y#F+c5Iy zAe8`X`}8DT5Oh_Px!=RW5Oy@Y4SFjehFKXZo&M_OOILI|#Y(!nB&i*cpJ)slO~jeN zYLY1v(44fkwS7K%L^bV`ZhZ%c3b+F3odO#cO;5x$A{s*;`{KuPJ(>xCmJmyXnh?$? zm?yl@>%yZB4_~-oW0NChyl%|q?v3l$No`>(bf95Ah?)TS=4xpebTw$kjghgx?Vy4P zCx<<*LvKJmX2jvVj_=N}5C?{f8V=OPiPo=@60x{Asi4i44LyZ4$z{YMuw<|e&?S!g zSBN?on|bALpTaB@l)lM^pzHv|9%1UppRkA6 zkUHjClrr&#N@xrP+=pj$8qWFqYG#e$A21`zA+t#$K@3oGs}G1BjK?;S*b8OYr*VIB zbRXd`K7flrIYzCp7HY?2dLCko@T4S$XQ6+-wzsD?4IzG&&1k~JxKOk;7-z8nSx1jY zT2c=F-)*;{!x50AvH6Z~Xc-sLCQ4WjH@S8hq;`loFw8jT8r7(%RlW z9q)*L!TKQzdePVUr0x>JWb{@5>mjw*4I8Te3B4lJL|H*}No@-(ed-x<+jE{37UBuD z(8i1a@*E;~pzEJHIm5_q4-umRG zS)_6K$SmNQ%lfbI&?F+%kecnHh9;#3FexjuY#@o_9VJIW)j`q|hN(1ga1b)X)Q;PT zj@3Ry7qjq1tFHBJwHwmwB@U#^hOkD>`rYNIk@ShU3fy}5;!=x8KII%Z}bEy0(uM{sghk+sON z@Mm?(kr=a=(Uj71VSi10{aLaLwzjV=4w*X2KPoBt`#2{H%3$>LXEBe6Ai0>APDDBo zV7m^b-G#bjaeph&UD9O*MBHC9qiphI9IG}7?2+~X-Qtv#{Py@~Gh%c?q>2%{#Dx+K z92rQ!ikPvA#g0~ejVy@=%K>j+$C5p)A^unqI(Ct;?P^uL;H83w4{8qf3=N^{U_2sL zjE5JtmMDs0MbR}c=JuNxMcU;1_j^i}QazPZw4Kh2_Yo_NPQVf<(i2T`xET-_jZS1` z<>U+iSs^4qTwltuEu%z^D9XV66d+I01*zASBzXlL4AHJx#&tVP5Iu^N432#Qim)3c22wh-C|CsJ~nEtNy_QX#Y+p{z&h zgSyv4{Gpb#J8X>CrDYN!3zYRbeog?pk#=*!qDy5|JI?zlx00^ zy`0>u4Y%cyof0EEJ-vJ9PBO+pEsP&;rZ#P)q*U`Hd)~(0{s-D4iPk!3+6{S%=^^T+D_QfHDzgEs&Q|s`*7#V0^)5E$3^B-7QGms3S092AhUp zHrXR`2KJr26*wAzu0Se@=F(wr5@g%94VJ9%mKd5)P90*^=8K9B9tmOG1F40&fN*5A z|Hd5>1EiTT@{3so2{w`T#n3xwPe*&EBP9XJmjzz}BmFUJ%t(G2ts!(|WFYbnMI)ow zmil36- z;^N}0FI>oDjv8jQy1s0Bho5<^TACr?dg1#IS}v50aY+K_P~z~2M5KZc{_NF7jFkn& zkb}f#nEqMxJbI7=NDyHm5OHq6fTR*X#({DcVV$;t|IoqF6>sOtvs zf$+y>#!0OaNFWehNiZD!Nr3|i5;)aI#3cAO?0r9)7*8WM5D7W{n+AFJH4Lo1hIwm< z;0+a*Qx@NRK(|B{0b0P0KJ&N?popj3G~w@^9zm)oYbt>zZ&d4$O`1Yj3$7&DW6=`i zJCww8b93zzT=?b^2_g&uUjjJ-Z9?5R+QT?28X4mhv|Hi;g{iGW-EiZgN*=D{nnqff zdy;GM@&X{K39m$&awjV4W}EFEA)#jm>e8D<4HOhsL+P{&=kqKYPZ4DqWmQZgivcQ5 zLJ%S&^C?{w!=nayh`9)l+nPe^l zdJdaEe>NVg=#MsWMSHqYsncFq00iu83czJ#f3u>@yYYUGE-y1;Difw}9EH9^%1+=e z!0^cAd{OiI=$VN$k!Vg~<>N6x9WS7O*?d+Nim9j2g-l|k4(Bgss24hylooBoTPrCO z@|s614m@lO3UV;Wi0ksWO92l+3tR^&JuDao{wt2prJ!p9^J*q?F`^D#Z?YO1x6|fC zz2RR$HSE4yv9KHIO-)M+TG`1WG=y*d!Lg*q3o?<`1z;eURJhQ8(CZXV6G?0SV8KBJ zBS-~+Di*gF-~GaZ#-SEjhn&5&)R`X*jcEiQ8q0z|B|RlZdA?|vL&|W=c)!MGvLx>D z{U;^xRkR4LSw-#dr72C2RMf*m@}ty!cYsllNU5!_w}N@__4ik+N|AaDm~*0hJ_H4= z%MfA&w3ErlBRB6h1|Fp&3`_W(J9r`gTi<~xvK}H42j?6kIPB1kxQa}jXifpREgIG1 zWyUgwL0lT<0s1C+%xS}N_%M;y@xvZp@- z2hnQ<+0%2Op$K|r$m9pI%f?Rw9fHrS8$`Sr;6v~X-@zP$UZJm)Ond-h@sc1{d!tkl zND|-?slOHSsyzLoy8s%y=O-%8p@2fU&q)}{VXD7itUY!F2e&2L|D^|i5LSH32P#VD@f8zf^qR0Q=& zR=uxFfos{As&p9*vxhM33tb(ACLd%>&XDlGulZnc2wdV1u#1Kjo|3Sf(IRr}2o3>8 zokhD878d)qbHw>#9&&R~ooa9a>JTE3(8LOzXDaG&TnAo)ps*3X z!kP!JOLjdo(oK@vqh6E;CMjH^I6Fk_6u}kV-F7>a9P1XEM*8)jj@-i>PQ3GqR4%5= zz=^}*B!qywiZezSdSpODR?+t$^Bko|$G`4$gq67uZ3P@9nsA`P;Gnb>UF1O56x82p zA7|Lp!e?N`NVtOfHi#S{aEyDkTQw*g#sB-lEo(L85$~s9}fmtLWsemFE7<3_#XT@rhA{;Ca z;gKF|_AtPQ1DD6%T>ja044skyoA42R;i-im%gx=8dcMcx9v}`-;6S1j-KUQgEEXh& z>2$JSd_CA0r1V54>tS-0EV`~vZ2m!yv;oNu6%|!LXebYgs)#6&HWP}-vEMIFBIL$~ z-jlcz0_y>>;A2=&tTMQWS00CVRH1Z2P!6=q0a#K%c8XYDa6j3(ViDr{Udx;li6WT z=U2C<5KK@UR6)#3Bl#0f4!H1Dn5eu~6@=rBW&}-_4RC?8!B|Hm(P9o=6v*FtfVjYG znEsj#@%;itb%e2K?8VNY`<)7=6<2Og;CS(}%cXhkFa0|o$f%LGk-DC>by3OI_4b46fHRJ9>3ia5Pa;G3{V5%{gBh9P%7 z`1fIECij2yMhT;|ygU&w8R(@sV&RK&C?mkfBW(=~4z@()Yt^b%T_YoP$htpXDERiv z6MkwzO1n;o*e}@konf1(0v;4((0QkJ z`SM{B{V3HmAh&?$HM=a>e(ce4B1(&00mrTbLIFsU1OWIzFB;&aT$--)&=Gj4HJ4UU zn>CjfK{rJhhnNRvrvc=C)SgMd0n9D3=$ul;=?fs`?|uYK8)~iKtg5CF$VD|RFVjjm zzMl2A;w{X;jHvxpfChqaiYvlCFPO9R>kty`9|_sT#YJ)^On62CW(`aQx&_YMUO8w} zD{lsdzd=l4+G0MIQsuxkvE1N!2fA%oVjVj$$!~UTmb~HCq zn&R3+{Lx-(D}vFP+Ss5dRkc%(LvjE?AOj+xiGxG#9C~DShb{Ub6m=luorlWb;Nxlb z5z{VfT88pmD2DLp85o=!(UxbJ0}Dd|z5;k_5!xZ}90qpfP*fm)au2h|egS&hUSMoD zqWxL}Y(N@wuSI7Qf2^0RQ|!u3$mT=I8yG)ZYGVLof3jXNN@iLP|A9a_0CIh2 z9awwjeoBfDnjSuap+4e(CkU|lw`6L_R>`C+TtCZ0toz!*DO>h5JYR|ngj2o4eNlEpu4zW(0=7K>k9b!hS@XeD;%n$AJe!Li&)yR$2?W zd>ufRbtAwxE4KbDhIZ_^33k2gZ?}Jze5DG3#aalTk5o-lH`q}LS!Cw>B(cMs3WVk_ z2|Wh=*OGU?9aI^wJS(&;0BHzb7auo#^z~?$vPS>`vde zOfIr~+G|vO_>@<#rldS3!_42i&(~tC@S>I$?9i?zgW^Z03#WvnNlc^!|Ei!<zL+5YHipa{n9H%5R;L!-=5oM3v);L z@qx-FPpFVIVS-{dWK(vy4RT^?k(F3VK!9@f_H=6euRcONMbvMFBnw&zNjBLfeuU^w za*CzD1Mwj|oB#(UJ?Gmy1tFDkplnpoR)h_a0U3{Xbn$l+0R5N{UM?@GFjr+Z+|-`8Vrcc}AXV8!y{1gY|(OA>Q(^}8JrIFZ4v9q7qMP=cBV z)#sd(S^)1{$`VMMo$00O&CQT!c-X!g+jkJ%ko{QMo;aKABfWXUT0aZj#giIpFwxJn zdrGv!fg0MFduNVBEHX0EJ-um&ZHu;&M5j9>xQ6$J?l;V>R0Y$EVgvxl(cTd(o1OFE z$122o`Qy*0G;K)te$&u1GTY*Vk!;B~i~jXL=J%6<4eN3#MnFxF=*>gLrx1bW{<^$O zR2>ab%>0bXudPO`V0E0JRgg1)T4Ui0&AIrHvwyFZC)*XtW4LG*2=9rPwodc7w(k#Z zA3LyE9(BbXVIkkOtf8fV0N;;PWYbR@MO#e|HPv9Qa`WC9ASBlN&7aR^zPkQpq~JhF zAJY@il|O@-sK()iuh~}_2a?8-{xvNwH=+*5OccFF;VKh#4DxH|*jbM52t5G=)&_lN z(N;$K7%ob>Q}5;7Y9A{^@9{ax&%jHs=Y5M<1i!8D!k272jPs11e?F)8)FP{9%*8}A zqbW|x!>y!<%z*Fsq9E%fFE6`tzGuBsG%$|?T%xp3HH1-A*E?y5=M@{tB@><2<-+Jc z)!Q-S_Cg z;3=~JWjn#TsL@mKizl@U-Sd!;7>UH!lPPB<4Ns&uulwxQVP6FKHmA@1np^0|hNr9+ zp9Jnrpc;@v4NNa73|XQDoQsn)MK{L_ca-v-soPuoqNXPX2g!(E*eJe&Y;Ai{!y`BT zdQy^3a|}r!?w`M40siyR$qFfmLQ-1%>Z`@z=jZPoaYtw>hn#4v%6Nb?ZH1EincDE( z{Zctgt1gyRv8+7BZnBXt@qXuxuFiu=!j!n+<#^fo^!yGUm%xf_`E zTf}TcTOk&h58AATw%!emBxfmz-04%8t(Y-dEolJN1xb4U8(6rgtJ&r++|ue+wg1;6 zpt|9L;ot9I!}trX0rkUqIyz!>I}~IDaE*pqo@@b}nfc45judFgSK_^>&1oM>`()F0 zp@whjSi74H;Q+G!6h_1IZ{0~jWC4J*bkF`(9u5sqeki6+i>}QnWRkPJ9LuafNATf_ zn1xp7@uA-_>cA%3fl_kMKD%N39hnF^FvB6D^sqjmpE;pKi@bm7gt(+OGlxE5_6a&8;!Wpz3_-HnBp6oL@gv ztY0{+nS(J*yD`y}F-)uod_}^fLAFU{j?o;#!0PyBO2TVwux&r*ZWNG*dgDeYM3`Lj ze%-<6+Cw&B*O#XvF|X*6!(z0R0CIi;FXJcHnYQ#>(0Y_zz?15kcB3};pWD>xHtHe) zlj#*J`4arCT_~53d4(AIJrg;=l_kx^m69xpvvLVq2X+(-D44HtWru;=4L$&jO!VKI z^MJnoXS<#zq7sX>K)!=%x@Es7!y8U7VM#5ZN^=i1vxRO3FN!Wqz}d;qAB-^Vc=30_ z3<4YV4nDOJSyZy^j5_EDZ*DM1DTB6z!RgW?zxs8&s7xASpIz)sM06!JKYAF}&FAeX z_Kw$DD?32>9v+Vk8^%AgylBxFhRW_9a87h>&v`+F_%cUe7N= za)tnJ*cFG^0q9S^2cK!{Aq$F}^10!?4M+@EKYMYRL{Oy5pUf;rpS0VD90RgK81PLn z%Xkqx@qT%IpcOwLrgpBY(kJaMcTgX${;Gr_0TX%o_mh9G={q{+O&3)xX1%`*=4BzG zK>Kf??XXw~U;N$yt6nOMR+159jaJcQU0TXL+|dzMUpkUqmI*gv4BPM4zF~&tXXNi$=zTZ#7Ix^8 z8G$)Ut5bA?x4CZZQ=hkwfBUOvh>H>l+Ke|&La!dImfO3_qyYf6$NqAAnCNC0+xNXY zLj5sDl#uhl4jhE0$xz~hh^W!n$0kJw0K3v-A7T&3j8HBQaH?sFJLN$$`Z9X_P={eH zgh<>E+Y$;?01a=R8(Hljww++jly*gV<1c2+VR2rAA@H=#cDTXFk;X>SJm)T+1pN~q z{6Xg39K;h$J*HbAmDfRXmO#suKW+tM$@=TFM?3BrljOD~+=vfM--j#Cu6RA=9+v)5@plt$a!|0BxLSylM@iS59Qr4=_)DC3?Np zNR~JQg%*m3C!R!ib2HhH)*+0GIpQ)Jv+|n$LVZC2uOEeT&LGS@d{6##J&rt}*fTJi zBt}-=PEr@93{cnCTEC6zvT4ob#8!OftV1;ByYi4}k|j*4SogDt*Ii$juPng_YqA7- zFlS=h>2Z<~D!)z!aOViDmx#)f$ochF5(!*NM{JGQeF`QE@-OcZUTc*^jdpK-6a>={ zmYA3=7p)-AJ-YIoKBzPybA$0b{zU&aiWrW#Gh{9()Qa8Tje!e!h~41y>w+)lbs!~c zULA$;fKS|*)NqbB3g0LmZ)Frcv=Q599BoCkN`PjT4y!dISW@1IM`9D)^U8kkAY4(vBq+&%qRyPdz zEz%K#$hLSB5FB8oHl&3c68W5A1gYIR)CCt>)?Vhq`R7?Vxr8Vuwm5u=BwTPneoQKv zkIc$MK)Bu4l+W}v0x5IK15Vt+4LR`@+y#{tC{h4#3z$|? zg1-|MRuy+k_>5ic%aK3f+J`CKH%W}&urFp;rrkzS;C*H%-9w{m%dFZIebh=p%O0$) z;}u7WB)ZicCN5Kdysxn?d-&>Ra77;=r6wt8$3+vakKpbU58e+3#qt!ivbKx4bwx_; zd8S$U?d$E9H@Y0i$@y3=5ZfRC!s0%&(ntey_nR{!Lv!Xwa9nrVso$@z_2_tZYSXx^Xow&E z(HloI{s^=-D=~(-rje7wf|!Y@SnyAoci-N9QQPo%Kvur6P2Ei4Wu)bP0{su<}D`^RB{h{ zuB_ffOe!HHk!rM-Hh8)wZYE8tGC2x>eKoA7*tI@qaJY&CdJC-7c)(z&NfZ8 z+%n|E$ZsTOv#}3B<_a58a_W4DduVS-J@u6?X%($!m#A}mF8ghoFfjKsmyWFA@VJLO zE>3e#)B`Elo>ePXdq4iu8@nqVZ^~2We=bz@O7lC~H9fjsN&B4ggVMd9!W~`>i)2*P z@f`DSPJ&0M$@$@0aY@QW5M!{9zs5F^eQnG9w9B=IzsV^>$2q$wm)3^RvI}K*#%wuP z{uYd9JMpM{iXP02VQY#$+Kc-DXK5IiB2(}ks}3IMI@!6jPQ?4-rCapO6!aErUCV#| zT&(UqjLF8?WlQ3Oa3mg^EcF;m-zevf%gyx>Y5mqCXSqiXf9{=+U>IL@FJ13u+ct;q zecU&hznlKtbJxrzc1Zq`nuk2TG;jwoA57;7C8I3(>(j})+p{9GUFJO(lPLz*joXUO zOH5?AhmI5C9F9oSqn?mCLv`|p+lVRQ^0hJ|arp1imI&$uhOVXN4QA>Yf|)F?oj-fx zyL-cGcBCvFp2lbjbp6J8!mhg-g?X9OMM zxPCb%Vk)9x;N-+oFuJZ{HJS69YgDyyCAgyK4OkcjvT}3poMc!Q&e`v|p;M4UU6ESh z>VefWETWy_75zOY&EA8-dRAOVU6+Gjg?ybMdD8XbXgQE{o3XHZqx#(Dc`|?GJtIqp ziw>9j29%1Q*YrPMUYbweRLwj+xt*M2Miqj1abh%O*C+eCzb3D6^w$3N*8FUIq@XJQ z>#L{sHG>`}F2W+7!xw3DP?IwwznvU7ngx)9OohAnTv$e5Ck*+mQ|Ad14D2%Nsg`W5 z7naNB~qO`Vl#)r-7Sq7 zUK}8+Xz&E74qM)NNFGg&TrpOo=xX2iJ$J%lyE%A2;h!Bff0hrWB|B3}&i%HS8UL2P zNn!J}z*};~1Cq%Vzcv1RMAQ7_Z}G&UqaPcc;#hU4JLu^oW;g>@86&Kk$-sd!>{4@1>HTX8mJf~ zyjp9MmVWazo#zUgv-T!C;IeWW<$;#7i#uDm-xzcK?5bW9D4oCalq%Ko(rhO(+V4)= zdYhGAk;QaqBtc0E(KA5B>*vu7pO*n9mERjb?5`+Wy(nqmA*6{Fq+=Va-ONbm1Gx0p zl!$bOg(~IX8imVJH0?RI@7=GG(cmHpZ&;@VWXYCxC+CxQd%0oPMT?>6wBn+nKB@FJ z`vRRSMrJNQ#`{Rf$zHQ&TELO~HfIKbn6HmPxXNPkesysYR)Q{b`Kg%OC@%=}g6!4! z&Aiv{xG^t}5u0$`wmC-U`Q#+q(u=cmdZ*76GYl`J(z}LLHKpendAa-K^eIE%me$;}->PG#wCa@j?MQ*mq$Lx`lLimn zx@m!z)kfq2$hA|xgNdjd7pN>Xc)}coSKGu?ue)r1D1m!lbIqD9=g8vnkkfNaaHgdM zZT)h>O)3w#KC=dgN-xBqpwOfvtLbs;+T_Y+tyu9@0EheR>uw69N4(u?M)%=3PtJ=! zaYNjkX;O-TVngsW#U%ctyAJAC?}h&BAIR^uRY|_A?;Kc6Ff6~GILErX=K*<_biB)h zAOtj1EbmjTO&MF&Gs5z>t&_esLk*@so0{&+u)_Ob$NV)Ir(yl`tPE3y? zPkKMe3dW#8tR>U1Wn|za)-s0N&Idt&t3&zgS4)c~$n!lJe8;7KE>nbk7k6{b;HElq zC6AGn*_>5x7(B09G{ow7!0qM0^2`xfC@jrja}6)^tN-~mO#Zl@Wm0&0x>?2YzA8hd z;(HHzU5{J3k^!~k8_AA5SPP29r6dPAttOSed(AX83iK#ssPoYAO$(@2TVpfSNmiu0 znov8llgf6sI58bD7~f(4+0OW!xT5x>&_;fidE8}!5{B{3E(AABKAVaO;qg~_dUEM?d&bw>RdDNj}pjS~&$s_Z6oz~YkLq!s@&+4114apO) zYw7S<5#Tm8Bq!r2dkJuQ3h8D^>%S1I|mUb1e}%@y;T`fiY2Tg*eDg^AE=I( z)}$4*ZPyv2U2uQ*hV`qb+vw;KJ&q@XyB1#k9xAHv6_8sG_x_rjoIT2~&@c@-L)(mZ z4AP*=rk#sxdtP=kKB03=D1UON9!KiQegE^z;Gn(oOk85y&?@cS;Ik|old@xBpweqS z&6*w40yM9QYg7NECC3;>(LXR?saAN?WmlcpG`CnM)hnN`GHVZQoGrcgg?-f$#j{nW zGVICHcXU4F9jPpk*}s!+kmk9UpZdH{ZROwUk!*(bluHxazkk`$rMYm!{@0P`2U>Nz zDyyhzs8@x~DR+6SieXsDbB!+uDw>}=lAZeaG%+W8R?hxMkVsbv%RLXXne;l~;4rx; z5p=PWI@o)&y&4y&ABEh;x^>Yqu62Ko}DXDB4?-iWHL}M^#0J>kfxYlkO@9%R9Ha(l2Z8pcf$SEP}Y?RlY71Sril- z>{aBC9p{yn=D3(A`kd`W-?RDppo%4jPnH)qd$Buw&1?BNaYTYX^ML2*x1Jn>ghJa* z@1)fx1Q(=_&?NqG#o4K@nPpJ;uGltmdx^evwR&|$&AvzXru|KXdBqvoZV3E7tgSht0 z%Gfzqk=wx)o}Pw z9hEPqi6}DHOUgf2@DyC#&U=+2xWh zm8em>V~FO2VNJ<@zK6I08Dxd6Q@egvG>!ySWFH-yl;M0zs-t?> zB;r3W%&afwkyx}X-aSm^b)fu2OK`QQ9=*(sNC%HD!Dk4+Gs}*){A6gZkZQkvY9k5a z1yo3=Kn0eV-we;e?LrCiRQ(HIRqCcp;zAgihb?~xr;($)0!zrC0>0!Gc|~@6Abkms z2S@6?Iaccby?TgR9wr_)lT&ymzJ7dhJZ38&{Kgi`m9HUw!yBdfdK2L<+KgF26&Ifh z9)B3BbKnix_wW_xV}18Ky?gc&|83QhE>$P6D$k0me8lhUqgioKo=iaj$B(tIYwwvo z&ht1_HR;$Bk*wTy%K@d7Io9gaxiEt1gI>DuVnhL2p_94l3L=0KN2}t&Z!h3$k0DOT zF&u@f*h^f+<75a+6*HOLIVB!=FG3DUj|PBQc&q>GIl+MF{dC~&>AGAL{s*{TdEF-v zXuKxVarpkA#{cqo4}#`?kKV9MkfPmsLNNJT_1HtbjF2JjV{lL@tmFS3NjwBvS?uK? zhkw#F%62{gR3U1JmBbrKhX3ogQ15&or0S!P9-*9ejY^?JfsE#I3csVxk*a=c1`cc$ zabPF<9K={f9k+ilxMvZox$B%T$0y_T#x%7pO)9do9=8MqzQYi1S}}xG==OK;>h-H9 zQPI`PlFC|Nflaw>r)T=q@fraUcn#lpvJE?DK_#zUJ$A5C*!X8_Mn42?j?&!9xgqY2lMu!zcx80udy4NL~ps2cdusQogJQ@}7 zPX8+yUU|~8iSP42J$r9fr$?-znCI-SUNxTNCJjajg5iWY)>A#tNdRe)zfbLM&=y9z zyi1}XmQ{1Biz^)D!iR(=>!qqR7YnBUiVxU?hxbgyV_)eJLU8x7T+qT5SaWpxwchcD z9Qsg1H3NcGGkKu{Nmr$^Y1jTIhd7l&?CUDbGp)R(bk1Tve?uP9Cp~kAr4K3%-zEP} z=XlwP-_{wnTt(uImx?RdR6xT(Z+Q0IpRpr{kFrTx98Tcf1<#sc&`-P9(Qn&5BumckP~L#*jRtoQDueI_Zk+Rx+{I z$i%+6JM-9FWEl_rcE?s+$2R|)ed=6Y%U|x1O=H6R{&TG6r#!@!lX`S%}%o=V2aV@+)!Ik^fbCqKc7^6H#7WZ!RXC$6);ZQTcR&9A~XHEioT zE4v+HG?^!xYc>+JPW{t4ScaFidHd|+oHpe=Ut0TJ*u1#I=|1Zn+7CN4x<$#%=}a}GPKT8Ij=sy&$6n9+X=8W7)y>?c+#I=#8|&f*!TP=0~9? zR=^Bqasm8ME%C2s6K#57c7^GHmUjUjBv7tva3uMxzQ*SqBQ1c-*i^b83!gj-sy7;RlW16>Yygk5W7MqS@(w%zdfE)Qc_Tm57&k zedumo^~*0?9H(B#KfV2|s@J>0>G7IK$`1!Ljd==xq}FpZmKJ1R-L!Vta`y^CLpVvw zt8&}N-p`HfTUuyNx^%Q}=P4PgQPBiG*;#M@s?RlVyz6LkulAk=4d#sa33WY=26E5> zUB%1t0+f9*p8xdQpPUPZKX)Y>NPcX0;=1wYhUG2lb{aM<$w_9?TY=7K&CLeQH4!9G zZj?EPI}j*D%C$|IT0@;_(tnm*TsMN>6h&EA+4fx}A}8+Wu^+T#Xgu{z%3(_Za)B?b zlz3#Ehnr9R{nUSS{(XM)tl9?C3WqAbrbjQ&@NlnJ_vSp5IdLd&IY9$BhDJt^&2TC~ zCNzlsmFJDGe>34ZBT@ctF=(XBoWWo|r@9sn>Sh3&D+|+Co;!uRZVNy8@^hF!$MO5s zfmqEw4@1eG|NclK>h5i#_V1renG-J813Rr1FgdiECs;ua57kuF-&>pLUp)wnC>|Jh$I#8g3F=h;&{v~}#F_=6El&X58#~;G1uG{orl*q6I(H63q-znIE_qOid?+(8F# z@p=VAewq%%F^b*GZTv zSC}sjw&nAHgn^k=CF%zPwXpjEzCOe$x#~i!1autmK>Pao?nK1DDjaKXE%D&FS+kb^ z#SZuD33~=aQ|#PKz80QWLmMY5-|3*>kaDo^gv@Dz)p2nWgCoBHD$YwxWD>*Ba1?V0 z$u$DB&TsY^pj4n@eiu_B(0Ab=cHQIJqqknv<2$`pd zcb)rt-@oBKpU=JbT%DZn_j&fS_u6Z%{SDL7IJcjiiG0_tUHi|gDrxW9wL1;}ydopQ zPuOO%jPRe`H?+?w?t0(CGKK%y=c1~AW7jT*1pISx_va5q2KXVV`}vE?q=UPOX?F9v zC`ixXM~B^&_1w=oJ33l9x$ipbW@YAXWy#@n-QAYs-1&=ISA(by?b^k$>%5YJj(6Wo zxtD)ONJV{O`&XXp-(H`O5kH^r)xq67=_J`vzIKb~ezL&cFOSW3$A5XmS*jRvBrk4c zSN)~sdu;DNRr_hVvQR(%aDCNwackk`*BY6%p^5i5q9%L;=H&kJ=PF5Lm*+1)9Vx*CN!`s{2($ezV ztMfZ%>W9LV9;P1{l{-(lNXN0I{q@RIT~k zK*_;_2ZL+PT_spT6gg?bY{mM<-TuwjP!9)e&UTvw{`-De^IuVni4xy|^0V^m{RgN* zFY)OpDk_?onEdxEPn49PL8cCh1B*@7YT831~Iaz`r!F9i5l76 zQetAnfs~;&^CwuSLKQis+1L*qs<#yFbr6pseA&Xnf~%`*SXh|J%@z7+RZ9^@C9Z|i zxr)ufxq$BP-|r~hAj9w8`sQ5mlu?XHMpl-MjJUy4l#huFSH6#!C|dQ7Jckn3frrXm z(Tr4~_4W0x63>U{cBayk0@g=Ky}9Ygu_Qb(jsFgdC$O@!XY24+Zv0{<306qas@VQJ zy*A|M{Nr<2!^x;gR-#YB$zBgTA4Em%__Zh1kA+1>?ro$X3BJ@BuEZ5knIzAV+-^%0 zL_-yNf>E81?(ZL5=fBl{Ej~I*l1qGap*07{h>3!3HI3)#31oKu9rPN`?R6;Xzd74i z*w<(9^NRd3)$UQ}L&G68W<)`|7U`OeN0(eA)Kl9($sG(+s;jT(JQ)&YE5;ODO&nZ} zbX|6G(@p|%H3OfkxVv;`m>Y2|8tG>b6n9{d}6YMmqv=# z%N;&Ca)n>hE541EZX%3#&T(vn&~lOlA3l6|gAhnJ*RE9#Cp~{I5UXY-s_*8Or+Ei~6=MkBPfX-3ElWp^aAKi4#LSHA zlKZ#ZK`pn{HnD^=fcT77)z;SjGgO{{`(E16cp<%UXwR*CJ)FLwx8~&{=UQIKY`%H6 zrM#-fL1Qas;O{RTT&?=w%T$EXUGnC1R~9ZYy!PYZA5#(4^bUkg>jVWckr9GCnlrQE?V_*Ow379QAKWA9JG~| z7LA`PiiC|0eCsvp(lfDyTi}XT<)FEzWIof{W-Io)Rg3Sjpy3ClgL?Ny=Dq#R&CS)+ z$U|%JxpPr$$|+imly$S7q(ni*#S)YxV+-DVbZR1ulqA8)zSX88xHc9l{E$WoKdCmw znvsY6oe12X5UyDNG`H3?zF1Ho7O!qC#uOSF8m9Ck*P=eTJe>Q(&N+qEMw);WFE*xf zvzohgb#+m4+dX3oRj*DUxJF%wiOl}}U1_H^E-=|GdML5%f|{C|x;hT1l-Hj-CDJsf z#1jN*$h0qC_K_ai{d{I{Y+bo__}L zT{mS-jEq?PiTV)Qx2rku2~qYpgs+pJ>f>w|qK{xXhBc*xndOdrfx~eK8BjZz1EAqwLTnk7^l}#;)QcX=w z+1E-DmGavz5(7VK!!Jcq{*Za=%1wJrR`x}$d9L2O&;PyF*Vhl3_#b$r-(Z8A`0rRr zv(2@ooSjb|p3_uSeW=RqRo$=|%tAUck|U5fZl zV6cqe>f^_c%a&TCN~G6jlzS4yIIv)|yw>sHJ!43ovBpd>MB;60K@({$pot&uY>i z2M!q;r8$~_@;PZS-<|D$;t8|Or-xbC*dBz11#Jri$?x*xo9uj~`f4u)gVG+EUE#H& z@#<8edouHACRf(hf}@OahNGf1FJ26>T&)V))0REI;qNbNlBV5gnHLna+xw16D)K?3 z%8lj8OO?ZOE52#k8SS=Z{u_C%6HDIGI4ybCvb!&EMVoq@HW&=vs8;3v;Z`ESqM@Rq zVqjq4MtCh&+}vdIn>q0_LLWey$9}YIq}8f26}eYGR$}yCmHW25^XBSoyXBKwb3&n2NA!q0_7UeM$a5eI zsinEi4V4GUSIv4Jry~!pcG*}QM-(i0ulrZD+xkx=dT|tCiF3YQ;Go$GkfRD+@+~** zA=O<(Ci)VnlG<)5it3xI=a1rf_wL=mllRUNNn&}ogCyL3s(N~^)`lO_Op=YP8AY`w zc5i!q@4;a8Innqshh9-Sa{6mYjO^^`+8IVdr;i>DsUJi3y>sWzl}ugb7=67*03QCb zfjIcdH@Rugr)X6vExf*%uoVy}!J^9_>s!7()0?l=Fy>Z55w-QlN(RaF;zzX5D&J`Qh`uc|#?;r6EosVj2 zPd%5VJH4?qaf)d_Q)Jz!3yqNStX%2`FPhIOT6~jNQG~=3_Sbl!Y+#v^Z&jP(94&76 zqa@IgpJ8dKi)7}kLFNWJ%hC<6{SjvpaJWENNJt|UA^xnoT0u*aEy_lO5p}XF%TR`m zI-$9xp}~9S-x>g5)41A&3;70F^$%EYln&zXA*LHGrP-+8BAUyMg$3#qR%hKMJMBEI ztzRpq(1h0l9XVaPbbz)CwQfGD!9Kg(S~MQ@&hKYK^f|{%99{U@w$xkJd;MRv+ad*B zh!cv`NJC~4ji+SQM!Fw&i&y`Z-zrOCQ3vFQ?2)2%Pw6F6Ry9hB7Juv~vV{+h{T%UE z_+$SAN)7|X?b9njHL2}yI_-)a`+qHX1L@S7m$*+oYMlrV3p4inMYZOf8u(B_z&0$3I@pHvXsiOymd$E_!-&rQ4*np+UlD(b7GOOEQG?8iluI z%kwi)Dn4567WutKLUHwD3d!}RBJyJ#&n~E|KUPb_b#l<;^v%$7 zb+V0f@+%fTQYE!}I*L__q}Lwkq}^8i!iD}apZxkU6b;dY=I-~`f(5Q*ciUK5vC8`Q z%zD;5m__n65;}z6A(@C(@|GT&^*mcln!>V9Cy}U;tM@!6CRID*mG)H0jR~4Hng0d1 z&*CfNY&q8-pW{#3Y&TmgOR&_L=ekR>IuM!8P(7m;V{+`xvuaoFljp!uM7gXrKXGs5 z@5=P3Yf@|6vuAI$Gk&`HsHuH@BUY7rYHG@@#2`orSb>zrdp*ZKBoZXLG zEJdf>KVD1_FBx=-SAP;8@AG&0x?V$}K^A+!dP?_n?Wjw9e0&c5Ii8q7r_%+l2r8=3 z@VCZdU4YdkB_%+;{IP$AD|h6|s_)*KWc`#K)RC@P)6h>S4~ep2LOSx@x3^9zak;L} z^tK;l$T6uNb-`&#YQ;%uD@r`=%+>((iG!t5ldr+1A1 z{7Fek84($2WohZZIa~B_2$+B?n(Xb`q@97fI)F73GjoSsA#Or6Uf|Rz`qvvYH05X4 zPu*CZ(T`MFN*LaH{q`;HFGxr|QIh`EsPHp-(~wW*xsU#PJyo|xV`F4A@Gb4aS-FE$ zp&S0PmU)ehjp{r%Mn8pIiocxMiNDN2^UkGg*-mNv~ z{2Uw}uET%ok4^H$1LdFBmpe3T?jC;p`^S$T>;AF=4;3C4SvEczX}wo#&M5NBt>oXo ze-DQg@1?if5))P9E^o@R1KtB6mv5si<%p)}W+IzSb)>Tk_Lu+to#|90g;H_yh=2ENN+J?WanB?ixYY0!LqJ(DaLv(cV*G2ojpl&18$4k92=A-+9mHYbj zu_||w^Ki@8uS!FVgnJ+_@m_doBow&Pc~y{sf~9kt0{NL_;hK91QE)Xk56`C|#^)np zQBkVPgx6O*SdU6p2o=X`K1A)AEKtzSUIZ zsru`hP-?$&HZmHU|$KgZ1O)D)KaZ&&Nw-cVFsZTB=$Rkxs2c7t1?ecq3A{0}4 z04RUR{&z?skt9tKDs*AE|dA?7Zk&GDiGlGF4UTC(??{yfexLMjUg#|#+XP2)&>!1DQBH`oXGtrWGqr`|Ph(k_pXMJIe zDzwHtcc9#_8{NHqCprcT3yWl5^uZ*qXy|nKn_FA2^2c)gXpkaqm%3v@?Oe8SS5H9J zf8E8+O*G=gh>HYm7~Lt!yB>XqPg*PW7iy&k`#gTrf6d&SD^bIw!1j`R5aq8+$p&aP z83YZ8W%Ol}vT<2zN2BTuKe}fO&mkXUv2Dff*Zx2{@RfdX=MHgx@ADTgDjfU8d!9Fc z{feDTIPH9QNLfRJ>Sqa1im>n;;_lX>k+JcRbKs_7QGepYho0CL_MxF$GdWEBj75kz{+dsf)Y2m@wg`$rE$)?^Jq7NJzuxfA_bCP{sj6 ztE#F9jKO4Vtt}BVRVX6Oq2<$aR?63HQ|@oZFDA*#*x7#_b$O+op~XiW8JtD|Ku#WF zDSB8U|3=Bc(F;%H^A)pnYnJyp#3I{f>Dm_>jJs_RGPFz6*RS8F+^4&DsyC@}R)L8f^CV^)BsfGsUa>@M*EROuc7nj&!2Ihr1|P1Z%L|1Vx43u zdgga5QWgOjk}YsVUQ|=NZP*7=#z9<)lXFy9QTl1gg^L$2s;fUIYrrhns zp54BE8>j2Rg9pEU{`ALD*Lr%KpI22azn|`s)fQi-+&{fyYmlK^ zVWB!_VDPNjI!2W{@NY*_gvt@}Tt-kIqdP*_B%#onGcF@l2Q{UGR8o00U$C&A_4&@e z_qi+>EHm1W|4su*@PR{z(DZMDwyJK(ZJh|F!QNLlEIc}TVPpZI0)5wu7edjhJr1jA zWjL8bUcA%dGpg`E^ECNsvvqKFj^COS3faqan}YoO07m2?L`Hi5l_|MKQg;6;OHpbT374f`7r(V?W$5TV zO6!Oy+Q<;$0qxenk$T_jxkeuVM9xD_u2e&(c?zpR|BY(UpL zebd?a7lfA(ZI~%d>$qExS-N71UZEX*kH59GH4@-#e^D^0j;E)mib@@YaM><3(u@0^ zUIguQ^}SJ0S~yC`=^^i$SFy;(F67_l$srIH!UsgkdP5s zh$7xNm#;9eMX@t82PY`B+be*62~j-5LY1biucyZs*Hrm$)$p_8VWgKGKLMlSoDUzK zRGXr0$cYR`%<*VEXG}c(;KMO=386J%#wKVyK=0}BuVkdZxbM{R`qir{g9>>LQ_=XF zH*bRfVUhQcWc@l&&0+j~@_cH$!%*2_QT@XC_m3l^qH2yQyBLI?u`KFuo>&53B*t_R?cUbL5+FVzR!_jU z{6+nk3^)Oe^bT7w967KEfFEaTIFUlp!RK%r;zpyRbFG`1;+n4DeL_O1&(g2lT!8N< zadAc0J9sEbF6-zlgO^miYiMBLJ5m*dFS zf(bFbVyNnTNlugJY;t<19R&qNtlD^?efRI*zaM%XcnSKPFBxm$jB%)Z|jg+b=-6j#O3Lu!mobd3W$cj4I$pRZ^wv$fx7$RPrIcHu&{QHiLy_>(73bhWkfP>M)`&5HU>{ALSr z`?|WG<6r2LTCZNZw9sYfjID@^i$itaw@hWdj7m=Ii!Xg}{qd70Oq3*&iEN5es+->gN#)JXl&>)bDZ4q74@Or`PVV$+FBBD;8}#(_tkT{t4i4&Bx`5v^gQZ@mh;nkn*7=S- zIYDY^Phw*eWpDP4y8Qh0OEFxR2Pr;wwkJ2ZX7q7f+}v=b+_7UBFJGGDvS`D8wgzr5 zH8eD&cJPBbR0JZB78ON#x{Ppo@?`Z;i69X+J1|N>FDE%G3ry%QoE##lgJ=cn$IRv# zt43Y0AFQmb?JACZbe~3D(7>NM727(2Dp-?qB33O?(u3cYC0-qUI)AL107HK7jB+?b zb*wV5kQfsVyO`x30!6OPA1mUUhclbhdWekpovuBaTRnk4)6>Cex!C$JCDFj`Ef9d% zci=ff(^64XTUJt(m-Uxm zr0knrh1fzxO$}r_Q08;cw-C9HiH+^`H~!fBD9z7KQGAs`$vwr?3?NRO znFrj*6SFU35P;56JfYpzsMIs7Y5cZiUv)648Dm;O!7|`qTM*(<#&hOr%_xu!vNyO{ zu)tPUR&(WRLz9zlbTb8yAMgL@aXhB+-J3TcV#wH{vfsUv_V`Ul5}fh=y{yk7cZg!f z+qaVb>mo_5>`Y9)Vr{{^_vJZ24tPJoK?0he>F0Fj|L?w6-e+bWXQ3L#%Kgz$5}bee ztBz(my7A}x_d*X9X(Wh(s>T-XD4N;X@z2Br&HCBc@T$KAZ$5tl^nlit+__MvBlHP$3Wd zt*xv;@+NA8Qce=s6|XPI(7ftTLF__%A&rtYs13HtgEqrAS{=lucP!jEH@RbKc6L_l z6TY+UHP{(Y7uBZn`v5;qFh(pdFQYXd#RU&pa!C+xZ)*zTLJUFHaQJ!evxZGSR81 zAE8h2XBGiKO2xu>`0%mg$B*;zdH*SyASO~!R<6YzyGj^cxk5iPir-tY(q-sW#O&6i z#iw)SipTbr4|xa}iW~DI3MEF{;L)J#wYOh-s{TNU3&b+yAgALrWH=?@dqK@~3=T$? zmHw9)&4Jy^mJZ>Pf*VwsQ6xD z7CNDw@%?(o>uSZlVM^K=I+BSR+_bs9Gq|h0!3uADfRiP{_6r&aFeJpsUl&iJHJ4wBtjTy%?REbw0V z0TLXP=|NtNDh)k-{od8t{&rh;E30v4=d#@g^sir^`rVlc5zEJC1ArGyHvZ`SwNiN+ zpu6|FnRA1sr1a(JMA3u3efxHJ>(}XIFPCk|muH6k%kO_TJTG^M94e;v`b@ z2?%r7zj4Pk#R40UhoCC)A3wgclItiT3VrG`BrYSNh{H8(dqWg`W^(II`Viz;4BO+q72C`77 zqqre35mo`32djW4r z)1>(4&%c`I`uh2qU7{4X+)K2ZF%6x3cy%lD?%dX^HDTwuB@SFT8T&Y0%vb#`{5M1#!0PlPMC@>IEf=SQmN z=X1b}-rW4qG4(DhtK55mE3^jfzt8$SXL0DKIcoHJiPO>12f%Xb=zvW-U_nnvx5nOR zZqqdqC8ed2CxfdwzNUgl#Yt5@TV_jyOkoxyfJ}Pq*uJ;ks9vazNIUJ9^MU14+o4kG z6+9JpWSWUQpQfGPi(*q^^ar`i%%;my6bS;P2K{ke@JUc{fe#WBv6;VGlc)oDa|%Bq zo#<_cy3955CP9DVJAV9vrlv`m_X(y*Az|SnJ%Qu8@4#l_uUY5&w7*oQ`Ldsi>On-r z&+&2kLx<#cww9pZV=V{_+3;L;Mn;L-_!m$p=oa6bRLUZvjEwxp>LOE8QjkrCw^xh6 zE4+XI2fdrSWclmY)<|O@udv)f^2r}Qtb!X3!Hbu&Yp;o0#hF|sQJD|j_S2i@B8>MBSKD{Jdt6B9`DPsMck=#-TK=E#3Yh1Y5u z8Nm;L>uNC-;pgY)sDK`eC}9Y@2Tpm~#- z8T|Je&f7Wmo5Tx)0GZ?mh9Lt_dX@rg2^*KGrfAt=;pT?3JMAD;O}j|^o}O+^k`rbK z4}`BnfC0V|x`PL6Ohq{Oz`)PvzI^$~RK$OKV*(ejW2XF{B)KDq(E9f?Mss_8EUHy@ z6C$6tSVeH>3C0XC`y!_5+_annnORwpA5*}2x||&);FbiOB6W`Xy1LhCX$Y1c?u1kJ z3_8;hDi(mK>O6bmq0*3tyi87(&(L|Vm-}gYrS9`*ItB(1nkiZmR$u4@7z~Y!910D( zvkbwdL)9E~3jNC(tqMp6uqB{a zynfBomsHq4o2i?Hrt;LOQvjq^`MrgOg-A1^;k9qGvIfijisU)oWMufD3!)^ck=t34 zqu#&26Pdc)H&!JT=W%wZyx*>HdwZ=i^vfX5V`_;YSaa407l|3qQXEdvlP6IO_LJ;c zd`~!7ab~{|Q`TSCk^Je&Lx$%_dHJ5o2ED!P;c<$wG?RG5DkgoDxSKa+ zY*}I&p|o7i&_P~A5H(w$K7D%AUlwRCSMOU#M>S#AZOfltN*Bnlpm1yr+l-!Gl54H65XeqLqlgh{mjfp@6#Vg4ZnD?xkx8|nt%TpIfb9STvzH6k&YrD-@CPcUnzy8)VjHME>P7KU@Q?JYOicU$+N%yaM6{umk>0`-N;C7w`C1U{^H)-yzL0mNi3eEReWXbxE}qw_bwO(gT_#f`1LzCQ4IpLh*FI6(GC z;2;Q3CNu*M1+34TSy+sL>qY)xVq!A(ojUsTA}0-5v?_7kGLkzLt05iv-b&so2WxL{ ziPNXSmI1=3Wc%(|JXs=OMJw;$8R>|trFyyTOFS{adQXo*FWfzfe+5mQp}u7r>7{-Z~`qb|$=5O+({- zcD7gPAQC$0bA%z&v|9;GV&F*E->~Ey$*kp z_m6#yLhW{it

    Ca8L0KK0k8<-5%f&+6v?iID~Lull=aa0B`^O`xh1nRZ|>moY1)V zczt8z3b%2!NR`W1t`MlXShXuyLcA$A-a#lFu#R;eC?54JO?dW9BS{vtFVg;L$3Dya zUfJz+3pg9eh}mTQ^|ZAYk&P&bZ_E9g(!4~G@#ZHO(|e8z)hXul)Qmp}En1TZmI|aQ z!H)l-wLy3{XsebXo*uVh92H}4tB@HfJiU#rK zI;PTKhkUBT-x;GRyHD_Hq{>PAE&xIOzJGWB*>Hf49NF7_Yu%NSqyulDtMbS8eg9ry)5;dDs$*yfSB*iBAUf5^$VeP; zyTZTI*_Eps{_`s;sSDx473f5T;-)WkON$)3r^Mw{WSF4?ZU~+fi3dSH^U25pDHw!| z)_W|XZZ6aw0(SRzuVO?I=X-4HLTYceZ{I$x?jtdcE-~-kzo+_9YAV9V5MF2?xNHc! z2^s~U@td+q-P0E@TtISwSPinPXo?(Rw$Y(?W|`kgC79>WPi zDw23Ey<_w=xhmUZ4iGhR$v^)Kw;cDWZ|7rp2rUDUJj`k?q_CSGA>2or%|V}=n;SNzzkhuzhe7O9T`hopabWqnvoq=CU74MB;t41}dx;eM z{7Rd~A2nJ+i_of^o}6?kF~VDLBM3{-0r2Ib%i}+G3`rX3l^JH%ckjM_{YuR16!cT`pFau-1b89Bopttu1;3lus__!NsH z7NRaU{SSN8-lvz5kwLxcDY$-6ny8}|-JN8<0K@SUC!%Z373itCq#W?(u)!WB_1vu)=RQ933p+&$&);*iif zaaC6raaU1MfqoSw5VEnybQctk)ONCbk9i+pQZPMce~IlpC0LLodu_##pkz*-%*P>K z`P~VN+D~vJg&#h=ko5SCFwDxzg4lAHiOKHz^`Kx`Aci=hYxkA7@Fu(BFF(8wSQa=@ zdL6bGn}lW9G;iEkf{zVI2TsxncS#WS#(uM>%8di3y9D`Te=lud-8d9Ta?}FcX{(R%75Q<0@3j}0fV5LFU-Fuo@x>v7W%{D0f z;vl{=N*&0^#Drb(g*WPKik6{a|Hz0bF6r8}LFlojH4%-L5TFU?wX^eDi5o1Ih&bVA z-#!tuZ-Jq?%tz;P)uVJ!JA=;7$6I=P_~Bg>i{em%cC#fDssdveG>s1*J_IbcpA#-$ z)|OyV`Ddh$jt=$>aUAaeGQH-8_Wry5_(Ms_Mp~Tl zm#<&%94mwLbFI{~*Wm*k)FMZZj>EzWTW4CD)o{g4G)!^ACJ%g%VD)-rA9O9ka|bey zb{Lj^=UnVBUevPd^8B&pB8&q^ZiPyPDJiD51No$;9+A9_B*|F;pAZWbsi?_Qt33(3 zo}RdCPtQV?o|Xn9>4C7%&!3}9AZ9K`e26%b2JoW9=H>$ZqBzAjTW9F>4GmFg@PaiG ziaRYXPELIL?ORagP{K5$qN2JxJA+PD_4MeWl4@wQzQ8HlXSDrQk0b-fdC;MW@O|O77l$)T5$K} zBT~Q5AXgyX?2tY2Az(OB@U~D{q{XD*97Sk$%8G57rhiO?>TN-9MHNtmC9k*n_)_W zsr9vH5>;$5xL}Z=2&L%g=x^V&ZSCFN-C@4z>g=qpVr7bSvb7b7R}W_p#Dd}XsieAs zaS>q1%*bf874!7)Q0VqRKI5j%Kp42V&=@d?CuC)3x7v!~K(4K=T}b-|RJStS9j^2e zRd_$Mc*FSO$B!RR*>^#C1(5??r?acexYTohh$1>u*alSL(7?e(*Y0d@58zA`RbLvo zv)$03icp2m01jRV*4M?Jbx(Upupn`sd%zNOd6;HAD4hTMVwGEALBV51LMskFjAr|< z!*E4;Ufv>jN*KWmO7;ZONwdLZj`YP44#^BVeJM&4I#aYNFs(d?s)mNO2qW^dN)MQb z7RF#*@l&Uioi8&+s?6(Nx3gRHmPR=RSio1r+q`fs9dr=yM{?WiZ(#x4^9}@$re^4g z#}N^fdT%DDrU-oq>djF&?7#K&fP%7VepYLp55$Ug8=Ni71y`a*l7#N6N4pk4l^FCrl+&TOQ5-d*6&T^hJdJ-&uCMUgNrobQh`E3G9kM5YGutJE% z=h31wQQ1RW+$8^x8|=}!}RD``fs*qSk`-fBsI<#unZmR#W4Jp9Flt<_sIKC ztoV*w>an9`uKLTC=A$v<#l$ZZ&h(3aaxOVLtoOYTrD>_zIM=kU4d+{PP zBhWJ#N%6akVGR$iE+{HumvG@Yb*d1gXl3QFQ&Hf2HL2FG{#=W5@O}UVHdwkLK|T>Q z1Rlablw-X5Dvm!Corh&81>i-_no~>&Lj+bemSACn@nO&Cu>aCUGc!&Q*kpkh(V@fr z@3ygM6{5J?ezu*tU#l{By=B((+_YDaJcqbAv`!Tn*-_uaaQCx_Bk`rD!%Y{jPIA?r z^D)|_+Xtn=x+!s?W-DEL@!5OSu>pq`toKrnrd-jE!teBu63Kz=q*8f@CVx6EFd@%0UAJ zCG9<*Ty0u>a}#np&;nsWp`Bn_0I8ZFk~~5NlV1dx30jW&Aiuk$3?!qqRY0P)M*&bI zB_$=n0LZUrx{g%sPH6Uoym!^)COyBGR&DU?iFy}WE=csWv}zr4s!%X# z;t9>PVXsO`&KTq*$OUc#b~rj_HCr2&`>tT!V3bi--W!q9;~+kNoQ;hQhqAS$#W=@w zw>l9OgK38{)8vQ*L@!&yMR~NiKZW1j2B}F@UXMaviBuRNusTik5 zv(E1v9ERZyGj0swX4?;H&GD`$^&TAApy2Wkzm%K2RF#Y>3)d@AkSWFsVT)|E{Ir`q zS8o9L-$lYfoH=4l1_UYGAUI&AP6NHYhnboC+uD-5rw<9}iAYNifb-MR%0VAxyJR;0 zB^H&xyd0#$ZFU{RWTPd3FYvYSv12~yiDIyIw~3c0p;x0#n4Fw!Xln8UQXQQmsJ_cC z@FWj+c6uNfFo%FQ=zDX52plHHgb;y15nD$UQ*tUQ0?-j)q2am2kPT+85{KvJCMSC; z11mvaP_3UH_CLtXOkpFb%KfdajpkJ+T&A3yoGet}`5%^{14ER*dnW+BoiNyE5(>M3 zrHxGzW>j!xXj@ioMlJa0Ubfq6l_B}vRgj*Syj#iuff%|WpaI5(xM?9urfKhsl?C0+ zMlj(?N%dQbB1WH{@GKqtpMeU109RXD+7HKEp+V`OP)sB2K;Q-tuQ(c=b}QgG0ic$B zZ(g|qS~gz7m1|kAqoV_=HbzAH`}zR9Np}BdJ(i>-?a#eUU1`Z+-)* zB_<{!EYSgeZES>iZ;)pRmkH!LP%jf4MYD5rnwpwWUGzUV=sP(%p@BKsD&5i5wOYsQ z3=Q-B`}eqMNMBeGq=pZLh1bfw4>(+eAAb-vW$N2eOiI*H%PAere)DD$MuM28aX?5I zb6`CM≶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�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 literal 0 HcmV?d00001 diff --git a/guide/images/cloud.png b/guide/images/cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..d043091f0b2a15a77b16240c063d95c4b53ee844 GIT binary patch literal 12402 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

    He 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 MyV^?CcaV|)4_%2CTL1t6 literal 0 HcmV?d00001 diff --git a/guide/images/emane.png b/guide/images/emane.png new file mode 100644 index 0000000000000000000000000000000000000000..de823379ead6f178cfe22a8cce76822fe56edb10 GIT binary patch literal 448552 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%0DkVbK@R>{D~NE{@j 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%0A@&}dc1{Y9a;ia|(G47h(eLA7~z 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�`YJqBY8@nW0@3$K29AC7{MEP`|9&47x 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 b#ja}Uf4sHG*U!~cyr!Ox;mj-3Ej<1YQQbtr literal 0 HcmV?d00001 diff --git a/guide/images/exclamation.png b/guide/images/exclamation.png new file mode 100644 index 0000000000000000000000000000000000000000..d25b4e5c1267696e0a2fc252954ade193de75c72 GIT binary patch literal 18804 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 literal 0 HcmV?d00001 diff --git a/guide/images/ieee80211abg-01-emane-spectrum-monitor.png b/guide/images/ieee80211abg-01-emane-spectrum-monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..e3bfb7c95403d22ebd29d9fb200dd092c03b3e65 GIT binary patch literal 23278 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 literal 0 HcmV?d00001 diff --git a/guide/images/pointing-finger.png b/guide/images/pointing-finger.png new file mode 100644 index 0000000000000000000000000000000000000000..0bd801b237a2375bb63aec752a9cbd74f98146c8 GIT binary patch literal 16060 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 literal 0 HcmV?d00001 diff --git a/guide/images/rfpipepcr.png b/guide/images/rfpipepcr.png new file mode 100644 index 0000000000000000000000000000000000000000..db983034ee0ec2e4ab1b7ce344c3a6cb6a1caf68 GIT binary patch literal 13630 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 element +with a `name` and `value` attribute, or for a configuration parameter +with multiple values --- `` with `name` attribute and a +sequence of `` elements each with a `value` attribute. Where, +`name` matches the name given during configuration registration and +`value` is the configured value. + +The following ~{{link name="Bent Pipe Model" +file="bent-pipe-radio-model.md" section="#bent-pipe-radio-model"}}~ +XML snippet shows how `` is used for configuration +parameters with more than one value: + +~{{snippet path="../examples/bentpipe-02/node-2/emane-bentpipe-radiomodel.xml" +type=xml +start-regex="\s*.*" +stop-regex="\s*.*" +showname=true +path-cut="../examples" +path-replace="emane-guide/examples"}}~ + +### Querying/Modifying Configuration + +Running `emane-guide/examples/rfpipe-01`, the `emanesh` application is +uded to connect to a running `emane` instance and query and/or clear +statistics. + +~{{imagemagick + file="images/run-rfpipe-01.png" + scale=75 +images/pointing-finger.png -resize 25% \( -size 800x -font DejaVu-Sans-Mono-Bold +-gravity east label:" Run emane-guide/examples/rfpipe-01 and give it a try. " \) ++append -transparent white}}~ + +To establish an shell connection and query one ore more configuration +parameters of a running radio model: + +~{{verbatim type=txt -- +$ emanesh node-1 +[emanesh (node-1:47000)] ## get config nems mac +nem 1 mac datarate = 150000000 +nem 1 mac delay = 0.0 +nem 1 mac enablepromiscuousmode = False +nem 1 mac flowcontrolenable = False +nem 1 mac flowcontroltokens = 10 +nem 1 mac jitter = 0.0 +nem 1 mac neighbormetricdeletetime = 60.0 +nem 1 mac pcrcurveuri = emane-rfpipe-pcr.xml +nem 1 mac radiometricenable = False +nem 1 mac radiometricreportinterval = 1.0 +nem 1 mac rfsignaltable.averageallantennas = False +nem 1 mac rfsignaltable.averageallfrequencies = False}}~ + +You can also use `emanesh` to issue any command as one-shot from the +command line: + +~{{verbatim type=txt -- +$ emanesh node-1 get config nems mac jitter datarate +nem 1 mac datarate = 150000000 +nem 1 mac jitter = 0.0}}~ + +To change one or more configuration parameters of a running radio +model: + +~{{verbatim type=txt -- +[emanesh (node-1:47000)] ## set config nems mac delay=1.5 +nem 1 mac configuration updated + +[emanesh (node-1:47000)] ## get config nems mac delay +nem 1 mac delay = 1.5}}~ + +To query the configuration parameter descriptions of a running radio +model: + +~{{verbatim type=txt -- +[emanesh (node-1:47000)] ## info config rfpipemaclayer delay + + Configuration parameter information for rfpipemaclayer delay + + Defines an additional fixed delay in seconds applied to each + transmitted packet. + + default : True + required : False + modifiable: True + type : float + range : [0.000000,340282346638528859811704183484516925440.000000] + regex : + occurs : [1,1] + default : 0.000000}}~ + +## Statistics + +All *EMANE* components use the ~{{srclink name="`StatisticRegistrar`" +path="$emane_SRC_ROOT/include/emane/statisticregistrar.h" +path-cut="$emane_SRC_ROOT" +path-replace="https://github.com/adjacentlink/emane/blob/master" +line-regex="\s*class\s+StatisticRegistrar.*"}}~ to register statistics. + +~{{file path="$emane_SRC_ROOT/include/emane/statisticregistrar.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-protected=false +cpp-show-private=false +cpp-show-comment=false}}~ + +There are two registration template methods which allow components to +register numeric and non-numeric statistics: ~{{srclink +name="`registerNumeric`" +path="$emane_SRC_ROOT/include/emane/statisticregistrar.h" +path-cut="$emane_SRC_ROOT" +path-replace="https://github.com/adjacentlink/emane/blob/master" +line-regex="\s*StatisticNumeric \*\s+registerNumeric.*"}}~ and ~{{srclink +name="`registerNonNumeric`" +path="$emane_SRC_ROOT/include/emane/statisticregistrar.h" +path-cut="$emane_SRC_ROOT" +path-replace="https://github.com/adjacentlink/emane/blob/master" +line-regex="\s*StatisticNonNumeric \*\s+registerNonNumeric.*"}}~, respectively. + +Numeric statistic types may be any of the following: + +* `std :int64_t` +* `std::int32_t` +* `std::int16_t` +* `std::int8_t` +* `std::uint64_t` +* `std::uint32_t` +* `std::uint16_t` +* `std::uint8_t` +* `bool` +* `float` +* `double` + +Non-numeric statistic types are limited to: + +* `std::string` +* ~{{srclink name="`INETAddr`" + path="$emane_SRC_ROOT/include/emane/inetaddr.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*class\s+INETAddr.*"}}~ + +Both calls have parameters to specify the statistic name, properties, +and an optional description string. + +Statistic properties are one of the following: + +* `NONE`: No properties. +* `CLEARABLE`: The value is clearable while the emulator is in the + running state. + +Below is a snippet of statistic registration from the ~{{link +name="RF Pipe" file="rf-pipe-radio-model.md" +section="#rf-pipe-radio-model"}}~ radio model: + +~{{snippet path="$emane_SRC_ROOT/src/models/mac/rfpipe/downstreamqueue.cc" +type=cpp +start-regex="\s*pNumHighWaterMark_\s*=.*" +stop-regex="\s*}\s*" +showname=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +link-replace="https://github.com/adjacentlink/emane/blob/master" }}~ + +An unsigned 32-bit integer statistic variable is declared with the +`CLEARABLE` propriety. No description is specified. + +### Querying/Clearing Statistics + +Running `emane-guide/examples/rfpipe-01`, we can use the `emanesh` +application to connect to a running `emane` instance and query and/or +clear statistics. + +~{{imagemagick + file="images/run-rfpipe-01.png" + scale=75 +images/pointing-finger.png -resize 25% \( -size 800x -font DejaVu-Sans-Mono-Bold +-gravity east label:" Run emane-guide/examples/rfpipe-01 and give it a try. " \) ++append -transparent white}}~ + +To establish an shell connection to query the statistics of a running +radio model: + +~{{verbatim type=txt -- +$ emanesh node-1 +[emanesh (node-1:47000)] ## get stat nems mac +nem 1 mac avgDownstreamProcessingDelay0 = 9148752.0 +nem 1 mac avgDownstreamQueueDelay = 9148752.0 +nem 1 mac avgProcessAPIQueueDepth = 1.2433922547802265 +nem 1 mac avgProcessAPIQueueWait = 50.888313472666326 +nem 1 mac avgTimedEventLatency = 142.49969021065615 +nem 1 mac avgTimedEventLatencyRatio = 0.2250635999012512 +nem 1 mac avgUpstreamProcessingDelay0 = 19.191591262817383 +nem 1 mac numAPIQueued = 11354 + +... + +nem 1 mac processedConfiguration = 1 +nem 1 mac processedDownstreamControl = 0 +nem 1 mac processedDownstreamPackets = 24499 +nem 1 mac processedEvents = 0 +nem 1 mac processedTimedEvents = 3228 +nem 1 mac processedUpstreamControl = 0 +nem 1 mac processedUpstreamPackets = 85813}}~ + +To clear those statistics that were registered as `CLEARABLE`: + +~{{verbatim type=txt -- +[emanesh (node-1:47000)] ## clear stat nems mac +nem 1 mac statistics cleared}}~ + +To query the statistic descriptions of a running radio model: + +~{{verbatim type=txt -- +emanesh (node-1:47000)] ## info stat rfpipemaclayer numHighWaterMark + + Statistic element information for rfpipemaclayer numHighWaterMark + + + clearable : True + type : uint32}}~ + +## Statistic Tables + +All *EMANE* components use the ~{{srclink name="`StatisticRegistrar`" +path="$emane_SRC_ROOT/include/emane/statisticregistrar.h" +path-cut="$emane_SRC_ROOT" +path-replace="https://github.com/adjacentlink/emane/blob/master" +line-regex="\s*class\s+StatisticRegistrar.*"}}~ to register statistic tables. + +~{{file path="$emane_SRC_ROOT/include/emane/statisticregistrar.h" +type=cpp +showname=true +blank=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +cpp-show-protected=false +cpp-show-private=false +cpp-show-comment=false}}~ + +There are two template methods for registering a statistic table, both +named `registerTable`. Both methods have parameters for specifying the +table name, column labels, and an optional description. One version +includes table properties and the other is specifically for +`CLEARABLE` tables with a callback to invoke when a table is cleared. + +All rows in a statistic table must have the same number of columns, +where each row value may be of any type allowed for an individual +statistic. + +Below is a snippet of statistic table registration from the ~{{link +name="Physical Layer" file="physical-layer.md" +section="#physical-layer"}}~: + +~{{snippet path="$emane_SRC_ROOT/src/libemane/eventtablepublisher.cc" +type=cpp +start-regex="\s*pPathlossTable_\s*=.*" +stop-regex="\s*/\*\* \[statisticservice-registertable-snippet\] \*/\s*" +showname=true +path-cut="$emane_SRC_ROOT" +path-replace="emane" +link-replace="https://github.com/adjacentlink/emane/blob/master" }}~ + +These registered statistic tables provide the current event +information used by the model. Each table uses an *NEM id* key and is +not clearable. + +### Querying/Clearing Statistic Tables + +Running `emane-guide/examples/rfpipe-01`, the `emanesh` application is +used to connect to a running `emane` instance and query and/or clear +statistic tables. + +~{{imagemagick + file="images/run-rfpipe-01.png" + scale=75 +images/pointing-finger.png -resize 25% \( -size 800x -font DejaVu-Sans-Mono-Bold +-gravity east label:" Run emane-guide/examples/rfpipe-01 and give it a try. " \) ++append -transparent white}}~ + +To establish an shell connection to query statistic tables of a +running radio model: + +~{{verbatim type=txt -- +$ emanesh node-1 +[emanesh (node-1:47000)] ## get table nems phy LocationEventInfoTable PathlossEventInfoTable AntennaProfileEventInfoTable +nem 1 phy AntennaProfileEventInfoTable +| NEM | Antenna Profile | Antenna Azimuth | Antenna Elevation | + +nem 1 phy LocationEventInfoTable +| NEM | Latitude | Longitude | Altitude | Pitch | Roll | Yaw | Azimuth | Elevation | Magnitude | + +nem 1 phy PathlossEventInfoTable +| NEM | Forward Pathloss | Reverse Pathloss | +| 2 | 80.0 | 80.0 | +| 3 | 80.0 | 80.0 | +| 4 | 80.0 | 80.0 | +| 5 | 80.0 | 80.0 |}}~ + +To clear those statistic tables that were registered as `CLEARABLE`: + +~{{verbatim type=txt -- +[emanesh (node-1:47000)] ## clear table nems phy +nem 1 phy tables cleared}}~ + +To query the statistic table descriptions of a running radio +model: + +~{{verbatim type=txt -- +[emanesh (node-1:47000)] ## info table emanephy PathlossEventInfoTable + + Table information for emanephy PathlossEventInfoTable + + Shows the precomputed pathloss information received + + clearable : False}}~ diff --git a/guide/physical-layer.txt b/guide/physical-layer.txt new file mode 100644 index 0000000..d7154f9 --- /dev/null +++ b/guide/physical-layer.txt @@ -0,0 +1,1147 @@ +~{{frontmatter +layout: default +title: Physical Layer +nav_order: 6 +permalink: /physical-layer}}~ + +~{{layout type=newpage}}~ +# Physical Layer + +The *EMANE* physical layer model (*physical layer*) is central to all +emulator functionality. Designed to be flexible and universally used +by all radio models, the physical layer is key to providing a +realistic emulated electromagnetic operating environment for +heterogeneous waveform experimentation. + +## Features + +The physical layer provides the following set of features, some of +which are utilized by all radio models while others are only utilized +by radio models that are designed and coded for their use: +[Heterogeneous Model Interaction](#heterogeneous-model-interaction), +[Propagation Model](#propagation-model), [Receive Power +Calculation](#receive-power-calculation), [Antenna +Gain](#antenna-gain), [Noise Processing](#noise-processing), +[Frequency Diversity](#frequency-diversity), [Collaborative +Transmission](#collaborative-transmission), [Multiple-Input +Multiple-Output (MIMO)](#mimo), [Fading Model](#fading-model), +[Spectral Masks](#spectral-masks), and [Spectrum +Filters](#spectrum-filters). + +Physical layer features are controllable via a combination of start-up +and running-state modifiable configuration, events, and control +message exchanges with a respective radio model. The physical layer +operates in one of two API modes: *compatibly mode 1* (*compat1*) and +*compatibility mode 2* (*compat2*). + +*Compatibility mode 1* is a legacy non-MIMO API mode that supports +radio model control messaging for single antenna functionality. This +API mode was the sole mode available prior to *EMANE* 1.3.x. While +still supported, the use of this mode by newly developed radio models +is deprecated. + +*Compatibility mode 2* is the newer MIMO API mode and supports radio +model control messaging for MIMO. New radio models should use the +*compatibility mode 2* API, even if not modeling MIMO +features. Regardless of the API mode in use, physical layer instances +of the same version of *EMANE* are over-the-air compatible. + +~{{ditaa file="images/compatibility-mode-control-messages" + scale=100 no-shadows=true + transparent=true + caption="Compatibility Mode Control Messages" + -- + Compatibility Mode 1 Compatibility Mode 2 + + /---------------\ | /---------------\ + | | | | | + | Radio Model | | | Radio Model | + | cFFB | | | cFFB | + \---------------/ | \---------------/ + ^ | | ^ | +o ReceivePropertiesControlMessage | | o AntennaProfileControlMessage | o MIMOReceivePropertiesControlMessage | | o MIMOTransmitPropertiesControlMessage + | | o FrequencyOfInterestControlMessage | | | o MIMOTxWhileRxInterferenceControlMessage + | | o SpectrumFilterAddControlMessage | | | o RxAntennaAddControlMessage + | | o SpectrumFilterDataControlMessage | | | o RxAntennaRemoveControlMessage + | | o SpectrumFilterRemoveControlMessage | | | o RxAntennaUpdateControlMessage + | | o TimestampControlMessage | | | o SpectrumFilterAddControlMessage + | | o TxWhileRxInterferenceControlMessage | | | o SpectrumFilterDataControlMessage + | | | | | o SpectrumFilterRemoveControlMessage + | | | | | o TimestampControlMessage + | v | | v + /----------------\ | /----------------\ + | | | | | + | Physical Layer | | | Physical Layer | + | cFFB | | | cFFB | + \----------------/ | \----------------/ + | +}}~ + + +### Heterogeneous Model Interaction + +Physical layer instances are interconnected using an over-the-air +multicast channel. All over-the-air transmissions are processed by +every emulator instance using the same over-the-air channel. This is +how the emulator physical layer accounts for signal propagation, +antenna effects and interference sources across heterogeneous radio +models. + +Each over-the-air transmission has a *Common Physical Layer Header* +prepended. This header is what enables the physical layer to account +for spectrum energy from *in-band* (same) and *out-of-band* +(different) waveform sources. + +~{{file path="$emane_SRC_ROOT/src/libemane/commonphyheader.proto" +type=protobuf caption="Common Physical Layer Header Google Protocol +Buffers definition." showname=true blank=false skip=33 +path-cut="$emane_SRC_ROOT" path-replace="emane"}}~ + +As we learn about each physical layer feature, we will highlight what +if any information in support of that feature is contained in the +*Common Physical Layer Header*. The following header contents are used +in general to identify and process an over-the-air message: + +1. `registrationId`: Identifies the over-the-air transmission as being + an emulator physical layer message. + +2. `subId`: Identifies the over-the-air transmission as being from an + *in-band* or *out-of-band* waveform. An over-the-air message + matching the `subid` configuration parameter of the receiver and + using frequencies that match the `frequencyofinterest` + configuration parameter or the frequency of interest set + associated with a receive antenna configured via control message , + is considered *in-band*. + +3. `sequenceNumber`: Unique sequence number incremented for every + over-the-air transmission. + +4. `txTimeMicroseconds`: over-the-air *start-of-transmission* (SOT) + time stamp. + +### Propagation Model + +Pathloss within the physical layer model is based on ~{{link +name="`LocationEvents`" file="events.md" section="#locationevent"}}~ or +~{{link name="`PathlossEvents`" file="events.md" +section="#pathlossevent"}}~. Pathloss is dynamically +calculated based on location when the `propagationmodel` configuration +parameter is set to either `2ray` or `freespace`, which selects +between the 2-ray flat earth or freespace propagation models, +respectively. + +Pathloss can be provided in realtime based on external propagation +calculations using ~{{link name="`PathlossEvents`" file="events.md" +section="#pathlossevent"}}~. The `propagationmodel` configuration +parameter should be set to `precomputed` in order to process ~{{link +name="`PathlossEvents`" file="events.md" section="#pathlossevent"}}~. + +### Receive Power Calculation + +For each received over-the-air transmission, the physical layer +computes the receive power associated with that transmission using the +following calculation: + +~{{math rxPower = txPower + txAntennaGain + rxAntennaGain - pathloss}}~ + +Where, + +* ~{{math txPower}}~ is provided in the *Common Physical Layer Header* + via `transmitters[i].powerdBm` and optionally overridden by the + `frequencyGroups[j].frequencySegments[k].powerdBm`. Set at the + transmitter using the `txpower` configuration parameter and + overridden by a radio model using ~{{link + name="`TransmitterControlMessage`" file="control-messages.md" + section="#transmittercontrolmessage"}}~ (*compat1*) or ~{{link + name="`MIMOTransmitPropertiesControlMessage`" + file="control-messages.md" + section="#mimotransmitpropertiescontrolmessage"}}~ (*compat2*). + +* ~{{math txAntennaGain}}~ is provided in the *Common Physical Layer + Header* via `transmitAntennas[i].fixedGaindBi` when using an ideal + omni antenna with fixed gain or determined using + `transmitAntennas[i].{profileId, azimuthDegrees, elevationDegrees}` + when using a profile defined antenna. + +* ~{{math rxAntennaGain}}~ is provided via the `fixedantennagain` and + `fixedantennagainenable` configuration parameters or calculated + using the receiver's current antenna profile when using profile + defined antennas. When using a profile defined antenna, it is + calculated from an external ~{{link name="`AntennaProfileEvent`" + file="events.md" section="#antennaprofileevent"}}~ sent to all + *NEMs* or by a radio model using ~{{link + name="`AntennaProfileControlMessage`" file="control-messages.md" + section="#antennaprofilecontrolmessage"}}~ (*compat1*) or ~{{link + name="`RxAntennaAddControlMessage`" file="control-messages.md" + section="#rxantennaaddcontrolmessage"}}~ and ~{{link + name="`RxAntennaUpdateControlMessage`" file="control-messages.md" + section="#rxantennaupdatecontrolmessage"}}~ (*compat2*). + +* ~{{math pathloss}}~ is the pathloss between transmitter and receiver + determined based on the [propagation model](#propagation-model) + specified via the `propagationmodel` configuration parameter. + +If the ~{{math rxPower}}~ is less than the ~{{math rxSensitivity}}~, +the message is discarded. + +~{{math rxSensitivity = -174 + noiseFigure + 10log(bandwidth)}}~ + +Where, + +* ~{{math bandwidth}}~ is defined by the configuration parameter + `bandwidth`. + +* ~{{math noiseFigure}}~ is defined by the configuration parameter + `systemnoisefigure`. + +### Antenna Gain + +Antenna gain for a given *NEM* is defined via configuration using one +of two methods: *fixed gain* or *antenna profile*. + +Fixed antenna gain specifies the antenna gain for a given *NEM* to be +used for all transmissions and receptions. To use a fixed antenna +gain, the `fixedantennagainenable` configuration parameter must be set +to `on` and the `fixedantennagain` configuration parameter must be set +to the desired antenna gain in dBi. Both of these parameters are +optional and the default configuration is to use a fixed antenna gain +of 0 dBi. An *NEM* configured to use a fixed antenna gain uses the +configured gain as the ~{{math rxAntennaGain}}~ for all over-the-air +received transmissions when computing ~{{math rxPower}}~. For all +over-the-air transmissions, the *NEM* indicates the use of fixed +antenna gain by specifying the gain value within the *Common Physical +Layer Header* via `transmitAntennas[i].fixedGaindBi`. + +Antenna profiles use gain patterns, defined via XML, as a function of +elevation and azimuth based on the transmitting and receiving *NEM* +location and orientation (pitch, roll, yaw). Location and orientation +are communicated using ~{{link name="`LocationEvents`" +file="events.md" section="#location-event"}}~. Each *NEM* must be +aware of the antenna profile and pointing information of all *NEM*s +transmitting using antenna profiles. This antenna profile information +is communicated to all *NEMs* using either ~{{link +name="`AntennaProfileEvents`" file="events.md" +section="#antennaprofileevent"}}~ or as part of the *Common Physical +Layer Header*: `transmitAntennas[i].{profileId, azimuthDegrees, +elevationDegrees}`. + +An ~{{link name="`AntennaProfileEvent`" file="events.md" +section="#antennaprofileevent"}}~ is used to communicate the antenna +profile index and pointing information for an *NEM's* default +antenna. Radio models using *compat1* only have a single antenna +(default) which uses an antenna index of 0. There is no mechanism to +add additional antenna in *compat1* and there is no notion of +specifying which antenna index is applicable for a received ~{{link +name="`AntennaProfileEvent`" file="events.md" +section="#antennaprofileevent"}}~ -- the event *always* corresponds to +antenna index 0. + +An ~{{link name="`AntennaProfileEvent`" file="events.md" +section="#antennaprofileevent"}}~ is generated externally via the +event service or directly via the physical layer when a *compat1* +radio model sends the physical layer an ~{{link +name="`AntennaProfileControlMessage`" file="control-messages.md" +section="#antennaprofilecontrolmessage"}}~ to change the antenna +profile and/or pointing. An ~{{link +name="`AntennaProfileControlMessage`" file="control-messages.md" +section="#antennaprofilecontrolmessage"}}~ can be specified along with +any over-the-air message in the downstream direction. When the +physical layer receives an ~{{link +name="`AntennaProfileControlMessage`" file="control-messages.md" +section="#antennaprofilecontrolmessage"}}~ from a radio model, it will +create an ~{{link name="`AntennaProfileEvent`" file="events.md" +section="#antennaprofileevent"}}~ and transmit the event in one of two +ways: + +1. If the ~{{link name="`AntennaProfileControlMessage`" + file="control-messages.md" + section="#antennaprofilecontrolmessage"}}~ was sent as part of a + downstream over-the-air message, the ~{{link + name="`AntennaProfileEvent`" file="events.md" + section="#antennaprofileevent"}}~ will be attached to the + over-the-air message and transmitted as rider with the over-the-air + message. All *NEMs* will process the ~{{link + name="`AntennaProfileEvent`" file="events.md" + section="#antennaprofileevent"}}~ prior to processing the + over-the-air message. + +2. If the ~{{link name="`AntennaProfileControlMessage`" + file="control-messages.md" + section="#antennaprofilecontrolmessage"}}~ was sent as part of a + downstream control message, the ~{{link + name="`AntennaProfileEvent`" file="events.md" + section="#antennaprofileevent"}}~ will be sent using the event + multicast channel. + +An ~{{link name="`AntennaProfileControlMessage`" +file="control-messages.md" section="#antennaprofilecontrolmessage"}}~ +message sets both the receive and transmit antenna profile and +pointing for the default antenna, which differs from how the MIMO API +(*compat2*) works. + +For *compat2* radio models, the ~{{link + name="`MIMOTransmitPropertiesControlMessage`" + file="control-messages.md" + section="#mimotransmitpropertiescontrolmessage"}}~ +*should* accompany every downstream over-the-air message, and contains +a list of transmit antennas with their respective profile and pointing +information. If the ~{{link + name="`MIMOTransmitPropertiesControlMessage`" + file="control-messages.md" + section="#mimotransmitpropertiescontrolmessage"}}~ is missing, +the physical layer falls back on *compat1* mechanisms for using the +default antenna. The *Common Physical Layer Header* contains all the +transmit antenna profile and antenna pointing information. In +*compat2*, the physical layer never generates an ~{{link +name="`AntennaProfileEvent`" file="events.md" +section="#antennaprofileevent"}}~. + +The MIMO API requires adding, updating, and removing receive +antenna. The physical layer does not keep track of transmit antenna, +only receive antenna. So if a radio model wants to control the profile +and pointing of an antenna used for both receive and transmit, an +~{{link name="`RxAntennaUpdateControlMessage`" +file="control-messages.md" section="#rxantennaupdatecontrolmessage"}}~ +must accompany the ~{{link +name="`MIMOTransmitPropertiesControlMessage`" +file="control-messages.md" +section="#mimotransmitpropertiescontrolmessage"}}~, and contain the +same profile and pointing information. + +To use antenna patterns, the `fixedantennagainenable` configuration +parameter must be set to `off` and the emulator's +`antennaprofilemanifesturi` configuration parameter must be set +accordingly. + +If antenna profiles are being used by one or more *NEMs* within the +emulation, the `antennaprofilemanifesturi` configuration parameter +must be configured for all emulator instances (including those +instances with an *NEM* configured to use a fixed antenna gain). This +is required to allow an *NEM* to determine the *txAntennaGain* when +performing the [receive power +calculation](#receive-power-calculation). + +### Noise Processing + +The physical layer provides the ability to assess the impact of +intentional and unintentional noise sources within the emulation by +adjusting the noise floor. This is achieved by summing the energy of +signals within the appropriate frequency of interest over a given time +interval and reporting a spectrum window containing received signal +energy to a requesting radio model. A radio model *must* wait until +the transmission end-of-reception time before requesting a spectrum +window over a desired time period. + +Each receive antenna, whether the default (*compat1*) or added with +~{{link name="`RxAntennaAddControlMessage`" file="control-messages.md" +section="#rxantennaaddcontrolmessage"}}~ (*compat2*), has its own view +of the spectrum which internally maps to a dedicated physical layer +*Spectrum Monitor* instance. A *Spectrum Monitor* instance monitors +the antenna's frequency of interest set using a series of energy +recorders to keep track of encountered signal energy over time. + +Energy recorders use a logical wheel of bins, where bin width in +microseconds is set using the configuration parameter: +`noisebinsize`. Each over-the-air transmission is checked for +frequency overlap using the transmitter and receiver bandwidth. If +there is any overlap, a proportional amount of signal energy is +applied to each corresponding energy recorder wheel starting at the +transmission start-of-reception: + +$startOfReception = startOfTransmission + propagation + frequencySegmentOffset_0$ + +Where, + +* ~{{math startOfTransmission}}~ is the start-of-transmission in + microseconds contained in the *Common Physical Layer Header*: + `txTimeMicroseconds`. + +* ~{{math propagation}}~ is the propagation delay calculated when the + location of the transmitting *NEM* and receiving *NEM* is known via + ~{{link name="`LocationEvents`" file="events.md" + section="#locationevent"}}~, or 0 when any respective location is + unknown. + +* ~{{math frequencySegmentOffset_0}}~ is the offset in microseconds of + the first frequency segment conveyed via the *Common Physical Layer + Header*: + `frequencyGroups[j].frequencySegments[0].offsetMicroseconds`. + +Physical layer configuration parameters: `noisemaxsegmentduration`, +`noisemaxmessagepropagation`, and `noisemaxsegmentoffset` are used to +set the maximum duration, propagation delay, and frequency segment +offset, all in microseconds, respectively. By default, over-the-air +transmissions containing values above the configured maximums will be +dropped. + +The physical layer has the ability to record *all* signal energy, +*out-of-band* signal energy, or *no* signal energy determined by the +configuration parameter `noisemode` value `all`, `outofband`, or +`none`, respectively. When no signal energy is being recorded or no +signal energy occurred over a given request interval, the receiver +sensitivity is used as the noise floor. + +When recording all signal energy, it is the radio model's +responsibility to remove the in-band signal from the spectrum window +prior to computing the SINR. + +The spectrum service can also be utilized by a radio model to support +Dynamic Spectrum Access (*DSA*) by requesting a spectrum window over a +valid time interval independent of an upstream over-the-air reception. + +A radio model queries spectrum monitor energy using +~{{srclink name="`SpectrumServiceProvider::requestAntenna`" +path="$emane_SRC_ROOT/include/emane/spectrumserviceprovider.h" +path-cut="$emane_SRC_ROOT" +path-replace="https://github.com/adjacentlink/emane/blob/master" +line-regex="\s*virtual\s+SpectrumWindow\s+requestAntenna.*"}}~: + +~{{verbatim type=cpp +auto spectrumWindow = + pRadioService_->spectrumService().requestAntenna(0, // antenna index + u64FrequencyHz, + span, + startOfReception); +}}~ + +Where, the returned spectrum window is a ~{{srclink +name="`SpectrumWindow`" +path="$emane_SRC_ROOT/include/emane/spectrumserviceprovider.h" +path-cut="$emane_SRC_ROOT" +path-replace="https://github.com/adjacentlink/emane/blob/master" +line-regex="\s*using\s+SpectrumWindow.*"}}~ instance. + +### Frequency Diversity + +The physical layer provides the ability to send multiple signals (of +constant bandwidth) in frequency and/or time within a single +over-the-air message. A *compat1* radio model can utilize this feature +by populating the ~{{link name="`FrequencyControlMessage`" +file="control-messages.md" section="#frequencycontrolmessage"}}~ which +accompanies a downstream over-the-air message, with information for +one or more frequency segments. Similarly, a *compat2* radio model +uses the ~{{link name="`MIMOTransmitPropertiesControlMessage`" +file="control-messages.md" +section="#mimotransmitpropertiescontrolmessage"}}~ to define one or +more frequency groups, each of which containing information for one or +more frequency segments, where each transmit antenna is associated +with one of the defined frequency groups. + +Frequency segment information includes the segment center frequency, +total time duration, offset from the transmission time stamp and +optionally, transmit power in dBm that overrides any overall +transmitter power level. + +Frequency information is included in the *Common Physical Layer +Header* and divided into two parts, frequency group segments: +`frequencyGroups[j].frequencySegments[j].{frequencyHz, +offsetMicroseconds, durationMicroseconds}` and transmit antenna +frequency group association and bandwidth: +`transmitAntennas[i].{frequencyGroupIndex, bandwidthHz}`. + +At the receiving *NEM*, depending on its noise mode, one of four +actions will be taken for all segments where the ~{{math rxPower > +rxSensitivity}}~: + +1. If `noisemode` is `all`, the signal energy for each frequency + segment will be applied to the spectrum monitor based on frequency + of interest bandwidth overlap. + +2. If `noisemode` is `outofband` and this is an out-of-band + transmission, the signal energy for each frequency segment will be + applied to the spectrum monitor based on frequency of interest + bandwidth overlap. + +3. If `noisemode` is `outofband` and this is an in-band transmission, + no energy will be applied to the spectrum monitor. + +4. If `noisemode` is `none`, no energy will be applied to the spectrum + monitor. + +A radio model will only receive those frequency segments where +$rxPower > rxSensitivity$. Any frequency segment that has a center +frequency that is not in the physical layer's frequency of interest +list will cause the entire transmission to be treated as out-of-band. + +### Collaborative Transmission + +The physical layer provides the ability to send a single over-the-air +message specifying multiple transmitters to minimize over-the-air +message processing during collaborative transmission. A radio model +can utilize this feature by populating the ~{{link +name="`TransmitterControlMessage`" file="control-messages.md" +section="#transmittercontrolmessage"}}~, which accompanies a +downstream over-the-air message, with information for multiple +transmitters. Transmitter information includes the *NEM* id of the +transmitter and the transmission power, and is included in the *Common +Physical Layer Header*: `transmitters[i].{nemId, powerdBm}`. + +It is the radio model's responsibility to implement the coordination +logic that allows one instance (*NEM*) to send the collaborative +over-the-air transmission. + +Upon the reception of an over-the-air message with multiple +transmitters, the physical layer will calculate the ~{{math rxPower}}~ +from each transmitter and sum up the energy. Depending on the current +noise mode, one of four actions will be taken, provided the ~{{math +\sum_{n=0}^{N} rxPower_n > rxSensitivity}}~, where ~{{math N}}~ is the +number of transmitters: + +1. If `noisemode` is `all`, the summed energy will be applied to the + spectrum monitor based on frequency of interest bandwidth overlap. + +2. If `noisemode` is `outofband` and this is an out-of-band message, + the summed energy will be applied to the spectrum monitor based on + frequency of interest bandwidth overlap. + +3. If `noisemode` is `outofband` and this is an in-band message, no + energy will be applied to the spectrum monitor. + +4. If `noisemode` is `none`, no energy will be applied to the spectrum + monitor. + +Regardless of `noisemode`, the radio model will only receive the +over-the-air message when ~{{math \sum_{n=0}^{N} rxPower_n > +rxSensitivity}}~. The radio model will receive no indication that this +message was a collaborative transmission. + +### Fading Model + +The physical layer supports per source fading model selection that can +be modified via ~{{link name="`FadingSelectionEvents`" +file="events.md" section="#fadingselectionevent"}}~. Fading selection +is controlled by the `fading.model` configuration parameter and can be +one of either `none`, `event`, `nakagami`, or `lognormal`. Specifying +`event` requires using a ~{{link name="`FadingSelectionEvent`" +file="events.md" section="#fadingselectionevent"}}~ in order to assign +the fading model used at a receiving *NEM* for a specified *NEM* +source. + +The Nakagami-m Fading model uses a gamma distribution to determine a +fade loss value based on distance and power. Configuration parameters +provide the ability to model various fading effects experienced in +both indoor and outdoor environments based on empirical +data. Parameters are used to specify two distance thresholds: +`fading.nakagami.distance0` and `fading.nakagami.distance1` (meters), +in order to establish three distance bounds: *below*, *between*, and +*above*; and three shape factors corresponding to the three distance +bounds: `fading.nakagami.m0`, `fading.nakagami.m1`, and +`fading.nakagami.m2`. + +The Lognormal Fading model models Free Space Optical (FSO) loss using +a statistical mechanism. The Lognormal Fading model works by creating +a constant series of fades, each having a constant fade depth that may +contribute to over-the-air loss. The fading model keeps track of the +time each fading period ends and generates a new fading period upon +the arrival of the next over-ther-air message after the conclusion of +the current fading period. Fade depths are log normally distributed +but constant during a given fading period. Fade lengths are normally +distributed. + +Lognormal Fading model configuration parameters are used to relate the +fading depth to pathloss in order to cause a corresponding amount of +over-the-air loss. There is an inverse relationship between fading +depth and pathloss, where lower values for fading depth result in 100% +loss, while higher values result in no loss. For values between no +loss and full loss, linear interpolation is used to calculate the +corresponding pathloss which may result in random loss during the +fading period. + +### MIMO + +The physical layer supports MIMO by allowing simultaneous use of +multiple transmit and receive antenna. Waveform implementation +specifics are modeled within the radio model, with control messages: +~{{link name="`MIMOTransmitPropertiesControlMessage`" +file="control-messages.md" +section="#mimotransmitpropertiescontrolmessage"}}~ and ~{{link +name="`MIMOReceivePropertiesControlMessage`" +file="control-messages.md" +section="#mimoreceivepropertiescontrolmessage"}}~ conveying transmit +and receive information between layers, respectively. + +Using MIMO API control messages, a radio model can define any number +of receive antenna (ideal omni or antenna profile defined), and +similarly, add multiple transmit antenna to each over-the-air +transmission. Every received over-the-air message will be processed +once for each receive path, where the total number of receive paths is +equal to the number of transmit antenna multiplied by the number of +receive antenna. + +Receive antennas are added using ~{{link +name="`RxAntennaAddControlMessage`" file="control-messages.md" +section="#rxantennaaddcontrolmessage"}}~, updated with ~{{link +name="`RxAntennaUpdateControlMessage`" file="control-messages.md" +section="#rxantennaupdatecontrolmessage"}}~, and removed using ~{{link +name="`RxAntennaRemoveControlMessage`" file="control-messages.md" +section="#rxantennaremovecontrolmessage"}}~. When adding a receive +antenna, a unique antenna index must be specified along with the +frequency of interest information for the antenna and the antenna +type: ideal omni (fixed gain) or antenna pattern defined (profile id +and pointing). The unique index value supplied during ~{{link +name="`RxAntennaAddControlMessage`" file="control-messages.md" +section="#rxantennaaddcontrolmessage"}}~ is how an antenna is +referenced during an update or remove. It is also how per antenna +receive power information is identified when communicating received +over-the-air transmissions to the radio model via ~{{link +name="`MIMOReceivePropertiesControlMessage`" +file="control-messages.md" +section="#mimoreceivepropertiescontrolmessage"}}~. + +When sending an over-the-air transmission, a radio model specifies one +or more transmit antenna along with one or more groups of frequency +segments using ~{{link name="`MIMOTransmitPropertiesControlMessage`" +file="control-messages.md" +section="#mimotransmitpropertiescontrolmessage"}}~. Each transmit +antenna may be mapped to its own unique group of frequency segments or +share a group with other transmit antennas. Each transmit antenna is +specified using a unique antenna index value which is unrelated to +indexes used when adding receive antennas via ~{{link +name="`RxAntennaAddControlMessage`" file="control-messages.md" +section="#rxantennaaddcontrolmessage"}}~. + +A radio model is free to use the same index for receive and transmit +antennas to create its own logical association of the same antenna +being used for both receive and transmit. The physical layer does not +store any transmit antenna information in the downstream direction. In +the upstream (receive) direction, the physical layer caches computed +gain information when using antenna profiles, so it is important to be +consistent when indexing transmit antennas when sending over-the-air +transmissions. For example, if *NEM* 1 has antenna *A1* and antenna +*A2*, where *A1* is pointing at *(Az1,El1)* and *A2* is pointing at +*(Az2,El2)*, sending over-the-air transmissions and alternating or +changing transmit antenna indexes while not updating position and/or +pointing, will defeat any possible receive side caching gains which +are keyed off of transmit antenna index. Pick indexes for *A1* and +*A2*, then be consistent so receiving physical layers do not +invalidate cached antenna gains unless actual position and/or pointing +updates dictate so. + +#### Creating Antennas + +When using ~{{link + name="`RxAntennaAddControlMessage`" file="control-messages.md" + section="#rxantennaaddcontrolmessage"}}~ to add receive +antenna, one of the following methods to create antenna instances should be used: + +1. ~{{srclink name="`Antenna::createDefault()`" + path="$emane_SRC_ROOT/include/emane/antenna.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*static\s+Antenna\s+createDefault.*"}}~: Creates a default antenna which + will either be an ideal omni with a fixed gain or a profile defined + antenna, based on the physical layer `fixedantennagainenable` + configuration parameter -- *compat1* mechanism for using the + default antenna. + +2. ~{{srclink name="`Antenna::createIdealOmni()`" + path="$emane_SRC_ROOT/include/emane/antenna.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*static\s+Antenna\s+createIdealOmni.*"}}~: Creates an + ideal omni antenna with a specified fixed gain. + +3. ~{{srclink name="`Antenna::createProfileDefined()`" + path="$emane_SRC_ROOT/include/emane/antenna.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*static\s+Antenna\s+createProfileDefined.*"}}~: + Creates an antenna profile defined antenna with an optional initial + pointing. + +If the newly created receive antenna does not have it's bandwidth set, +the physical layer will use the value from its +`bandwidth` configuration parameter. + +If the ~{{link name="`RxAntennaAddControlMessage`" + file="control-messages.md" section="#rxantennaaddcontrolmessage"}}~ + contains an empty frequency of interest set, the physical layer will + use the value(s) from its `frequencyofinterest` configuration + parameter. + +When sending a ~{{link + name="`MIMOTransmitPropertiesControlMessage`" + file="control-messages.md" + section="#mimotransmitpropertiescontrolmessage"}}~, use one of the +following methods to create the transmit antenna: + + +1. ~{{srclink name="`Antenna::createIdealOmni()`" + path="$emane_SRC_ROOT/include/emane/antenna.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*static\s+Antenna\s+createIdealOmni.*"}}~: Creates an + ideal omni antenna with a specified fixed gain. + +2. ~{{srclink name="`Antenna::createProfileDefined()`" + path="$emane_SRC_ROOT/include/emane/antenna.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*static\s+Antenna\s+createProfileDefined.*"}}~: + Creates an antenna profile defined antenna with an optional initial + pointing. + +Use an empty antenna set when creating a ~{{link +name="`MIMOTransmitPropertiesControlMessage`" +file="control-messages.md" +section="#mimotransmitpropertiescontrolmessage"}}~ to indicate use of +the default antenna configuration, which follows the same assignment +logic as ~{{srclink name="`Antenna::createDefault()`" +path="$emane_SRC_ROOT/include/emane/antenna.h" +path-cut="$emane_SRC_ROOT" +path-replace="https://github.com/adjacentlink/emane/blob/master" +line-regex="\s*static\s+Antenna\s+createDefault.*"}}~. + +If the newly created antenna does not have it's bandwidth set, the +physical layer will use the value from its `bandwidth` configuration +parameter. + +If any frequency segment has a 0 Hz specified frequency, the physical +layer will use the value from its `frequency` configuration parameter. + +If any frequency segment does not specify a transmit power, the +physical layer will use the value from its `txpower` configuration +parameter. + +#### Antenna Profiles and Pointing + +MIMO API radio models (*compat2*) using antenna profiles must specify +pointing information in every over-the-air transmission as part of +~{{link name="`MIMOTransmitPropertiesControlMessage`" +file="control-messages.md" +section="#mimotransmitpropertiescontrolmessage"}}~. The MIMO +compatible physical layer supports event compatibility with *compat1* +radio models using external ~{{link name="`AntennaProfileEvent`" +file="events.md" section="#antennaprofileevent"}}~ events. Where, the +~{{link name="`AntennaProfileEvent`" file="events.md" +section="#antennaprofileevent"}}~ allows for specifying profile and +pointing information for a single antenna (always index 0) for each +specified *NEM*. + +When using the MIMO API to point and transmit simultaneously, and +modeling a logical re-pointing of the same antenna for receive, you +must specify both a ~{{link +name="`MIMOTransmitPropertiesControlMessage`" +file="control-messages.md" +section="#mimotransmitpropertiescontrolmessage"}}~ and a ~{{link +name="`RxAntennaUpdateControlMessage`" file="control-messages.md" +section="#rxantennaupdatecontrolmessage"}}~ in order for the pointing +to take effect for receive. + +### Doppler + +The physical layer calculates and applies Doppler shift when +transmitter and receiver location and velocity are known at the +receiver, and the `dopplershiftenable` configuration parameter is set +to `on`. Doppler shift is applied when energy is added to spectrum +monitor bins based on bandwidth overlap. Doppler shift information is +communicated to *compat2* radio models via the +`MIMOReceivePropertiesControlMessage` as a mapping of center +frequencies and their corresponding shift, both in Hz. + +### Spectral Masks + +The physical layer provides support for using spectral masks to model +the effects of transmitters that radiate energy at frequencies (side +lobes and spurs) outside their defined bandwidth (main lobe/beam). A +spectral mask manifest defines one or more spectral masks, where the +spectral mask manifest is defined using the emulator configuration +parameter: `spectralmaskmanifesturi`. + + + +If spectral masks are being used by one or more *NEMs* within the +emulation, the `spectralmaskmanifesturi` configuration parameter must +be configured for all emulator instances (including those instances +with an *NEM* not transmitting with a spectral mask. This is necessary +for a receiving *NEM* to determine the *txPower* when performing the +[receive power calculation](#receive-power-calculation). + +A spectral mask is composed of a primary signal and zero or more +spurs. Each spectral mask must have a unique non-zero id. + +~{{verbatim type=xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +}}~ + +1. Both `` and `` elements are defined using one or + more contiguous segments specified in length (Hz) and a reference + power offset (dBr) to be applied to the received signal relative to + receiver bandwidth overlap. + +2. `` elements contain an offset from the center transmit + frequency in Hz. + +By default, the physical layer uses a square mask across the entire +transmit bandwidth. When using spectral masks, the transmit bandwidth +is determined at the receiver to be the total width defined by the +respective mask element segments. + +*Compat1* and *compat2* radio models can use the physical layer +configuration parameter `spectralmaskindex` to set the spectral mask +in use when transmitting. *Compat2* radio models can dynamically set +the transmit antenna spectral mask ~{{link +name="`MIMOTransmitPropertiesControlMessage`" +file="control-messages.md" +section="#mimotransmitpropertiescontrolmessage"}}~. Transmit antenna +spectral mask index is contained in the *Common Physical Layer +Header*: `transmitAntennas[i].spectralMaskIndex` + +### Spectrum Filters + +The physical layer provides a radio model with the ability to specify +one or more spectrum filters which record spectrum energy based on a +set of specified criteria. Filter spectrum windows are queried similar +to spectrum energy windows, and are used in conjunction with spectrum +energy windows to perform actions such as excision and cancellation. + +A radio model adds one or more spectrum filters using ~{{link +name="`SpectrumFilterAddControlMessage`" file="control-messages.md" +section="#spectrumfilteraddcontrolmessage"}}~ within a downstream +control message: + +~{{verbatim type=cpp +sendDownstreamControl({SpectrumFilterAddControlMessage::create(1, // unique filter index + 0, // antenna index + 1000000000, // center freq + 20000000, // bandwidth + 100000, // sub-band width in hz + BandwidthFilterElementLessEqual::create(100000) + )}); + +}}~ + +Spectrum filters are added per receive antenna using a unique filter +index for a given center frequency (Hz) and bandwidth (hz), along with +an optional sub-bandwidth (Hz) length that subdivides spectral energy +into sub-band width bins of specified size for each time bin in the +filter energy window. Additionally, optional match criteria can be +supplied to allow for more precise control of which energy is +captured. + +A radio model removes one or more spectrum filters using ~{{link +name="`SpectrumFilterRemoveControlMessage`" file="control-messages.md" +section="#spectrumfilterremovecontrolmessage"}}~ within a downstream +control message: + +~{{verbatim type=cpp +sendDownstreamControl({SpectrumFilterRemoveControlMessage::create(1, // unique filter index + 0)}); // antenna index +}}~ + +By default, filters do not record energy with the same `subid` as +their associated physical layer (in-band waveform). Set the physical +layer confiugration parameter `excludesamesubidfromfilterenable` to +`false` to allow filter processing of in-band spectrum energy and add +`SubIdFilterElementEqual::create(0)` to the `FilterMatchCriterion` +expression. Where, subid 0 means match the radio model's associated +physical layer subid. + +Match criteria may be specified using any combination of the following: + +* ~{{srclink name="`FrequencyFilterElementLess`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+FrequencyFilterElementLess.*"}}~ +* ~{{srclink name="`FrequencyFilterElementLessEqual`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+FrequencyFilterElementLessEqual.*"}}~ +* ~{{srclink name="`FrequencyFilterElementGreater`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+FrequencyFilterElementGreater.*"}}~ +* ~{{srclink name="`FrequencyFilterElementGreaterEqual`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+FrequencyFilterElementGreaterEqual.*"}}~ +* ~{{srclink name="`FrequencyFilterElementEqual`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+FrequencyFilterElementEqual.*"}}~ +* ~{{srclink name="`FrequencyFilterElementNotEqual`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+FrequencyFilterElementNotEqual.*"}}~ +* ~{{srclink name="`BandwidthFilterElementLess`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+BandwidthFilterElementLess.*"}}~ +* ~{{srclink name="`BandwidthFilterElementLessEqual`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+BandwidthFilterElementLessEqual.*"}}~ +* ~{{srclink name="`BandwidthFilterElementGreater`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+BandwidthFilterElementGreater.*"}}~ +* ~{{srclink name="`BandwidthFilterElementGreaterEqual`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+BandwidthFilterElementGreaterEqual.*"}}~ +* ~{{srclink name="`BandwidthFilterElementEqual`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+BandwidthFilterElementEqual.*"}}~ +* ~{{srclink name="`BandwidthFilterElementNotEqual`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+BandwidthFilterElementNotEqual.*"}}~ +* ~{{srclink name="`SubIdFilterElementLess`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+SubIdFilterElementLess.*"}}~ +* ~{{srclink name="`SubIdFilterElementLessEqual`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+SubIdFilterElementLessEqual.*"}}~ +* ~{{srclink name="`SubIdFilterElementGreater`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+SubIdFilterElementGreater.*"}}~ +* ~{{srclink name="`SubIdFilterElementGreaterEqual`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+SubIdFilterElementGreaterEqual.*"}}~ +* ~{{srclink name="`SubIdFilterElementEqual`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+SubIdFilterElementEqual.*"}}~ +* ~{{srclink name="`SubIdFilterElementNotEqual`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+SubIdFilterElementNotEqual.*"}}~ +* ~{{srclink name="`SubIdFilterElementLess`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+SubIdFilterElementLess.*"}}~ +* ~{{srclink name="`SubIdFilterElementLessEqual`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+SubIdFilterElementLessEqual.*"}}~ +* ~{{srclink name="`SubIdFilterElementGreater`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+SubIdFilterElementGreater.*"}}~ +* ~{{srclink name="`SubIdFilterElementGreaterEqual`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+SubIdFilterElementGreaterEqual.*"}}~ +* ~{{srclink name="`SubIdFilterElementEqual`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+SubIdFilterElementEqual.*"}}~ +* ~{{srclink name="`SubIdFilterElementNotEqual`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+SubIdFilterElementNotEqual.*"}}~ +* ~{{srclink name="`FilterDataFilterElementEqual`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+FilterDataFilterElementEqual.*"}}~ +* ~{{srclink name="`FilterDataFilterElementNotEqual`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*using\s+FilterDataFilterElementNotEqual.*"}}~ + +More complex compound expressions are created using: + +* ~{{srclink name="`FilterMatchCriterionAnd`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*class\s+FilterMatchCriterionAnd.*"}}~ +* ~{{srclink name="`FilterMatchCriterionOr`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*class\s+FilterMatchCriterionOr.*"}}~ +* ~{{srclink name="`FilterMatchCriterionNot`" + path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" + path-cut="$emane_SRC_ROOT" + path-replace="https://github.com/adjacentlink/emane/blob/master" + line-regex="\s*class\s+FilterMatchCriterionNot.*"}}~ + +*Filter data* is opaque data a radio model can attach to a downstream +over-the-air transmission to allow additional match criteria. This +opaque data can be used in conjunction with a custom ~{{srclink +name="`FilterMatchCriterion`" +path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" +path-cut="$emane_SRC_ROOT" +path-replace="https://github.com/adjacentlink/emane/blob/master" +line-regex="\s*class\s+FilterMatchCriterion.*"}}~ expression, or with +~{{srclink name="`FilterDataFilterElementEqual`" +path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" +path-cut="$emane_SRC_ROOT" +path-replace="https://github.com/adjacentlink/emane/blob/master" +line-regex="\s*using\s+FilterDataFilterElementEqual.*"}}~ or +~{{srclink name="`FilterDataFilterElementNotEqual`" +path="$emane_SRC_ROOT/include/emane/filtermatchcriterion.h" +path-cut="$emane_SRC_ROOT" +path-replace="https://github.com/adjacentlink/emane/blob/master" +line-regex="\s*using\s+FilterDataFilterElementNotEqual.*"}}~. + +~{{verbatim type=cpp +SpectrumFilterAddControlMessage::create(2, // Filter Index + 2347000000, // Freq 1GHz + 20000000, // 20 MHz bandwidth + 0, // no sub-bands + FilterDataFilterElementEqual::create("Hello World!")); +}}~ + +A radio model uses the ~{{link +name="`SpectrumFilterDataControlMessage`" file="control-messages.md" +section="#spectrumfilterdatacontrolmessage"}}~ to add *filter data* +when sending a downstream packet: + +~{{verbatim type=cpp + sendDownstreamPacket(CommonMACHeader{type_, u16SequenceNumber_++}, + pkt, + {Controls::SpectrumFilterDataControlMessage::create("Hello World!"), + ... + }) +}}~ + +A radio model queries spectrum filter energy using +~{{srclink name="`SpectrumServiceProvider::requestAntennaFilter`" +path="$emane_SRC_ROOT/include/emane/spectrumserviceprovider.h" +path-cut="$emane_SRC_ROOT" +path-replace="https://github.com/adjacentlink/emane/blob/master" +line-regex="\s*virtual\s+SpectrumFilterWindow\s+requestAntennaFilter.*"}}~: + +~{{verbatim type=cpp +auto windowFilter = + pRadioService_->spectrumService().requestAntennaFilter(0, // antenna index + 1, // unique filter index + span, + startOfReception); +}}~ + +Where, the returned filter window is a ~{{srclink +name="`SpectrumFilterWindow`" +path="$emane_SRC_ROOT/include/emane/spectrumserviceprovider.h" +path-cut="$emane_SRC_ROOT" +path-replace="https://github.com/adjacentlink/emane/blob/master" +line-regex="\s*using\s+SpectrumFilterWindow.*"}}~ instance. In this +example, the filter was added with a sub-band width causing the energy +values contained in the spectrum window to be: + +~{{verbatim type=txt +[T_0_SUB_0,TO_SUB_1,...,TO_SUB_N,T1_SUB_0,T1_SUB_1,...,T1_SUB_N,...] +}}~ + +The number of sub-band entries per time bin (`N`) is returned as the +last item in the ~{{srclink name="`windowFilter`" +path="$emane_SRC_ROOT/include/emane/spectrumserviceprovider.h" +path-cut="$emane_SRC_ROOT" +path-replace="https://github.com/adjacentlink/emane/blob/master" +line-regex="\s*using\s+SpectrumFilterWindow.*"}}~ tuple: + +~{{verbatim type=cpp +auto subBandBinCount = std::get<4>(windowFilter); +}}~ + + + +## Platform Orientation + +The physical layer accounts for the transmitting and receiving *NEM's* +platform orientation when determining the antenna gain based on +antenna profiles. + +Location Events are required when using antenna profiles and +each event includes the following 3 elements for a given *NEM*: + +1. *position* - latitude, longitude, altitude (required) + +2. *velocity* - azimuth, elevation, magnitude (optional, defaults to 0) + +3. *orientation* - pitch, roll, yaw (optional, defaults to 0) + +The *position* element identifies the platform’s location and not the +antenna location, as a given platform may have more than one +antenna. In cases where a platform has multiple antenna and their +location on the platform needs to be accounted for, the +*\* element within the antenna manifest is utilized to +define the offset of each antenna relative to the platform’s +position. The *velocity* element identifies the speed and direction of +the platform relative to true north. + +~{{image file="images/velocityvector.png" scale=60}}~ + +*Orientation* defines the pitch, roll and yaw angles (Euler angels) + about the platform’s latitudinal, longitudinal and vertical axes + respectively. Yaw and pitch are defined relative to the velocity + vector’s azimuth and elevation components respectively and roll is + defined relative to wings level position. + +~{{image file="images/rollpitchyaw.png" scale=60}}~ + +The arrow directions indicate positive angles. + +## Configuration + +~{{emaneinfo plugin=emanephy type=config}}~ + +## Statistics + +~{{emaneinfo plugin=rfpipemaclayer type=stat}}~ + +## Statistic Tables + +~{{emaneinfo plugin=rfpipemaclayer type=table}}~ diff --git a/guide/preface.txt b/guide/preface.txt new file mode 100644 index 0000000..1d4d002 --- /dev/null +++ b/guide/preface.txt @@ -0,0 +1,91 @@ +~{{frontmatter +layout: default +title: Home +nav_order: 1 +permalink: /}}~ + +~{{layout type=newpage}}~ +~{{unnumberedchapter title="About The EMANE Guide"}}~ + +## Who This Guide Is For + +The *emane-guide* is for anyone interested in using the [*Extendable +Mobile Ad-hoc Network +Emulator*](https://github.com/adjacentlink/emane) (*EMANE*) for +research and/or development of wireless communication systems. + +This guide assumes that you are familiar with basic wireless +communication concepts and have a working knowledge of the Linux +command line. The material presented throughout this guide is done in +a broadly accessible manner. Networking tools and operating system +components, such as Linux Containers, are used throughout the examples +that accompany this guide. If you find that you require more +information or direction using any of these, there is ample +documentation readily available on the Internet. + +## How to Use This Guide + +This guide is designed to be read in sequence, with each chapter +building on the previous. This guide comes with a set of examples, so +you will want to clone the latest version from +[GitHub](https://github.com) and try each of the examples yourself. + +~{{verbatim type=txt -- +$ git clone https://github.com/adjacentlink/emane-guide}}~ + +Some sections of this guide that focus on internal and external APIs +will make more sense if you have a programming background, +specifically experience with C++, Python, and Google Protocol +Buffers. None of which are a prerequisite for using *EMANE*, but if +you want to develop radio models or tools that interact with *EMANE*, +proficiency with each will be helpful. + +## Resources and Contributions + +All [Adjacent Link](https://adjacentlink.com) FOSS, including this +guide, is available on [Adjacent Link's +GitHub](https://github.com/adjacentlink) organization page. Each +project has its own *Issues* and *Pull Requests*. Please use these to +report any application specific bugs or questions. + +There are other Adjacent Link tutorials that cover in more detail +areas used in this guide. + +* The + [*emane-control-port-tutorial*](https://github.com/adjacentlink/emane-control-port-tutorial) + is a deep-dive into understanding how to interface with the *EMANE* + Control Port. + + [https://github.com/adjacentlink/emane-control-port-tutorial](https://github.com/adjacentlink/emane-control-port-tutorial) + +* The + (*letce2-tutorial*)[https://github.com/adjacentlink/letce2-tutorial] + provides an overview of the *Lightweight Experiment Template + Configuration Environment* (*letce2*) and covers how to define and + execute experiments. + + [https://github.com/adjacentlink/letce2-tutorial](https://github.com/adjacentlink/letce2-tutorial) + +* The + [*python-etce-tutorial*](https://github.com/adjacentlink/python-etce-tutorial) + provides an overview of the *Extendable Test Control Environment* + (*ETCE*). *ETCE* concepts are introduced through a sequence of + examples. The tutorial aims to explain ETCE with enough detail so + that users can effectively write, execute and automate their own + *EMANE* emulations upon completion. + + [https://github.com/adjacentlink/python-etce-tutorial](https://github.com/adjacentlink/python-etce-tutorial) + + +* The [*EMANE* + Wiki](https://https://github.com/adjacentlink/emane/wiki) and + [*emane-tutorial*](https://github.com/adjacentlink/emane-tutorial) + are the original *EMANE* guide. Both of which have been replaced + with this guide. However this guide is still in its infancy, so + there may be material in the wiki and tutorial that is not yet + included in this guide. + + [https://https://github.com/adjacentlink/emane/wiki](https://https://github.com/adjacentlink/emane/wiki) + + [https://github.com/adjacentlink/emane-tutorial](https://github.com/adjacentlink/emane-tutorial) + diff --git a/guide/pygments.theme b/guide/pygments.theme new file mode 100644 index 0000000..6150f49 --- /dev/null +++ b/guide/pygments.theme @@ -0,0 +1,211 @@ +{ + "text-color": null, + "background-color": "#f8f8f8", + "line-number-color": "#aaaaaa", + "line-number-background-color": null, + "text-styles": { + "Other": { + "text-color": "#007020", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Attribute": { + "text-color": "#7d9029", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "SpecialString": { + "text-color": "#bb6688", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Annotation": { + "text-color": "#60a0b0", + "background-color": null, + "bold": true, + "italic": true, + "underline": false + }, + "Function": { + "text-color": "#06287e", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "String": { + "text-color": "#4070a0", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "ControlFlow": { + "text-color": "#007020", + "background-color": null, + "bold": true, + "italic": false, + "underline": false + }, + "Operator": { + "text-color": "#666666", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Error": { + "text-color": "#ff0000", + "background-color": null, + "bold": true, + "italic": false, + "underline": false + }, + "BaseN": { + "text-color": "#40a070", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Alert": { + "text-color": "#ff0000", + "background-color": null, + "bold": true, + "italic": false, + "underline": false + }, + "Variable": { + "text-color": "#19177c", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "BuiltIn": { + "text-color": null, + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Extension": { + "text-color": null, + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Preprocessor": { + "text-color": "#bc7a00", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Information": { + "text-color": "#60a0b0", + "background-color": null, + "bold": true, + "italic": true, + "underline": false + }, + "VerbatimString": { + "text-color": "#4070a0", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Warning": { + "text-color": "#60a0b0", + "background-color": null, + "bold": true, + "italic": true, + "underline": false + }, + "Documentation": { + "text-color": "#ba2121", + "background-color": null, + "bold": false, + "italic": true, + "underline": false + }, + "Import": { + "text-color": null, + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Char": { + "text-color": "#4070a0", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "DataType": { + "text-color": "#902000", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Float": { + "text-color": "#40a070", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Comment": { + "text-color": "#60a0b0", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "CommentVar": { + "text-color": "#60a0b0", + "background-color": null, + "bold": true, + "italic": true, + "underline": false + }, + "Constant": { + "text-color": "#880000", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "SpecialChar": { + "text-color": "#4070a0", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "DecVal": { + "text-color": "#40a070", + "background-color": null, + "bold": false, + "italic": false, + "underline": false + }, + "Keyword": { + "text-color": "#007020", + "background-color": null, + "bold": true, + "italic": false, + "underline": false + } + } +} diff --git a/guide/raw-transport.txt b/guide/raw-transport.txt new file mode 100644 index 0000000..eee8bf9 --- /dev/null +++ b/guide/raw-transport.txt @@ -0,0 +1,71 @@ +~{{frontmatter +layout: default +title: Raw Transport +nav_order: 16 +permalink: /raw-transport}}~ + +~{{layout type=newpage}}~ + +# Raw Transport + +The Raw Transport uses a specified network interface as the emulation +boundary entry/exit point. + +## Features + +The Raw Transport emulation boundary provides the following set of +features: [Network Interface Raw +Read/Write](#network-interface-raw-readwrite), [Virtual Transport +Interoperability](#virtual-transport-interoperability), [Bitrate +Enforcement](#bitrate-enforcement), [Broadcast Only +Mode](#broadcast-only-mode), and [IPv4 and IPv6 +Capable](#ipv4-and-ipv6-capable). + +## Network Interface Raw Read/Write + +The Raw Transport uses a specific network interface as the emulation +boundary entry/exit point. The network interface can be a physical +interface, virtual interface, tunnel, etc. The interface is managed +external to the Raw Transport. + +Any traffic read from the interface will +be delivered to the Raw Transport's respective *NEM* for emulation +processing. + +## Virtual Transport Interoperability + +The Raw Transport supports interoperability with ~{{link name="Virtual +Transport" file="virtual-transport.md" section="#virtual-transport"}}~ +emulation boundaries using ARP caching to learn IP network to *NEM Id* +associations. + +### Bitrate Enforcement + +The Raw Transport supports bitrate enforcement for use with models +that do not limit bitrate based on emulation implementation. Set the +configuration parameter `bitrate` to the desired rate in `bps` to +enable bitrate enforcement or 0 to disable. + +### Broadcast Only Mode + +The Raw Transport supports forced *NEM* broadcasting of all IP +packet types: unicast, broadcast and multicast. Set the configuration +parameter `broadcastmodeenable` to `true` to enable broadcast only +mode. + +### IPv4 and IPv6 Capable + +The Raw Transport supports IPv4 and IPv6 packet processing. + +## Configuration + +~{{emaneinfo plugin=transraw type=config}}~ + +## Statistics + +~{{emaneinfo plugin=transraw type=stat}}~ + +## Statistic Tables + +~{{emaneinfo plugin=transraw type=table}}~ + diff --git a/guide/rf-pipe-radio-model.txt b/guide/rf-pipe-radio-model.txt new file mode 100644 index 0000000..e73a34e --- /dev/null +++ b/guide/rf-pipe-radio-model.txt @@ -0,0 +1,352 @@ +~{{frontmatter +layout: default +title: RF Pipe Radio Model +nav_order: 10 +permalink: /rf-pipe-radio-model}}~ + +~{{layout type=newpage}}~ +# RF Pipe Radio Model + +The RF Pipe radio model is a generic model designed for use as a +surrogate for waveforms without a model of their own. + + +## Features + +The RF Pipe radio model provides the following set of features: +[Network Delay Emulation](#network-delay-emulation) and [Packet +Completion Rate Curves](#packet-completion-rate-curves). + +### Network Delay Emulation + +The RF Pipe radio model allows for downstream transmission network +delay emulation using a configurable delay and jitter. The RF Pipe +model will apply a network delay before a message is sent to the +physical layer for over-the-air transmission. + +The network delay is computed as follows: + +~{{math networkDelay = delay + jitter}}~ + +Where, + +* ~{{math delay}}~ is defined by the configuration parameter `delay`. + +* ~{{math jitter}}~ is defined by the configuration parameter `jitter`. + +### Packet Completion Rate Curves + +The RF Pipe radio model Packet Completion Rate is specified as curve +defined via XML. The curve definition comprises a series of SINR +values along with their corresponding probability of reception. + +A curve definition must contain a minimum of two points with one SINR +representing *POR = 0* and one SINR representing *POR = 100*. Linear +interpolation is preformed when an exact SINR match is not found. + +Specifying a packet size (`` attribute +`pktsize`) in the curve file will adjust the POR based on received +packet size. Specifying a `pktsize` of 0 disregards received packet +size when computing the POR. + +The POR is obtained using the following calculation when a non-zero +`pktsize` is specified: + +~{{math POR = POR_0 ^ {S_1/S_0}}}~ + +Where, + +~{{math POR_0}}~ is the POR value determined from the PCR curve for +the given SINR value + +~{{math S_0}}~ is the packet size specified in the curve file +`pktsize` + +~{{math S_1}}~ is the received packet size + +The below PCR curve file is used by all nodes in the `rfpipe-01` +example. This curve is for illustrative purposes only. Packet +Completion Rate curves should be representative of the waveform being +emulated. + +~{{file path="../examples/rfpipe-01/node-1/emane-rfpipe-pcr.xml" + type=xml + showname=true + blank=false + path-cut="../examples" + path-replace="emane-guide/examples" + lines=25}}~ + +~{{imagemagick + file="images/pcr-representation.png" + scale=75 + images/exclamation.png -resize 25% \( -size 1100x -font DejaVu-Sans-Mono-Bold + -gravity east label:" PCR curves should be representative of the waveform being emulated. " \) + +append -transparent white}}~ + +## Limitations + +The RF Pipe radio model has the following limitations: + +1. The RF Pipe radio model does not perform channel access. Since +there is no channel access protocol, the data rate defines the +transmission capacity of each node within the network. + +2. The RF Pipe radio model does not apply any in-band interference +effects and as such, the use of negative SINR values within the PCR +curve is valid only when the physical layer `nodemode` configuration +value is set to `outofband` in order to raise the noise floor above +the inherent receiver sensitivity. + +## Configuration + +~{{emaneinfo plugin=rfpipemaclayer type=config}}~ + +## Statistics + +~{{emaneinfo plugin=rfpipemaclayer type=stat}}~ + +## Statistic Tables + +~{{emaneinfo plugin=rfpipemaclayer type=table}}~ + + +## Examples + +This guide includes the RF Pipe example: + +1. `rfpipe-01`: A five node example using precomputed pathloss and + running the B.A.T.M.A.N manet protocol. + +### rfpipe-01 + +~{{graphviz + file="images/topology-rfpipe-01" scale=60 caption="rfpipe-01 experiment components" -- + digraph hierarchy { +rankdir="TB"; +node[shape=circle,style=filled] +"node-2" [fillcolor=green] +"OTA" [image="images/cloud.png",shape=none,fillcolor=none] +"node-1" [fillcolor=green] +"node-3" [fillcolor=green] +"node-1"->OTA [dir="both",label="10.100.0.1/24"] +OTA->"node-3" [dir="both",label="10.100.0.3/24"] +OTA->"node-2" [dir="both",label="10.100.0.2/24"] +"node-4" [fillcolor=green] +"node-5" [fillcolor=green] + +OTA->"node-4" [dir="both",label="10.100.0.4/24"] +OTA->"node-5" [dir="both",label="10.100.0.5/24"] + +{rank = min; "node-2";} +{rank = same; "node-1"; "node-3"; OTA;} +} +}}~ + +The `rfpipe-01` example experiment contains five nodes, each running +the B.A.T.M.A.N. routing protocol. + +All physical layers are configured to use the `precomputed` propagation +model and `emaneeventservice` publishes ~{{link +name="`PathlossEvents`" file="events.md" section="#pathlossevent"}}~ +using pathloss values in `scenario.eel`. + +~{{file path="../examples/rfpipe-01/host/scenario.eel" +type=txt +showname=true +blank=true +path-cut="../examples" +path-replace="emane-guide/examples"}}~ + +~{{imagemagick + file="images/run-rfpipe-01.png" + scale=75 +images/pointing-finger.png -resize 25% \( -size 800x -font DejaVu-Sans-Mono-Bold +-gravity east label:" Run emane-guide/examples/rfpipe-01 and give it a try. " \) ++append -transparent white}}~ + +With `emane-guide/examples/rfpipe-01` running, we can query `node-1`'s +physical layer to take a look at the `PathlossEventInfoTable` and +`ReceivePowerTable`. + +~{{verbatim type=txt -- +$ emanesh node-1 get table nems phy PathlossEventInfoTable ReceivePowerTable +nem 1 phy PathlossEventInfoTable +| NEM | Forward Pathloss | Reverse Pathloss | +| 2 | 70.0 | 70.0 | +| 3 | 70.0 | 70.0 | +| 4 | 70.0 | 70.0 | +| 5 | 70.0 | 70.0 | + +nem 1 phy ReceivePowerTable +|NEM|Rx Antenna|Tx Antenna|Frequency |Rx Power|Tx Gain|Rx Gain|Tx Power|Pathloss|Doppler|Last Packet Time | +|2 |0 |0 |2400000000|-70.0 |0.0 |0.0 |0.0 |70.0 |0.0 |1688147153.189406 | +|3 |0 |0 |2400000000|-70.0 |0.0 |0.0 |0.0 |70.0 |0.0 |1688147153.293473 | +|4 |0 |0 |2400000000|-70.0 |0.0 |0.0 |0.0 |70.0 |0.0 |1688147153.2934668| +|5 |0 |0 |2400000000|-70.0 |0.0 |0.0 |0.0 |70.0 |0.0 |1688147153.30126 |}}~ + +The `PathlossEventInfoTable` shows pathloss values matching those in +`scenario.eel`. Only the Forward Pathloss value is used by the +physical layer. The Reverse Pathloss value is an unused legacy value +but still useful when analyzing an experiment as it indicates if link +pathloss is symmetrical without requiring correlation of values +between nodes. + +Using the ~{{link name="Receive Power Calculation" +file="physical-layer.md" section="#receive-power-calculation"}}~, we +can verify the `Rx Power` value from the `ReceivePowerTable`. + +~{{math rxPower = txPower + txAntennaGain + rxAntennaGain - pathloss}}~ + +~{{math rxPower = 0dBm + 0dB + 0dB - 70dB}}~ + +~{{math rxPower = -70dBm}}~ + +Testing connectivity between `node-1` and all nodes using `fping` shows +100% completion in both directions. + +~{{verbatim type=txt -- +$ ssh node-1 fping -N -C 2 radio-2 radio-3 radio-4 radio-5 +radio-2 : [0], 64 bytes, 0.707 ms (0.707 avg, 0% loss) +radio-3 : [0], 64 bytes, 0.918 ms (0.918 avg, 0% loss) +radio-4 : [0], 64 bytes, 0.780 ms (0.780 avg, 0% loss) +radio-5 : [0], 64 bytes, 1.25 ms (1.25 avg, 0% loss) +radio-2 : [1], 64 bytes, 1.67 ms (1.19 avg, 0% loss) +radio-3 : [1], 64 bytes, 1.40 ms (1.16 avg, 0% loss) +radio-4 : [1], 64 bytes, 1.65 ms (1.21 avg, 0% loss) +radio-5 : [1], 64 bytes, 1.45 ms (1.35 avg, 0% loss) + +radio-2 : 0.707 1.67 +radio-3 : 0.918 1.40 +radio-4 : 0.780 1.65 +radio-5 : 1.25 1.45}}~ + +Using `emanesh` we can modify the latency for `node-2` to add 200msec +of delay to all transmitted packets and then rerun `fping` to verify +the results. + +~{{verbatim type=txt -- +$ emanesh node-2 get config nems mac delay +nem 2 mac delay = 0.0 +$ emanesh node-2 set config nems mac delay=.2 +nem 2 mac configuration updated}}~ + +~{{verbatim type=txt -- +$ ssh node-1 fping -N -C 2 radio-2 radio-3 radio-4 radio-5 +radio-3 : [0], 64 bytes, 0.864 ms (0.864 avg, 0% loss) +radio-4 : [0], 64 bytes, 0.871 ms (0.871 avg, 0% loss) +radio-5 : [0], 64 bytes, 2.07 ms (2.07 avg, 0% loss) +radio-2 : [0], 64 bytes, 202 ms (202 avg, 0% loss) +radio-3 : [1], 64 bytes, 1.91 ms (1.39 avg, 0% loss) +radio-4 : [1], 64 bytes, 2.05 ms (1.46 avg, 0% loss) +radio-5 : [1], 64 bytes, 1.37 ms (1.72 avg, 0% loss) +radio-2 : [1], 64 bytes, 202 ms (202 avg, 0% loss) + +radio-2 : 202 202 +radio-3 : 0.864 1.91 +radio-4 : 0.871 2.05 +radio-5 : 2.07 1.37}}~ + +Connectivity is still 100% between `node-1` and all nodes but now +there is an additional 200msec of latency from `node-2`'s response. + +Using `otestpoint-labtools-mtabletool` to subscribe to all +`EMANE.RFPipe.Tables.Receive` probes, we can build a combined RF +Signal table showing the number of samples in each measurement +interval and the measurement interval averages computed from long +running averages for receive power, noise floor, and SINR. + +~{{verbatim type=txt -- +$ otestpoint-labtools-mtabletool \ + localhost:9002 \ + Measurement_emane_rfpipe_tables_receive@rfsignaltable \ + EMANE.RFPipe.Tables.Receive \ + --actions \ + "pass(c=(0-2));" \ + "delta(c=(3))=>|{}_intvl|;" \ + "iavg(c=(4,5,6),n=(3))=>|{}_intvl|;"}}~ + +The `rfsignaltable` published as part of +`Measurement_emane_rfpipe_tables_receive`, like all *OpenTestPoint* +measurements, is updated every 5 seconds. + +~{{verbatim type=txt -- + Measurement_emane_rfpipe_tables_receive@rfsignaltable + _Publisher NEM AntennaId FrequencyHz NumSamples_intvl AvgRxPower_intvl AvgNoiseFloor_intvl AvgSINR_intvl +0 node-1 2 0 2400000000 69 -70.0 -96.9897 26.9897 +1 node-1 3 0 2400000000 69 -70.0 -96.9897 26.9897 +2 node-1 4 0 2400000000 69 -70.0 -96.9897 26.9897 +3 node-1 5 0 2400000000 69 -70.0 -96.9897 26.9897 +4 node-2 1 0 2400000000 69 -70.0 -96.9897 26.9897 +5 node-2 3 0 2400000000 69 -70.0 -96.9897 26.9897 +6 node-2 4 0 2400000000 69 -70.0 -96.9897 26.9897 +7 node-2 5 0 2400000000 69 -70.0 -96.9897 26.9897 +8 node-3 1 0 2400000000 69 -70.0 -96.9897 26.9897 +9 node-3 2 0 2400000000 69 -70.0 -96.9897 26.9897 +10 node-3 4 0 2400000000 69 -70.0 -96.9897 26.9897 +11 node-3 5 0 2400000000 69 -70.0 -96.9897 26.9897 +12 node-4 1 0 2400000000 69 -70.0 -96.9897 26.9897 +13 node-4 2 0 2400000000 69 -70.0 -96.9897 26.9897 +14 node-4 3 0 2400000000 69 -70.0 -96.9897 26.9897 +15 node-4 5 0 2400000000 69 -70.0 -96.9897 26.9897 +16 node-5 1 0 2400000000 69 -70.0 -96.9897 26.9897 +17 node-5 2 0 2400000000 69 -70.0 -96.9897 26.9897 +18 node-5 3 0 2400000000 69 -70.0 -96.9897 26.9897 +19 node-5 4 0 2400000000 69 -70.0 -96.9897 26.9897}}~ + +The table output shows `AvgRxPower_intvl` matches the `Rx Power` from +the physical layer `ReceivePowerTable` and that the `AvgSINR_intvl` +between all nodes is 26.9dB. Taking a look at the RF Pipe PCR curve +used for this example, +`emane-guide/examples/rfpipe-01/node-1/emane-rfpipe-pcr.xml`, any SINR +over 20dB will have a 100% probability of completion. + +In order to experience 50% loss on each link, reduce the SINR to +10dB. This can be achieved by increasing the pathloss between nodes to +86.98dB. The `emaneevent-pathloss` script is a quick way to change +pathloss while investigating an experiment, provided +`emaneeventservice` is not actively publishing pathloss changes. + +~{{verbatim type=txt -- +$ emaneevent-pathloss -i letce0 1:5 86.98}}~ + +The pathloss increase results in an `AvgSINR_intvl` of 10.009697 which +maps to an approximate POR of 50% within +`emane-guide/examples/rfpipe-01/node-1/emane-rfpipe-pcr.xml`. + +~{{verbatim type=txt -- + Measurement_emane_rfpipe_tables_receive@rfsignaltable + _Publisher NEM AntennaId FrequencyHz NumSamples_intvl AvgRxPower_intvl AvgNoiseFloor_intvl AvgSINR_intvl +0 node-1 2 0 2400000000 22 -86.980003 -96.9897 10.009697 +1 node-1 3 0 2400000000 27 -86.980003 -96.9897 10.009697 +2 node-1 4 0 2400000000 25 -86.980003 -96.9897 10.009697 +3 node-1 5 0 2400000000 22 -86.980003 -96.9897 10.009697 +4 node-2 1 0 2400000000 21 -86.980003 -96.9897 10.009697 +5 node-2 3 0 2400000000 21 -86.980003 -96.9897 10.009697 +6 node-2 4 0 2400000000 21 -86.980003 -96.9897 10.009697 +7 node-2 5 0 2400000000 17 -86.980003 -96.9897 10.009697 +8 node-3 1 0 2400000000 20 -86.980003 -96.9897 10.009697 +9 node-3 2 0 2400000000 25 -86.980003 -96.9897 10.009697 +10 node-3 4 0 2400000000 26 -86.980003 -96.9897 10.009697 +11 node-3 5 0 2400000000 26 -86.980003 -96.9897 10.009697 +12 node-4 1 0 2400000000 28 -86.980003 -96.9897 10.009697 +13 node-4 2 0 2400000000 27 -86.980003 -96.9897 10.009697 +14 node-4 3 0 2400000000 25 -86.980003 -96.9897 10.009697 +15 node-4 5 0 2400000000 22 -86.980003 -96.9897 10.009697 +16 node-5 1 0 2400000000 23 -86.980003 -96.9897 10.009697 +17 node-5 2 0 2400000000 26 -86.980003 -96.9897 10.009697 +18 node-5 3 0 2400000000 27 -86.980003 -96.9897 10.009697 +19 node-5 4 0 2400000000 26 -86.980003 -96.9897 10.009697 +}}~ + +Using `ping` as a quick test shows an approximate completion of +25%. Which makes sense, 50% loss in each direction would yield a 25% +completion rate. + +~{{verbatim type=txt +$ ssh node-1 ping radio-2 -i .02 -c 1000 -q +PING radio-2 (10.100.0.2) 56(84) bytes of data. + +--- radio-2 ping statistics --- +1000 packets transmitted, 234 received, 76.6% packet loss, time 20966ms +rtt min/avg/max/mdev = 0.500/1.540/2.649/0.447 ms}}~ diff --git a/guide/site/.gitignore b/guide/site/.gitignore new file mode 100644 index 0000000..f40fbd8 --- /dev/null +++ b/guide/site/.gitignore @@ -0,0 +1,5 @@ +_site +.sass-cache +.jekyll-cache +.jekyll-metadata +vendor diff --git a/guide/site/404.html b/guide/site/404.html new file mode 100644 index 0000000..086a5c9 --- /dev/null +++ b/guide/site/404.html @@ -0,0 +1,25 @@ +--- +permalink: /404.html +layout: default +--- + + + +
    +

    404

    + +

    Page not found :(

    +

    The requested page could not be found.

    +
    diff --git a/guide/site/Gemfile b/guide/site/Gemfile new file mode 100644 index 0000000..38b1e4a --- /dev/null +++ b/guide/site/Gemfile @@ -0,0 +1,37 @@ +source "https://rubygems.org" +# Hello! This is where you manage which Jekyll version is used to run. +# When you want to use a different version, change it below, save the +# file and run `bundle install`. Run Jekyll with `bundle exec`, like so: +# +# bundle exec jekyll serve +# +# This will help ensure the proper Jekyll version is running. +# Happy Jekylling! +gem "jekyll", "~> 4.3.2" +# This is the default theme for new Jekyll sites. You may change this to anything you like. +gem "minima", "~> 2.5" +# If you want to use GitHub Pages, remove the "gem "jekyll"" above and +# uncomment the line below. To upgrade, run `bundle update github-pages`. +# gem "github-pages", group: :jekyll_plugins +# If you have any plugins, put them here! +group :jekyll_plugins do + gem "jekyll-feed", "~> 0.12" + gem 'jekyll-optional-front-matter' + gem 'jekyll-default-layout' +end + +# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem +# and associated library. +platforms :mingw, :x64_mingw, :mswin, :jruby do + gem "tzinfo", ">= 1", "< 3" + gem "tzinfo-data" +end + +# Performance-booster for watching directories on Windows +gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin] + +# Lock `http_parser.rb` gem to `v0.6.x` on JRuby builds since newer versions of the gem +# do not have a Java counterpart. +gem "http_parser.rb", "~> 0.6.0", :platforms => [:jruby] + +gem "just-the-docs" diff --git a/guide/site/Gemfile.lock b/guide/site/Gemfile.lock new file mode 100644 index 0000000..fb5de8e --- /dev/null +++ b/guide/site/Gemfile.lock @@ -0,0 +1,103 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.5) + public_suffix (>= 2.0.2, < 6.0) + colorator (1.1.0) + concurrent-ruby (1.2.2) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) + eventmachine (1.2.7) + ffi (1.15.5) + forwardable-extended (2.6.0) + google-protobuf (3.24.0-x86_64-linux) + http_parser.rb (0.8.0) + i18n (1.14.1) + concurrent-ruby (~> 1.0) + jekyll (4.3.2) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 1.0) + jekyll-sass-converter (>= 2.0, < 4.0) + jekyll-watch (~> 2.0) + kramdown (~> 2.3, >= 2.3.1) + kramdown-parser-gfm (~> 1.0) + liquid (~> 4.0) + mercenary (>= 0.3.6, < 0.5) + pathutil (~> 0.9) + rouge (>= 3.0, < 5.0) + safe_yaml (~> 1.0) + terminal-table (>= 1.8, < 4.0) + webrick (~> 1.7) + jekyll-default-layout (0.1.5) + jekyll (>= 3.0, < 5.0) + jekyll-feed (0.17.0) + jekyll (>= 3.7, < 5.0) + jekyll-optional-front-matter (0.3.2) + jekyll (>= 3.0, < 5.0) + jekyll-sass-converter (3.0.0) + sass-embedded (~> 1.54) + jekyll-seo-tag (2.8.0) + jekyll (>= 3.8, < 5.0) + jekyll-toc (0.18.0) + jekyll (>= 3.9) + nokogiri (~> 1.12) + jekyll-watch (2.2.1) + listen (~> 3.0) + just-the-docs (0.5.4) + jekyll (>= 3.8.5) + jekyll-seo-tag (>= 2.0) + rake (>= 12.3.1) + kramdown (2.4.0) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.4) + listen (3.8.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + mercenary (0.4.0) + minima (2.5.1) + jekyll (>= 3.5, < 5.0) + jekyll-feed (~> 0.9) + jekyll-seo-tag (~> 2.1) + nokogiri (1.15.4-x86_64-linux) + racc (~> 1.4) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (5.0.3) + racc (1.7.1) + rake (13.0.6) + rb-fsevent (0.11.2) + rb-inotify (0.10.1) + ffi (~> 1.0) + rexml (3.2.6) + rouge (4.1.3) + safe_yaml (1.0.5) + sass-embedded (1.64.2-x86_64-linux-gnu) + google-protobuf (~> 3.23) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + unicode-display_width (2.4.2) + webrick (1.8.1) + +PLATFORMS + x86_64-linux + +DEPENDENCIES + http_parser.rb (~> 0.6.0) + jekyll (~> 4.3.2) + jekyll-default-layout + jekyll-feed (~> 0.12) + jekyll-optional-front-matter + jekyll-toc + just-the-docs + minima (~> 2.5) + tzinfo (>= 1, < 3) + tzinfo-data + wdm (~> 0.1.1) + +BUNDLED WITH + 2.4.18 diff --git a/guide/site/_config.yml b/guide/site/_config.yml new file mode 100644 index 0000000..e0cd33a --- /dev/null +++ b/guide/site/_config.yml @@ -0,0 +1,97 @@ +# Welcome to Jekyll! +# +# This config file is meant for settings that affect your whole blog, values +# which you are expected to set up once and rarely edit after that. If you find +# yourself editing this file very often, consider using Jekyll's data files +# feature for the data you need to update frequently. +# +# For technical reasons, this file is *NOT* reloaded automatically when you use +# 'bundle exec jekyll serve'. If you change this file, please restart the server process. +# +# If you need help with YAML syntax, here are some quick references for you: +# https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml +# https://learnxinyminutes.com/docs/yaml/ +# +# Site settings +# These are used to personalize your new site. If you look in the HTML files, +# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. +# You can create any custom variable you would like, and they will be accessible +# in the templates via {{ site.myvariable }}. + +title: EMANE Guide +email: labs@adjacentlink.com +description: >- # this means to ignore newlines until "baseurl:" + Write an awesome description for your new site here. You can edit this + line in _config.yml. It will appear in your document head meta (for + Google search results) and in your feed.xml site description. +baseurl: "" # the subpath of your site, e.g. /blog +url: "" # the base hostname & protocol for your site, e.g. http://example.com +twitter_username: jekyllrb +github_username: jekyll + +# Build settings +theme: just-the-docs +plugins: +# - jekyll-toc + - jekyll-default-layout + +# Exclude from processing. +# The following items will not be processed, by default. +# Any item listed under the `exclude:` key here will be automatically added to +# the internal "default list". +# +# Excluded items can be processed by explicitly listing the directories or +# their entries' file path in the `include:` list. +# +# exclude: +# - .sass-cache/ +# - .jekyll-cache/ +# - gemfiles/ +# - Gemfile +# - Gemfile.lock +# - node_modules/ +# - vendor/bundle/ +# - vendor/cache/ +# - vendor/gems/ +# - vendor/ruby/ + +markdown: kramdown + +search_enabled: true + +search: + # Split pages into sections that can be searched individually + # Supports 1 - 6, default: 2 + heading_level: 2 + # Maximum amount of previews per search result + # Default: 3 + previews: 2 + # Maximum amount of words to display before a matched word in the preview + # Default: 5 + preview_words_before: 3 + # Maximum amount of words to display after a matched word in the preview + # Default: 10 + preview_words_after: 3 + # Set the search token separator + # Default: /[\s\-/]+/ + # Example: enable support for hyphenated search words + tokenizer_separator: /[\s/]+/ + # Display the relative url in search results + # Supports true (default) or false + rel_url: true + # Enable or disable the search button that appears in the bottom right corner of every page + # Supports true or false (default) + button: false + +# For copy button on code +enable_copy_code_button: true + +heading_anchors: true + +aux_links: + "EMANE Guide GitHub": + - "//github.com/adjacentlink/emane-guide" + +footer_content: "Copyright © 2014-2023 Adjacent Link LLC, Bridgewater NJ
    See License for more information." + +math: mathjax diff --git a/guide/site/_includes/head_custom.html b/guide/site/_includes/head_custom.html new file mode 100644 index 0000000..accc1f5 --- /dev/null +++ b/guide/site/_includes/head_custom.html @@ -0,0 +1,6 @@ +{% assign math = page.math | default: layout.math | default: site.math %} + +{% case math %} + {% when "mathjax" %} + {% include mathjax.html %} +{% endcase %} diff --git a/guide/site/_includes/mathjax.html b/guide/site/_includes/mathjax.html new file mode 100644 index 0000000..7effd99 --- /dev/null +++ b/guide/site/_includes/mathjax.html @@ -0,0 +1,10 @@ + + + + + + diff --git a/guide/site/_layouts/mathjax.html b/guide/site/_layouts/mathjax.html new file mode 100644 index 0000000..a0c6c17 --- /dev/null +++ b/guide/site/_layouts/mathjax.html @@ -0,0 +1,12 @@ +--- +layout: default +math: mathjax +--- +
    + \( + + \) +
    + +{{ content }} diff --git a/guide/site/antenna-gain.md b/guide/site/antenna-gain.md new file mode 100644 index 0000000..e721327 --- /dev/null +++ b/guide/site/antenna-gain.md @@ -0,0 +1,153 @@ +--- +layout: default +title: Computing Antenna Gain +nav_order: 18 +permalink: /computing-antenna-gain +--- + + + +# Computing Antenna Gain + +This below step-by-step process is used to determine the antenna gain +when utilizing antenna profiles. It should be noted that antenna gains +are computed as part of the OTA receive packet processing. + +The following steps 1 through 12 define the process of determining the +$rxAntennaGain$ when the receiving node is configured to use antenna +profiles. Steps 2 through 12 would be required to compute the +$txAntennaGain$ if the transmitter was also configured to use antenna +profiles. + +1. Transform the positions from WGS84 (lat/long/alt) to ECEF (Earth Centered Earth Fixed) + + 1. Define the WGS84 ellipsoid constants + + ``` + semi_major=6378137 + semi_minor=6356752.3142 + f=1/298.257223563 + e2 = 2*f - f^2 + ``` + + 2. Compute the prime vertical radius of curvature + + ``` + N = semi_major/sqrt(1-e2*sin(latitude)^2) + ``` + + 3. Perform the following coordinate transformation + + ``` + X = (N + altitude) * cos(latitude) * cos(longitude) + Y = (N + altitude) * cos(latitude) * sin(longitude) + U = (N*(1-e2) + altitude) * sin(latitude) + ``` + + 4. Perform above transformation for both the transmitter and receiver + + ``` + [Xt, Yt, Ut] = Transmitter Position ECEF + [Xr, Yr, Ur] = Receiver Position ECEF + ``` + + 5. Compute the ECEF vector between receiver and transmitter + + ``` + X = Xt-Xr + Y = Yt-Yr + Z = Ut-Ur + ``` + +2. Transform ECEF to NEU (North, East Up) in receiving NEM's frame + + ``` + N1 = -X*sin(latitude)*cos(longitude) - Y*sin(latitude)*sin(longitude) + Z*cos(latitude) + E1 = -X*sin(longitude) + Y*cos(longitude) + U1 = X*cos(latitude)*cos(longitude) + Y*cos(latitude)*sin(longitude) + Z*sin(latitude) + ``` + +3. Adjust yaw and pitch angles to account for velocity vector + + ``` + yaw = yaw + V_azimuth + pitch = pitch + V_elevation + ``` + +4. Perform the following transformation to account for yaw, pitch and roll + + 1. Define the transformation matrix + + ``` + a11 = cos(pitch)cos(yaw) + a12 = cos(pitch)sin(yaw) + a13 = sin(pitch) + a21 = sin(pitch)cos(yaw)sin(roll) - cos(roll)sin(yaw) + a22 = cos(roll)cos(yaw) + sin(pitch)sin(roll)sin(yaw) + a23 = -cos(pitch)sin(roll) + a31 = -cos(yaw)sin(pitch)cos(roll) - sin(yaw)sin(roll) + a32 = -sin(yaw)sin(pitch)cos(roll) + sin(roll)cos(yaw) + a33 = cos(pitch)cos(roll) + ``` + + ``` + | a11 a12 a13 | + | a21 a22 a23 | = A + | a31 a32 a33 | + ``` + + 2. Perform the transformation + + ``` + N = N1 * a11 + E1 * a12 + U1 * a13 + E = N1 * a21 + E1 * a22 + U1 * a23 + U = N1 * a31 + E1 * a32 + U1 * a33 + ``` + +5. Update NEU to include receiving node's location on the platform + + ``` + N = N + north + E = E + east + U = U + up + ``` + + Where, *north*/*east*/*up* are obtained from the antenna profile manifest for the receiving node. + +6. Rotate transmitter's antenna placement into receiver's coordinate frame using the same transformation defined in Step 4 above replacing N1, E1 and U1 with the transmitter's antenna placement values obtained from the antenna profile manifest. + + ``` + N = N + north(transformed) + E = E + east(transformed) + U = U + up(transformed) + ``` + +7. Compute range from receiver to transmitter + + ``` + range = sqrt(N^2 + E^2 + U^2) + ``` + +8. Compute bearing and elevation from receiver to transmitter + + ``` + bearing = atan(E/N) + elevation = asin(U/range) + ``` + +9. Look up the blockage value for the receiver (if provided) based on the blockage pattern associated with the receiver's antenna profile Id and the bearing and elevation values from Step 8. + +10. Adjust bearing and elevation to account for receiving NEM's antenna pointing (if provided) + + ``` + bearing = bearing - AzPointing + elevation = elevation - ElPointing + ``` + +11. Look up antenna gain value for the receiver based on the antenna pattern associated with the receiver's antenna profile Id and the bearing and elevation values from Step 10. + +12. Compute *rxAntennaGain* + + ``` + rxAntennGain = antennaGain + blockage + ``` diff --git a/guide/site/antenna-patterns.md b/guide/site/antenna-patterns.md new file mode 100644 index 0000000..286f186 --- /dev/null +++ b/guide/site/antenna-patterns.md @@ -0,0 +1,421 @@ +--- +layout: default +title: Antenna Patterns +nav_order: 9 +permalink: /antenna-patterns +--- + + +# Antenna Patterns + +![](images/auto-generated-incomplete-chapter.png){: width="75%"; .centered} + +The antenna profile manifest is an XML file that provides a list of +all antenna profiles to be utilized within an emulation +experiment. The antenna profile manifest is specified using the +`antennaprofilemanifesturi` configuration parameter. + +```xml + + + + + + + + + + +``` + +The Antenna Profile Manifest is defined using an XML file. The +document consists of a single *\* element that contains one +or more elements. Each *\* element corresponds to +a unique antenna profile where: + +1. The *id* attribute is required and must be unique among all + profiles. + +2. The *antennapatternuri* attribute is required and must be specified + as an absolute URI. + +3. The *blockagepatteruri* attribute is optional and when specified + must be an absolute URI. + +4. The *\* subelement is optional and defines the location + of the antenna relative to the platform. + +The location event provides the position of the platform and when +computing azimuth and elevation between the transmitter and receiver, +the antenna placement of the local and/or remote NEM is accounted for +within the physical layer by performing a translation and/or rotation +as required. + +Where: + +1. The *north* attribute defines the longitudinal offset in meters of + the antenna location on the platform. + +2. The *east* attribute defines the latitudinal offset in meters of + the antenna location on the platform. + +3. The *up* attribute defines the vertical offset in meters of the + antenna location on the platform. + +## Defining Antenna Patterns + +The antenna pattern is an XML file that defines the antenna gain (i.e +radiation pattern) associated with a given antenna for all elevation +and bearing pairs. The antenna pattern is defined in the platform's +reference frame assuming to be pointing (if directional) at an +elevation and bearing of 0 degrees. The physical layer will make the +proper adjustments to account for platform orientation and antenna +pointing when computing the gain + +The below sample antenna pattern XML files show an ideal omni and an +ideal 30 degree directional sector antenna. Elevation and bearing are +defined in whole degrees and as such, a single XML file can contain a +maximum of 64800 (180x360) gain values. + +Ideal omni antenna XML definition: + +```xml + + + + + + + + + + + +``` + + +30 degree directional sector antenna XML definition: + +```xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` + +Rendering of the above 30 degree directional sector antenna: + +![](images/antennapattern.png){:width="60%"; .centered} + +## Defining Blockage Patterns + +The blockage pattern is an XML file that defines the blockage +associated with a given antenna mounted on a specific platform for all +elevation and bearing pairs. The blockage pattern is also defined in +the platform's reference frame and the emulator physical layer will +make the proper adjustments to account for platform orientation. The +blockage pattern is optional. When defined, it is used in conjunction +with the antenna pattern to determine the actual antenna gain. + +Sample blockage pattern XML file with full blockage aft (90 degrees <= +bearing <= 270 degrees) of the platform and at elevations above and +below 10 degrees: + +```xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` + +Rendering of the above blockage pattern: + +![](images/blockagepattern.png){:width="60%"; .centered} + diff --git a/guide/site/applications.md b/guide/site/applications.md new file mode 100644 index 0000000..44ba551 --- /dev/null +++ b/guide/site/applications.md @@ -0,0 +1,545 @@ +--- +layout: default +title: Applications +nav_order: 5 +permalink: /applications +--- + + + +# EMANE Applications + +Most *EMANE* experiments will have four XML configuration files per +running `emane` application and an additional two XML configuration +files for a single `emaneeventservice` application responsible for +instantiating and configuring event generators used to direct the +experiment scenario. + +## Emulator + +The `emane` application processes a set of XML configuration files in +order to determine the type of radio model to load, how the radio +model and physical layer should be configured and what +general application level settings to apply. + +![](images/auto-generated-configuration-parameter-hierarchy.png){:width="75%"; .centered} +

    Configuration parameter value hierarchy for values + specified in multiple files where the highest priority + value for the same configuration parameter is used.


    + + +1. *Emulator Platform XML*: The initial configuration file processed + by the `emane` application. Contains all the emulator + infrastructure configuration as well as a reference to the *NEM* + XML along with the *NEM* structure, potentially including + *NEM* component configuration values. + + *NEM* structure is defined using an `` element with a + `definition` attribute specifying the *NEM* XML configuration file + and an `id` attribute specifying the *NEM id*. + + If configuration values are specified for an NEM component: + ``, ``, `` or ``, the XML configuration + file for that component must also be supplied in component's + respective `definition` attribute. + + Emulator platform XML configuration parameter values specified + for *NEM* components will override the same configuration + parameters, if present, in *NEM* XML or the same configuration + parameters, if present, in the specific *NEM* component's XML. + + The below emulator platform configuration for `node-1` in the + `rfpipe-01` example illustrates including boundary configuration + via a sequence of `` elements within the `` + component and specifying the boundary configuration XML file as + `emane-transvirtual.xml`. Values are provided for the `device`, + `address`, and `mask` configuration parameters. + + ```xml + + + + + + + + + + + + + + + + + + ``` +

    emane-guide/examples/rfpipe-01/node-1/emane-platform.xml


    + + + For legacy reasons it is possible to configure an emulator instance + to instantiate more than one *NEM*. For performance reasons, stick + to one and only one *NEM* per emulator instance. + + ![](images/auto-generated-dont-run-multiple-nems.png){: width="75%"; .centered} + + +2. *NEM XML*: The configuration file specified in the emulator + platform XML when defining the *NEM* structure. All *NEM* + components are defined: ``, ``, `` and/or + ``, along with their respective `definition` attribute + specifying the appropriate component XML configuration file. + + *NEM* XML is the most appropriate place to specify physical layer + configuration using the `` element. + + *NEM* XML configuration parameters specified within any *NEM* + component will override the same configuration parameters, if + present, in the specific *NEM* component's XML. + + The below *NEM* configuration for `node-1` in the `rfpipe-01` + example illustrates how to define the *NEM* structure and configure + the physical layer. The order of components within the `` + element is important and maps directly to how they will be + connected. Always order *NEM* components from *upstream* to + *downstream*. + + ```xml + + + + + + + + + + + + + + + + + + + + + + ``` +

    emane-guide/examples/rfpipe-01/node-1/emane-rfpipe-nem.xml


    + + +2. *Radio Model XML*: The configuration file specified in the *NEM* XML + `` `definition` attribute. It contains the name of the plugin + to instantiate within the `library` attribute of its `` + element. + + Radio model XML configuration parameters specified within the + `` component will be overridden by the same configuration + parameters, if present, within *NEM* XML or the emulator platform + XML, if present. + + The below radio model XML configuration for `node-1` in the + `rfpipe-01` example illustrates the available configuration + parameters for the [RF Pipe](rf-pipe-radio-model#rf-pipe-radio-model) + radio model. + + ```xml + + + + + + + + + + + ``` +

    emane-guide/examples/rfpipe-01/node-1/emane-rfpipe-radiomodel.xml


    + +3. *Boundary XML*: The configuration file specified in the *NEM* XML + `` `definition` attribute. It contains the name of the plugin + to instantiate within within the `library` attribute of its `` + element. + + Boundary XML configuration parameters specified within the + `` component will be overridden by the same configuration + parameters, if present, within *NEM* XML or the emulator platform + XML, if present. + + The below boundary XML configuration for `node-1` in the + `rfpipe-01` example provides no configuration parameter values, + leaving all the [Virtual Transport](virtual-transport#virtual-transport) + configuration parameters to their default values unless otherwise + set in *NEM* XML or emulator platform XML. + + ```xml + + + ``` +

    emane-guide/examples/rfpipe-01/node-1/emane-transvirtual.xml


    + +4. *Bit Error Rate or Packet Completion Rate XML*: Most radio models + employ *Bit Error Rate* (BER) or *Packet Completion Rate* (PCR) + curves to factor *Signal to Noise and Interference Ratio* (SINR) into + their reception success or failure logic. + + The below packet completion rate XML for `node-1` in the + `rfpipe-01` example illustrates the format used by the [RF Pipe](rf-pipe-radio-model#rf-pipe-radio-model) model. There is no standard BER + or PCR curve XML format. + + ```xml + + +
    + + + + + + + + + + + + + + + + + + + + + + + + <... snippet: only 25 lines shown...> + ``` +

    emane-guide/examples/rfpipe-01/node-1/emane-rfpipe-pcr.xml


    + +### `emane` configuration + +1. **`antennaprofilemanifesturi`**: URI of the antenna profile + manifest to load. The antenna profile manifest contains a list of + antenna profile entries. Each entry contains a unique profile + identifier, an antenna pattern URI and an antenna blockage URI. This + parameter is required when antennaprofileenable is on or if any other + NEM participating in the emulation has antennaprofileenable set on, + even in the case where antennaprofileenable is off locally. + + ```no-highlighting + Default: no Required: no Modifiable: no + Type: string Occurrs: [1,1] + ``` + +2. **`controlportendpoint`**: IPv4 or IPv6 control port endpoint. + + ```no-highlighting + Default: no Required: yes Modifiable: no + Type: inetaddr Occurrs: [1,1] + Values: 0.0.0.0:47000 + ``` + +3. **`eventservicedevice`**: Device to associate with the Event + Service channel multicast endpoint. + + ```no-highlighting + Default: no Required: no Modifiable: no + Type: string Occurrs: [1,1] + ``` + +4. **`eventservicegroup`**: IPv4 or IPv6 Event Service channel + multicast endpoint. + + ```no-highlighting + Default: no Required: yes Modifiable: no + Type: inetaddr Occurrs: [1,1] + ``` + +5. **`eventservicettl`**: Device to associate with the Event Service + channel multicast endpoint. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint8 Occurrs: [1,1] Range: [0,255] + Values: 1 + ``` + +6. **`otamanagerchannelenable`**: Enable OTA channel multicast + communication. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: true + ``` + +7. **`otamanagerdevice`**: Device to associate with the OTA channel + multicast endpoint. + + ```no-highlighting + Default: no Required: no Modifiable: no + Type: string Occurrs: [1,1] + ``` + +8. **`otamanagergroup`**: IPv4 or IPv6 Event Service OTA channel + endpoint. + + ```no-highlighting + Default: no Required: no Modifiable: no + Type: inetaddr Occurrs: [1,1] + ``` + +9. **`otamanagerloopback`**: Enable multicast loopback on the OTA + channel multicast channel. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + +10. **`otamanagermtu`**: OTA channel MTU. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint32 Occurrs: [1,1] Range: [0,4294967295] + Values: 0 + ``` + +11. **`otamanagerpartcheckthreshold`**: Defines the rate in seconds a + check is performed to see if any OTA packet part reassembly efforts + should be abandoned. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [0,65535] + Values: 2 + ``` + +12. **`otamanagerparttimeoutthreshold`**: Defines the threshold in + seconds to wait for another OTA packet part for an existing reassembly + effort before abandoning the effort. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [0,65535] + Values: 5 + ``` + +13. **`otamanagerttl`**: OTA channel multicast message TTL. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint8 Occurrs: [1,1] Range: [0,255] + Values: 1 + ``` + +14. **`spectralmaskmanifesturi`**: URI of the RF transmit spectral + mask manifest to load. The spectral mask manifest contains a list of + spectral masks. Each spectral mask contains a unique mask identifier, + a primary signal definition and zero or more spur definitions. This + parameter is required when any NEM participating in the emulation is + using spectral masks, even in the case where the local NEM is not. + + ```no-highlighting + Default: no Required: no Modifiable: no + Type: string Occurrs: [1,1] + ``` + +15. **`stats.event.maxeventcountrows`**: Event channel max event count + table rows. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint32 Occurrs: [1,1] Range: [0,4294967295] + Values: 0 + ``` + +16. **`stats.ota.maxeventcountrows`**: OTA channel max event count + table rows. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint32 Occurrs: [1,1] Range: [0,4294967295] + Values: 0 + ``` + +17. **`stats.ota.maxpacketcountrows`**: OTA channel max packet count + table rows. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint32 Occurrs: [1,1] Range: [0,4294967295] + Values: 0 + ``` + + + +### `emane` statistics + +1. **`numEventChannelEventsRx`**: + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +2. **`numEventChannelEventsTx`**: + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +3. **`numOTAChannelDownstreamPackets`**: + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +4. **`numOTAChannelEventsRx`**: + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +5. **`numOTAChannelEventsTx`**: + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +6. **`numOTAChannelUpstreamPackets`**: + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +7. **`numOTAChannelUpstreamPacketsDroppedMissingPart`**: + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + + + +### `emane` Statistic Tables + +The `emane` application processes a set of XML configuration files in +order to determine the type of radio model to load, how the radio +model and physical layer should be configured and what +general application level settings to apply. + +1. **`EventChannelEventCountTable`**: EventChannel Event count table. + + ```no-highlighting + Clearable: yes + ``` + +2. **`OTAChannelEventCountTable`**: OTAChannel Event count table. + + ```no-highlighting + Clearable: yes + ``` + +3. **`OTAChannelPacketCountTable`**: OTA packet count table. + + ```no-highlighting + Clearable: yes + ``` + + + +## Event Service + +The `emaneeventservice` application processes a configuration file in +order to determine the types of event generator plugins to +instantiate, how the plugins should be configured and what general +application level settings to apply. + +1. *Event Service XML*: The initial configuration file processed by + the `emaneeventservice` application. Contains all the event service + infrastructure configuration as well as the event generators to + load. + + Event generators are loaded by `emaneeventservice` based on an + `` element's `definition` attribute which specifies the + event generator XML. More than one `` element may be + present, resulting in more than one generator being loaded by the + event service. + + The below event service configuration for `host` in the + `rfpipe-01` example illustrates configuring the event service to + load the [EEL](eel-event-generator#eel-event-generator) event generator. + + ```xml + + + + + + + ``` +

    emane-guide/examples/rfpipe-01/host/eventservice.xml


    + +2. "*Event Generator XML*: The configuration file specified in the Event Service XML + `` `definition` attribute. It contains the name of the plugin + to instantiate within the `library` attribute of its `` + element. + + Event generator XML configuration parameters are specified as a + sequence of `` or `` elements within ``. + + The below event generator XML configuration for `host` in the + `rfpipe-01` example illustrates using some of the available + configuration parameters for the [EEL](eel-event-generator#eel-event-generator) + event generator. + + ```xml + + + + + + + + + + + + ``` +

    emane-guide/examples/rfpipe-01/host/eelgenerator.xml


    + + +### `emaneeventservice` configuration + + 1. **`eventservicedevice`**: Device to associate with the Event + Service channel multicast endpoint. + + ```no-highlighting + Default: no Required: no Modifiable: no + Type: string Occurrs: [1,1] + ``` + + 2. **`eventservicegroup`**: IPv4 or IPv6 Event Service channel + multicast endpoint. + + ```no-highlighting + Default: no Required: yes Modifiable: no + Type: inetaddr Occurrs: [1,1] + ``` + + 3. **`eventservicettl`**: Device to associate with the Event + Service channel multicast endpoint. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint8 Occurrs: [1,1] Range: [0,255] + Values: 1 + ``` + + diff --git a/guide/site/assets/js/mathjax-script-type.js b/guide/site/assets/js/mathjax-script-type.js new file mode 100644 index 0000000..afc73f9 --- /dev/null +++ b/guide/site/assets/js/mathjax-script-type.js @@ -0,0 +1,18 @@ +// Copied from https://docs.mathjax.org/en/latest/upgrading/v2.html#changes-in-the-mathjax-api +MathJax = { + options: { + renderActions: { + findScript: [10, function (doc) { + for (const node of document.querySelectorAll('script[type^="math/tex"]')) { + const display = !!node.type.match(/; *mode=display/); + const math = new doc.options.MathItem(node.textContent, doc.inputJax[0], display); + const text = document.createTextNode(''); + node.parentNode.replaceChild(text, node); + math.start = {node: text, delim: '', n: 0}; + math.end = {node: text, delim: '', n: 0}; + doc.math.push(math); + } + }, ''] + } + } +}; diff --git a/guide/site/assets/js/mathtex-script-type.js b/guide/site/assets/js/mathtex-script-type.js new file mode 100644 index 0000000..4e3f9c1 --- /dev/null +++ b/guide/site/assets/js/mathtex-script-type.js @@ -0,0 +1,34 @@ +// Mostly copied from https://github.com/KaTeX/KaTeX/tree/main/contrib/mathtex-script-type +// Options for global command definitions added by @pdmosses + +// import katex from "katex"; + +const macros = {}; + +let scripts = document.body.getElementsByTagName("script"); +scripts = Array.prototype.slice.call(scripts); +scripts.forEach(function(script) { + if (!script.type || !script.type.match(/math\/tex/i)) { + return -1; + } + const display = + (script.type.match(/mode\s*=\s*display(;|\s|\n|$)/) != null); + + const katexElement = document.createElement(display ? "div" : "span"); + katexElement.setAttribute("class", + display ? "equation" : "inline-equation"); + try { + katex.render(script.text, katexElement, { + displayMode: display, + globalGroup: true, + trust: true, + strict: false, + throwOnError: false, + macros + }); + } catch (err) { + //console.error(err); linter doesn't like this + katexElement.textContent = script.text; + } + script.parentNode.replaceChild(katexElement, script); +}); diff --git a/guide/site/bent-pipe-radio-model.md b/guide/site/bent-pipe-radio-model.md new file mode 100644 index 0000000..8feac15 --- /dev/null +++ b/guide/site/bent-pipe-radio-model.md @@ -0,0 +1,1094 @@ +--- +layout: default +title: Bent Pipe Radio Model +nav_order: 13 +permalink: /bent-pipe-radio-model +--- + + +# Bent Pipe Radio Model + +The Bent Pipe radio model is a generic regenerative bent-pipe (u-bend) +satellite model. The model supports configuration of one or more +transponders, where each transponder may operate in `ubend` or +`process` mode. A transponder operating in `ubend` mode will relay any +successfully received over-the-air uplink frame over its downlink +channel. A transponder operating in `process` mode will forward any +successfully received over-the-air frame up the stack for processing. +Bent Pipe differentiates between operating as a satellite or ground +station solely based on transponder configuration, specifically the +configuration parameter `transponder.receive.action` either set to +`ubend` or `process`, and can be configured as a satellite with +inter-satellite links by using a combination of `ubend` and `process` +transponders. + +## Features + +The Bent Pipe radio model provides the following set of features: +[Multiple Transponders](#multiple-transponders), [Configurable Channel +Access](#configurable-channel-access), [Multiple +Antenna](#multiple-antenna), [Aggregation and +Fragmentation](#aggregation-and-fragmentation), [Boundary Transponder +Selection](#boundary-transponder-selection), and [Packet Completion +Rate Curves](#packet-completion-rate-curves). + +### Multiple Transponders + +The Bent Pipe radio model can be configured with multiple transponders +where each is configured using a set of configuration parameters with +a `:` format. Where `` is +a 0 based sequential index used to identify the transponders +instantiated by the model. + +Each transponder needs both receive and transmit configuration and +must be included as an entry in each of the `transponder.receiver.*` +and `transponder.transmit.*` configuration parameter values. + +Failure to include a referenced transponder in any of the required +configuration, using non-sequential transponder indices, or mixing +`na` and non-`na` values for the same transponder in +`transponder.transmit.*` TDMA channel access parameters, will result +in a configuration exception at emulator start. + +The below radio model XML snippet from `node-1` in the `bentpipe-01` +example shows `transponder.receiver.*` configuration for a Bent Pipe +model configured with a single transponder in `process` mode. + +```xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` +

    emane-guide/examples/bentpipe-01/node-1/emane-bentpipe-radiomodel.xml lines: 7-36


    + +Comparing the above snippet with the following from `node-2` in the +`bentpipe-02` example, highlights the `transponder.receiver.*` +similarities and differences when configuring multiple transponders +and operating in `ubend` mode -- mainly the number of `` +items with unique transponder indices. + +```xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` +

    emane-guide/examples/bentpipe-02/node-2/emane-bentpipe-radiomodel.xml lines: 7-48


    + +### Configurable Channel Access + +A transponder can be configured to use either TDMA or No-Protocol (no +channel access) channel access when transmitting. Specifying a +non-`na` value for `transponder.transmit.slotsize`, +`transponder.transmit.slotperframe`, and +`transponder.transmit.txslots` configuration parameters selects TDMA +channel access. Transponders instantiated by a Bent Pipe instance may +have different slot and frame sizes, and different tx slot +allocations. + +The following snippet from `node-1` in the `bentpipe-02` example +illustrates the configuration necessary for a TDMA transmit channel +with 10 1000 msec slots per frame and the assigning of individual +transmit slots to `node-1`. + +```xml + + + + + + + + + + + + + + + +``` +

    emane-guide/examples/bentpipe-02/node-1/emane-bentpipe-radiomodel.xml lines: 57-71


    + +Specifying those same configuration parameters as `na`, as does +`node-3` in the `bentpipe-02` example, selects no-protocol channel +access, which is functionally equivalent to the [RF Pipe Model](rf-pipe-radio-model#rf-pipe-radio-model). + +```xml + + + + + + + + + + + + + + + +``` +

    emane-guide/examples/bentpipe-02/node-3/emane-bentpipe-radiomodel.xml lines: 57-71


    + + +### Multiple Antenna + +The Bent Pipe radio model can be configured with multiple antennas +using the configuration parameter `antenna.defines`. Each antenna is +defined as a parameter value entry using the format `:`. Where `` is a 0 based +unique index used to identify a specific antenna. + +Ideal omni antennas are defined using the following format: + +`:omni;;` + + +Profile defined antennas are defined using the following format: + + +`:;;;` + +Below is the antenna definition used by the `node-2` in the +`bentpipe-02` example showing the definition for three profile defined +antennas: + +```xml + + + + + +``` +

    emane-guide/examples/bentpipe-02/node-2/emane-bentpipe-radiomodel.xml lines: 131-135


    + +A transponder must be associated with a receive and transmit antenna, +which may be the same, using the configuration parameters +`transponder.receive.antenna` and `transponder.transmit.antenna`, +respectively. An antenna is identified by the *antenna index* used in +`antenna.defines`. + +Below is the transponder receive and transmit antenna mappings for +`node-2` in the `bentpipe-02` example. + +```xml + + + + + + +``` +

    emane-guide/examples/bentpipe-02/node-2/emane-bentpipe-radiomodel.xml lines: 36-41


    + +```xml + + + + + + +``` +

    emane-guide/examples/bentpipe-02/node-2/emane-bentpipe-radiomodel.xml lines: 99-104


    + +### Aggregation and Fragmentation + +The Bent Pipe radio model can be configured to aggregate small +over-the-air messages up to a certain maximum transmission unit (MTU) +and/or fragment ones larger than the same MTU. Aggregation is enabled +using the configuration parameter +`queue.aggregationenable`. Fragmentation is enabled using the +configuration parameter `queue.fragmentationenable`. + +MTU definition is transponder specific. When using TDMA channel +access, the MTU is calculated using the +`transponder.transmit.slotsize` and `transponder.transmit.datarate` +configuration parameters. When using no-protocol channel access the +MTU is specified using the configuration parameter +`transponder.transmit.mtu`. + +### Boundary Transponder Selection + +When using `process` mode, downstream messages that are communicated +to the Bent Pipe model for over-the-air transmission use a TOS or DSCP +mapping to transponder index in order to direct over-the-air messages, +depending on what is provided by the boundary component in use. Both +the [Raw Transport](raw-transport#raw-transport) and [Virtual Transport](virtual-transport#virtual-transport) use DSCP. + +The below configuration from `node-1` in the `bentpipe-01` example +directs all downstream over-the-air messages to *transponder 0*. + +```xml + + + +``` +

    emane-guide/examples/bentpipe-01/node-1/emane-bentpipe-radiomodel.xml lines: 87-89


    + +### Packet Completion Rate Curves + +The Bent Pipe radio model Packet Completion Rate is specified as +curves defined via XML. The curve definitions are composed of a series +of SINR values along with their corresponding probability of reception +for a given index which is assigned to a transponder using the +configuration parameter `transponder.transmit.pcrcurveindex`. + +A curve definition must contain a minimum of two points with one SINR +representing *POR = 0* and one SINR representing *POR = 100*. Linear +interpolation is preformed when an exact SINR match is not found. + +Specifying a packet size (`` attribute +`packetsize`) in the curve file will adjust the POR based on received +packet size. Specifying a `packetsize` of 0 disregards received packet +size when computing the POR. + +The POR is obtained using the following calculation when a non-zero +`packetsize` is specified: + +$$POR = POR_0 ^ {S_1/S_0}$$ + +Where, + +$$POR_0$$ is the POR value determined from the PCR curve for the given SINR value + +$$S_0$$ is the packet size specified in the curve file `packetsize` + +$$S_1$$ is the received packet size + +The below PCR curve file is used by all nodes in +the `bentpipe-01` example. These curves are for illustrative +purposes only. Packet Completion Rate curves should be representative +of the waveform being emulated. + +```xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` +

    emane-guide/examples/bentpipe-01/node-1/emane-bentpipe-pcr.xml


    + +![](images/auto-generated-pcr-representation.png){: width="75%"; .centered} + +## Configuration +1. **`antenna.defines`**: Defines antennas available for use by + transponders with the following format: + + `:(omni,)|(),` + + ```no-highlighting + Default: no Required: yes Modifiable: yes + Type: string Occurrs: [1,65535] + Regex: ^\d+:(omni;(-){0,1}\d+(\.\d+){0,1}|\d+;(-){0,1}\d+(\.\d+){0,1};(-){0,1}\d+(\.\d+){0,1});\d+$ + ``` + +2. **`pcrcurveuri`**: Defines the URI of the Packet Completion Rate + (PCR) curve file. The PCR curve file contains probability of reception + curves as a function of Signal to Interference plus Noise Ratio + (SINR). + + ```no-highlighting + Default: no Required: yes Modifiable: no + Type: string Occurrs: [1,1] + ``` + +3. **`queue.aggregationenable`**: Defines whether packet aggregation + is enabled for transmission. When enabled, multiple packets up to a + specified MTU can be sent in the same transmission. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: true + ``` + +4. **`queue.depth`**: Defines the size of the per transponder + downstream packet queues in packets. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [0,65535] + Values: 256 + ``` + +5. **`queue.fragmentationenable`**: Defines whether packet + fragmentation is enabled. When enabled, a single packet larger than a + specified MTU will be fragmented into multiple message and sent. When + disabled, packets larger than the MTU will be discarded. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: true + ``` + +6. **`reassembly.fragmentcheckthreshold`**: Defines the rate in + seconds a check is performed to see if any packet fragment reassembly + efforts should be abandoned. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [0,65535] + Values: 2 + ``` + +7. **`reassembly.fragmenttimeoutthreshold`**: Defines the threshold in + seconds to wait for another packet fragment for an existing reassembly + effort before abandoning the effort. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [0,65535] + Values: 5 + ``` + +8. **`transponder.receive.action`**: Defines per transponder receive + action: `ubend` or `process` with the following format: + + `:ubend|process` + + ```no-highlighting + Default: no Required: yes Modifiable: no + Type: string Occurrs: [1,65535] + Regex: ^\d+:(process|ubend)$ + ``` + +9. **`transponder.receive.antenna`**: Defines per transponder receive + antenna with the following format: + + `:` + + ```no-highlighting + Default: no Required: yes Modifiable: no + Type: string Occurrs: [1,65535] + Regex: ^\d+:\d+$ + ``` + +10. **`transponder.receive.bandwidth`**: Defines per transponder + receive bandwidth in hz with the following format: + + `:` + + ```no-highlighting + Default: no Required: yes Modifiable: no + Type: string Occurrs: [1,65535] + Regex: ^\d+:\d+(\.\d+){0,1}(G|M|K){0,1}$ + ``` + +11. **`transponder.receive.enable`**: Defines per transponder receive + enable: `yes` or `on`; or `no` or `off` with the format: + + `:yes|on|no|off` + + ```no-highlighting + Default: no Required: yes Modifiable: yes + Type: string Occurrs: [1,65535] + Regex: ^\d+:(on|off|yes|no)$ + ``` + +12. **`transponder.receive.frequency`**: Defines per transponder + receive center frequency in hz with the following format: + + `:` + + ```no-highlighting + Default: no Required: yes Modifiable: yes + Type: string Occurrs: [1,65535] + Regex: ^\d+:\d+(\.\d+){0,1}(G|M|K){0,1}$ + ``` + +13. **`transponder.transmit.antenna`**: Defines per transponder + transmit antenna with the following format: + + `:` + + ```no-highlighting + Default: no Required: yes Modifiable: no + Type: string Occurrs: [1,65535] + Regex: ^\d+:\d+$ + ``` + +14. **`transponder.transmit.bandwidth`**: Defines per transponder + transmit bandwidth in hz with the following format: + + `:` + + ```no-highlighting + Default: no Required: yes Modifiable: no + Type: string Occurrs: [1,65535] + Regex: ^\d+:\d+(\.\d+){0,1}(G|M|K){0,1}$ + ``` + +15. **`transponder.transmit.datarate`**: Defines per transponder + transmit datarate in bps with the following format: + + `:` + + ```no-highlighting + Default: no Required: yes Modifiable: yes + Type: string Occurrs: [1,65535] + Regex: ^\d+:\d+(\.\d+){0,1}(G|M|K){0,1}$ + ``` + +16. **`transponder.transmit.enable`**: Defines per transponder + transmit enable: `yes` or `on`; or `no` or `off` with the format: + + `:yes|on|no|off` + + ```no-highlighting + Default: no Required: yes Modifiable: yes + Type: string Occurrs: [1,65535] + Regex: ^\d+:(on|off|yes|no)$ + ``` + +17. **`transponder.transmit.frequency`**: Defines per transponder + transmit center frequency in hz with the following format: + + `:` + + ```no-highlighting + Default: no Required: yes Modifiable: yes + Type: string Occurrs: [1,65535] + Regex: ^\d+:\d+(\.\d+){0,1}(G|M|K){0,1}$ + ``` + +18. **`transponder.transmit.mtu`**: Defines per transponder transmit + mtu in bytes or `na` if using transmit slots with following format: + + `:na|` + + ```no-highlighting + Default: no Required: yes Modifiable: yes + Type: string Occurrs: [1,max_uint64] + Regex: ^\d+:(na|\d+)$ + ``` + +19. **`transponder.transmit.pcrcurveindex`**: Defines per transponder + transmit PCR curve index with the following format: + + `:` + + ```no-highlighting + Default: no Required: yes Modifiable: yes + Type: string Occurrs: [1,65535] + Regex: ^\d+:\d+$ + ``` + +20. **`transponder.transmit.power`**: Defines per transponder transmit + power in dBm with the following format: + + `:` + + ```no-highlighting + Default: no Required: yes Modifiable: yes + Type: string Occurrs: [1,65535] + Regex: ^\d+:\d+(\.\d+){0,1}(G|M|K){0,1}$ + ``` + +21. **`transponder.transmit.slotperframe`**: Defines per transponder + transmit slots per frame with the following format: + + `:` + + ```no-highlighting + Default: no Required: yes Modifiable: yes + Type: string Occurrs: [1,65535] + Regex: ^\d+:(na|\d+)$ + ``` + +22. **`transponder.transmit.slotsize`**: Defines per transponder + transmit slot size in microseconds or `na` with the following format: + + `:na|` + + ```no-highlighting + Default: no Required: yes Modifiable: yes + Type: string Occurrs: [1,65535] + Regex: ^\d+:(na|\d+)$ + ``` + +23. **`transponder.transmit.tosmap`**: Defines TOS or DSCP mapping to + transponder index in order to direct downstream frames to the + appropriate transponder when operating in `process` mode. Note: TOS + or DSCP is dictated by the boundary component in use. Specified with + the following format: + + `:all|na|[(value|value-value)];...` + + ```no-highlighting + Default: no Required: yes Modifiable: no + Type: string Occurrs: [1,65535] + Regex: ^\d+:(na|((\d+|\d+-\d+)(;){0,1}){1,}) + ``` + +24. **`transponder.transmit.txslots`**: Defines per transponder + transmit slots with the following format: + + `:[slot|slot-slot];...` + + ```no-highlighting + Default: no Required: yes Modifiable: yes + Type: string Occurrs: [1,65535] + Regex: ^\d+:na|(\d+|\d+-\d+)(;(\d+|\d+-\d+)){0,}$ + ``` + +25. **`transponder.transmit.ubend.delay`**: Defines per transponder + transmit u-bend delay in microseconds. Applicable when associated + `transponder.receive.action` is `ubend` with the following format: + + `:` + + ```no-highlighting + Default: no Required: yes Modifiable: yes + Type: string Occurrs: [1,65535] + Regex: ^\d+:(na|\d+)$ + ``` + + + +## Statistics +1. **`avgProcessAPIQueueDepth`**: Average API queue depth for a + processUpstreamPacket, processUpstreamControl, + processDownstreamPacket, processDownstreamControl, processEvent and + processTimedEvent. + + ```no-highlighting + Type: double Clearable: yes + ``` + +2. **`avgProcessAPIQueueWait`**: Average API queue wait for a + processUpstreamPacket, processUpstreamControl, + processDownstreamPacket, processDownstreamControl, processEvent and + processTimedEvent in microseconds. + + ```no-highlighting + Type: double Clearable: yes + ``` + +3. **`avgTimedEventLatency`**: Average latency between the scheduled + timer expiration and the actual firing over the requested duration. + + ```no-highlighting + Type: double Clearable: yes + ``` + +4. **`avgTimedEventLatencyRatio`**: Average ratio of the delta between + the scheduled timer expiration and the actual firing over the + requested duration. An average ratio approaching 1 indicates that + timer latencies are large in comparison to the requested durations. + + ```no-highlighting + Type: double Clearable: yes + ``` + +5. **`numAPIQueued`**: The number of queued API events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +6. **`processedConfiguration`**: The number of processed + configuration. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +7. **`processedDownstreamControl`**: The number of processed + downstream control. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +8. **`processedDownstreamPackets`**: The number of processed + downstream packets. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +9. **`processedEvents`**: The number of processed events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +10. **`processedTimedEvents`**: The number of processed timed events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +11. **`processedUpstreamControl`**: The number of processed upstream + control. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +12. **`processedUpstreamPackets`**: The number of processed upstream + packets. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + + + +## Statistic Tables +1. **`AntennaStatusTable`**: Antenna status table + + ```no-highlighting + Clearable: no + ``` + +2. **`BroadcastByteAcceptTable0`**: Broadcast bytes accepted + + ```no-highlighting + Clearable: yes + ``` + +3. **`BroadcastByteDropTable0`**: Broadcast bytes dropped + + ```no-highlighting + Clearable: yes + ``` + +4. **`EventReceptionTable`**: Received event counts + + ```no-highlighting + Clearable: yes + ``` + +5. **`NeighborStatusTable`**: Neighbor status table + + ```no-highlighting + Clearable: no + ``` + +6. **`QueueAggregateHistogram`**: Shows a per transponder histogram of + the number of message components contained in an single over-the-air + frame. + + ```no-highlighting + Clearable: no + ``` + +7. **`QueueFragmentHistogram`**: Shows a per transponder histogram of + the number of message components required to transmit a single packet + over-the-air. + + ```no-highlighting + Clearable: no + ``` + +8. **`QueueStatusTable`**: Shows for each Transponder queue the number + of packets enqueued, dequeued, dropped due to queue overflow + (enqueue), dropped due to too big, (dequeue), depth, and high water + mark. + + ```no-highlighting + Clearable: no + ``` + +9. **`TransponderStatusExTable`**: Transponder status extented table + + ```no-highlighting + Clearable: no + ``` + +10. **`TransponderStatusTable`**: Transponder status table + + ```no-highlighting + Clearable: no + ``` + +11. **`TxSlotStatusTable`**: Shows the number of Tx slot opportunities + per transponder that were valid or missed based on slot timing + deadlines + + ```no-highlighting + Clearable: no + ``` + +12. **`UnicastByteAcceptTable0`**: Unicast bytes accepted + + ```no-highlighting + Clearable: yes + ``` + +13. **`UnicastByteDropTable0`**: Unicast bytes dropped + + ```no-highlighting + Clearable: yes + ``` + + + +## Examples + +This guide includes two Bent Pipe examples: + +1. `bentpipe-01`: A two node example where both nodes use a single + transponder in `process` mode. + +2. `bentpipe-02`: A three node example where two ground stations, each + with a single transponder in `process` mode, communicate through a + satellite with three transponders in `ubend` mode. + +### bentpipe-01 + +![](images/auto-generated-topology-bentpipe-01.png){: width="65%"; .centered} +

    bentpipe-01 experiment components


    + +The `bentpipe-01` example contains two ground nodes, each with a host +hanging off their respective `lan0` interface. Both nodes use a single +transponder in `process` mode. + +All physical layers are configured to use the `precomputed` propagation +model and `emaneeventservice` publishes [`PathlossEvents`](events#pathlossevent) +using the values in `pathloss.eel`. + +```text +0.0 nem:1 pathloss nem:2,87.0 +``` +

    emane-guide/examples/bentpipe-01/pathloss.eel


    + +This experiment illustrates the versatility of the Bent Pipe model in +`process` mode, allowing its use in a similar fashion as you would the + [RF Pipe](rf-pipe-radio-model#rf-pipe-radio-model) radio model. + +![](images/auto-generated-run-bentpipe-01.png){: width="75%"; .centered} + +With `emane-guide/examples/bentpipe-01` running, we can query `node-1` to +take a look at its transponder configuration. + +```text +$ emanesh node-1 get table nems mac TransponderStatusTable TransponderStatusExTable AntennaStatusTable +nem 1 mac AntennaStatusTable +| Index | Profile | Bandwidth | Rx Frequency | Fixed Gain | Azimuth | Elevation | Mask | +| 0 | NA | 150000000 | 29910000000 | 0.5 | NA | NA | 0 | + +nem 1 mac TransponderStatusExTable +| Idx | Tx U_Delay | Tx Slots/Frame | Tx Slot Size | MTU | +| 0 | 0 | 0 | 0 | 2048 | + +nem 1 mac TransponderStatusTable +|Idx|Rx Hz |Rx Bw |Rx Ant|Rx Enable|Action |Tx Hz |Tx Bw |Tx Bps |Tx Ant|Tx dBm|Tx Enable| +|0 |29910000000|150000000|0 |on |process|29910000000|150000000|200000000|0 |0.0 |on | +``` + +From these tables we see that `node-1` has an ideal omni antenna with +a fixed gain of 0.5 dBi using the default spectral mask; a single +transponder tuned to transmit and receive at 29.910 GHz with both a +transmit and receive bandwidth of 150 MHz; receives and transmits +using the same antenna; uses no-protocol channel access, and is +configured in `process` mode. Querying `node-2` will show similar +configuration. + +We can verify connectivity between the attached `lan0` hosts using `ping`: + +```text +$ ssh host-1 ping -R -c 5 host-2-lan +PING host-2-lan (10.98.2.2) 56(124) bytes of data. +64 bytes from host-2-lan (10.98.2.2): icmp_seq=1 ttl=62 time=1.23 ms +RR: host-1-lan (10.98.1.2) + radio-1 (10.100.0.1) + radio-2-lan (10.98.2.1) + host-2-lan (10.98.2.2) + host-2-lan (10.98.2.2) + radio-2 (10.100.0.2) + radio-1-lan (10.98.1.1) + host-1-lan (10.98.1.2) + +64 bytes from host-2-lan (10.98.2.2): icmp_seq=2 ttl=62 time=2.23 ms (same route) +64 bytes from host-2-lan (10.98.2.2): icmp_seq=3 ttl=62 time=2.33 ms (same route) +64 bytes from host-2-lan (10.98.2.2): icmp_seq=4 ttl=62 time=2.15 ms (same route) +64 bytes from host-2-lan (10.98.2.2): icmp_seq=5 ttl=62 time=2.18 ms (same route) + +--- host-2-lan ping statistics --- +5 packets transmitted, 5 received, 0% packet loss, time 4006ms +rtt min/avg/max/mdev = 1.231/2.023/2.325/0.400 ms +``` + + +### bentpipe-02 + +![](images/auto-generated-topology-bentpipe-02.png){: width="65%"; .centered} +

    bentpipe-02 experiment components


    + +The `bentpipe-02` example experiment contains two ground nodes, each +with a host hanging off their respective `lan0` interface, and one +satellite node. + +The ground nodes have a single transponder, with `node-1` using TDMA +channel access and `node-3` using no-protocol channel access. The +satellite node has three transponders and three antennas. *Transponder +0* uses a profile defined omni antenna, and *transponder 1* and +*transponder 2* both make use of the other two directional antennas, +where one antenna points at `node-1` and the other at `node-3`. All +satellite transponders use no-protocol channel access. + +All physical layers are configured to use the `freespace` propagation +model and `emaneeventservice` publishes [`LocationEvents`](events#locationevent) +using the locations in `locations.eel`. + +```text +# Carl Sagan final resting place +0.0 nem:1 location gps 42.4563980,-76.4930115,10.0 + +# satellite: somewhere over midwest USA +0.0 nem:2 location gps 46.349795,-100.219587,35786000.0 + +# area 51 +0.0 nem:3 location gps 37.274043,-115.799030,10.0 +``` +

    emane-guide/examples/bentpipe-02/locations.eel


    + +![](images/auto-generated-run-bentpipe-02.png){: width="75%"; .centered} + +With `emane-guide/examples/bentpipe-02` running, we can query `node-2` to +take a look at its transponder configuration. + +```text +$ emanesh node-2 get table nems mac TransponderStatusTable TransponderStatusExTable AntennaStatusTable +nem 2 mac AntennaStatusTable +| Index | Profile | Bandwidth | Rx Frequency | Fixed Gain | Azimuth | Elevation | Mask | +| 0 | 2 | 150000000 | 29910000000 | NA | 0.0 | 0.0 | 0 | +| 1 | 1 | 150000000 | 29745000000 | NA | 94.34439424144891 | -86.98230090133954 | 0 | +| 2 | 1 | 150000000 | 29580000000 | NA | 237.5217814216051 | -87.42647720511944 | 0 | + +nem 2 mac TransponderStatusExTable +| Idx | Tx U_Delay | Tx Slots/Frame | Tx Slot Size | MTU | +| 0 | 0 | 0 | 0 | 2048 | +| 1 | 0 | 0 | 0 | 2048 | +| 2 | 0 | 0 | 0 | 2048 | + +nem 2 mac TransponderStatusTable +|Idx|Rx Hz |Rx Bw |Rx Ant|Rx Enable|Action|Tx Hz |Tx Bw |Tx Bps |Tx Ant|Tx dBm|Tx Enable| +|0 |29910000000|150000000|0 |on |ubend |20175000000|150000000|100000000|0 |54.0 |on | +|1 |29745000000|150000000|1 |on |ubend |20340000000|150000000|100000000|2 |54.0 |on | +|2 |29580000000|150000000|2 |on |ubend |20505000000|150000000|100000000|1 |54.0 |on | +``` + +From these three tables we see that `node-2` has three antennas, all +of which are profile defined and use the default spectral mask; three +transponders in `ubend` mode, where *transponder 0* uses *antenna 0* +for receive and transmit, *transponder 1* receives on *antenna 1* and +transmits on *antenna 2*, and *transponder 2* receives on *antenna 2* +and transmits on *antenna 1*; and all transponders use no-protocol +channel access. + +The satellite node, `node-2`, does not have an attached host. Any +over-the-air message it receives on a transponder will be relayed +(*bent*) back over-the-air using the transponder's associated transmit +antenna. + +Using `ping` to verify connectivity the same way we did in the +`bentpipe-01` example shows a less than complete topology picture due +to the fact that the relay occurs in the radio model not `node-2`'s +kernel space, so route records for `node-2` are not added to the ICMP +messages. + +```text +$ ssh host-1 ping -R -c 5 host-3-lan +PING host-3-lan (10.98.3.2) 56(124) bytes of data. +64 bytes from host-3-lan (10.98.3.2): icmp_seq=1 ttl=62 time=967 ms +RR: host-1-lan (10.98.1.2) + radio-1 (10.100.0.1) + radio-3-lan (10.98.3.1) + host-3-lan (10.98.3.2) + host-3-lan (10.98.3.2) + radio-3 (10.100.0.3) + radio-1-lan (10.98.1.1) + host-1-lan (10.98.1.2) + +64 bytes from host-3-lan (10.98.3.2): icmp_seq=2 ttl=62 time=484 ms (same route) +64 bytes from host-3-lan (10.98.3.2): icmp_seq=3 ttl=62 time=482 ms (same route) +64 bytes from host-3-lan (10.98.3.2): icmp_seq=4 ttl=62 time=484 ms (same route) +64 bytes from host-3-lan (10.98.3.2): icmp_seq=5 ttl=62 time=483 ms (same route) + +--- host-3-lan ping statistics --- +5 packets transmitted, 5 received, 0% packet loss, time 4002ms +rtt min/avg/max/mdev = 482.364/580.068/966.982/193.458 ms +``` + +We can verify the topology using the `NeighborStatusTable` for all 3 nodes. + +```text +$ for i in $(seq 1 3); do emanesh node-$i get table nems mac NeighborStatusTable; done +nem 1 mac NeighborStatusTable +|NEM|Transponder|SINR_wma |NF_wma |Samples|SINR_avg |NF_avg |Timestamp | +|2 |0 |11.29777283855799|-118.63908740944319|7 |11.29777283855799|-118.63908740944318|1686943938679630| + +nem 2 mac NeighborStatusTable +|NEM|Transponder|SINR_wma |NF_wma |Samples|SINR_avg |NF_avg |Timestamp | +|1 |1 |8.066688845808386|-118.63908740944319|7 |8.066688845808386|-118.63908740944318|1686943938801503| +|3 |2 |8.137849777137916|-118.63908740944319|7 |8.137849777137916|-118.63908740944318|1686943938558921| + +nem 3 mac NeighborStatusTable +|NEM|Transponder|SINR_wma |NF_wma |Samples|SINR_avg |NF_avg |Timestamp | +|2 |0 |11.390794198620853|-118.63908740944319|7 |11.390794198620853|-118.63908740944318|1686943938921888| +``` + +Taking a look at `node-2`, we see that it sees `node-1` on +*transponder 1* and `node-3` on *transponder 2*. Both `node-1` and +`node-2` see `node-3` on their respective *transponder 0*. + +We can use `emanesh` and change the frequencies of all three nodes in +order to switch the `ubend` on node-2 to *transponder 0*, which uses +the profile defined omni antenna, *antenna 0*. + +```text +$ emanesh node-1 set config nems mac \ + transponder.receive.frequency=0:29.910G \ + transponder.transmit.frequency=0:29.910G +nem 1 mac configuration updated + +$ emanesh node-2 set config nems mac \ + transponder.receive.frequency="0:29.910G,1:29.745G,2:29.580G" \ + transponder.transmit.frequency="0:29.910G,1:20.340G,2:20.505G" +nem 2 mac configuration updated + +$ emanesh node-3 set config nems mac \ + transponder.receive.frequency=0:29.910G \ + transponder.transmit.frequency=0:29.910G +nem 3 mac configuration updated +``` + +Notice how even though we only want to change the frequency of +`node-2`'s *transponder 0*, we still have to specify values for all +three transponders since `transponder.receive.frequency` and +`transponder.transmit.frequency` are configuration parameters that +hold multiple values. + +Similarly, if we want to change the antenna associated with `node-2`'s +*transponder 0* to an ideal omni, we need to specify the other antenna +defines still in use: + +```text +$ emanesh node-2 set config nems mac + antenna.defines="0:omni;24.25;0,1:1;94.34439424144891;-86.98230090133954;0,2:1;237.5217814216051;-87.42647720511944;0" +``` + +Looking at `node-2`'s `AntennaStatusTable` and `NeighborStatusTable`, +we can see that *antenna 0* is now an ideal omni indicated by the `NA` +in the `Profile` column, and `node-2` sees `node-1` and `node-3` via +*transponder 0*. + +```text +$ emanesh node-2 get table nems mac NeighborStatusTable AntennaStatusTable +nem 2 mac AntennaStatusTable +| Index | Profile | Bandwidth | Rx Frequency | Fixed Gain | Azimuth | Elevation | Mask | +| 0 | NA | 150000000 | 29910000000 | 24.25 | NA | NA | 0 | +| 1 | 1 | 150000000 | 29745000000 | NA | 94.34439424144891 | -86.98230090133954 | 0 | +| 2 | 1 | 150000000 | 29580000000 | NA | 237.5217814216051 | -87.42647720511944 | 0 | + +nem 2 mac NeighborStatusTable +|NEM| Transponder| SINR_wma | NF_wma | Samples| SINR_avg | NF_avg | Timestamp | +|1 | 0 | 8.018640050401672| -118.63908740944318| 908 | 8.018640050401698| -118.63908740944602| 1687204399299503| +|1 | 1 | 8.066688845808386| -118.63908740944318| 38 | 8.06668884580838 | -118.63908740944319| 1687203545323503| +|3 | 0 | 8.041484909729036| -118.63908740944318| 909 | 8.041484909728947| -118.63908740944602| 1687204400057385| +|3 | 2 | 8.137849777137916| -118.63908740944318| 38 | 8.137849777137921| -118.63908740944319| 1687203545081237| +``` + +The `NeighborStatusTable` does not delete entries. Use the `Timestamp` +column value to determine an entry has gone stale, i.e. not updated in +some time. diff --git a/guide/site/comm-effect-utility-model.md b/guide/site/comm-effect-utility-model.md new file mode 100644 index 0000000..28bce32 --- /dev/null +++ b/guide/site/comm-effect-utility-model.md @@ -0,0 +1,788 @@ +--- +layout: default +title: Comm Effect Utility Model +nav_order: 14 +permalink: /comm-effect-utility-model +--- + + +# Comm Effect Utility Model + +The Comm Effect Utility Model allows emane to function and an IPv4 +network impairment tool. + +## Features + +The Comm Effect utility model provides the following features: +[Network Impairments](#network-impairments) and [Static +Filters](#static-filters). + +### Network Impairments + +The Comm Effect Utility Model supports the following network +impairments controlled via [`CommEffectEvents`](comm-effect-utility-model#commeffectevent) or +[static filter](#static-filters): + +1. Loss: The percentage of packets that will be dropped utilizing a + uniform distribution model. + +2. Latency: The average delay for a packet to traverse the + network. The total delay is composed of a fixed and variable + component. The fixed amount of the delay is defined via a latency + parameter and the variable amount via a jitter parameter. Both + parameters are defined via [`CommEffectEvent`](comm-effect-utility-model#commeffectevent) + or [static filter](#static-filters). The jitter component to + latency is determined randomly by applying a value pulled from a + uniform random distribution of +/- the jitter parameter value. The + randomly generated jitter value is then added to the fixed latency + to determine the total delay. + +3. Duplicates: The percentage of packets that will be duplicated at + the receiver. + +4. Unicast Bitrate: The bitrate for packets destined for the *NEM* or + handled in promiscuous mode. + +5. Broadcast Bitrate: The bitrate for packets destined for the *NEM* + broadcast address. + +## Static Filters + +The Comm Effect Utility Model supports the ability to define static +filters to control network impairments. Filters are defined via an XML +configuration file and have the following characteristics: + +1. The filter file used by a given *NEM* within the emulation is + identified at initialization time via the *NEM*'s `filterfile` + configuration parameter. Each filter defined in the `filterfile` is + characterized by one or more target elements and a single effect + element. + +2. Currently only IPv4 Ethernet packet filter targets are + supported. The target element has the following format within the + filter XML file: + + ```xml + + + + + + + ``` + +3. All of the `` attributes are optional: + + 1. `src`: Source address in IPv4 header. Valid range 0.0.0.0 - + 255.255.255.255, where 0.0.0.0 implies don't care. + + 2. `dst`: Destination address in IPv4 header. Valid range 0.0.0.0 - + 255.255.255.255, where 0.0.0.0 implies don't care. + + 3. `len`: Total length in IPv4 header. Valid range 0 - 65535, where + 0 implies don't care. + + 4. `ttl`: Time to live in IPv4 header. Valid range 0 - 255, where 0 + implies don't care. + + 5. `tos`: Type of Service/Differentiated Services in IPv4 + header. Valid range 0-255, where 0 implies don't care. + + In addition, a filter can be defined via the IPv4 protocol field in + the header. The communication protocol can be defined by name or + numerical value. Currently, udp is the only protocol that can be + defined by name. All other protocols must be identified via + numerical value. + + 1. ``: Used to identify UDP protocol by name. When using this + mechanism to define the udp protocol, sport and/or dport can + also be identified for the udp protocol header. The valid range + for sport and dport are 0 to 65535, where 0 implies don't care. + + ```xml + + + + + + ``` + + 2. ``: Used when identifying the communication protocol + based on numerical value. The type attribute identifies the + numerical value for the IPv4 communication protocol with a + valid range from 0 to 255. + + ```xml + + + + + + ``` + +4. Each filter is assigned static network impairments (loss, latency, + jitter, duplicates, unicastbitrate and broadcastbitrate). + + ```xml + + 20 + 0 + + + 1024 + 8096 + + ``` + + The effect element has the following format: + + 1. ``: The loss 0 to 100 in percentage to be applied to the + packets that match the associated target. + + 2. ``: The duplicates 0 to 100 in percentage to be applied + to the packets that match the associated target. + + 3. ``: The fixed average delay to be applied to the packets + that match the associated target. + + *sec*: Seconds have a valid range 0 to 65535. + *usec*: Microseconds have a valid range 0 to 999999. + + 4. ``: The random variation applied to the packets that match + the associated target. + + *sec*: Seconds have a valid range 0 to 65535. + *usec*: Microseconds have a valid range 0 to 999999. + + 5. ``: The bitrate (bps) applied to packets + addressed to the *NEM* or received in promiscuous mode matching + the associated target. The bitrate has a valid range from 0, + meaning unused, to max unsigned 64 bit number. + + 6. ``: The bitrate (bps) applied to packets + addressed to the *NEM* broadcast address matching the associated + target. The bitrate has a valid range from 0, meaning unused, to + max unsigned 64 bit number. + + The filters and their associated impairments are defined at + initialization and cannot be altered during emulation. + +6. Filter ordering determines the network impairment, and as such, + more specific filters should be defined first. Each received packet + is evaluated against the defined filters in order and the first + match determines the impairment to be applied. In the below + example, a packet as it is received by a node will be evaluated + against each of the four filters (OSPF, TOS, UDP, DEFAULT) in order + and the respective effect will be applied based on the first + match. + + It should be noted that the inclusion of the DEFAULT filter should + only be used when [`CommEffectEvents`](comm-effect-utility-model#commeffectevent) + are not being utilized since the filters take precedence. When + filters are used in conjunction with [`CommEffectEvents`](comm-effect-utility-model#commeffectevent), the event driven impairments serve + as the default effect for all packets that do not match a filter + target. + + ```xml + + + + OSPF Packets + + + + + + + 0 + 0 + + + + + + TOS (Type of Service) = 192 + + + + + + 10 + 150 + + + + + + UDP Multicast (destination address = 224.1.2.3 and destination port = 12345) + + + + + + + 20 + 0 + + + + + + DEFAULT: All Other Packets + + + 40 + 30 + + + 8096 + 8096 + + + + ``` + +## `CommEffectEvent` + +```protobuf +package EMANEMessage; +option optimize_for = SPEED; +message CommEffectEvent +{ + message CommEffect + { + required uint32 nemId = 1; + required float latencySeconds = 2; + required float jitterSeconds = 3; + required float probabilityLoss = 4; + required float probabilityDuplicate = 5; + required uint64 unicastBitRatebps = 6; + required uint64 broadcastBitRatebps = 7; + } + repeated CommEffect commEffects = 1; +} +``` +

    emane/src/libemane/commeffectevent.proto


    + +## NEM XML Structure + +The Comm Effect utility model is not a radio model and does not use a +physical layer. It is a special class of plugin called a +*shim*. *Shims* follow all the same paradigms found in [EMANE Paradigms](paradigms#emane-paradigms), and it is possible to build an *NEM* +that contains one or more shims. In practice, this is usually never +necessary. + +The *NEM* XML definition for a Comm Effect utility model instance only +contains a `` and `` element. In order to be +accepted by the emulator as valid, the `` `type` attribute must +be set to `unstructured` in order to relax checks that aim to prevent +incorrect *NEM* configuration. + +```xml + + + + + +``` +

    emane-guide/examples/commeffect-01/node-1/emane-commeffect-nem.xml


    + +## Configuration + +1. **`defaultconnectivitymode`**: Defines the default connectivity + mode for Comm Effects. When set to on, full connectivity will be + engaged until a valid Comm Effect event is received. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: true + ``` + +2. **`enablepromiscuousmode`**: Defines whether promiscuous mode is + enabled or not. If promiscuous mode is enabled, all received packets + (intended for the given node or not) that pass the receive test are + sent upstream to the transport. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + +3. **`filterfile`**: Defines the absolute URI of the effects filter + XML file which contains static filters to control network impairments. + + ```no-highlighting + Default: no Required: no Modifiable: no + Type: string Occurrs: [1,1] + ``` + +4. **`groupid`**: Defines the Comm Effect Group Id. Only NEMs in the + same Comm Effect Group can communicate. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint32 Occurrs: [1,1] Range: [0,4294967295] + Values: 0 + ``` + +5. **`receivebufferperiod`**: Defines the max buffering time in + seconds for packets received from an NEM. The buffering interval for a + given packet is determined by the bitrate for the source NEM and the + packet size. Packets are then placed in a timed queue based on this + interval and all packets that would cause the receive buffer period to + be exceeded are discarded. A value of 0.0 disables the limit and + allows all received packets to stack up in the queue. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: double Occurrs: [1,1] Range: [min_double,max_double] + Values: 1.000000 + ``` + + + +## Statistics + +1. **`avgDownstreamProcessingDelay0`**: Average downstream processing + delay + + ```no-highlighting + Type: float Clearable: yes + ``` + +2. **`avgProcessAPIQueueDepth`**: Average API queue depth for a + processUpstreamPacket, processUpstreamControl, + processDownstreamPacket, processDownstreamControl, processEvent and + processTimedEvent. + + ```no-highlighting + Type: double Clearable: yes + ``` + +3. **`avgProcessAPIQueueWait`**: Average API queue wait for a + processUpstreamPacket, processUpstreamControl, + processDownstreamPacket, processDownstreamControl, processEvent and + processTimedEvent in microseconds. + + ```no-highlighting + Type: double Clearable: yes + ``` + +4. **`avgTimedEventLatency`**: Average latency between the scheduled + timer expiration and the actual firing over the requested duration. + + ```no-highlighting + Type: double Clearable: yes + ``` + +5. **`avgTimedEventLatencyRatio`**: Average ratio of the delta between + the scheduled timer expiration and the actual firing over the + requested duration. An average ratio approaching 1 indicates that + timer latencies are large in comparison to the requested durations. + + ```no-highlighting + Type: double Clearable: yes + ``` + +6. **`avgUpstreamProcessingDelay0`**: Average upstream processing + delay + + ```no-highlighting + Type: float Clearable: yes + ``` + +7. **`numAPIQueued`**: The number of queued API events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +8. **`numDownstreamBytesBroadcastGenerated0`**: Number of layer + generated downstream broadcast bytes + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +9. **`numDownstreamBytesBroadcastRx0`**: Number of downstream + broadcast bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +10. **`numDownstreamBytesBroadcastTx0`**: Number of downstream + broadcast bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +11. **`numDownstreamBytesUnicastGenerated0`**: Number of layer + generated downstream unicast bytes + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +12. **`numDownstreamBytesUnicastRx0`**: Number of downstream unicast + bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +13. **`numDownstreamBytesUnicastTx0`**: Number of downstream unicast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +14. **`numDownstreamPacketsBroadcastDrop0`**: Number of downstream + broadcast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +15. **`numDownstreamPacketsBroadcastGenerated0`**: Number of layer + generated downstream broadcast packets + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +16. **`numDownstreamPacketsBroadcastRx0`**: Number of downstream + broadcast packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +17. **`numDownstreamPacketsBroadcastTx0`**: Number of downstream + broadcast packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +18. **`numDownstreamPacketsUnicastDrop0`**: Number of downstream + unicast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +19. **`numDownstreamPacketsUnicastGenerated0`**: Number of layer + generated downstream unicast packets + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +20. **`numDownstreamPacketsUnicastRx0`**: Number of downstream unicast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +21. **`numDownstreamPacketsUnicastTx0`**: Number of downstream unicast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +22. **`numUpstreamBytesBroadcastRx0`**: Number of upstream broadcast + bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +23. **`numUpstreamBytesBroadcastTx0`**: Number of updtream broadcast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +24. **`numUpstreamBytesUnicastRx0`**: Number upstream unicast bytes + received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +25. **`numUpstreamBytesUnicastTx0`**: Number of upstream unicast bytes + transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +26. **`numUpstreamPacketsBroadcastDrop0`**: Number of upstream + broadcast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +27. **`numUpstreamPacketsBroadcastRx0`**: Number of upstream broadcast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +28. **`numUpstreamPacketsBroadcastTx0`**: Number of upstream broadcast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +29. **`numUpstreamPacketsUnicastDrop0`**: Number of upstream unicast + packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +30. **`numUpstreamPacketsUnicastRx0`**: Number upstream unicast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +31. **`numUpstreamPacketsUnicastTx0`**: Number of upstream unicast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +32. **`processedConfiguration`**: The number of processed + configuration. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +33. **`processedDownstreamControl`**: The number of processed + downstream control. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +34. **`processedDownstreamPackets`**: The number of processed + downstream packets. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +35. **`processedEvents`**: The number of processed events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +36. **`processedTimedEvents`**: The number of processed timed events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +37. **`processedUpstreamControl`**: The number of processed upstream + control. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +38. **`processedUpstreamPackets`**: The number of processed upstream + packets. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + + + +## Statistic Tables + +1. **`BroadcastPacketAcceptTable0`**: Broadcast packets accepted + + ```no-highlighting + Clearable: yes + ``` + +2. **`BroadcastPacketDropTable0`**: Broadcast packets dropped by + reason code + + ```no-highlighting + Clearable: yes + ``` + +3. **`EventReceptionTable`**: Received event counts + + ```no-highlighting + Clearable: yes + ``` + +4. **`UnicastPacketAcceptTable0`**: Unicast packets accepted + + ```no-highlighting + Clearable: yes + ``` + +5. **`UnicastPacketDropTable0`**: Unicast packets dropped by reason + code + + ```no-highlighting + Clearable: yes + ``` + + + +## Examples + +This guide includes the IEEE 802.11abg example: + +1. `commeffect-01`: A five host example where each host is configured +on a flat 10.98.0.0/16 network and connected via `lan0` to an *NEM* +using a [Raw Transport](raw-transport#raw-transport). + +### commeffect-01 + + +![](images/auto-generated-topology-commeffect-01.png){: width="65%"; .centered} +

    commeffect-01 experiment components


    + + +The `commeffect-01` example experiment contains five hosts configured +on a flat 10.98.0.0/16 network and connected via `lan0` to an *NEM* +using a [Raw Transport](raw-transport#raw-transport). This configuration illustrates how you +can connect physical or virtual network appliances to *EMANE*, in a +manner in which the appliance is unaware of the emulator's presence, +whether using a physical interface, tunnel, vif, etc. Here, the +network appliances are LXCs but they can just as easily be physical +devices connected to an *EMANE* server. + +Each host has a `lan0` interface that is monitored by a host +corresponding *NEM*. All outbound host `lan0` traffic is routed into +the emulation and if successfully received by the *NEM* associated +with the destination(s), will be written the destination(s)'s +corresponding `lan0`. + +All Comm Effect utility model instance are initialized with network +impairments via the `emaneeventservice` which publishes [`CommEffectEvents`](comm-effect-utility-model#commeffectevent) using values in `scenario.eel`. + +```text +0.0 nem:1 commeffect nem:2,0,0,0,0,1000000,1000000 +0.0 nem:1 commeffect nem:3,0,0,0,0,1000000,1000000 +0.0 nem:1 commeffect nem:4,0,0,0,0,1000000,1000000 +0.0 nem:1 commeffect nem:5,0,0,0,0,1000000,1000000 + +0.0 nem:2 commeffect nem:1,0,0,0,0,1000000,1000000 +0.0 nem:2 commeffect nem:3,0,0,0,0,1000000,1000000 +0.0 nem:2 commeffect nem:4,0,0,0,0,1000000,1000000 +0.0 nem:2 commeffect nem:5,0,0,0,0,1000000,1000000 + +0.0 nem:3 commeffect nem:1,0,0,0,0,1000000,1000000 +0.0 nem:3 commeffect nem:2,0,0,0,0,1000000,1000000 +0.0 nem:3 commeffect nem:4,0,0,0,0,1000000,1000000 +0.0 nem:3 commeffect nem:5,0,0,0,0,1000000,1000000 + +0.0 nem:4 commeffect nem:1,0,0,0,0,1000000,1000000 +0.0 nem:4 commeffect nem:2,0,0,0,0,1000000,1000000 +0.0 nem:4 commeffect nem:3,0,0,0,0,1000000,1000000 +0.0 nem:4 commeffect nem:5,0,0,0,0,1000000,1000000 + +0.0 nem:5 commeffect nem:1,0,0,0,0,1000000,1000000 +0.0 nem:5 commeffect nem:2,0,0,0,0,1000000,1000000 +0.0 nem:5 commeffect nem:3,0,0,0,0,1000000,1000000 +0.0 nem:5 commeffect nem:4,0,0,0,0,1000000,1000000 +``` +

    emane-guide/examples/commeffect-01/host/scenario.eel


    + +![](images/auto-generated-run-commeffect-01.png){: width="75%"; .centered} + +All hosts are configured similarly, taking a look at `host-1` +interfaces we can see the `lan0` interface is configured as +10.98.1.2/16. + +```text +$ ssh host-1 ip addr show dev lan0 +3: lan0@if102: mtu 1500 qdisc noqueue state UP group default qlen 1000 + link/ether 7e:9a:ba:30:f0:90 brd ff:ff:ff:ff:ff:ff link-netnsid 0 + inet 10.98.1.2/16 brd 10.98.255.255 scope global lan0 + valid_lft forever preferred_lft forever + inet6 fe80::7c9a:baff:fe30:f090/64 scope link + valid_lft forever preferred_lft forever +``` + +Looking at `host-1` routes shows a flat network which is different +than the host configuration in previous experiments which used a +tiered topology with radio nodes acting as gateways for hosts. + +```text +$ ssh host-1 ip route show +10.98.0.0/16 dev lan0 proto kernel scope link src 10.98.1.2 +10.99.0.0/16 dev backchan0 proto kernel scope link src 10.99.1.1 +``` + +Pinging from `host-1` to all other hosts over the `lan0` interface +shows 100% completion and minimal latency. + +```text +$ ssh host-1 fping host-2-lan host-3-lan host-4-lan host-5-lan -C 2 +host-2-lan : [0], 64 bytes, 2.42 ms (2.42 avg, 0% loss) +host-3-lan : [0], 64 bytes, 2.70 ms (2.70 avg, 0% loss) +host-4-lan : [0], 64 bytes, 2.61 ms (2.61 avg, 0% loss) +host-5-lan : [0], 64 bytes, 2.70 ms (2.70 avg, 0% loss) +host-2-lan : [1], 64 bytes, 3.37 ms (2.90 avg, 0% loss) +host-3-lan : [1], 64 bytes, 3.35 ms (3.03 avg, 0% loss) +host-4-lan : [1], 64 bytes, 3.28 ms (2.95 avg, 0% loss) +host-5-lan : [1], 64 bytes, 3.11 ms (2.90 avg, 0% loss) + +host-2-lan : 2.42 3.37 +host-3-lan : 2.70 3.35 +host-4-lan : 2.61 3.28 +host-5-lan : 2.70 3.11 +``` + +Using the `emaneevent-commeffect` utility, we can set the latency of +all links to 100ms. + +```text +$ emaneevent-commeffect 1:5 latency=.1 -i letce0 +``` + +Reissuing the same `ping` command verifies 100ms of latency in each +directions. + +```text +$ ssh host-1 fping host-2-lan host-3-lan host-4-lan host-5-lan -C 2 +host-2-lan : [0], 64 bytes, 201 ms (201 avg, 0% loss) +host-3-lan : [0], 64 bytes, 201 ms (201 avg, 0% loss) +host-4-lan : [0], 64 bytes, 201 ms (201 avg, 0% loss) +host-5-lan : [0], 64 bytes, 201 ms (201 avg, 0% loss) +host-2-lan : [1], 64 bytes, 202 ms (202 avg, 0% loss) +host-3-lan : [1], 64 bytes, 202 ms (201 avg, 0% loss) +host-4-lan : [1], 64 bytes, 201 ms (201 avg, 0% loss) +host-5-lan : [1], 64 bytes, 201 ms (201 avg, 0% loss) + +host-2-lan : 201 202 +host-3-lan : 201 202 +host-4-lan : 201 201 +host-5-lan : 201 201 +``` + diff --git a/guide/site/control-messages.md b/guide/site/control-messages.md new file mode 100644 index 0000000..0f7654e --- /dev/null +++ b/guide/site/control-messages.md @@ -0,0 +1,736 @@ +--- +layout: default +title: Control Messages +nav_order: 7 +permalink: /control-messages +--- + + +# Control Messages + +![](images/auto-generated-incomplete-chapter.png){: width="75%"; .centered} + +## `AntennaProfileControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class AntennaProfileControlMessage : public ControlMessage + { + public: + static + AntennaProfileControlMessage * create(AntennaProfileId id, + double dAntennaAzimuthDegrees, + double dAntennaElevationDegrees); + + AntennaProfileControlMessage * clone() const override; + + ~AntennaProfileControlMessage(); + + AntennaProfileId getAntennaProfileId() const; + + double getAntennaAzimuthDegrees() const; + + double getAntennaElevationDegrees() const; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSGE_ANTENNA_PROFILE}; + + }; + } +} +``` +

    emane/include/emane/controls/antennaprofilecontrolmessage.h


    + + + +## `FlowControlControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class FlowControlControlMessage : public ControlMessage + { + public: + static + FlowControlControlMessage * create(const Serialization & serialization); + + static + FlowControlControlMessage * create(std::uint16_t u16Tokens); + + FlowControlControlMessage * clone() const override; + + ~FlowControlControlMessage(); + + std::uint16_t getTokens() const; + + Serialization serialize() const override; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSGE_FLOW_CONTROL}; + + }; + } +} +``` +

    emane/include/emane/controls/flowcontrolcontrolmessage.h


    + + +## `FrequencyControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class FrequencyControlMessage : public ControlMessage + { + public: + static + FrequencyControlMessage * create(std::uint64_t u64BandwidthHz, + const FrequencySegments & frequencySegments); + + FrequencyControlMessage * clone() const override; + + ~FrequencyControlMessage(); + + const FrequencySegments & getFrequencySegments() const; + + std::uint64_t getBandwidthHz() const; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSGE_FREQUENCY}; + + }; + } +} +``` +

    emane/include/emane/controls/frequencycontrolmessage.h


    + + +## `FrequencyOfInterestControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class FrequencyOfInterestControlMessage : public ControlMessage + { + public: + static + FrequencyOfInterestControlMessage * create(std::uint64_t u64BandwidthHz, + const FrequencySet & frequencySet); + + FrequencyOfInterestControlMessage * clone() const override; + + ~FrequencyOfInterestControlMessage(); + + const FrequencySet & getFrequencySet() const; + + std::uint64_t getBandwidthHz() const; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSGE_FREQUENCY_OF_INTEREST}; + + }; + } +} +``` +

    emane/include/emane/controls/frequencyofinterestcontrolmessage.h


    + + + +## `MIMOReceivePropertiesControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class MIMOReceivePropertiesControlMessage : public ControlMessage + { + public: + static + MIMOReceivePropertiesControlMessage * create(const TimePoint & txTime, + const Microseconds & propagation, + const AntennaReceiveInfos & antennaReceiveInfos, + const DopplerShifts & dopplerShifts); + + static + MIMOReceivePropertiesControlMessage * create(const TimePoint & txTime, + const Microseconds & propagation, + AntennaReceiveInfos && antennaReceiveInfos, + DopplerShifts && dopplerShifts); + MIMOReceivePropertiesControlMessage * clone() const override; + + ~MIMOReceivePropertiesControlMessage(); + + const TimePoint & getTxTime() const; + + const Microseconds & getPropagationDelay() const; + + const AntennaReceiveInfos & getAntennaReceiveInfos() const; + + const DopplerShifts & getDopplerShifts() const; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSGE_MIMO_RECEIVE_PROPERTIES}; + + }; + } +} +``` +

    emane/include/emane/controls/mimoreceivepropertiescontrolmessage.h


    + + +## `MIMOTransmitPropertiesControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class MIMOTransmitPropertiesControlMessage : public ControlMessage + { + public: + static + MIMOTransmitPropertiesControlMessage * create(const FrequencyGroups & frequencyGroups, + const Antennas & transmitAntennas); + + static + MIMOTransmitPropertiesControlMessage * create(FrequencyGroups && frequencyGroups, + const Antennas & transmitAntennas); + + static + MIMOTransmitPropertiesControlMessage * create(FrequencyGroups && frequencyGroups, + Antennas && transmitAntennas); + + MIMOTransmitPropertiesControlMessage * clone() const override; + + ~MIMOTransmitPropertiesControlMessage(); + + const FrequencyGroups & getFrequencyGroups() const; + + const Antennas & getTransmitAntennas() const; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSGE_MIMO_TRANSMIT_PROPERTIES}; + + }; + } +} +``` +

    emane/include/emane/controls/mimotransmitpropertiescontrolmessage.h


    + + +## `MIMOTxWhileRxInterferenceControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class MIMOTxWhileRxInterferenceControlMessage : public ControlMessage + { + public: + + using RxAntennaInterferenceMap = std::map; + + static + MIMOTxWhileRxInterferenceControlMessage * + create(const FrequencyGroups & frequencyGroups, + const RxAntennaInterferenceMap & rxAntennaSelections); + + static + MIMOTxWhileRxInterferenceControlMessage * + create(FrequencyGroups && frequencyGroups, + const RxAntennaInterferenceMap & rxAntennaSelections); + + static + MIMOTxWhileRxInterferenceControlMessage * + create(FrequencyGroups && frequencyGroups, + RxAntennaInterferenceMap && rxAntennaSelections); + + MIMOTxWhileRxInterferenceControlMessage * clone() const override; + + ~MIMOTxWhileRxInterferenceControlMessage(); + + const FrequencyGroups & getFrequencyGroups() const; + + const RxAntennaInterferenceMap & getRxAntennaInterferenceMap() const; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSGE_MIMO_TX_WHILE_RX_INTERFERENCE}; + + }; + } +} +``` +

    emane/include/emane/controls/mimotxwhilerxinterferencecontrolmessage.h


    + + + +## `OTATransmitterControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + using OTATransmitters = std::set; + + + class OTATransmitterControlMessage : public ControlMessage + { + public: + static + OTATransmitterControlMessage * create(const Serialization & serialization); + + static + OTATransmitterControlMessage * create(const OTATransmitters & transmitters); + + OTATransmitterControlMessage * clone() const override; + + ~OTATransmitterControlMessage(); + + const OTATransmitters & getOTATransmitters() const; + + std::string serialize() const override; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSGE_OTA_TRANSMITTER}; + + }; + } +} +``` +

    emane/include/emane/controls/otatransmittercontrolmessage.h


    + + +## `R2RINeighborMetricControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + + class R2RINeighborMetricControlMessage : public ControlMessage + + { + public: + static + R2RINeighborMetricControlMessage * create(const Serialization & serialization); + + static + R2RINeighborMetricControlMessage * create(const R2RINeighborMetrics & neighborMetrics); + + R2RINeighborMetricControlMessage * clone() const override; + + ~R2RINeighborMetricControlMessage(); + + const R2RINeighborMetrics & getNeighborMetrics() const; + + std::string serialize() const override; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSGE_R2RI_NEIGHBOR_METRIC}; + + }; + } +} +``` +

    emane/include/emane/controls/r2rineighbormetriccontrolmessage.h


    + + +## `R2RIQueueMetricControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class R2RIQueueMetricControlMessage : public ControlMessage + { + public: + static + R2RIQueueMetricControlMessage * create(const Serialization & serialization); + + static + R2RIQueueMetricControlMessage * create(const R2RIQueueMetrics & queueMetrics); + + R2RIQueueMetricControlMessage * clone() const override; + + ~R2RIQueueMetricControlMessage(); + + const R2RIQueueMetrics & getQueueMetrics() const; + + std::string serialize() const override; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSGE_R2RI_QUEUE_METRIC}; + + }; + } +} +``` +

    emane/include/emane/controls/r2riqueuemetriccontrolmessage.h


    + + +## `R2RISelfMetricControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class R2RISelfMetricControlMessage : public ControlMessage + { + public: + static + R2RISelfMetricControlMessage * create(const Serialization & serialization); + + static + R2RISelfMetricControlMessage * create(std::uint64_t u64BroadcastDataRatebps, + std::uint64_t u64MaxDataRatebps, + const Microseconds & reportInteral); + + R2RISelfMetricControlMessage * clone() const override; + + ~R2RISelfMetricControlMessage(); + + std::uint64_t getBroadcastDataRatebps() const; + + std::uint64_t getMaxDataRatebps() const; + + const Microseconds & getReportInterval() const; + + Serialization serialize() const override; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSGE_R2RI_SELF_METRIC}; + + }; + } +} +``` +

    emane/include/emane/controls/r2riselfmetriccontrolmessage.h


    + + +## `ReceivePropertiesControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class ReceivePropertiesControlMessage : public ControlMessage + { + public: + static + ReceivePropertiesControlMessage * create(const TimePoint & txTime, + const Microseconds & propagation, + const Microseconds & span, + double dReceiverSensitivitydBm); + + ReceivePropertiesControlMessage * clone() const override; + + ~ReceivePropertiesControlMessage(); + + TimePoint getTxTime() const; + + Microseconds getPropagationDelay() const; + + Microseconds getSpan() const; + + double getReceiverSensitivitydBm() const; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSGE_RECEIVE_PROPERTIES}; + + }; + } +} +``` +

    emane/include/emane/controls/receivepropertiescontrolmessage.h


    + + +## `RxAntennaAddControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class RxAntennaAddControlMessage : public ControlMessage + { + public: + static + RxAntennaAddControlMessage * create(const Antenna & antenna, + const FrequencySet & frequencyOfInterestSet); + + static + RxAntennaAddControlMessage * create(const Antenna & antenna, + FrequencySet && frequencyOfInterestSet); + + RxAntennaAddControlMessage * clone() const override; + + ~RxAntennaAddControlMessage(); + + const Antenna & getAntenna() const; + + const FrequencySet & getFrequencyOfInterestSet() const; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSAGE_RX_ANTENNA_ADD}; + + }; + } +} +``` +

    emane/include/emane/controls/rxantennaaddcontrolmessage.h


    + + +## `RxAntennaRemoveControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class RxAntennaRemoveControlMessage : public ControlMessage + { + public: + static + RxAntennaRemoveControlMessage * create(AntennaIndex antennaIndex); + + RxAntennaRemoveControlMessage * clone() const override; + + ~RxAntennaRemoveControlMessage(); + + AntennaIndex getAntennaIndex() const; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSAGE_RX_ANTENNA_REMOVE}; + + }; + } +} +``` +

    emane/include/emane/controls/rxantennaremovecontrolmessage.h


    + + +## `RxAntennaUpdateControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class RxAntennaUpdateControlMessage : public ControlMessage + { + public: + static + RxAntennaUpdateControlMessage * create(const Antenna & antenna); + + RxAntennaUpdateControlMessage * clone() const override; + + ~RxAntennaUpdateControlMessage(); + + const Antenna & getAntenna() const; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSAGE_RX_ANTENNA_UPDATE}; + + }; + } +} +``` +

    emane/include/emane/controls/rxantennaupdatecontrolmessage.h


    + + +## `SpectrumFilterAddControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class SpectrumFilterAddControlMessage : public ControlMessage + { + public: + static + SpectrumFilterAddControlMessage * create(FilterIndex u16FilterIndex, + AntennaIndex antennaIndex, + std::uint64_t u64FrequencyHz, + std::uint64_t u64BandwidthHz, + std::uint64_t u64SubBandBinSizeHz = 0, + FilterMatchCriterion * pFilterMatchCriterion = nullptr); + + static + SpectrumFilterAddControlMessage * create(FilterIndex u16FilterIndex, + std::uint64_t u64FrequencyHz, + std::uint64_t u64BandwidthHz, + std::uint64_t u64SubBandBinSizeHz = 0, + FilterMatchCriterion * pFilterMatchCriterion = nullptr); + + SpectrumFilterAddControlMessage * clone() const override; + + ~SpectrumFilterAddControlMessage(); + + FilterIndex getFilterIndex() const; + + AntennaIndex getAntennaIndex() const; + + std::uint64_t getBandwidthHz() const; + + std::uint64_t getFrequencyHz() const; + + const FilterMatchCriterion * getFilterMatchCriterion() const; + + std::uint64_t getSubBandBinSizeHz() const; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSGE_SPECTRUM_FILTER_ADD}; + + }; + } +} +``` +

    emane/include/emane/controls/spectrumfilteraddcontrolmessage.h


    + + +## `SpectrumFilterDataControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class SpectrumFilterDataControlMessage : public ControlMessage + { + public: + static + SpectrumFilterDataControlMessage * create(const FilterData & filterData); + + SpectrumFilterDataControlMessage * clone() const override; + + ~SpectrumFilterDataControlMessage(); + + const FilterData & getFilterData() const; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSGE_SPECTRUM_FILTER_DATA}; + + }; + } +} +``` +

    emane/include/emane/controls/spectrumfilterdatacontrolmessage.h


    + + +## `SpectrumFilterRemoveControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class SpectrumFilterRemoveControlMessage : public ControlMessage + { + public: + static + SpectrumFilterRemoveControlMessage * create(FilterIndex filterIndex, + AntennaIndex antennaIndex); + + static + SpectrumFilterRemoveControlMessage * create(FilterIndex filterIndex); + + SpectrumFilterRemoveControlMessage * clone() const override; + + ~SpectrumFilterRemoveControlMessage(); + + FilterIndex getFilterIndex() const; + + AntennaIndex getAntennaIndex() const; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSGE_SPECTRUM_FILTER_REMOVE}; + + }; + } +} +``` +

    emane/include/emane/controls/spectrumfilterremovecontrolmessage.h


    + + +## `TimestampControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class TimeStampControlMessage : public ControlMessage + { + public: + static + TimeStampControlMessage * create(const TimePoint & timestamp); + + TimeStampControlMessage * clone() const override; + + ~TimeStampControlMessage(); + + TimePoint getTimeStamp() const; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSGE_TIME_STAMP}; + + }; + } +} +``` +

    emane/include/emane/controls/timestampcontrolmessage.h


    + + +## `TransmitterControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class TransmitterControlMessage : public ControlMessage + { + public: + ~TransmitterControlMessage(); + + static + TransmitterControlMessage * create(const Transmitters & transmitters); + + TransmitterControlMessage * clone() const override; + + const Transmitters & getTransmitters() const; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSGE_TRANSMITTER}; + + }; + } +} +``` +

    emane/include/emane/controls/transmittercontrolmessage.h


    + + +## `TxWhileRxInterferenceControlMessage` + +```cpp +namespace EMANE +{ + namespace Controls + { + class TxWhileRxInterferenceControlMessage : public ControlMessage + { + public: + static + TxWhileRxInterferenceControlMessage * create(double dRxPowerdBm); + + TxWhileRxInterferenceControlMessage * clone() const override; + + ~TxWhileRxInterferenceControlMessage(); + + double getRxPowerdBm() const; + + enum {IDENTIFIER = EMANE_CONTROL_MEASSGE_TX_WHILE_RX_INTERFERENCE}; + + }; + } +} +``` +

    emane/include/emane/controls/txwhilerxinterferencecontrolmessage.h


    + diff --git a/guide/site/eel-event-generator.md b/guide/site/eel-event-generator.md new file mode 100644 index 0000000..7fd9d5c --- /dev/null +++ b/guide/site/eel-event-generator.md @@ -0,0 +1,288 @@ +--- +layout: default +title: EEL Event Generator +nav_order: 17 +permalink: /eel-event-generator +--- + + +# EEL Event Generator + +![](images/auto-generated-incomplete-chapter.png){: width="75%"; .centered} + +## Features + +The Emulation Event Log (EEL) Generator creates EMANE events from +input files in EEL Format. EEL format was developed by the [Protean +Research Group at Naval Research +Laboratory](http://www.nrl.navy.mil/itd/ncs). + +> This (EEL) file format is a linear, text file format that can be + used to convey the value of properties or parameters identified by a + keyword. This file allows for ”events” affecting modeling system + components and/or their properties that occur over time to be + expressed (e.g. as a file format to ”drive” event generation over + time) or to be logged (e.g. as a log file format for ”capturing” + run-time events for replay or post-processing analysis). The EEL + file is a text format consisting of lines (a.k.a. ”sentences”) that + each contain a timestamp, some ”module identifier” and an event type + ”keyword” that implies the format and interpretation of the + remainder of the line.The ”keyword” approach allows a mixture of + event types to be included within an EEL file and expanded over time + as needed. Tools that process EEL file may choose to process a + subset of event types as needed. The format also lends itself to + simple filtering by event type, module identifier, etc using + commonly-available tools (e.g., ”grep”, etc). + +>The linear, time-ordered format also allows it to be incrementally + processed such that even very bulky files can be handled as + needed. Note that, in the interest of compactness, it is typically + expected that the events included will represent ”deltas” + (i.e. changes) to any previously established state. However, one + could choose to have each time epoch (or at some less granular + interval such as once per minute) include the complete modeling + system state (e.g. all current node locations, adjacencies, + etc). This would result in a more bulky EEL file but could enable + processing tools to ”skip” to desired sections of the file without + need to process the entire file from its beginning. This + specification does not dictate or preclude such either usage. + +> Thus, the skeleton format of lines within the EEL format is: + +> \ \ \ \ + +\[[Emulation Schema Description](http://downloads.pf.itd.nrl.navy.mil/docs/mnmtools/EmulationScriptSchemaDescription.pdf), Protean Research Group\] + + +The EEL Event Generator loads EEL sentence parsing plugins to parse +and build EMANE events. Plugins are associated with event type +keywords and are capable of producing either *full* or *delta* event +updates. A *delta* event update contains EMANE events corresponding to +EEL entries loaded since the last request for events made to the +plugin. A *full* event update contains all the EMANE events necessary +to convey the complete current state for all *moduleID* information +loaded by the respective plugin. + +Any EEL entries encountered that are not handled by a loaded parser are ignored. + +## Sentence Parser Plugins + +There are four EEL sentence parsing plugins: + +1. Pathloss Parser - Parses pathloss sentences and builds the resulting event. + + *\ nem:\ pathloss nem:\,\\[,\\] \[nem:\,\\[,\\]\]...* + + Where, + *pathoss* is the pathloss in dB + *reversePathloss* is the reverse pathloss in dB + +2. Location Parser - Parses location sentences and builds the resulting event. + + *\ nem:\ location gps \,\,\\[,msl|agl\]* + + Where, + *latitude* is the latitude in degrees + *longitude* is the longitude in degrees + *altitude* is the altitude in meters + + *\ nem:\ orientation \,\,\* + + Where, + *pitch* is the pitch in degrees + *roll* is the roll in degrees + *yaw* is the yaw in degrees + + *\ nem:\ velocity \,\,\* + + Where, + *azimuth* is the azimuth in degrees + *elevation* is the elevation in degrees + *magnitude* is the mgnitude in meters/second + +3. Antenna Profile Parser - Parses antenna profile sentences and builds the resulting event. + + *\ nem:\ antennaprofile \,\,\* + + Where, + *profileId* is the antenna profile id + *azimuth* is the antenna azimuth in degrees + *elevation* is the antenna elevation degrees + +4. Comm Effect Parser - Parses comm effect sentences and builds the resulting event. + + *\ nem:\ commeffect nem:\,\ \[nem:\,\\]...* + + *CommEffectEntryList := \,\,\,\,\,\* + + Where, + *latencySeconds* is the latency seconds (float) + *jitterSeconds* is the jitter seconds (float) + *probabilityLoss* is the probability of loss (float) + *probabilityDuplication* is the probability of duplication (float) + *unicastBitRate* is the unicast bit rate in bits/second (uint64) + *multicastBitRate* is the multicast bit rate in bits/second (uint64) + +5. Fading Selection Parser - Parses fading selection sentences and builds the resulting event. + + *\ nem:\ fadingselection nem:\,'none'|'nakagami' [nem:\,'none'|'nakagami']...* + + +### Example Sentences + +```text +0.0 nem:70 pathLoss nem:22,96.3 nem:23,95.0 nem:24,95.1 nem:25,95.2 nem:26,95.3 nem:27,95.4 nem:28,95.5 nem:29,95.0 nem:30,95.1 nem:31,95.2 nem:32,95 +0.0 nem:70 pathLoss nem:42,95.3 nem:43,95.4 nem:44,95.5 nem:45,95.0 nem:46,95.1 nem:47,95.2 nem:48,95.3 nem:49,95.4 nem:50,95.5 nem:51,95.5 nem:52,95.6 +0.0 nem:70 pathLoss nem:62,95.2 nem:63,95.3 nem:64,95.4 nem:65,94.2 nem:66,94.2 nem:67,96.3 nem:68,96.3 nem:69,123.3 +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:3 location gps 40.031227,-74.523247,3.000000 +0.0 nem:4 location gps 40.031290,-74.523095,3.000000 +0.0 nem:1 antennaprofile 1,0,90 +0.0 nem:2 antennaprofile 1,0,270 +0.0 nem:3 antennaprofile 1,0,90 +0.0 nem:4 antennaprofile 1,0,270 +0.0 nem:1 commeffect nem:2,1.050000,2.000300,10.000000,12.000000,45,54 nem:3,0.050000,0.025000,0.000000,0.000000,0,0 nem:4,0.000000,0.000000,50.000000,0.000000,0,0 +0.0 nem:2 commeffect nem:1,11.055000,22.000330,11.000000,13.000000,46,55 nem:3,0.000000,0.000000,0.000000,0.000000,10000,10000 nem:4,0.000000,0.000000,0.000000,0.000000,5000,5000 +0.0 nem:3 commeffect nem:1,0.050000,0.025000,0.000000,0.000000,0,0 nem:2,0.000000,0.000000,0.000000,0.000000,10000,10000 nem:4,0.000000,0.000000,0.000000,10.000000,0,0 +0.0 nem:4 commeffect nem:1,0.000000,0.000000,50.000000,0.000000,0,0 nem:2,0.000000,0.000000,0.000000,0.000000,5000,5000 nem:3,0.000000,0.000000,0.000000,10.000000,0,0 +0.0 nem:1 fadingselection nem:2,none nem:3,nakagami nem:4,none +``` + +## Configuration + +1. **`inputfile`**: EEL Text input file. + + ```no-highlighting + Default: no Required: yes Modifiable: no + Type: string Occurrs: [1,1024] + ``` + +2. **`loader`**: EEL Loader plugin. + + ```no-highlighting + Default: no Required: yes Modifiable: no + Type: string Occurrs: [1,1024] + ``` + + + +## Example XML + +```xml + + + + + + + + + + + + + + +``` + +## Statistics + +1. **`avgProcessAPIQueueDepth`**: Average API queue depth for a + processUpstreamPacket, processUpstreamControl, + processDownstreamPacket, processDownstreamControl, processEvent and + processTimedEvent. + + ```no-highlighting + Type: double Clearable: yes + ``` + +2. **`avgProcessAPIQueueWait`**: Average API queue wait for a + processUpstreamPacket, processUpstreamControl, + processDownstreamPacket, processDownstreamControl, processEvent and + processTimedEvent in microseconds. + + ```no-highlighting + Type: double Clearable: yes + ``` + +3. **`avgTimedEventLatency`**: Average latency between the scheduled + timer expiration and the actual firing over the requested duration. + + ```no-highlighting + Type: double Clearable: yes + ``` + +4. **`avgTimedEventLatencyRatio`**: Average ratio of the delta between + the scheduled timer expiration and the actual firing over the + requested duration. An average ratio approaching 1 indicates that + timer latencies are large in comparison to the requested durations. + + ```no-highlighting + Type: double Clearable: yes + ``` + +5. **`numAPIQueued`**: The number of queued API events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +6. **`processedConfiguration`**: The number of processed + configuration. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +7. **`processedDownstreamControl`**: The number of processed + downstream control. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +8. **`processedDownstreamPackets`**: The number of processed + downstream packets. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +9. **`processedEvents`**: The number of processed events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +10. **`processedTimedEvents`**: The number of processed timed events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +11. **`processedUpstreamControl`**: The number of processed upstream + control. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +12. **`processedUpstreamPackets`**: The number of processed upstream + packets. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + + + +## Statistic Tables + +1. **`EventReceptionTable`**: Received event counts + + ```no-highlighting + Clearable: yes + ``` + + diff --git a/guide/site/events.md b/guide/site/events.md new file mode 100644 index 0000000..10cceba --- /dev/null +++ b/guide/site/events.md @@ -0,0 +1,130 @@ +--- +layout: default +title: Events +nav_order: 8 +permalink: /events +--- + + +# Events + +![](images/auto-generated-incomplete-chapter.png){: width="75%"; .centered} + +A scenario is a set of *events* that are sent to one or more *NEMs* in +order to change environmental characteristics such as locations, +pathloss and antenna pointing. Events are delivered opaquely to +registered radio model and physical layer instances so individual +radio models may use their own specialized events. + +## `AntennaProfileEvent` + +An `AntennaProfileEvent` is used to set the antenna profile and +pointing information (azimuth and elevation) for an *NEM's* default +antenna (index 0). + +```protobuf +package EMANEMessage; +option optimize_for = SPEED; +message AntennaProfileEvent +{ + message Profile + { + required uint32 nemId = 1; + required uint32 profileId = 2; + required double antennaAzimuthDegrees = 3; + required double antennaElevationDegrees = 4; + } + repeated Profile profiles = 1; +} +``` +

    emane/src/libemane/antennaprofileevent.proto


    + +## `LocationEvent` + +A `LocationEvent` is used to set the location and optionally the +velocity and/or orientation of an *NEM*. + +```protobuf +package EMANEMessage; +option optimize_for = SPEED; +message LocationEvent +{ + message Location + { + message Position + { + required double latitudeDegrees = 1; + required double longitudeDegrees = 2; + required double altitudeMeters = 3; + } + message Velocity + { + required double azimuthDegrees = 1; + required double elevationDegrees = 2; + required double magnitudeMetersPerSecond = 3; + } + message Orientation + { + required double rollDegrees = 1; + required double pitchDegrees = 2; + required double yawDegrees = 3; + } + required uint32 nemId = 1; + required Position position = 2; + optional Velocity velocity = 3; + optional Orientation orientation = 4; + } + repeated Location locations = 1; +} +``` +

    emane/src/libemane/locationevent.proto


    + +## `PathlossEvent` + +A `PathlossEvent` is used to set the pathloss used at a receiving +*NEM* for over-the-air transmissions from one or more specified source +*NEMs*. + +```protobuf +package EMANEMessage; +option optimize_for = SPEED; +message PathlossEvent +{ + message Pathloss + { + required uint32 nemId = 1; + required float forwardPathlossdB = 2; + required float reversePathlossdB = 3; + } + repeated Pathloss pathlosses = 1; +} +``` +

    emane/src/libemane/pathlossevent.proto


    + +## `FadingSelectionEvent` + +A `FadingSelectionEvent` is used to set the fading model in use at a +receiving *NEM* for over-the-air transmission from one or more +specified source *NEMs*. Required when the physical layer +`fading.model` configuration parameter is set to `event`. + +```protobuf +package EMANEMessage; +option optimize_for = SPEED; +message FadingSelectionEvent +{ + enum Model + { + TYPE_NONE = 1; + TYPE_NAKAGAMI = 2; + TYPE_LOGNORMAL = 3; + } + message Entry + { + required uint32 nemId = 1; + required Model model = 2; + } + repeated Entry entries = 1; +} +``` +

    emane/src/libemane/fadingselectionevent.proto


    diff --git a/guide/site/getting-started.md b/guide/site/getting-started.md new file mode 100644 index 0000000..870d292 --- /dev/null +++ b/guide/site/getting-started.md @@ -0,0 +1,370 @@ +--- +layout: default +title: Getting Started +nav_order: 2 +permalink: /getting-started +--- + + +# Getting Started + +This guide includes a set of +[*letce2*](https://github.com/adjacentlink/letce2) (*Lightweight +Experiment Template Configuration Environment*) defined example +experiments that highlight various *emane* features of interest. + +*lecte2* provides a hierarchical mechanism for generating experiment + configuration using the [Mako](https://https//www.makotemplates.org) + template engine and supports a plugin architecture for defining test + environment execution controls. More details on *letce2* can be found + in the + [*letce2-tutorial*](https://github.com/adjacentlink/letce2-tutorial). + +For the purpose of this guide, a set of configuration file templates +(`example/templates`) are used to produce per node configuration +specific files based on experiment specific `experiment.cfg` +definition files. These templates provide the ability to run and +interact with example experiments. + +```text +[!experiment] +@experiment_control_interface=letce0 + +[host:experiment] +__template.path=../templates/host:../templates/common +@bridge.0.name=%(@experiment_control_interface)s +@bridge.0.ipv4=10.99.0.100/16 +__template.file.100=bridge +__template.file.101=control +__template.file.102=start.local +__template.file.103=otestpoint-broker.xml +__template.file.104=stop.local +__template.file.105=functions +__template.file.106=scenario.eel +__template.file.107=eelgenerator.xml +__template.file.108=eventservice.xml +__template.file.109=prestart.local +@scenario_all_nodes_pathloss_db=70 + +[!common:experiment] ++@lxc.interface.0.link =%(@experiment_control_interface)s ++@lxc.interface.0.ipv4=%(@control_ip_addr)s ++@lxc.interface.0.name=%(@control_interface)s +@control_interface=backchan0 +__template.file.001=lxc.conf + +<... snippet: only 25 lines shown...> +``` +

    emane-guide/examples/rfpipe-01/experiment.cfg


    + +Examples use the *letce2* LXC plugin to create one LXC container per +experiment node. A *makefile* is used to simplify issuing *letce2* +commands for generating experiment node configuration, with resulting +files partitioned into directories named by *experiment.cfg* section, +which are experiment node names. + + +```text +$ tree emane-guide/examples/rfpipe-01/node-1 +examples/rfpipe-01/node-1 +|-- batman-adv +|-- emane-platform.xml +|-- emane-rfpipe-nem.xml +|-- emane-rfpipe-pcr.xml +|-- emane-rfpipe-radiomodel.xml +|-- emane-transvirtual.xml +|-- functions +|-- init +|-- init.local +|-- lxc.conf +|-- lxc.hook.autodev.sh +|-- mgen +|-- otestpoint-probe-emane-physicallayer.xml +|-- otestpoint-probe-emane-rfpipe.xml +|-- otestpoint-probe-emane-virtualtransport.xml +|-- otestpoint-probe-mgen.xml +|-- otestpoint-recorder.xml +`-- otestpoint.xml +``` + +To start an example, change directory to the example directory and +issue the *letce2* start command: + +```text +$ pushd emane-guide/examples/rfpipe-01 +$ letce2 lxc start +``` + +To stop an example, issue the *letce2* stop command from the same +example directory: + +```text +$ letce2 lxc stop +``` + +If running from built source, both the *letce2* start and stop +commands must contain an additional command line environment file +[option](#running-from-source-build) to add Adjacent Link FOSS +application, library, and Python package build paths to individual LXC +container environments. + +## Installation from Pre-built Packages + +Adjacent Link +[distributes](https://github.com/adjacentlink/emane/wiki/Install) +pre-built packages for all *emane* and experiment support software in +bundles versioned by corresponding *emane* version and a release +index. All bundles are signed using the Adjacent Link code signing +[key](https://adjacentlink.com/downloads/emane/RPM-GPG-KEY-adjacentlink). + +All software dependencies are available using standard +distribution repositories. + +At the time of this writing, the latest *emane* version is 1.4.1. + +### Fedora Linux + +To use `wget` to download the latest release bundle for Fedora Linux: + +```text +$ wget https://adjacentlink.com/downloads/emane/emane-1.4.1-release-1.f37.x86_64.tar.gz +$ wget https://adjacentlink.com/downloads/emane/emane-1.4.1-release-1.f37.x86_64.tar.gz.asc +$ gpg2 --verify emane-1.4.1-release-1.f37.x86_64.tar.gz.asc +``` + +To unpack and install bundle software: + +```text +$ tar zxvf emane-1.4.1-release-1.f37.x86_64.tar.gz +$ sudo dnf install $(find emane-1.4.1-release-1 -name '*.rpm' -print | egrep -v '(devel|debug)') +``` + +### Rocky Linux + +To use `wget` to download the latest release bundle for Rocky Linux +and verify the release signature with *gpg2*: + +```text +$ wget https://adjacentlink.com/downloads/emane/emane-1.4.1-release-1.el8.x86_64.tar.gz +$ wget https://adjacentlink.com/downloads/emane/emane-1.4.1-release-1.el8.x86_64.tar.gz.asc +$ gpg2 --verify emane-1.4.1-release-1.el8.x86_64.tar.gz.asc +``` + +To unpack and install bundle software: + +```text +$ tar zxvf emane-1.4.1-release-1.el8.x86_64.tar.gz +$ dnf install epel-release +$ dnf config-manager --set-enabled powertools +$ sudo dnf install $(find emane-1.4.1-release-1 -name '*.rpm' -print | egrep -v '(devel|debug)') +``` + +At the time of this writing, the lxc rpm distributed via Rocky 8 +repositories is missing a build dependency in the spec file which +causes the `configure` call invoked during rpm build to not build +`lxc.init.static`. Adjacent Link distributes a bundle with pre-built +lxc packages which include the necessary static components. + +To use `wget` to download the latest release bundle for Rocky Linux +lxc rpms with *static init* and verify the release signature with +`gpg2`: + +```text +$ wget https://adjacentlink.com/downloads/emane/lxc-3.0.4-2.static_init-release-1.el8.tar.bz2 +$ wget https://adjacentlink.com/downloads/emane/lxc-3.0.4-2.static_init-release-1.el8.tar.bz2.asc +$ gpg2 --verify lxc-3.0.4-2.static_init-release-1.el8.tar.bz2.asc +``` + +To unpack and install the bundle software: + +```text +$ tar xf lxc-3.0.4-2.static_init-release-1.el8.tar.bz2 +$ sudo dnf install \ + lxc-3.0.4-2.static_init-release-1/rpms/el8/x86_64/lxc-3.0.4-2.static_init.el8.x86_64.rpm \ + lxc-3.0.4-2.static_init-release-1/rpms/el8/x86_64/lxc-libs-3.0.4-2.static_init.el8.x86_64.rpm +``` + +The examples in this guide that use a MANET routing protocol, as well +as those in the +[*letce2-tutorial*](https://github.com/adjacentlink/letce2-tutorial), +use [Better Approach to Mobile Ad-hoc Networking +(B.A.T.M.A.N.)](https://en.wikipedia.org/wiki/B.A.T.M.A.N.). Rocky 8 +does not build the `batman-adv` module as part of the distribution +kernel module package. In order to experiment with the examples using +`batman-adv`, either rebuild your kernel with the `batman-adv` module +or use the supplied `build-external-kmod-batman-adv-rpm.sh` script to +download and build a `batman-adv` kernel module rpm using the +[kernel.org](https://kernel.org) version of the currently running +kernel. + +To build and install the `batman-adv` kernel module + +```text +$ sudo emane-guide/extras/build-external-kmod-batman-adv-rpm.sh +$ sudo dnf install kmod-batman-adv-*x86_64.rpm +``` + +If you are using Secure Boot, follow the instructions at the +conclusion of `build-external-kmod-batman-adv-rpm.sh` to sign the +module with your Machine Owner Key (MOK). + +To sign the `batman-adv` kernel module replace with the full path to +the system mok key: + +```text +sudo /usr/src/kernels/$(uname -r)/scripts/sign-file \ + sha256 \ + /replace/with/path/to/your/mok.priv \ + /replace/with/path/to/your/mok.der \ + /lib/modules/$(uname -r)/extra/batman-adv/batman-adv.ko +``` + + +### Ubuntu + +To use `wget` to download the latest release bundle for Ubuntu and +verify the release signature with *gpg2*: + +```text +$ wget https://adjacentlink.com/downloads/emane/emane-1.4.1-release-1.ubuntu-20_04.amd64.tar.gz +$ wget https://adjacentlink.com/downloads/emane/emane-1.4.1-release-1.ubuntu-20_04.amd64.tar.gz.asc +$ gpg2 --verify emane-1.4.1-release-1.ubuntu-20_04.amd64.tar.gz.asc +``` + +To unpack and install bundle software: + +```text +$ tar zxvf emane-1.4.1-release-1.ubuntu-20_04.amd64.tar.gz +$ cd emane-1.4.1-release-1/debs/ubuntu-20_04/amd64 +$ sudo dpkg -i $(find emane-1.4.1-release-1 -name '*.deb' -print | egrep -v '(dev|debug)') +$ apt-get install -f +``` + +## Running From Source Build + +It is possible to run the examples in this guide directly from source +build. The `adjacentlink-foss-build.sh` script will clone and build +the latest release of all Adjacent Link FOSS projects. Running from +source build requires the use of the +[*environments-foss*](https://github.com/sgalgano/environments-foss) +package which adds Adjacent Link FOSS application, library, and Python +package build paths to the current shell environment. + +The following instructions for using `adjacentlink-foss-build.sh` +assume *emane-guide* has been cloned in `~/dev` which is also the +location to clone and build all Adjacent Link FOSS and that all the +Adjacent Link FOSS [build dependencies](#build-dependencies) are +installed. + +```text +$ mkdir -p ~/dev +$ pushd ~/dev +$ git clone https://github.com/adjacentlink/emane-guide +$ emane-guide/extras/adjacentlink-foss-build.sh build +``` + +The *emane* dtd and schema must be copied to `/usr/share/emane`. These +are core files that never change, regardless of which version of +*emane* you are running. + +```text +$ sudo mkdir -p /usr/share/emane/{dtd,schema} +$ sudo cp ~/dev/emane/schema/*.xsd /usr/share/emane/schema +$ sudo cp ~/dev/emane/dtd/*.{dtd,ent} /usr/share/emane/dtd +``` + +Every time you want to start or stop one of the *emane-guide* +examples, use the `letce2` `-e` option to load the +`adjacentlink-foss.env` environment in each lxc runtime environment. +Be sure to also source `adjacentlink-foss.env` and `letce2.env` in +your shell environment prior to issuing the `lecte2` commands. For +example: + +```text +$ . ~/dev/environments-foss/adjacentlink-foss.env +$ . ~/dev/environments-foss/letce2.env +$ pushd ~/dev/emane-guide/examples/rfpipe-01 +$ letce2 lxc start -e ~/dev/environments-foss/adjacentlink-foss.env +... +$ letce2 lxc stop -e ~/dev/environments-foss/adjacentlink-foss.env +``` + +![](images/auto-generated-no-packages-with-source-build.png){: width="100%"; .centered} + + +### Build Dependencies + +All Adjacent Link FOSS project build dependencies are available from +standard distribution repositories. + +#### Fedora Linux + +To install build dependencies in Fedora Linux: + +```text +$ sudo dnf install autoconf automake boost-devel cmake fftw3-devel gcc-c++ git \ + libconfig-devel libpcap-devel libtool libuuid-devel libxml2-devel lksctp-tools-devel \ + make mbedtls-devel pcre-devel protobuf-devel python3-devel python3-protobuf \ + python3-setuptools redhat-lsb-core rpm-build sqlite-devel zeromq-devel +``` + +#### Rocky Linux + +To install build dependencies in Rocky Linux: + +```text +$ sudo dnf install epel-release +$ sudo dnf config-manager --set-enabled powertools +$ sudo dnf install autoconf automake boost-devel cmake fftw3-devel gcc-c++ git \ + libconfig-devel libpcap-devel libtool libuuid-devel libxml2-devel lksctp-tools-devel \ + make mbedtls-devel pcre-devel protobuf-devel python3-devel python3-protobuf \ + python3-setuptools redhat-lsb-core rpm-build sqlite-devel zeromq-devel +``` + + +#### Ubuntu + +To install build dependencies in Ubuntu Linux: + +```text +$ sudo apt-get install autoconf automake cmake debhelper dh-python g++ gcc git \ + libboost-program-options-dev libconfig++-dev libfftw3-dev libmbedtls-dev libpcap-dev \ + libpcre3-dev libprotobuf-dev libsctp-dev libsqlite3-dev libtool libxml2-dev libzmq3-dev \ + libzmq5 lsb-release pkg-config protobuf-compiler python3-dev python3-lxml python3-protobuf \ + python3-setuptools python3-zmq sqlite3 uuid-dev +``` + +## `/etc/hosts` Additions + +Adding the contents of `hosts-additions` to your system `/etc/hosts` +is recommended. These additions contain common *emane-guide* +honstname-to-ip-address mapping that make it easier to generate and +monitor traffic. + +```text +# +# emane-guide container address mapping +# +10.99.0.1 node-1 +10.99.0.2 node-2 +10.99.0.3 node-3 +10.99.0.4 node-4 +10.99.0.5 node-5 +10.99.0.6 node-6 +10.99.0.7 node-7 +10.99.0.8 node-8 +10.99.0.9 node-9 +10.99.0.10 node-10 +10.99.0.100 node-server + + +<... snippet: only 15 lines shown...> +``` +

    emane-guide/extras/hosts-additions


    + +You can cut-and-paste `hosts-additions` contents into `/etc/hosts` or +use the following command: + +```text +$ sudo sh -c 'cat ~/dev/emane-guide/extras/hosts-additions >> /etc/hosts' +``` diff --git a/guide/site/ieee80211abg-radio-model.md b/guide/site/ieee80211abg-radio-model.md new file mode 100644 index 0000000..b585e34 --- /dev/null +++ b/guide/site/ieee80211abg-radio-model.md @@ -0,0 +1,2028 @@ +--- +layout: default +title: IEEE 802.11abg Radio Model +nav_order: 11 +permalink: /ieee80211abg-radio-model +--- + + +# IEEE 802.11abg Radio Model + +The IEEE 802.11abg radio model is a behavioral representation of an +IEEE 802.11abg radio. + +## Features + +The IEEE 802.11abg radio model provides the following set of features: +[DSS and OFDM Modes and Rates](#dss-and-ofdm-modes-and-rates), [DCF +Channel Access](#dcf-channel-access), and [Packet Completion Rate +Curves](#packet-completion-rate-curves). + +### DSS and OFDM Modes and Rates + +The IEEE 802.11abg radio supports the following waveform modes and +data rates with the appropriate timing: + + 1. 802.11b (DSS rates: 1, 2, 5.5 and 11 Mbps) + + 2. 802.11a/g (OFDM rates: 6, 9, 12, 18, 24, 36, 48 and 54 Mbps) + + 3. 802.11b/g (DSS and OFDM rates) + +### DCF Channel Access + +The IEEE 802.11abg radio model supports Distributed Coordination +Function (DCF) channel access. + +### Unicast and Broadcast Transmissions + +The IEEE 802.11abg radio model supports both unicast and broadcast +transmissions. Unicast transmissions include the ability to emulate +control message (RTS/CTS) behavior as well as retries without actually +transmitting the control messages or the re-transmission of the data +message. The emulation of unicast does not replicate exponential +growth of the contention window as a result of detected failures. + +### Wi-Fi Multimedia + +The IEEE 802.11abg radio model supports Wi-Fi multimedia (WMM) +capabilities with the ability to classify four different traffic +classes: Background, Best Effort, Video, and Voice, where the higher +priority classes (Voice and Video) are serviced first. + +### Packet Completion Rate Curves + +The IEEE 802.11abg Packet Completion Rate is specified as curves +defined via XML. Each curve definition comprises a series SINR values +along with their corresponding probability of reception for a given +data rate index. A curve definition must contain a minimum of two +points with one SINR representing *POR = 0* and one SINR representing +*POR = 100*. Linear interpolation is preformed when an exact SINR +match is not found. + +The IEEE 802.11abg radio model does adjust the interference on a +per packet basis based on detected collisions and as such supports +negative SINR values. + +Specifying a packet size (`
    ` attribute `pktsize`) in the +curve file will adjust the POR based on received packet +size. Specifying a `pktsize` of 0 disregards received packet size when +computing the POR. + +The POR is obtained using the following calculation when a non-zero +`pktsize` is specified: + +$$POR = POR_0 ^ {S_1/S_0}$$ + +Where, + +$$POR_0$$ is the POR value determined from the PCR curve for +the given SINR value + +$$S_0$$ is the packet size specified in the curve file +`pktsize` + +$$S_1$$ is the received packet size + +The below default PCR curves are provided for each of the supported +802.11 modulation and data rate combinations based on theoretical +equations for determining Bit Error Rate (BER) in an Additive White +Gaussian Noise (AWGN) channel. + +```xml + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +<... snippet: only 26 lines shown...> +``` +

    emane-guide/examples/ieee80211abg-01/node-1/emane-ieee80211abg-pcr.xml


    + +![](images/ieee80211pcr.png){:width="90%"; .centered} +

    IEEE 802.11b DSS (left). IEEE 802.11ag OFDM (right).


    + +## Limitations + +1. The IEEE 802.11abg radio model does not support Point Coordination +Function (PCF) channel access or the concept of beacons to discover +and join an access point. + +2. The IEEE 802.11abg uses a radio model specific +[`OneHopNeighborsEvent`](#onehopneighborsevent) to communicate one-hop +neighbors to behaviorally emulate the csma/ca channel access protocol +without actual transmission of RTS and CTS packets. The neighbor +information in the event allows each node to estimate channel activity +associated from one and two hop neighbors to emulate collisions not +only from immediate neighbors but also from 2-hop hidden neighbors. + +If the emulator is oversubscribed and can no longer process IEEE +802.11abg radio model transmissions as fast as they are received, the +radio model channel activity estimator will estimate less activity +within the estimation period, leading to a failure condition with +better network performance then would be experienced with real radios. + +## `OneHopNeighborsEvent` + +A `OneHopNeighborsEvent` is used to communicate one-hop neighbors to +other IEEE 802.11abg radio model instances running in an emulation in +order to behaviorally emulate the csma/ca channel access protocol +without actual transmission of RTS and CTS packets + +```protobuf +package EMANEEventMessage; +option optimize_for = SPEED; +message OneHopNeighborsEvent +{ + required uint32 eventSource = 1; + message Neighbor + { + required uint32 nemId = 1; + } + repeated Neighbor neighbors = 2; +} +``` +

    emane/src/models/mac/ieee80211abg/onehopneighborsevent.proto


    + +## Configuration + +1. **`aifs0`**: Defines the arbitration inter frame spacing time for + category 0 and contributes to the calculation of channel access + overhead when transmitting category 0 packets. If WMM is disabled, + aifs0 is used for all traffic. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: float Occurrs: [1,1] Range: [0.000000,0.000255] + Values: 0.000002 + ``` + +2. **`aifs1`**: Defines the arbitration inter frame spacing time for + category 1 and contributes to the calculation of channel access + overhead when transmitting category 1 packets. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: float Occurrs: [1,1] Range: [0.000000,0.000255] + Values: 0.000002 + ``` + +3. **`aifs2`**: Defines the arbitration inter frame spacing time for + category 2 and contributes to the calculation of channel access + overhead when transmitting category 2 packets. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: float Occurrs: [1,1] Range: [0.000000,0.000255] + Values: 0.000002 + ``` + +4. **`aifs3`**: Defines the arbitration inter frame spacing time for + category 3 and contributes to the calculation of channel access + overhead when transmitting category 3 packets. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: float Occurrs: [1,1] Range: [0.000000,0.000255] + Values: 0.000001 + ``` + +5. **`channelactivityestimationtimer`**: Defines the channel activity + estimation timer in seconds. The timer determines the lag associated + with the statistical model used to estimate number of transmitting + common and hidden neighbors based on channel activity. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: float Occurrs: [1,1] Range: [0.001000,1.000000] + Values: 0.100000 + ``` + +6. **`cwmax0`**: Defines the maximum contention window size in slots + for category 0. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: uint16 Occurrs: [1,1] Range: [1,65535] + Values: 1024 + ``` + +7. **`cwmax1`**: Defines the maximum contention window size in slots + for category 1. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: uint16 Occurrs: [1,1] Range: [1,65535] + Values: 1024 + ``` + +8. **`cwmax2`**: Defines the maximum contention window size in slots + for category 2. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: uint16 Occurrs: [1,1] Range: [1,65535] + Values: 64 + ``` + +9. **`cwmax3`**: Defines the maximum contention window size in slots + for category 3. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: uint16 Occurrs: [1,1] Range: [1,65535] + Values: 16 + ``` + +10. **`cwmin0`**: Defines the minimum contention window size in slots + for category 0. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: uint16 Occurrs: [1,1] Range: [1,65535] + Values: 32 + ``` + +11. **`cwmin1`**: Defines the minimum contention window size in slots + for category 1. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: uint16 Occurrs: [1,1] Range: [1,65535] + Values: 32 + ``` + +12. **`cwmin2`**: Defines the minimum contention window size in slots + for category 2. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: uint16 Occurrs: [1,1] Range: [1,65535] + Values: 16 + ``` + +13. **`cwmin3`**: Defines the minimum contention window size in slots + for category 3. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: uint16 Occurrs: [1,1] Range: [1,65535] + Values: 8 + ``` + +14. **`distance`**: Defines the max propagation distance in meters + used to compute slot size. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint32 Occurrs: [1,1] Range: [0,4294967295] + Values: 1000 + ``` + +15. **`enablepromiscuousmode`**: Defines whether promiscuous mode is + enabled or not. If promiscuous mode is enabled, all received packets + (intended for the given node or not) that pass the probability of + reception check are sent upstream to the transport. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + +16. **`flowcontrolenable`**: Defines whether flow control is enabled. + Flow control only works with the virtual transport and the setting + must match the setting within the virtual transport configuration. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + +17. **`flowcontroltokens`**: Defines the maximum number of flow + control tokens (packet transmission units) that can be processed from + the virtual transport without being refreshed. The number of available + tokens at any given time is coordinated with the virtual transport and + when the token count reaches zero, no further packets are transmitted + causing application socket queues to backup. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [1,65535] + Values: 10 + ``` + +18. **`mode`**: Defines the 802.11abg mode of operation. 0|2 = + 802.11b (DSS), 1 = 802.11a/g (OFDM), and 3 = 802.11b/g (mixed mode). + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint8 Occurrs: [1,1] Range: [0,3] + Values: 0 + ``` + +19. **`msdu0`**: MSDU category 0 + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [0,65535] + Values: 65535 + ``` + +20. **`msdu1`**: MSDU category 1 + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [0,65535] + Values: 65535 + ``` + +21. **`msdu2`**: MSDU category 2 + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [0,65535] + Values: 65535 + ``` + +22. **`msdu3`**: MSDU category 3 + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [0,65535] + Values: 65535 + ``` + +23. **`multicastrate`**: Defines the data rate to be used when + transmitting broadcast/multicast packets. The index (1 through 12) to + rate (Mbps) mapping is as follows: [1 2 5.5 11 6 9 12 18 24 36 48 54]. + DSS rates [1 2 5.5 11] Mbps are valid when mode is set to 802.11b or + 802.11b/g. OFDM rates [6 9 12 18 24 36 48 54] Mbps are valid when + mode is set to 802.11a/g or 802.11b/g. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: uint8 Occurrs: [1,1] Range: [1,12] + Values: 1 + ``` + +24. **`neighbormetricdeletetime`**: Defines the time in seconds of no + RF receptions from a given neighbor before it is removed from the + neighbor table. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: float Occurrs: [1,1] Range: [1.000000,3660.000000] + Values: 60.000000 + ``` + +25. **`neighbortimeout`**: Defines the neighbor timeout in seconds for + the neighbor estimation algorithm. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: float Occurrs: [1,1] Range: [0.000000,3600.000000] + Values: 30.000000 + ``` + +26. **`pcrcurveuri`**: Defines the URI of the Packet Completion Rate + (PCR) curve file. The PCR curve file contains probability of reception + curves as a function of Signal to Interference plus Noise Ratio (SINR) + for each data rate. + + ```no-highlighting + Default: no Required: yes Modifiable: no + Type: string Occurrs: [1,1] + ``` + +27. **`queuesize0`**: Defines the queue size for category 0. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint8 Occurrs: [1,1] Range: [0,255] + Values: 255 + ``` + +28. **`queuesize1`**: Defines the queue size for category 1. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint8 Occurrs: [1,1] Range: [0,255] + Values: 255 + ``` + +29. **`queuesize2`**: Defines the queue size for category 2. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint8 Occurrs: [1,1] Range: [0,255] + Values: 255 + ``` + +30. **`queuesize3`**: Defines the queue size for category 3. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint8 Occurrs: [1,1] Range: [0,255] + Values: 255 + ``` + +31. **`radiometricenable`**: Defines if radio metrics will be reported + up via the Radio to Router Interface (R2RI). + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + +32. **`radiometricreportinterval`**: Defines the metric report + interval in seconds in support of the R2RI feature. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: float Occurrs: [1,1] Range: [0.100000,60.000000] + Values: 1.000000 + ``` + +33. **`retrylimit0`**: Defines the maximum number of retries attempted + for category 0. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint8 Occurrs: [1,1] Range: [0,255] + Values: 2 + ``` + +34. **`retrylimit1`**: Defines the maximum number of retries attempted + for category 1. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint8 Occurrs: [1,1] Range: [0,255] + Values: 2 + ``` + +35. **`retrylimit2`**: Defines the maximum number of retries attempted + for category 2. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint8 Occurrs: [1,1] Range: [0,255] + Values: 2 + ``` + +36. **`retrylimit3`**: Defines the maximum number of retries attempted + for category 3. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint8 Occurrs: [1,1] Range: [0,255] + Values: 2 + ``` + +37. **`rtsthreshold`**: Defines a threshold in bytes for when RTS/CTS + is used as part of the carrier sensing channel access protocol when + transmitting unicast packets. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [0,65535] + Values: 255 + ``` + +38. **`txop0`**: Defines the transmit opportunity time for category 0. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: float Occurrs: [1,1] Range: [0.000000,1.000000] + Values: 0.000000 + ``` + +39. **`txop1`**: Defines the transmit opportunity time for category 1. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: float Occurrs: [1,1] Range: [0.000000,1.000000] + Values: 0.000000 + ``` + +40. **`txop2`**: Defines the transmit opportunity time for category 2. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: float Occurrs: [1,1] Range: [0.000000,1.000000] + Values: 0.000000 + ``` + +41. **`txop3`**: Defines the transmit opportunity time for category 3. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: float Occurrs: [1,1] Range: [0.000000,1.000000] + Values: 0.000000 + ``` + +42. **`unicastrate`**: Defines the data rate to be used when + transmitting unicast packets. The index (1 through 12) to rate (Mbps) + mapping is as follows: [1 2 5.5 11 6 9 12 18 24 36 48 54]. DSS rates + [1 2 5.5 11] Mbps are valid when mode is set to 802.11b or 802.11b/g. + OFDM rates [6 9 12 18 24 36 48 54] Mbps are valid when mode is set to + 802.11a/g or 802.11b/g. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: uint8 Occurrs: [1,1] Range: [1,12] + Values: 4 + ``` + +43. **`wmmenable`**: Defines if wireless multimedia mode (WMM) is + enabled. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + + + + +## Statistics + +1. **`avgDownstreamProcessingDelay0`**: Average downstream processing + delay + + ```no-highlighting + Type: float Clearable: yes + ``` + +2. **`avgDownstreamProcessingDelay1`**: Average downstream processing + delay + + ```no-highlighting + Type: float Clearable: yes + ``` + +3. **`avgDownstreamProcessingDelay2`**: Average downstream processing + delay + + ```no-highlighting + Type: float Clearable: yes + ``` + +4. **`avgDownstreamProcessingDelay3`**: Average downstream processing + delay + + ```no-highlighting + Type: float Clearable: yes + ``` + +5. **`avgProcessAPIQueueDepth`**: Average API queue depth for a + processUpstreamPacket, processUpstreamControl, + processDownstreamPacket, processDownstreamControl, processEvent and + processTimedEvent. + + ```no-highlighting + Type: double Clearable: yes + ``` + +6. **`avgProcessAPIQueueWait`**: Average API queue wait for a + processUpstreamPacket, processUpstreamControl, + processDownstreamPacket, processDownstreamControl, processEvent and + processTimedEvent in microseconds. + + ```no-highlighting + Type: double Clearable: yes + ``` + +7. **`avgTimedEventLatency`**: Average latency between the scheduled + timer expiration and the actual firing over the requested duration. + + ```no-highlighting + Type: double Clearable: yes + ``` + +8. **`avgTimedEventLatencyRatio`**: Average ratio of the delta between + the scheduled timer expiration and the actual firing over the + requested duration. An average ratio approaching 1 indicates that + timer latencies are large in comparison to the requested durations. + + ```no-highlighting + Type: double Clearable: yes + ``` + +9. **`avgUpstreamProcessingDelay0`**: Average upstream processing + delay + + ```no-highlighting + Type: float Clearable: yes + ``` + +10. **`avgUpstreamProcessingDelay1`**: Average upstream processing + delay + + ```no-highlighting + Type: float Clearable: yes + ``` + +11. **`avgUpstreamProcessingDelay2`**: Average upstream processing + delay + + ```no-highlighting + Type: float Clearable: yes + ``` + +12. **`avgUpstreamProcessingDelay3`**: Average upstream processing + delay + + ```no-highlighting + Type: float Clearable: yes + ``` + +13. **`numAPIQueued`**: The number of queued API events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +14. **`numBroadcastBytesTooLarge0`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +15. **`numBroadcastBytesTooLarge1`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +16. **`numBroadcastBytesTooLarge2`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +17. **`numBroadcastBytesTooLarge3`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +18. **`numBroadcastBytesUnsupported`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +19. **`numBroadcastPacketsTooLarge0`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +20. **`numBroadcastPacketsTooLarge1`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +21. **`numBroadcastPacketsTooLarge2`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +22. **`numBroadcastPacketsTooLarge3`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +23. **`numBroadcastPacketsUnsupported`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +24. **`numDownstreamBroadcastDataDiscardDueToTxop`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +25. **`numDownstreamBytesBroadcastGenerated0`**: Number of layer + generated downstream broadcast bytes + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +26. **`numDownstreamBytesBroadcastGenerated1`**: Number of layer + generated downstream broadcast bytes + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +27. **`numDownstreamBytesBroadcastGenerated2`**: Number of layer + generated downstream broadcast bytes + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +28. **`numDownstreamBytesBroadcastGenerated3`**: Number of layer + generated downstream broadcast bytes + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +29. **`numDownstreamBytesBroadcastRx0`**: Number of downstream + broadcast bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +30. **`numDownstreamBytesBroadcastRx1`**: Number of downstream + broadcast bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +31. **`numDownstreamBytesBroadcastRx2`**: Number of downstream + broadcast bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +32. **`numDownstreamBytesBroadcastRx3`**: Number of downstream + broadcast bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +33. **`numDownstreamBytesBroadcastTx0`**: Number of downstream + broadcast bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +34. **`numDownstreamBytesBroadcastTx1`**: Number of downstream + broadcast bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +35. **`numDownstreamBytesBroadcastTx2`**: Number of downstream + broadcast bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +36. **`numDownstreamBytesBroadcastTx3`**: Number of downstream + broadcast bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +37. **`numDownstreamBytesUnicastGenerated0`**: Number of layer + generated downstream unicast bytes + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +38. **`numDownstreamBytesUnicastGenerated1`**: Number of layer + generated downstream unicast bytes + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +39. **`numDownstreamBytesUnicastGenerated2`**: Number of layer + generated downstream unicast bytes + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +40. **`numDownstreamBytesUnicastGenerated3`**: Number of layer + generated downstream unicast bytes + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +41. **`numDownstreamBytesUnicastRx0`**: Number of downstream unicast + bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +42. **`numDownstreamBytesUnicastRx1`**: Number of downstream unicast + bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +43. **`numDownstreamBytesUnicastRx2`**: Number of downstream unicast + bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +44. **`numDownstreamBytesUnicastRx3`**: Number of downstream unicast + bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +45. **`numDownstreamBytesUnicastTx0`**: Number of downstream unicast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +46. **`numDownstreamBytesUnicastTx1`**: Number of downstream unicast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +47. **`numDownstreamBytesUnicastTx2`**: Number of downstream unicast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +48. **`numDownstreamBytesUnicastTx3`**: Number of downstream unicast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +49. **`numDownstreamPacketsBroadcastDrop0`**: Number of downstream + broadcast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +50. **`numDownstreamPacketsBroadcastDrop1`**: Number of downstream + broadcast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +51. **`numDownstreamPacketsBroadcastDrop2`**: Number of downstream + broadcast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +52. **`numDownstreamPacketsBroadcastDrop3`**: Number of downstream + broadcast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +53. **`numDownstreamPacketsBroadcastGenerated0`**: Number of layer + generated downstream broadcast packets + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +54. **`numDownstreamPacketsBroadcastGenerated1`**: Number of layer + generated downstream broadcast packets + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +55. **`numDownstreamPacketsBroadcastGenerated2`**: Number of layer + generated downstream broadcast packets + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +56. **`numDownstreamPacketsBroadcastGenerated3`**: Number of layer + generated downstream broadcast packets + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +57. **`numDownstreamPacketsBroadcastRx0`**: Number of downstream + broadcast packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +58. **`numDownstreamPacketsBroadcastRx1`**: Number of downstream + broadcast packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +59. **`numDownstreamPacketsBroadcastRx2`**: Number of downstream + broadcast packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +60. **`numDownstreamPacketsBroadcastRx3`**: Number of downstream + broadcast packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +61. **`numDownstreamPacketsBroadcastTx0`**: Number of downstream + broadcast packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +62. **`numDownstreamPacketsBroadcastTx1`**: Number of downstream + broadcast packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +63. **`numDownstreamPacketsBroadcastTx2`**: Number of downstream + broadcast packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +64. **`numDownstreamPacketsBroadcastTx3`**: Number of downstream + broadcast packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +65. **`numDownstreamPacketsUnicastDrop0`**: Number of downstream + unicast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +66. **`numDownstreamPacketsUnicastDrop1`**: Number of downstream + unicast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +67. **`numDownstreamPacketsUnicastDrop2`**: Number of downstream + unicast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +68. **`numDownstreamPacketsUnicastDrop3`**: Number of downstream + unicast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +69. **`numDownstreamPacketsUnicastGenerated0`**: Number of layer + generated downstream unicast packets + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +70. **`numDownstreamPacketsUnicastGenerated1`**: Number of layer + generated downstream unicast packets + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +71. **`numDownstreamPacketsUnicastGenerated2`**: Number of layer + generated downstream unicast packets + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +72. **`numDownstreamPacketsUnicastGenerated3`**: Number of layer + generated downstream unicast packets + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +73. **`numDownstreamPacketsUnicastRx0`**: Number of downstream unicast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +74. **`numDownstreamPacketsUnicastRx1`**: Number of downstream unicast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +75. **`numDownstreamPacketsUnicastRx2`**: Number of downstream unicast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +76. **`numDownstreamPacketsUnicastRx3`**: Number of downstream unicast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +77. **`numDownstreamPacketsUnicastTx0`**: Number of downstream unicast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +78. **`numDownstreamPacketsUnicastTx1`**: Number of downstream unicast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +79. **`numDownstreamPacketsUnicastTx2`**: Number of downstream unicast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +80. **`numDownstreamPacketsUnicastTx3`**: Number of downstream unicast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +81. **`numDownstreamUnicastDataDiscardDueToRetries`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +82. **`numDownstreamUnicastDataDiscardDueToTxop`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +83. **`numDownstreamUnicastRtsCtsDataDiscardDueToRetries`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +84. **`numHighWaterMark0`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +85. **`numHighWaterMark1`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +86. **`numHighWaterMark2`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +87. **`numHighWaterMark3`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +88. **`numHighWaterMax0`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +89. **`numHighWaterMax1`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +90. **`numHighWaterMax2`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +91. **`numHighWaterMax3`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +92. **`numOneHopNbrHighWaterMark`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +93. **`numRxOneHopNbrListEvents`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +94. **`numRxOneHopNbrListInvalidEvents`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +95. **`numTwoHopNbrHighWaterMark`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +96. **`numTxOneHopNbrListEvents`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +97. **`numUnicastBytesTooLarge0`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +98. **`numUnicastBytesTooLarge1`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +99. **`numUnicastBytesTooLarge2`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +100. **`numUnicastBytesTooLarge3`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +101. **`numUnicastBytesUnsupported`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +102. **`numUnicastPacketsTooLarge0`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +103. **`numUnicastPacketsTooLarge1`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +104. **`numUnicastPacketsTooLarge2`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +105. **`numUnicastPacketsTooLarge3`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +106. **`numUnicastPacketsUnsupported`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +107. **`numUpstreamBroadcastDataDiscardDueToClobberRxDuringTx`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +108. **`numUpstreamBroadcastDataDiscardDueToClobberRxHiddenBusy`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +109. **`numUpstreamBroadcastDataDiscardDueToSinr`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +110. **`numUpstreamBroadcastDataNoiseHiddenRx`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +111. **`numUpstreamBroadcastDataNoiseRxCommon`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +112. **`numUpstreamBytesBroadcastRx0`**: Number of upstream broadcast + bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +113. **`numUpstreamBytesBroadcastRx1`**: Number of upstream broadcast + bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +114. **`numUpstreamBytesBroadcastRx2`**: Number of upstream broadcast + bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +115. **`numUpstreamBytesBroadcastRx3`**: Number of upstream broadcast + bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +116. **`numUpstreamBytesBroadcastTx0`**: Number of updtream broadcast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +117. **`numUpstreamBytesBroadcastTx1`**: Number of updtream broadcast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +118. **`numUpstreamBytesBroadcastTx2`**: Number of updtream broadcast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +119. **`numUpstreamBytesBroadcastTx3`**: Number of updtream broadcast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +120. **`numUpstreamBytesUnicastRx0`**: Number upstream unicast bytes + received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +121. **`numUpstreamBytesUnicastRx1`**: Number upstream unicast bytes + received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +122. **`numUpstreamBytesUnicastRx2`**: Number upstream unicast bytes + received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +123. **`numUpstreamBytesUnicastRx3`**: Number upstream unicast bytes + received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +124. **`numUpstreamBytesUnicastTx0`**: Number of upstream unicast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +125. **`numUpstreamBytesUnicastTx1`**: Number of upstream unicast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +126. **`numUpstreamBytesUnicastTx2`**: Number of upstream unicast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +127. **`numUpstreamBytesUnicastTx3`**: Number of upstream unicast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +128. **`numUpstreamPacketsBroadcastDrop0`**: Number of upstream + broadcast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +129. **`numUpstreamPacketsBroadcastDrop1`**: Number of upstream + broadcast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +130. **`numUpstreamPacketsBroadcastDrop2`**: Number of upstream + broadcast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +131. **`numUpstreamPacketsBroadcastDrop3`**: Number of upstream + broadcast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +132. **`numUpstreamPacketsBroadcastRx0`**: Number of upstream + broadcast packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +133. **`numUpstreamPacketsBroadcastRx1`**: Number of upstream + broadcast packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +134. **`numUpstreamPacketsBroadcastRx2`**: Number of upstream + broadcast packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +135. **`numUpstreamPacketsBroadcastRx3`**: Number of upstream + broadcast packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +136. **`numUpstreamPacketsBroadcastTx0`**: Number of upstream + broadcast packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +137. **`numUpstreamPacketsBroadcastTx1`**: Number of upstream + broadcast packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +138. **`numUpstreamPacketsBroadcastTx2`**: Number of upstream + broadcast packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +139. **`numUpstreamPacketsBroadcastTx3`**: Number of upstream + broadcast packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +140. **`numUpstreamPacketsUnicastDrop0`**: Number of upstream unicast + packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +141. **`numUpstreamPacketsUnicastDrop1`**: Number of upstream unicast + packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +142. **`numUpstreamPacketsUnicastDrop2`**: Number of upstream unicast + packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +143. **`numUpstreamPacketsUnicastDrop3`**: Number of upstream unicast + packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +144. **`numUpstreamPacketsUnicastRx0`**: Number upstream unicast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +145. **`numUpstreamPacketsUnicastRx1`**: Number upstream unicast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +146. **`numUpstreamPacketsUnicastRx2`**: Number upstream unicast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +147. **`numUpstreamPacketsUnicastRx3`**: Number upstream unicast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +148. **`numUpstreamPacketsUnicastTx0`**: Number of upstream unicast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +149. **`numUpstreamPacketsUnicastTx1`**: Number of upstream unicast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +150. **`numUpstreamPacketsUnicastTx2`**: Number of upstream unicast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +151. **`numUpstreamPacketsUnicastTx3`**: Number of upstream unicast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +152. **`numUpstreamUnicastDataDiscardDueToClobberRxDuringTx`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +153. **`numUpstreamUnicastDataDiscardDueToClobberRxHiddenBusy`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +154. **`numUpstreamUnicastDataDiscardDueToSinr`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +155. **`numUpstreamUnicastDataNoiseHiddenRx`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +156. **`numUpstreamUnicastDataNoiseRxCommon`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +157. **`numUpstreamUnicastRtsCtsDataRxFromPhy`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +158. **`numUpstreamUnicastRtsCtsRxFromPhy`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +159. **`processedConfiguration`**: The number of processed + configuration. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +160. **`processedDownstreamControl`**: The number of processed + downstream control. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +161. **`processedDownstreamPackets`**: The number of processed + downstream packets. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +162. **`processedEvents`**: The number of processed events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +163. **`processedTimedEvents`**: The number of processed timed events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +164. **`processedUpstreamControl`**: The number of processed upstream + control. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +165. **`processedUpstreamPackets`**: The number of processed upstream + packets. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + + + + +## Statistic Tables + +1. **`BroadcastPacketAcceptTable0`**: Broadcast packets accepted + + ```no-highlighting + Clearable: yes + ``` + +2. **`BroadcastPacketAcceptTable1`**: Broadcast packets accepted + + ```no-highlighting + Clearable: yes + ``` + +3. **`BroadcastPacketAcceptTable2`**: Broadcast packets accepted + + ```no-highlighting + Clearable: yes + ``` + +4. **`BroadcastPacketAcceptTable3`**: Broadcast packets accepted + + ```no-highlighting + Clearable: yes + ``` + +5. **`BroadcastPacketDropTable0`**: Broadcast packets dropped by + reason code + + ```no-highlighting + Clearable: yes + ``` + +6. **`BroadcastPacketDropTable1`**: Broadcast packets dropped by + reason code + + ```no-highlighting + Clearable: yes + ``` + +7. **`BroadcastPacketDropTable2`**: Broadcast packets dropped by + reason code + + ```no-highlighting + Clearable: yes + ``` + +8. **`BroadcastPacketDropTable3`**: Broadcast packets dropped by + reason code + + ```no-highlighting + Clearable: yes + ``` + +9. **`EventReceptionTable`**: Received event counts + + ```no-highlighting + Clearable: yes + ``` + +10. **`NeighborMetricTable`**: Neighbor Metric Table + + ```no-highlighting + Clearable: no + ``` + +11. **`NeighborStatusTable`**: Neighbor Status Table + + ```no-highlighting + Clearable: no + ``` + +12. **`OneHopNeighborTable`**: Current One Hop Neighbors + + ```no-highlighting + Clearable: no + ``` + +13. **`TwoHopNeighborTable`**: Current Two Hop Neighbors + + ```no-highlighting + Clearable: no + ``` + +14. **`UnicastPacketAcceptTable0`**: Unicast packets accepted + + ```no-highlighting + Clearable: yes + ``` + +15. **`UnicastPacketAcceptTable1`**: Unicast packets accepted + + ```no-highlighting + Clearable: yes + ``` + +16. **`UnicastPacketAcceptTable2`**: Unicast packets accepted + + ```no-highlighting + Clearable: yes + ``` + +17. **`UnicastPacketAcceptTable3`**: Unicast packets accepted + + ```no-highlighting + Clearable: yes + ``` + +18. **`UnicastPacketDropTable0`**: Unicast packets dropped by reason + code + + ```no-highlighting + Clearable: yes + ``` + +19. **`UnicastPacketDropTable1`**: Unicast packets dropped by reason + code + + ```no-highlighting + Clearable: yes + ``` + +20. **`UnicastPacketDropTable2`**: Unicast packets dropped by reason + code + + ```no-highlighting + Clearable: yes + ``` + +21. **`UnicastPacketDropTable3`**: Unicast packets dropped by reason + code + + ```no-highlighting + Clearable: yes + ``` + + + +## Examples + +This guide includes the IEEE 802.11abg example: + +1. `ieee80211abg-01`: A three node example using precomputed pathloss and + running the B.A.T.M.A.N manet protocol with a jammer and monitor node. + +### ieee80211abg-01 + +![](images/auto-generated-topology-ieee80211abg-01.png){: width="65%"; .centered} +

    ieee80211abg-01 experiment components: Three nodes with one host each, monitor node, and jammer node.


    + +The `ieee80211abg-01` example contains three nodes, each with a host +hanging off their respective `lan0` interface, a jammer node, and +monitor node. + +All physical layers are configured to use the `precomputed` propagation +model and `emaneeventservice` publishes [`PathlossEvents`](events#pathlossevent) +using the values in `pathloss.eel`. + +```text +0.0 nem:1 pathloss nem:2,70 +0.0 nem:1 pathloss nem:3,75 +0.0 nem:1 pathloss nem:4,70 +0.0 nem:1 pathloss nem:5,70 + +0.0 nem:2 pathloss nem:3,70 +0.0 nem:2 pathloss nem:4,70 +0.0 nem:2 pathloss nem:5,70 + +0.0 nem:3 pathloss nem:4,70 +0.0 nem:3 pathloss nem:5,70 + +0.0 nem:4 pathloss nem:5,70 +``` +

    emane-guide/examples/ieee80211abg-01/pathloss.eel


    + +![](images/auto-generated-run-ieee80211abg-01.png){: width="75%"; .centered} + +With `emane-guide/examples/ieee80211abg-01` running, we can use +`otestpoint-labtools-mtabletool` to subscribe to all +`EMANE.IEEE80211abg.Tables.Neighbor` probes, and build a combined +Neighbor interval average SINR table showing the number of received +packets in each measurement interval and the measurement interval +average computed from long running averages of SINR. + +```text +$ otestpoint-labtools-mtabletool \ + localhost:9002 \ + Measurement_emane_ieee80211abg_tables_neighbor@neighbormetrictable \ + EMANE.IEEE80211abg.Tables.Neighbor \ + --actions \ + "pass(c=(0));" \ + "delta(c=(1))=>|{}_intvl|;" \ + "iavg(c=(7),n=(1))=>|{}_intvl|;" +``` + +The displayed combined neighbor interval average SINR table shows a +lower SINR between `node-1` and `node-3` due to the higher pathloss +between the nodes, 75dB, as compared to 70dB between all other nodes. + +```text + Measurement_emane_ieee80211abg_tables_neighbor@neighbormetrictable + _Publisher NEM Rx Pkts_intvl SINR Avg_intvl +0 node-1 2 29 26.9897 +1 node-1 3 29 21.9897 +2 node-1 65535 0 NaN +3 node-2 1 29 26.9897 +4 node-2 3 29 26.9897 +5 node-2 65535 0 NaN +6 node-3 1 29 21.9897 +7 node-3 2 29 26.9897 +8 node-3 65535 0 NaN + ``` + +We can monitor the B.A.T.M.A.N. Next Hop Matrix using +`batman-nexthop-monitor.py`. + +```text +$ ~/dev/emane-guide/examples/scripts/batman-nexthop-monitor.py 3 +``` + +The displayed matrix shows the node reporting it's next hops +(`Reporter`) followed by column for each final destination, where '`--`' +indicates the self-identify entry, '`*`' indicates the final destination +is the next hop, and a *node id* indicates the next hop to the +destination. + +```text +== B.A.T.M.A.N. Next Hop Matrix == ++----------------+----------+----------+----------+ +| Reporter | 1 | 2 | 3 | ++----------------+----------+----------+----------+ +| 1 | -- | * | * | +| 2 | * | -- | * | +| 3 | * | * | -- | ++----------------+----------+----------+----------+ +``` + +As shown, the network is fully informed with all nodes a single hop +from each other. + +Using `emane-jammer-simple-control`, we can instruct the jammer, +`node-4`, to create a continuous tone centered at 2.39GHz with a 20MHz +(default) bandwidth, and -20dBm transmit power. + +```text +$ emane-jammer-simple-control -v node-4:45715 on 4 2390000000,-20 -a omni +``` + +The resulting tone can be viewed using the monitor, `node-5`, and +`emane-spectrum-analyzer`. + +```text +$ emane-spectrum-analyzer \ + 10.99.0.5:8883 \ + -100 \ + --with-waveforms \ + --hz-min 2350000000 \ + --hz-max 2500000000 \ + --subid-name 1,IEEE802.11 +``` + +![](images/ieee80211abg-01-emane-spectrum-monitor.png){:width="75%"; .centered} +

    Monitor view of spectrum during jamming activity.


    + +From the combined neighbor interval average SINR table, we can see +that the SINR between all nodes drops by ~4dB. + +```text + _Publisher NEM Rx Pkts_intvl SINR Avg_intvl +0 node-1 2 30 23.0103 +1 node-1 3 29 18.0103 +2 node-1 65535 0 NaN +3 node-2 1 30 23.0103 +4 node-2 3 29 23.0103 +5 node-2 65535 0 NaN +6 node-3 1 30 18.0103 +7 node-3 2 30 23.0103 +8 node-3 65535 0 NaN + ``` + +For `node-1` and `node-3` this drop in SINR has big implications when +running at 54Mbps. + +```text +$ emanesh node-1 get config nems mac mode unicastrate multicastrate +nem 1 mac mode = 3 +nem 1 mac multicastrate = 12 +nem 1 mac unicastrate = 12 +``` + +Since the bidirectional link between `node-1` and `node-3` started at +a higher pathloss, the change in SINR from 21.9dB to 18.01dB results +in a probability of reception of almost 0. This can be verified by +consulting +`emane-guide/examples/rfpipe-01/node-1/emane-ieee80211abg-pcr.xml`. + +All nodes in this example are using the same PCR definitions. For +54Mbps, an SINR of 21dB results in 71.3% probability of reception and an +SINR of 18dB results in 0.2% probability of reception. + +This can be seen in the B.A.T.M.A.N. Next Hop Matrix, where now +`node-1` and `node-3` must hop through `node-2` in order to complete +traffic. + + + +```text +== B.A.T.M.A.N. Next Hop Matrix == ++----------------+----------+----------+----------+ +| Reporter | 1 | 2 | 3 | ++----------------+----------+----------+----------+ +| 1 | -- | * | 2 | +| 2 | * | -- | * | +| 3 | 2 | * | -- | ++----------------+----------+----------+----------+ +``` + +One way to restore single hop connectivity between `node-1` and +`node-3` is to reduce their data rate, which causes a different PCR +curve to be used. Setting both nodes to 36Mbps will result in 100% +probability of reception for SINR greater than or equal to 18dB. + +```text +$ emanesh node-1 set config nems mac unicastrate=10 multicastrate=10 && \ + emanesh node-3 set config nems mac unicastrate=10 multicastrate=10 +``` + +The B.A.T.M.A.N. Next Hop Matrix now shows `node-1` and `node-3` +directly connected. + +```text +== B.A.T.M.A.N. Next Hop Matrix == ++----------------+----------+----------+----------+ +| Reporter | 1 | 2 | 3 | ++----------------+----------+----------+----------+ +| 1 | -- | * | * | +| 2 | * | -- | * | +| 3 | * | * | -- | ++----------------+----------+----------+----------+ +``` + diff --git a/guide/site/images b/guide/site/images new file mode 120000 index 0000000..5e67573 --- /dev/null +++ b/guide/site/images @@ -0,0 +1 @@ +../images \ No newline at end of file diff --git a/guide/site/introduction.md b/guide/site/introduction.md new file mode 100644 index 0000000..47799fb --- /dev/null +++ b/guide/site/introduction.md @@ -0,0 +1,208 @@ +--- +layout: default +title: Introduction +nav_order: 3 +permalink: /introduction +--- + + +# Introduction + +The *Extendable Mobile Ad-hoc Network Emulator* (*EMANE*) is an +open source distributed emulation framework which provides wireless +network experimenters with a highly flexible modular environment for +use during the design, development and testing of simple and complex +network architectures. *EMANE* uses a physical layer model to account +for signal propagation, antenna profile effects and interference +sources to create a realistic emulated electromagnetic operating +environment. + +*EMANE* is a Linux user space application that uses a radio model +plugin along with its physical layer model to emulate the lowest layer +of a waveform. A running *EMANE* instance, specifically its radio +model plugin, can be combined with existing Software Defined Radio +(SDR) implementation components to support high fidelity shared code +experimentation. + +At its core, *EMANE* consists of three major subsystems: [*emulation +processing*](#emulation-processing) concerning all necessary +functionality to represent the electromagnetic properties of the radio +waveform; [*boundary processing*](#boundary-processing) providing the +connections (mechanisms/APIs) used by applications and/or protocols to +access the emulated waveform; and [*event +processing*](#event-processing) controlling emulation environmental +characteristics such as pathloss, location, orientation and velocity. + +![](images/emane.png){:width="75%"; .centered} +

    Example EMANE deployments.


    + +## Emulation Processing + +*EMANE* emulation processing consists of pairing a *physical layer +model* instantiation with a *radio model* instantiation. The emulator +application, `emane`, processes a configuration file in order to +determine the type of radio model to load, how the radio model and +physical layer instance should be configured and what general +application level settings to apply. + +When the emulator instantiates a radio model plugin, it along with a +dedicated instance of the emulator's physical layer, are placed in an +internal structure called a *Network Emulation Module* (*NEM*). Each +*NEM* is configured with a unique unsigned 16-bit identifier (*NEM +id*) that operates as the emulation address of the experiment node's +`emane` instance. Valid *NEM id* range is $$[1,65534]$$, with 0 +being invalid and 65535 (all-1s) indicating the *NEM* broadcast +destination. + +Physical layer instances are interconnected using an *Over-The-Air* +(OTA) multicast channel. All OTA messages are processed by every +emulator instance using the same OTA multicast channel. This is how +the emulator physical layer accounts for signal propagation, antenna +effects and interference sources across heterogeneous radio models. + +Each radio model operates differently, but in general, a model +receives a message from a process outside the emulation to transmit +over the air and sends the message to it's physical layer instance for +transmission over the OTA multicast channel (possibly after the radio +model performs a channel access function). All emulator instances +using the same OTA multicast channel receive the message and perform a +receive power test. Those physical layer instances that determine the +message receive power was greater than the receiver sensitivity either +categorize the message as noise or as a valid *in-band* waveform +signal. An *in-band* signal in the context of *EMANE* refers to a +signal that can be properly decoded by the receiver based on waveform +transmission properties such as modulation, frequency, and +transec. Valid waveform signals are sent to the receiving radio model +for additional processing. Most radio models then employ *Bit Error +Rate* (BER) curves based on the message *Signal to Noise and +Interference Ratio* (SINR) as part of the decision as to whether or +not to deliver the message to the corresponding process outside the +emulation. + +The term *process outside the emulation* is used to refer to a process +not running as a plugin within the emulator but that is somehow +connected to (using) the emulator. A process outside the emulation +would typically not know it was connected to or routing through an +emulation, and can be the same application that is run with physical +radio hardware. + +*EMANE* uses the term *downstream packet message* for messages headed +towards the OTA multicast channel for over-the-air transmission and +the term *upstream packet message* for over-the-air messages received +by the OTA multicast channel and headed for further +processing. *Downstream packet messages* may originate from a *process +outside the emulation* or from a radio model and may be destined, as +an *upstream packet message*, for a *process outside the emulation* +associated with the receiving *NEM* or the receiving radio model. + +A radio model can send a control message to its corresponding physical +layer to manage and control various aspects of the radio +behavior. These messages are referred to as *downstream control +messages*. A physical layer instance can also send a message to its +corresponding radio model referred to as an *upstream control +message*. + +The open source *EMANE* distribution contains four radio models: +[RF Pipe Model](rf-pipe-radio-model#rf-pipe-radio-model), +[IEEE 802.11abg Model](ieee80211abg-radio-model#ieee-802.11abg-radio-model), +[TDMA Model](tdma-radio-model#tdma-radio-model), +and [Bent Pipe Model](bent-pipe-radio-model#bent-pipe-radio-model); +and one utility model: [Comm Effect Model](comm-effect-utility-model#comm-effect-utility-model). + +## Boundary Processing + +The emulation boundary is the emulation component responsible for +delivering messages between an emulator instance and one or more +processes outside the emulation. Historically this component has been +referred to as a *transport*. Boundaries provide the entry and exit +point for messages sent between the emulator and processes outside the +emulation. + +Think of the emulation boundary as the first component encountered by +a messages on its *downstream* travel that knows it is entering an +emulation or in the upstream direction, the last component that knows +a message traversed an emulation. + +Boundary plugins can either be instantiated internally as part of the +emulator process or externally as part of some other application. When +instantiated internally, boundary plugins are configured in the same +manner as radio model and physical layer instances, and are contained +in the same *NEM* structure as their respective radio model and physical +layer instance. + +The *EMANE* distribution contains two boundaries: [Raw Transport](raw-transport#raw-transport) and +[Virtual Transport](virtual-transport#virtual-transport). + +*EMANE* supports IP and non-IP wireless system emulation. The +mechanisms and messages *processes outside the emulation* use and +those boundaries are required to support in order to interact with +*processes outside the emulation* vary. However, once a boundary has a +message to deliver, they all generally do the same thing. In the +downstream direction, a boundary must determine the *NEM id* for the +message next hop (which may be the *NEM* broadcast address) and send +the message to its respective *NEM* along with the source and +destination *NEM ids*. In the upstream direction, a boundary must +determine the process outside the emulation to receive the message and +send it. + +As messages from processes outside the emulation enter through a +boundary they lose their form and are sent through the emulator as an +opaque payload of a specified size. The boundary is the only component +in the emulator that can read and write outside-the-emulation-message +specifics. + +For example, the [Virtual Transport](virtual-transport#virtual-transport), uses the +[TUN/TAP](https://www.kernel.org/doc/Documentation/networking/tuntap.txt) +interface to create a *virtual interface* (*vif*) as the boundary +entry/exit point. In the downstream direction, ethernet frames routed +to the *vif* by the kernel are packaged into messages and sent to the +appropriate *NEM* for processing. In the upstream direction, *NEM* +messages are unpackaged and written to the TUN/TAP interface as +ethernet frames. + +Boundaries are not limited to plugins loaded internally by the +emulator. When connecting *Software Defined Radio* (SDR) waveforms to +*EMANE*, custom boundaries are developed and embedded within the SDR, +typically at the *Modem Hardware Abstraction Layer* (MHAL) or +equivalent. *EMANE* provides application level APIs to simplify +developing custom boundaries. + +It is also possible to encounter a radio model that does not use a +boundary in the traditional sense. *EMANE* plugins have access to a +*File Descriptor Service* which allows a plugin to connect a file +descriptor, such as a socket handle, to the plugin processing loop -- +often referred to as the *functor queue*. This technique is especially +useful in shared code emulation when the SDR uses a message passing +architecture to communicate between component layers. + +## Event Processing + +In order to be interesting, a running emulation requires a scenario. A +scenario is a set of *events* that are sent to one or more *NEMs* to +change environmental characteristics. Events are delivered opaquely to +registered radio model and physical layer instances. Individual radio +models may use their own specialized events, but whenever possible, +developers are advised to reuse *EMANE* standard events over creating +new events that provide the same capability. + +The *EMANE* distribution contains four events used by the physical layer: [Antenna Profile](events#antennaprofileevent), +[Location](events#locationevent), +[Pathloss](events#pathlossevent), + and +[Fading Selection](events#fadingselectionevent). + +Additionally, the [Comm Effect](events#comm-effect-event) and +[TDMA Schedule](events#tdma-schedule-event) +events are model specific events used to communicate link characteristics and TDMA +schedules, for the Comm Effect utility model and TDMA radio model respectively. + +Events are created by event generator plugins using the *Event +Service*. The *Event Service* application, `emaneeventservice`, +processes a configuration file in order to determine the types of +event generator plugins to instantiate, how the plugins should be +configured and what general application level settings to apply. + +The *EMANE* distribution contains one event generator that will create +all the standard events: [EEL Event Generator](eel-event-generator#eel-event-generator). Additionally, you can use the +Python `emane.events` module to create custom event generating +applications. diff --git a/guide/site/license.md b/guide/site/license.md new file mode 100644 index 0000000..331a6a1 --- /dev/null +++ b/guide/site/license.md @@ -0,0 +1,58 @@ +--- +layout: default +title: License +nav_order: 18 +permalink: /license +--- + +**The *EMANE Guide* is licensed under the following terms:** + +Copyright © 2014-2023 - Adjacent Link LLC, Bridgewater, New Jersey +All rights reserved + +Except where otherwise noted, this work (the *EMANE Guide*) is licensed +under [Creative Commons Attribution 4.0 International +License](https://creativecommons.org/licenses/by/4.0/). + +**All source code accompanying the *EMANE Guide* is released under the +following BSD 3-clause license:** + +Copyright © 2014-2023 - Adjacent Link LLC, Bridgewater, New Jersey +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* 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. + +* Neither the name of Adjacent Link LLC nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +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. + +**Portions of the *EMANE Guide* derive from *EMANE User Manual 0.8.1* +which has the following license:** + +Copyright © 2013 - Adjacent Link LLC, Bridgewater, New Jersey +Copyright © 2012 - DRS CenGen, LLC, Bridgewater, New Jersey + +This work is licensed under the [Creative Commons Attribution 3.0 +Unported License](http://creativecommons.org/licenses/by/3.0/). diff --git a/guide/site/paradigms.md b/guide/site/paradigms.md new file mode 100644 index 0000000..ded35a6 --- /dev/null +++ b/guide/site/paradigms.md @@ -0,0 +1,514 @@ +--- +layout: default +title: EMANE Paradigms +nav_order: 4 +permalink: /emane-paradigms +--- + + +# EMANE Paradigms + +All *EMANE* components, applications and plugins, use common +mechanisms to define, register, and access configuration parameters, +statistics, and statistic tables. This commonality creates +recognizable patterns in how you interact with a running emulation. + +## Configuration + +All *EMANE* components use the [`ConfigurationRegistrar`](https://github.com/adjacentlink/emane/blob/master/include/emane/configurationregistrar.h#L56) to register configuration parameters. + +```cpp +namespace EMANE +{ + class ConfigurationRegistrar + { + public: + virtual ~ConfigurationRegistrar(); + + template + void registerNumeric(const std::string & sName, + const ConfigurationProperties & properties = ConfigurationProperties::NONE, + const std::initializer_list & values = {}, + const std::string & sUsage = "", + T minValue = std::numeric_limits::lowest(), + T maxValue = std::numeric_limits::max(), + std::size_t minOccurs = 1, + std::size_t maxOccurs = 1, + const std::string & sRegexPattern = {}); + template + void registerNonNumeric(const std::string & sName, + const ConfigurationProperties & properties = ConfigurationProperties::NONE, + const std::initializer_list & values = {}, + const std::string & sUsage = "", + std::size_t minOccurs = 1, + std::size_t maxOccurs = 1, + const std::string & sRegexPattern = {}); + + virtual void registerValidator(ConfigurationValidator validator) = 0; + + }; +} +``` +

    emane/include/emane/configurationregistrar.h


    + +There are two registration template methods which allow components to +register numeric and non-numeric configuration items: [`registerNumeric`](https://github.com/adjacentlink/emane/blob/master/include/emane/configurationregistrar.h#L81) and [`registerNonNumeric`](https://github.com/adjacentlink/emane/blob/master/include/emane/configurationregistrar.h#L105), respectively. + +Numeric configuration item types may be any of the following: + +* `std::int64_t` +* `std::int32_t` +* `std::int16_t` +* `std::int8_t` +* `std::uint64_t` +* `std::uint32_t` +* `std::uint16_t` +* `std::uint8_t` +* `bool` +* `float` +* `double` + +Non-numeric configuration item types are limited to: + +* `std::string` +* [`INETAddr`](https://github.com/adjacentlink/emane/blob/master/include/emane/inetaddr.h#L43) + +Both calls have parameters to specify a description string, zero or +more default values, minimum and maximum occurrence counts +(multiplicity), item properties such as running-state modifiable and a +regex for further validation. Additionally, [`registerNumeric`](https://github.com/adjacentlink/emane/blob/master/include/emane/configurationregistrar.h#L81) adds support for +specifying a value range. + +Configuration properties may be *or*-combined (`||`): + +* `NONE`: No properties. +* `REQUIRED`: The parameter is required. No effect when combined with `DEFAULT`. +* `DEFAULT`: One or more default values are specified. +* `MODIFIABLE`: Values may be modified while the emulator is in the + running state. + +The emulator enforces data type, value range, occurrence count, regex +match and running-state modification permission without any component +interaction, so radio models do not require code to guard against +these conditions. + +Below is a snippet of the configuration parameter registration within the [RF Pipe](rf-pipe-radio-model#rf-pipe-radio-model) radio model: + +```cpp + auto & configRegistrar = registrar.configurationRegistrar(); + + configRegistrar.registerNumeric("enablepromiscuousmode", + ConfigurationProperties::DEFAULT | + ConfigurationProperties::MODIFIABLE, + {false}, + "Defines whether promiscuous mode is enabled or not." + " If promiscuous mode is enabled, all received packets" + " (intended for the given node or not) that pass the" + " probability of reception check are sent upstream to" + " the transport."); + + configRegistrar.registerNumeric("datarate", + ConfigurationProperties::DEFAULT | + ConfigurationProperties::MODIFIABLE, + {1000000}, + "Defines the transmit datarate in bps." + " The datarate is used by the transmitter" + " to compute the transmit delay (packet size/datarate)" + " between successive transmissions.", + 1); + +``` +

    emane/src/models/mac/rfpipe/maclayer.cc lines: 116-137


    + +Two running-state modifiable configuration variables are declared, +each with a default value and description. Additionally, the +`datarate` configuration parameter has a minimum value specified. + +The *EMANE* configuration registration paradigm is used by all *EMANE* +models, components, and applications, and its standardization makes it +possible to have a standardized XML configuration file format processed +directly by the emulator. + +Below is `node-1`'s radio model XML from the `rfpipe-01` example +illustrating how `enablepromiscuousmode` and `datarate` configuration +parameters are set: + +```xml + + + + + + + + + + +``` +

    emane-guide/examples/rfpipe-01/node-1/emane-rfpipe-radiomodel.xml


    + +All configuration parameters in *EMANE* XML use a `` element +with a `name` and `value` attribute, or for a configuration parameter +with multiple values --- `` with `name` attribute and a +sequence of `` elements each with a `value` attribute. Where, +`name` matches the name given during configuration registration and +`value` is the configured value. + +The following [Bent Pipe Model](bent-pipe-radio-model#bent-pipe-radio-model) +XML snippet shows how `` is used for configuration +parameters with more than one value: + +```xml + + + + + + + +``` +

    emane-guide/examples/bentpipe-02/node-2/emane-bentpipe-radiomodel.xml lines: 7-13


    + +### Querying/Modifying Configuration + +Running `emane-guide/examples/rfpipe-01`, the `emanesh` application is +uded to connect to a running `emane` instance and query and/or clear +statistics. + +![](images/auto-generated-run-rfpipe-01.png){: width="75%"; .centered} + +To establish an shell connection and query one ore more configuration +parameters of a running radio model: + +```text +$ emanesh node-1 +[emanesh (node-1:47000)] ## get config nems mac +nem 1 mac datarate = 150000000 +nem 1 mac delay = 0.0 +nem 1 mac enablepromiscuousmode = False +nem 1 mac flowcontrolenable = False +nem 1 mac flowcontroltokens = 10 +nem 1 mac jitter = 0.0 +nem 1 mac neighbormetricdeletetime = 60.0 +nem 1 mac pcrcurveuri = emane-rfpipe-pcr.xml +nem 1 mac radiometricenable = False +nem 1 mac radiometricreportinterval = 1.0 +nem 1 mac rfsignaltable.averageallantennas = False +nem 1 mac rfsignaltable.averageallfrequencies = False +``` + +You can also use `emanesh` to issue any command as one-shot from the +command line: + +```text +$ emanesh node-1 get config nems mac jitter datarate +nem 1 mac datarate = 150000000 +nem 1 mac jitter = 0.0 +``` + +To change one or more configuration parameters of a running radio +model: + +```text +[emanesh (node-1:47000)] ## set config nems mac delay=1.5 +nem 1 mac configuration updated + +[emanesh (node-1:47000)] ## get config nems mac delay +nem 1 mac delay = 1.5 +``` + +To query the configuration parameter descriptions of a running radio +model: + +```text +[emanesh (node-1:47000)] ## info config rfpipemaclayer delay + + Configuration parameter information for rfpipemaclayer delay + + Defines an additional fixed delay in seconds applied to each + transmitted packet. + + default : True + required : False + modifiable: True + type : float + range : [0.000000,340282346638528859811704183484516925440.000000] + regex : + occurs : [1,1] + default : 0.000000 +``` + +## Statistics + +All *EMANE* components use the [`StatisticRegistrar`](https://github.com/adjacentlink/emane/blob/master/include/emane/statisticregistrar.h#L59) to register statistics. + +```cpp +namespace EMANE +{ + class StatisticRegistrar + { + public: + virtual ~StatisticRegistrar(){} + + template + StatisticNumeric * registerNumeric(const std::string & sName, + const StatisticProperties & properties = StatisticProperties::NONE, + const std::string & sDescription = ""); + + template + StatisticNonNumeric * registerNonNumeric(const std::string & sName, + const StatisticProperties & properties = StatisticProperties::NONE, + const std::string & sDescription = ""); + + template, + std::size_t scolumn = 0> + StatisticTable * + registerTable(const std::string & sName, + const StatisticTableLabels & labels, + const StatisticProperties & properties = StatisticProperties::NONE, + const std::string & sDescription = ""); + + template, + std::size_t scolumn = 0> + StatisticTable * + registerTable(const std::string & sName, + const StatisticTableLabels & labels, + Function clearFunc, + const std::string & sDescription = ""); + + }; +} +``` +

    emane/include/emane/statisticregistrar.h


    + +There are two registration template methods which allow components to +register numeric and non-numeric statistics: [`registerNumeric`](https://github.com/adjacentlink/emane/blob/master/include/emane/statisticregistrar.h#L82) and [`registerNonNumeric`](https://github.com/adjacentlink/emane/blob/master/include/emane/statisticregistrar.h#L102), respectively. + +Numeric statistic types may be any of the following: + +* `std :int64_t` +* `std::int32_t` +* `std::int16_t` +* `std::int8_t` +* `std::uint64_t` +* `std::uint32_t` +* `std::uint16_t` +* `std::uint8_t` +* `bool` +* `float` +* `double` + +Non-numeric statistic types are limited to: + +* `std::string` +* [`INETAddr`](https://github.com/adjacentlink/emane/blob/master/include/emane/inetaddr.h#L43) + +Both calls have parameters to specify the statistic name, properties, +and an optional description string. + +Statistic properties are one of the following: + +* `NONE`: No properties. +* `CLEARABLE`: The value is clearable while the emulator is in the + running state. + +Below is a snippet of statistic registration from the [RF Pipe](rf-pipe-radio-model#rf-pipe-radio-model) radio model: + +```cpp + pNumHighWaterMark_ = + statisticRegistrar.registerNumeric("numHighWaterMark", + StatisticProperties::CLEARABLE); +``` +

    emane/src/models/mac/rfpipe/downstreamqueue.cc lines: 55-57


    + +An unsigned 32-bit integer statistic variable is declared with the +`CLEARABLE` propriety. No description is specified. + +### Querying/Clearing Statistics + +Running `emane-guide/examples/rfpipe-01`, we can use the `emanesh` +application to connect to a running `emane` instance and query and/or +clear statistics. + +![](images/auto-generated-run-rfpipe-01.png){: width="75%"; .centered} + +To establish an shell connection to query the statistics of a running +radio model: + +```text +$ emanesh node-1 +[emanesh (node-1:47000)] ## get stat nems mac +nem 1 mac avgDownstreamProcessingDelay0 = 9148752.0 +nem 1 mac avgDownstreamQueueDelay = 9148752.0 +nem 1 mac avgProcessAPIQueueDepth = 1.2433922547802265 +nem 1 mac avgProcessAPIQueueWait = 50.888313472666326 +nem 1 mac avgTimedEventLatency = 142.49969021065615 +nem 1 mac avgTimedEventLatencyRatio = 0.2250635999012512 +nem 1 mac avgUpstreamProcessingDelay0 = 19.191591262817383 +nem 1 mac numAPIQueued = 11354 + +... + +nem 1 mac processedConfiguration = 1 +nem 1 mac processedDownstreamControl = 0 +nem 1 mac processedDownstreamPackets = 24499 +nem 1 mac processedEvents = 0 +nem 1 mac processedTimedEvents = 3228 +nem 1 mac processedUpstreamControl = 0 +nem 1 mac processedUpstreamPackets = 85813 +``` + +To clear those statistics that were registered as `CLEARABLE`: + +```text +[emanesh (node-1:47000)] ## clear stat nems mac +nem 1 mac statistics cleared +``` + +To query the statistic descriptions of a running radio model: + +```text +emanesh (node-1:47000)] ## info stat rfpipemaclayer numHighWaterMark + + Statistic element information for rfpipemaclayer numHighWaterMark + + + clearable : True + type : uint32 +``` + +## Statistic Tables + +All *EMANE* components use the [`StatisticRegistrar`](https://github.com/adjacentlink/emane/blob/master/include/emane/statisticregistrar.h#L59) to register statistic tables. + +```cpp +namespace EMANE +{ + class StatisticRegistrar + { + public: + virtual ~StatisticRegistrar(){} + + template + StatisticNumeric * registerNumeric(const std::string & sName, + const StatisticProperties & properties = StatisticProperties::NONE, + const std::string & sDescription = ""); + + template + StatisticNonNumeric * registerNonNumeric(const std::string & sName, + const StatisticProperties & properties = StatisticProperties::NONE, + const std::string & sDescription = ""); + + template, + std::size_t scolumn = 0> + StatisticTable * + registerTable(const std::string & sName, + const StatisticTableLabels & labels, + const StatisticProperties & properties = StatisticProperties::NONE, + const std::string & sDescription = ""); + + template, + std::size_t scolumn = 0> + StatisticTable * + registerTable(const std::string & sName, + const StatisticTableLabels & labels, + Function clearFunc, + const std::string & sDescription = ""); + + }; +} +``` +

    emane/include/emane/statisticregistrar.h


    + +There are two template methods for registering a statistic table, both +named `registerTable`. Both methods have parameters for specifying the +table name, column labels, and an optional description. One version +includes table properties and the other is specifically for +`CLEARABLE` tables with a callback to invoke when a table is cleared. + +All rows in a statistic table must have the same number of columns, +where each row value may be of any type allowed for an individual +statistic. + +Below is a snippet of statistic table registration from the [Physical Layer](physical-layer#physical-layer): + +```cpp + pPathlossTable_ = + statisticRegistrar.registerTable("PathlossEventInfoTable", + {"NEM","Forward Pathloss","Reverse Pathloss"}, + StatisticProperties::NONE, + "Shows the precomputed pathloss information received"); + + pAntennaProfileTable_ = + statisticRegistrar.registerTable("AntennaProfileEventInfoTable", + {"NEM","Antenna Profile","Antenna Azimuth","Antenna Elevation"}, + StatisticProperties::NONE, + "Shows the antenna profile information received"); + + pFadingSelectionTable_ = + statisticRegistrar.registerTable("FadingSelectionInfoTable", + {"NEM","Model"}, + StatisticProperties::NONE, + "Shows the selected fading model information received"); + +``` +

    emane/src/libemane/eventtablepublisher.cc lines: 47-64


    + +These registered statistic tables provide the current event +information used by the model. Each table uses an *NEM id* key and is +not clearable. + +### Querying/Clearing Statistic Tables + +Running `emane-guide/examples/rfpipe-01`, the `emanesh` application is +used to connect to a running `emane` instance and query and/or clear +statistic tables. + +![](images/auto-generated-run-rfpipe-01.png){: width="75%"; .centered} + +To establish an shell connection to query statistic tables of a +running radio model: + +```text +$ emanesh node-1 +[emanesh (node-1:47000)] ## get table nems phy LocationEventInfoTable PathlossEventInfoTable AntennaProfileEventInfoTable +nem 1 phy AntennaProfileEventInfoTable +| NEM | Antenna Profile | Antenna Azimuth | Antenna Elevation | + +nem 1 phy LocationEventInfoTable +| NEM | Latitude | Longitude | Altitude | Pitch | Roll | Yaw | Azimuth | Elevation | Magnitude | + +nem 1 phy PathlossEventInfoTable +| NEM | Forward Pathloss | Reverse Pathloss | +| 2 | 80.0 | 80.0 | +| 3 | 80.0 | 80.0 | +| 4 | 80.0 | 80.0 | +| 5 | 80.0 | 80.0 | +``` + +To clear those statistic tables that were registered as `CLEARABLE`: + +```text +[emanesh (node-1:47000)] ## clear table nems phy +nem 1 phy tables cleared +``` + +To query the statistic table descriptions of a running radio +model: + +```text +[emanesh (node-1:47000)] ## info table emanephy PathlossEventInfoTable + + Table information for emanephy PathlossEventInfoTable + + Shows the precomputed pathloss information received + + clearable : False +``` diff --git a/guide/site/physical-layer.md b/guide/site/physical-layer.md new file mode 100644 index 0000000..27edbe4 --- /dev/null +++ b/guide/site/physical-layer.md @@ -0,0 +1,1602 @@ +--- +layout: default +title: Physical Layer +nav_order: 6 +permalink: /physical-layer +--- + + +# Physical Layer + +The *EMANE* physical layer model (*physical layer*) is central to all +emulator functionality. Designed to be flexible and universally used +by all radio models, the physical layer is key to providing a +realistic emulated electromagnetic operating environment for +heterogeneous waveform experimentation. + +## Features + +The physical layer provides the following set of features, some of +which are utilized by all radio models while others are only utilized +by radio models that are designed and coded for their use: +[Heterogeneous Model Interaction](#heterogeneous-model-interaction), +[Propagation Model](#propagation-model), [Receive Power +Calculation](#receive-power-calculation), [Antenna +Gain](#antenna-gain), [Noise Processing](#noise-processing), +[Frequency Diversity](#frequency-diversity), [Collaborative +Transmission](#collaborative-transmission), [Multiple-Input +Multiple-Output (MIMO)](#mimo), [Fading Model](#fading-model), +[Spectral Masks](#spectral-masks), and [Spectrum +Filters](#spectrum-filters). + +Physical layer features are controllable via a combination of start-up +and running-state modifiable configuration, events, and control +message exchanges with a respective radio model. The physical layer +operates in one of two API modes: *compatibly mode 1* (*compat1*) and +*compatibility mode 2* (*compat2*). + +*Compatibility mode 1* is a legacy non-MIMO API mode that supports +radio model control messaging for single antenna functionality. This +API mode was the sole mode available prior to *EMANE* 1.3.x. While +still supported, the use of this mode by newly developed radio models +is deprecated. + +*Compatibility mode 2* is the newer MIMO API mode and supports radio +model control messaging for MIMO. New radio models should use the +*compatibility mode 2* API, even if not modeling MIMO +features. Regardless of the API mode in use, physical layer instances +of the same version of *EMANE* are over-the-air compatible. + +![](images/auto-generated-compatibility-mode-control-messages.png){:width="100%"; .centered} +

    Compatibility Mode Control Messages


    + + +### Heterogeneous Model Interaction + +Physical layer instances are interconnected using an over-the-air +multicast channel. All over-the-air transmissions are processed by +every emulator instance using the same over-the-air channel. This is +how the emulator physical layer accounts for signal propagation, +antenna effects and interference sources across heterogeneous radio +models. + +Each over-the-air transmission has a *Common Physical Layer Header* +prepended. This header is what enables the physical layer to account +for spectrum energy from *in-band* (same) and *out-of-band* +(different) waveform sources. + +```protobuf +syntax = "proto2"; +package EMANEMessage; +option optimize_for = SPEED; +message CommonPHYHeader +{ + message Transmitter + { + required uint32 nemId = 1; + required double powerdBm = 2; + } + message FrequencyGroup + { + message FrequencySegment + { + required uint64 frequencyHz = 1; + required uint64 offsetMicroseconds = 2; + required uint64 durationMicroseconds = 3; + optional double powerdBm = 4; + } + repeated FrequencySegment frequencySegments = 1; + } + message TransmitAntenna + { + message Pointing + { + required uint32 profileId = 1; + required double azimuthDegrees = 2; + required double elevationDegrees = 3; + } + required uint32 antennaIndex = 1; + required uint32 frequencyGroupIndex = 2; + required uint64 bandwidthHz = 3; + optional double fixedGaindBi = 4; + optional Pointing pointing = 5; + optional uint32 spectralMaskIndex = 6; + } + required uint32 registrationId = 1; + required uint32 subId = 2; + required uint32 sequenceNumber = 3; + required uint64 txTimeMicroseconds = 4; + repeated Transmitter transmitters = 5; + repeated FrequencyGroup frequencyGroups = 6; + repeated TransmitAntenna transmitAntennas = 7; + optional bytes filterData = 8; +} +``` +

    emane/src/libemane/commonphyheader.proto


    + +As we learn about each physical layer feature, we will highlight what +if any information in support of that feature is contained in the +*Common Physical Layer Header*. The following header contents are used +in general to identify and process an over-the-air message: + +1. `registrationId`: Identifies the over-the-air transmission as being + an emulator physical layer message. + +2. `subId`: Identifies the over-the-air transmission as being from an + *in-band* or *out-of-band* waveform. An over-the-air message + matching the `subid` configuration parameter of the receiver and + using frequencies that match the `frequencyofinterest` + configuration parameter or the frequency of interest set + associated with a receive antenna configured via control message , + is considered *in-band*. + +3. `sequenceNumber`: Unique sequence number incremented for every + over-the-air transmission. + +4. `txTimeMicroseconds`: over-the-air *start-of-transmission* (SOT) + time stamp. + +### Propagation Model + +Pathloss within the physical layer model is based on [`LocationEvents`](events#locationevent) or +[`PathlossEvents`](events#pathlossevent). Pathloss is dynamically +calculated based on location when the `propagationmodel` configuration +parameter is set to either `2ray` or `freespace`, which selects +between the 2-ray flat earth or freespace propagation models, +respectively. + +Pathloss can be provided in realtime based on external propagation +calculations using [`PathlossEvents`](events#pathlossevent). The `propagationmodel` configuration +parameter should be set to `precomputed` in order to process [`PathlossEvents`](events#pathlossevent). + +### Receive Power Calculation + +For each received over-the-air transmission, the physical layer +computes the receive power associated with that transmission using the +following calculation: + +$$rxPower = txPower + txAntennaGain + rxAntennaGain - pathloss$$ + +Where, + +* $$txPower$$ is provided in the *Common Physical Layer Header* + via `transmitters[i].powerdBm` and optionally overridden by the + `frequencyGroups[j].frequencySegments[k].powerdBm`. Set at the + transmitter using the `txpower` configuration parameter and + overridden by a radio model using [`TransmitterControlMessage`](control-messages#transmittercontrolmessage) (*compat1*) or [`MIMOTransmitPropertiesControlMessage`](control-messages#mimotransmitpropertiescontrolmessage) (*compat2*). + +* $$txAntennaGain$$ is provided in the *Common Physical Layer + Header* via `transmitAntennas[i].fixedGaindBi` when using an ideal + omni antenna with fixed gain or determined using + `transmitAntennas[i].{profileId, azimuthDegrees, elevationDegrees}` + when using a profile defined antenna. + +* $$rxAntennaGain$$ is provided via the `fixedantennagain` and + `fixedantennagainenable` configuration parameters or calculated + using the receiver's current antenna profile when using profile + defined antennas. When using a profile defined antenna, it is + calculated from an external [`AntennaProfileEvent`](events#antennaprofileevent) sent to all + *NEMs* or by a radio model using [`AntennaProfileControlMessage`](control-messages#antennaprofilecontrolmessage) (*compat1*) or [`RxAntennaAddControlMessage`](control-messages#rxantennaaddcontrolmessage) and [`RxAntennaUpdateControlMessage`](control-messages#rxantennaupdatecontrolmessage) (*compat2*). + +* $$pathloss$$ is the pathloss between transmitter and receiver + determined based on the [propagation model](#propagation-model) + specified via the `propagationmodel` configuration parameter. + +If the $$rxPower$$ is less than the $$rxSensitivity$$, +the message is discarded. + +$$rxSensitivity = -174 + noiseFigure + 10log(bandwidth)$$ + +Where, + +* $$bandwidth$$ is defined by the configuration parameter + `bandwidth`. + +* $$noiseFigure$$ is defined by the configuration parameter + `systemnoisefigure`. + +### Antenna Gain + +Antenna gain for a given *NEM* is defined via configuration using one +of two methods: *fixed gain* or *antenna profile*. + +Fixed antenna gain specifies the antenna gain for a given *NEM* to be +used for all transmissions and receptions. To use a fixed antenna +gain, the `fixedantennagainenable` configuration parameter must be set +to `on` and the `fixedantennagain` configuration parameter must be set +to the desired antenna gain in dBi. Both of these parameters are +optional and the default configuration is to use a fixed antenna gain +of 0 dBi. An *NEM* configured to use a fixed antenna gain uses the +configured gain as the $$rxAntennaGain$$ for all over-the-air +received transmissions when computing $$rxPower$$. For all +over-the-air transmissions, the *NEM* indicates the use of fixed +antenna gain by specifying the gain value within the *Common Physical +Layer Header* via `transmitAntennas[i].fixedGaindBi`. + +Antenna profiles use gain patterns, defined via XML, as a function of +elevation and azimuth based on the transmitting and receiving *NEM* +location and orientation (pitch, roll, yaw). Location and orientation +are communicated using [`LocationEvents`](events#location-event). Each *NEM* must be +aware of the antenna profile and pointing information of all *NEM*s +transmitting using antenna profiles. This antenna profile information +is communicated to all *NEMs* using either [`AntennaProfileEvents`](events#antennaprofileevent) or as part of the *Common Physical +Layer Header*: `transmitAntennas[i].{profileId, azimuthDegrees, +elevationDegrees}`. + +An [`AntennaProfileEvent`](events#antennaprofileevent) is used to communicate the antenna +profile index and pointing information for an *NEM's* default +antenna. Radio models using *compat1* only have a single antenna +(default) which uses an antenna index of 0. There is no mechanism to +add additional antenna in *compat1* and there is no notion of +specifying which antenna index is applicable for a received [`AntennaProfileEvent`](events#antennaprofileevent) -- the event *always* corresponds to +antenna index 0. + +An [`AntennaProfileEvent`](events#antennaprofileevent) is generated externally via the +event service or directly via the physical layer when a *compat1* +radio model sends the physical layer an [`AntennaProfileControlMessage`](control-messages#antennaprofilecontrolmessage) to change the antenna +profile and/or pointing. An [`AntennaProfileControlMessage`](control-messages#antennaprofilecontrolmessage) can be specified along with +any over-the-air message in the downstream direction. When the +physical layer receives an [`AntennaProfileControlMessage`](control-messages#antennaprofilecontrolmessage) from a radio model, it will +create an [`AntennaProfileEvent`](events#antennaprofileevent) and transmit the event in one of two +ways: + +1. If the [`AntennaProfileControlMessage`](control-messages#antennaprofilecontrolmessage) was sent as part of a + downstream over-the-air message, the [`AntennaProfileEvent`](events#antennaprofileevent) will be attached to the + over-the-air message and transmitted as rider with the over-the-air + message. All *NEMs* will process the [`AntennaProfileEvent`](events#antennaprofileevent) prior to processing the + over-the-air message. + +2. If the [`AntennaProfileControlMessage`](control-messages#antennaprofilecontrolmessage) was sent as part of a + downstream control message, the [`AntennaProfileEvent`](events#antennaprofileevent) will be sent using the event + multicast channel. + +An [`AntennaProfileControlMessage`](control-messages#antennaprofilecontrolmessage) +message sets both the receive and transmit antenna profile and +pointing for the default antenna, which differs from how the MIMO API +(*compat2*) works. + +For *compat2* radio models, the [`MIMOTransmitPropertiesControlMessage`](control-messages#mimotransmitpropertiescontrolmessage) +*should* accompany every downstream over-the-air message, and contains +a list of transmit antennas with their respective profile and pointing +information. If the [`MIMOTransmitPropertiesControlMessage`](control-messages#mimotransmitpropertiescontrolmessage) is missing, +the physical layer falls back on *compat1* mechanisms for using the +default antenna. The *Common Physical Layer Header* contains all the +transmit antenna profile and antenna pointing information. In +*compat2*, the physical layer never generates an [`AntennaProfileEvent`](events#antennaprofileevent). + +The MIMO API requires adding, updating, and removing receive +antenna. The physical layer does not keep track of transmit antenna, +only receive antenna. So if a radio model wants to control the profile +and pointing of an antenna used for both receive and transmit, an +[`RxAntennaUpdateControlMessage`](control-messages#rxantennaupdatecontrolmessage) +must accompany the [`MIMOTransmitPropertiesControlMessage`](control-messages#mimotransmitpropertiescontrolmessage), and contain the +same profile and pointing information. + +To use antenna patterns, the `fixedantennagainenable` configuration +parameter must be set to `off` and the emulator's +`antennaprofilemanifesturi` configuration parameter must be set +accordingly. + +If antenna profiles are being used by one or more *NEMs* within the +emulation, the `antennaprofilemanifesturi` configuration parameter +must be configured for all emulator instances (including those +instances with an *NEM* configured to use a fixed antenna gain). This +is required to allow an *NEM* to determine the *txAntennaGain* when +performing the [receive power +calculation](#receive-power-calculation). + +### Noise Processing + +The physical layer provides the ability to assess the impact of +intentional and unintentional noise sources within the emulation by +adjusting the noise floor. This is achieved by summing the energy of +signals within the appropriate frequency of interest over a given time +interval and reporting a spectrum window containing received signal +energy to a requesting radio model. A radio model *must* wait until +the transmission end-of-reception time before requesting a spectrum +window over a desired time period. + +Each receive antenna, whether the default (*compat1*) or added with +[`RxAntennaAddControlMessage`](control-messages#rxantennaaddcontrolmessage) (*compat2*), has its own view +of the spectrum which internally maps to a dedicated physical layer +*Spectrum Monitor* instance. A *Spectrum Monitor* instance monitors +the antenna's frequency of interest set using a series of energy +recorders to keep track of encountered signal energy over time. + +Energy recorders use a logical wheel of bins, where bin width in +microseconds is set using the configuration parameter: +`noisebinsize`. Each over-the-air transmission is checked for +frequency overlap using the transmitter and receiver bandwidth. If +there is any overlap, a proportional amount of signal energy is +applied to each corresponding energy recorder wheel starting at the +transmission start-of-reception: + +$startOfReception = startOfTransmission + propagation + frequencySegmentOffset_0$ + +Where, + +* $$startOfTransmission$$ is the start-of-transmission in + microseconds contained in the *Common Physical Layer Header*: + `txTimeMicroseconds`. + +* $$propagation$$ is the propagation delay calculated when the + location of the transmitting *NEM* and receiving *NEM* is known via + [`LocationEvents`](events#locationevent), or 0 when any respective location is + unknown. + +* $$frequencySegmentOffset_0$$ is the offset in microseconds of + the first frequency segment conveyed via the *Common Physical Layer + Header*: + `frequencyGroups[j].frequencySegments[0].offsetMicroseconds`. + +Physical layer configuration parameters: `noisemaxsegmentduration`, +`noisemaxmessagepropagation`, and `noisemaxsegmentoffset` are used to +set the maximum duration, propagation delay, and frequency segment +offset, all in microseconds, respectively. By default, over-the-air +transmissions containing values above the configured maximums will be +dropped. + +The physical layer has the ability to record *all* signal energy, +*out-of-band* signal energy, or *no* signal energy determined by the +configuration parameter `noisemode` value `all`, `outofband`, or +`none`, respectively. When no signal energy is being recorded or no +signal energy occurred over a given request interval, the receiver +sensitivity is used as the noise floor. + +When recording all signal energy, it is the radio model's +responsibility to remove the in-band signal from the spectrum window +prior to computing the SINR. + +The spectrum service can also be utilized by a radio model to support +Dynamic Spectrum Access (*DSA*) by requesting a spectrum window over a +valid time interval independent of an upstream over-the-air reception. + +A radio model queries spectrum monitor energy using +[`SpectrumServiceProvider::requestAntenna`](https://github.com/adjacentlink/emane/blob/master/include/emane/spectrumserviceprovider.h#L168): + +```cpp +auto spectrumWindow = + pRadioService_->spectrumService().requestAntenna(0, // antenna index + u64FrequencyHz, + span, + startOfReception); + +``` + +Where, the returned spectrum window is a [`SpectrumWindow`](https://github.com/adjacentlink/emane/blob/master/include/emane/spectrumserviceprovider.h#L63) instance. + +### Frequency Diversity + +The physical layer provides the ability to send multiple signals (of +constant bandwidth) in frequency and/or time within a single +over-the-air message. A *compat1* radio model can utilize this feature +by populating the [`FrequencyControlMessage`](control-messages#frequencycontrolmessage) which +accompanies a downstream over-the-air message, with information for +one or more frequency segments. Similarly, a *compat2* radio model +uses the [`MIMOTransmitPropertiesControlMessage`](control-messages#mimotransmitpropertiescontrolmessage) to define one or +more frequency groups, each of which containing information for one or +more frequency segments, where each transmit antenna is associated +with one of the defined frequency groups. + +Frequency segment information includes the segment center frequency, +total time duration, offset from the transmission time stamp and +optionally, transmit power in dBm that overrides any overall +transmitter power level. + +Frequency information is included in the *Common Physical Layer +Header* and divided into two parts, frequency group segments: +`frequencyGroups[j].frequencySegments[j].{frequencyHz, +offsetMicroseconds, durationMicroseconds}` and transmit antenna +frequency group association and bandwidth: +`transmitAntennas[i].{frequencyGroupIndex, bandwidthHz}`. + +At the receiving *NEM*, depending on its noise mode, one of four +actions will be taken for all segments where the $$rxPower > +rxSensitivity$$: + +1. If `noisemode` is `all`, the signal energy for each frequency + segment will be applied to the spectrum monitor based on frequency + of interest bandwidth overlap. + +2. If `noisemode` is `outofband` and this is an out-of-band + transmission, the signal energy for each frequency segment will be + applied to the spectrum monitor based on frequency of interest + bandwidth overlap. + +3. If `noisemode` is `outofband` and this is an in-band transmission, + no energy will be applied to the spectrum monitor. + +4. If `noisemode` is `none`, no energy will be applied to the spectrum + monitor. + +A radio model will only receive those frequency segments where +$rxPower > rxSensitivity$. Any frequency segment that has a center +frequency that is not in the physical layer's frequency of interest +list will cause the entire transmission to be treated as out-of-band. + +### Collaborative Transmission + +The physical layer provides the ability to send a single over-the-air +message specifying multiple transmitters to minimize over-the-air +message processing during collaborative transmission. A radio model +can utilize this feature by populating the [`TransmitterControlMessage`](control-messages#transmittercontrolmessage), which accompanies a +downstream over-the-air message, with information for multiple +transmitters. Transmitter information includes the *NEM* id of the +transmitter and the transmission power, and is included in the *Common +Physical Layer Header*: `transmitters[i].{nemId, powerdBm}`. + +It is the radio model's responsibility to implement the coordination +logic that allows one instance (*NEM*) to send the collaborative +over-the-air transmission. + +Upon the reception of an over-the-air message with multiple +transmitters, the physical layer will calculate the $$rxPower$$ +from each transmitter and sum up the energy. Depending on the current +noise mode, one of four actions will be taken, provided the $$\sum_{n=0}^{N} rxPower_n > rxSensitivity$$, where $$N$$ is the +number of transmitters: + +1. If `noisemode` is `all`, the summed energy will be applied to the + spectrum monitor based on frequency of interest bandwidth overlap. + +2. If `noisemode` is `outofband` and this is an out-of-band message, + the summed energy will be applied to the spectrum monitor based on + frequency of interest bandwidth overlap. + +3. If `noisemode` is `outofband` and this is an in-band message, no + energy will be applied to the spectrum monitor. + +4. If `noisemode` is `none`, no energy will be applied to the spectrum + monitor. + +Regardless of `noisemode`, the radio model will only receive the +over-the-air message when $$\sum_{n=0}^{N} rxPower_n > +rxSensitivity$$. The radio model will receive no indication that this +message was a collaborative transmission. + +### Fading Model + +The physical layer supports per source fading model selection that can +be modified via [`FadingSelectionEvents`](events#fadingselectionevent). Fading selection +is controlled by the `fading.model` configuration parameter and can be +one of either `none`, `event`, `nakagami`, or `lognormal`. Specifying +`event` requires using a [`FadingSelectionEvent`](events#fadingselectionevent) in order to assign +the fading model used at a receiving *NEM* for a specified *NEM* +source. + +The Nakagami-m Fading model uses a gamma distribution to determine a +fade loss value based on distance and power. Configuration parameters +provide the ability to model various fading effects experienced in +both indoor and outdoor environments based on empirical +data. Parameters are used to specify two distance thresholds: +`fading.nakagami.distance0` and `fading.nakagami.distance1` (meters), +in order to establish three distance bounds: *below*, *between*, and +*above*; and three shape factors corresponding to the three distance +bounds: `fading.nakagami.m0`, `fading.nakagami.m1`, and +`fading.nakagami.m2`. + +The Lognormal Fading model models Free Space Optical (FSO) loss using +a statistical mechanism. The Lognormal Fading model works by creating +a constant series of fades, each having a constant fade depth that may +contribute to over-the-air loss. The fading model keeps track of the +time each fading period ends and generates a new fading period upon +the arrival of the next over-ther-air message after the conclusion of +the current fading period. Fade depths are log normally distributed +but constant during a given fading period. Fade lengths are normally +distributed. + +Lognormal Fading model configuration parameters are used to relate the +fading depth to pathloss in order to cause a corresponding amount of +over-the-air loss. There is an inverse relationship between fading +depth and pathloss, where lower values for fading depth result in 100% +loss, while higher values result in no loss. For values between no +loss and full loss, linear interpolation is used to calculate the +corresponding pathloss which may result in random loss during the +fading period. + +### MIMO + +The physical layer supports MIMO by allowing simultaneous use of +multiple transmit and receive antenna. Waveform implementation +specifics are modeled within the radio model, with control messages: +[`MIMOTransmitPropertiesControlMessage`](control-messages#mimotransmitpropertiescontrolmessage) and [`MIMOReceivePropertiesControlMessage`](control-messages#mimoreceivepropertiescontrolmessage) conveying transmit +and receive information between layers, respectively. + +Using MIMO API control messages, a radio model can define any number +of receive antenna (ideal omni or antenna profile defined), and +similarly, add multiple transmit antenna to each over-the-air +transmission. Every received over-the-air message will be processed +once for each receive path, where the total number of receive paths is +equal to the number of transmit antenna multiplied by the number of +receive antenna. + +Receive antennas are added using [`RxAntennaAddControlMessage`](control-messages#rxantennaaddcontrolmessage), updated with [`RxAntennaUpdateControlMessage`](control-messages#rxantennaupdatecontrolmessage), and removed using [`RxAntennaRemoveControlMessage`](control-messages#rxantennaremovecontrolmessage). When adding a receive +antenna, a unique antenna index must be specified along with the +frequency of interest information for the antenna and the antenna +type: ideal omni (fixed gain) or antenna pattern defined (profile id +and pointing). The unique index value supplied during [`RxAntennaAddControlMessage`](control-messages#rxantennaaddcontrolmessage) is how an antenna is +referenced during an update or remove. It is also how per antenna +receive power information is identified when communicating received +over-the-air transmissions to the radio model via [`MIMOReceivePropertiesControlMessage`](control-messages#mimoreceivepropertiescontrolmessage). + +When sending an over-the-air transmission, a radio model specifies one +or more transmit antenna along with one or more groups of frequency +segments using [`MIMOTransmitPropertiesControlMessage`](control-messages#mimotransmitpropertiescontrolmessage). Each transmit +antenna may be mapped to its own unique group of frequency segments or +share a group with other transmit antennas. Each transmit antenna is +specified using a unique antenna index value which is unrelated to +indexes used when adding receive antennas via [`RxAntennaAddControlMessage`](control-messages#rxantennaaddcontrolmessage). + +A radio model is free to use the same index for receive and transmit +antennas to create its own logical association of the same antenna +being used for both receive and transmit. The physical layer does not +store any transmit antenna information in the downstream direction. In +the upstream (receive) direction, the physical layer caches computed +gain information when using antenna profiles, so it is important to be +consistent when indexing transmit antennas when sending over-the-air +transmissions. For example, if *NEM* 1 has antenna *A1* and antenna +*A2*, where *A1* is pointing at *(Az1,El1)* and *A2* is pointing at +*(Az2,El2)*, sending over-the-air transmissions and alternating or +changing transmit antenna indexes while not updating position and/or +pointing, will defeat any possible receive side caching gains which +are keyed off of transmit antenna index. Pick indexes for *A1* and +*A2*, then be consistent so receiving physical layers do not +invalidate cached antenna gains unless actual position and/or pointing +updates dictate so. + +#### Creating Antennas + +When using [`RxAntennaAddControlMessage`](control-messages#rxantennaaddcontrolmessage) to add receive +antenna, one of the following methods to create antenna instances should be used: + +1. [`Antenna::createDefault()`](https://github.com/adjacentlink/emane/blob/master/include/emane/antenna.h#L70): Creates a default antenna which + will either be an ideal omni with a fixed gain or a profile defined + antenna, based on the physical layer `fixedantennagainenable` + configuration parameter -- *compat1* mechanism for using the + default antenna. + +2. [`Antenna::createIdealOmni()`](https://github.com/adjacentlink/emane/blob/master/include/emane/antenna.h#L72): Creates an + ideal omni antenna with a specified fixed gain. + +3. [`Antenna::createProfileDefined()`](https://github.com/adjacentlink/emane/blob/master/include/emane/antenna.h#L75): + Creates an antenna profile defined antenna with an optional initial + pointing. + +If the newly created receive antenna does not have it's bandwidth set, +the physical layer will use the value from its +`bandwidth` configuration parameter. + +If the [`RxAntennaAddControlMessage`](control-messages#rxantennaaddcontrolmessage) + contains an empty frequency of interest set, the physical layer will + use the value(s) from its `frequencyofinterest` configuration + parameter. + +When sending a [`MIMOTransmitPropertiesControlMessage`](control-messages#mimotransmitpropertiescontrolmessage), use one of the +following methods to create the transmit antenna: + + +1. [`Antenna::createIdealOmni()`](https://github.com/adjacentlink/emane/blob/master/include/emane/antenna.h#L72): Creates an + ideal omni antenna with a specified fixed gain. + +2. [`Antenna::createProfileDefined()`](https://github.com/adjacentlink/emane/blob/master/include/emane/antenna.h#L75): + Creates an antenna profile defined antenna with an optional initial + pointing. + +Use an empty antenna set when creating a [`MIMOTransmitPropertiesControlMessage`](control-messages#mimotransmitpropertiescontrolmessage) to indicate use of +the default antenna configuration, which follows the same assignment +logic as [`Antenna::createDefault()`](https://github.com/adjacentlink/emane/blob/master/include/emane/antenna.h#L70). + +If the newly created antenna does not have it's bandwidth set, the +physical layer will use the value from its `bandwidth` configuration +parameter. + +If any frequency segment has a 0 Hz specified frequency, the physical +layer will use the value from its `frequency` configuration parameter. + +If any frequency segment does not specify a transmit power, the +physical layer will use the value from its `txpower` configuration +parameter. + +#### Antenna Profiles and Pointing + +MIMO API radio models (*compat2*) using antenna profiles must specify +pointing information in every over-the-air transmission as part of +[`MIMOTransmitPropertiesControlMessage`](control-messages#mimotransmitpropertiescontrolmessage). The MIMO +compatible physical layer supports event compatibility with *compat1* +radio models using external [`AntennaProfileEvent`](events#antennaprofileevent) events. Where, the +[`AntennaProfileEvent`](events#antennaprofileevent) allows for specifying profile and +pointing information for a single antenna (always index 0) for each +specified *NEM*. + +When using the MIMO API to point and transmit simultaneously, and +modeling a logical re-pointing of the same antenna for receive, you +must specify both a [`MIMOTransmitPropertiesControlMessage`](control-messages#mimotransmitpropertiescontrolmessage) and a [`RxAntennaUpdateControlMessage`](control-messages#rxantennaupdatecontrolmessage) in order for the pointing +to take effect for receive. + +### Doppler + +The physical layer calculates and applies Doppler shift when +transmitter and receiver location and velocity are known at the +receiver, and the `dopplershiftenable` configuration parameter is set +to `on`. Doppler shift is applied when energy is added to spectrum +monitor bins based on bandwidth overlap. Doppler shift information is +communicated to *compat2* radio models via the +`MIMOReceivePropertiesControlMessage` as a mapping of center +frequencies and their corresponding shift, both in Hz. + +### Spectral Masks + +The physical layer provides support for using spectral masks to model +the effects of transmitters that radiate energy at frequencies (side +lobes and spurs) outside their defined bandwidth (main lobe/beam). A +spectral mask manifest defines one or more spectral masks, where the +spectral mask manifest is defined using the emulator configuration +parameter: `spectralmaskmanifesturi`. + + + +If spectral masks are being used by one or more *NEMs* within the +emulation, the `spectralmaskmanifesturi` configuration parameter must +be configured for all emulator instances (including those instances +with an *NEM* not transmitting with a spectral mask. This is necessary +for a receiving *NEM* to determine the *txPower* when performing the +[receive power calculation](#receive-power-calculation). + +A spectral mask is composed of a primary signal and zero or more +spurs. Each spectral mask must have a unique non-zero id. + +```xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` + +1. Both `` and `` elements are defined using one or + more contiguous segments specified in length (Hz) and a reference + power offset (dBr) to be applied to the received signal relative to + receiver bandwidth overlap. + +2. `` elements contain an offset from the center transmit + frequency in Hz. + +By default, the physical layer uses a square mask across the entire +transmit bandwidth. When using spectral masks, the transmit bandwidth +is determined at the receiver to be the total width defined by the +respective mask element segments. + +*Compat1* and *compat2* radio models can use the physical layer +configuration parameter `spectralmaskindex` to set the spectral mask +in use when transmitting. *Compat2* radio models can dynamically set +the transmit antenna spectral mask [`MIMOTransmitPropertiesControlMessage`](control-messages#mimotransmitpropertiescontrolmessage). Transmit antenna +spectral mask index is contained in the *Common Physical Layer +Header*: `transmitAntennas[i].spectralMaskIndex` + +### Spectrum Filters + +The physical layer provides a radio model with the ability to specify +one or more spectrum filters which record spectrum energy based on a +set of specified criteria. Filter spectrum windows are queried similar +to spectrum energy windows, and are used in conjunction with spectrum +energy windows to perform actions such as excision and cancellation. + +A radio model adds one or more spectrum filters using [`SpectrumFilterAddControlMessage`](control-messages#spectrumfilteraddcontrolmessage) within a downstream +control message: + +```cpp +sendDownstreamControl({SpectrumFilterAddControlMessage::create(1, // unique filter index + 0, // antenna index + 1000000000, // center freq + 20000000, // bandwidth + 100000, // sub-band width in hz + BandwidthFilterElementLessEqual::create(100000) + )}); + + +``` + +Spectrum filters are added per receive antenna using a unique filter +index for a given center frequency (Hz) and bandwidth (hz), along with +an optional sub-bandwidth (Hz) length that subdivides spectral energy +into sub-band width bins of specified size for each time bin in the +filter energy window. Additionally, optional match criteria can be +supplied to allow for more precise control of which energy is +captured. + +A radio model removes one or more spectrum filters using [`SpectrumFilterRemoveControlMessage`](control-messages#spectrumfilterremovecontrolmessage) within a downstream +control message: + +```cpp +sendDownstreamControl({SpectrumFilterRemoveControlMessage::create(1, // unique filter index + 0)}); // antenna index + +``` + +By default, filters do not record energy with the same `subid` as +their associated physical layer (in-band waveform). Set the physical +layer confiugration parameter `excludesamesubidfromfilterenable` to +`false` to allow filter processing of in-band spectrum energy and add +`SubIdFilterElementEqual::create(0)` to the `FilterMatchCriterion` +expression. Where, subid 0 means match the radio model's associated +physical layer subid. + +Match criteria may be specified using any combination of the following: + +* [`FrequencyFilterElementLess`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L189) +* [`FrequencyFilterElementLessEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L194) +* [`FrequencyFilterElementGreater`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L199) +* [`FrequencyFilterElementGreaterEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L204) +* [`FrequencyFilterElementEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L209) +* [`FrequencyFilterElementNotEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L214) +* [`BandwidthFilterElementLess`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L219) +* [`BandwidthFilterElementLessEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L224) +* [`BandwidthFilterElementGreater`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L229) +* [`BandwidthFilterElementGreaterEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L235) +* [`BandwidthFilterElementEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L240) +* [`BandwidthFilterElementNotEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L245) +* [`SubIdFilterElementLess`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L251) +* [`SubIdFilterElementLessEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L256) +* [`SubIdFilterElementGreater`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L261) +* [`SubIdFilterElementGreaterEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L267) +* [`SubIdFilterElementEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L272) +* [`SubIdFilterElementNotEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L277) +* [`SubIdFilterElementLess`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L251) +* [`SubIdFilterElementLessEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L256) +* [`SubIdFilterElementGreater`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L261) +* [`SubIdFilterElementGreaterEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L267) +* [`SubIdFilterElementEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L272) +* [`SubIdFilterElementNotEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L277) +* [`FilterDataFilterElementEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L282) +* [`FilterDataFilterElementNotEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L287) + +More complex compound expressions are created using: + +* [`FilterMatchCriterionAnd`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L124) +* [`FilterMatchCriterionOr`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L147) +* [`FilterMatchCriterionNot`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L169) + +*Filter data* is opaque data a radio model can attach to a downstream +over-the-air transmission to allow additional match criteria. This +opaque data can be used in conjunction with a custom [`FilterMatchCriterion`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L60) expression, or with +[`FilterDataFilterElementEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L282) or +[`FilterDataFilterElementNotEqual`](https://github.com/adjacentlink/emane/blob/master/include/emane/filtermatchcriterion.h#L287). + +```cpp +SpectrumFilterAddControlMessage::create(2, // Filter Index + 2347000000, // Freq 1GHz + 20000000, // 20 MHz bandwidth + 0, // no sub-bands + FilterDataFilterElementEqual::create("Hello World!")); + +``` + +A radio model uses the [`SpectrumFilterDataControlMessage`](control-messages#spectrumfilterdatacontrolmessage) to add *filter data* +when sending a downstream packet: + +```cpp +sendDownstreamPacket(CommonMACHeader{type_, u16SequenceNumber_++}, + pkt, + {Controls::SpectrumFilterDataControlMessage::create("Hello World!"), + ... + }) + +``` + +A radio model queries spectrum filter energy using +[`SpectrumServiceProvider::requestAntennaFilter`](https://github.com/adjacentlink/emane/blob/master/include/emane/spectrumserviceprovider.h#L208): + +```cpp +auto windowFilter = + pRadioService_->spectrumService().requestAntennaFilter(0, // antenna index + 1, // unique filter index + span, + startOfReception); + +``` + +Where, the returned filter window is a [`SpectrumFilterWindow`](https://github.com/adjacentlink/emane/blob/master/include/emane/spectrumserviceprovider.h#L78) instance. In this +example, the filter was added with a sub-band width causing the energy +values contained in the spectrum window to be: + +```text +[T_0_SUB_0,TO_SUB_1,...,TO_SUB_N,T1_SUB_0,T1_SUB_1,...,T1_SUB_N,...] + +``` + +The number of sub-band entries per time bin (`N`) is returned as the +last item in the [`windowFilter`](https://github.com/adjacentlink/emane/blob/master/include/emane/spectrumserviceprovider.h#L78) tuple: + +```cpp +auto subBandBinCount = std::get<4>(windowFilter); + +``` + + + +## Platform Orientation + +The physical layer accounts for the transmitting and receiving *NEM's* +platform orientation when determining the antenna gain based on +antenna profiles. + +Location Events are required when using antenna profiles and +each event includes the following 3 elements for a given *NEM*: + +1. *position* - latitude, longitude, altitude (required) + +2. *velocity* - azimuth, elevation, magnitude (optional, defaults to 0) + +3. *orientation* - pitch, roll, yaw (optional, defaults to 0) + +The *position* element identifies the platform’s location and not the +antenna location, as a given platform may have more than one +antenna. In cases where a platform has multiple antenna and their +location on the platform needs to be accounted for, the +*\* element within the antenna manifest is utilized to +define the offset of each antenna relative to the platform’s +position. The *velocity* element identifies the speed and direction of +the platform relative to true north. + +![](images/velocityvector.png){:width="60%"; .centered} + +*Orientation* defines the pitch, roll and yaw angles (Euler angels) + about the platform’s latitudinal, longitudinal and vertical axes + respectively. Yaw and pitch are defined relative to the velocity + vector’s azimuth and elevation components respectively and roll is + defined relative to wings level position. + +![](images/rollpitchyaw.png){:width="60%"; .centered} + +The arrow directions indicate positive angles. + +## Configuration + +1. **`bandwidth`**: Defines receiver bandwidth in Hz and also serves + as the default bandwidth for OTA transmissions when not provided by + the MAC. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint64 Occurrs: [1,1] Range: [1,max_uint64] + Values: 1000000 + ``` + +2. **`compatibilitymode`**: Defines the physical layer compatibility + mode. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [1,2] + Values: 1 + ``` + +3. **`dopplershiftenable`**: Defines whether to perform Doppler shift + processing when location and velocity information is known for both + the transmitter and receiver. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: true + ``` + +4. **`excludesamesubidfromfilterenable`**: Defines whether over-the- + air (downstream) messages with a subid matching the emulator PHY subid + (inband) should be processed for filter inclusion. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: true + ``` + +5. **`fading.lognormal.dlthresh`**: Defines the lognormal fading depth + lower threshold (below this threshold is 0% POR/100% loss). + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: double Occurrs: [1,1] Range: [min_double,max_double] + Values: 0.250000 + ``` + +6. **`fading.lognormal.dmu`**: Defines the lognormal fading depth mu + (mean of underlying normal distribution). + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: double Occurrs: [1,1] Range: [min_double,max_double] + Values: 5.000000 + ``` + +7. **`fading.lognormal.dsigma`**: Defines the lognormal fading depth + sigma (standard deviation of underlying normal distribution). + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: double Occurrs: [1,1] Range: [min_double,max_double] + Values: 1.000000 + ``` + +8. **`fading.lognormal.duthresh`**: Defines the lognormal fading depth + upper threshold (above this threshold is 100% POR/0% loss). + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: double Occurrs: [1,1] Range: [min_double,max_double] + Values: 0.750000 + ``` + +9. **`fading.lognormal.lmean`**: Defines the lognormal fading length + mean in seconds (normal distribution). + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: double Occurrs: [1,1] Range: [0.000000,max_double] + Values: 0.005000 + ``` + +10. **`fading.lognormal.lstddev`**: Defines the lognormal fading + length standard deviation in seconds (normal distribution). + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: double Occurrs: [1,1] Range: [0.000000,max_double] + Values: 0.001000 + ``` + +11. **`fading.lognormal.maxpathloss`**: Defines the pathloss value (in + dBm) corresponding to the fading depth lower threshold (0% POR/100% + loss). + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: double Occurrs: [1,1] Range: [min_double,max_double] + Values: 100.000000 + ``` + +12. **`fading.lognormal.minpathloss`**: Defines the pathloss value (in + dBm) corresponding to the fading depth upper threshold (100% POR/0% + loss). + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: double Occurrs: [1,1] Range: [min_double,max_double] + Values: 0.000000 + ``` + +13. **`fading.model`**: Defines the fading model: none, event, + lognormal, nakagami. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: string Occurrs: [1,1] + Regex: ^(none|event|lognormal|nakagami)$ + Values: none + ``` + +14. **`fading.nakagami.distance0`**: Defines the distance in meters + used for lower bound shape selection. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: double Occurrs: [1,1] Range: [min_double,max_double] + Values: 100.000000 + ``` + +15. **`fading.nakagami.distance1`**: Defines the distance in meters + used for upper bound shape selection. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: double Occurrs: [1,1] Range: [min_double,max_double] + Values: 250.000000 + ``` + +16. **`fading.nakagami.m0`**: Defines the shape factor to use for + distance < fading.nakagami.distance0. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: double Occurrs: [1,1] Range: [0.500000,max_double] + Values: 0.750000 + ``` + +17. **`fading.nakagami.m1`**: Defines the shape factor to use for + distance >= fading.nakagami.distance0 and < fading.nakagami.distance1. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: double Occurrs: [1,1] Range: [0.500000,max_double] + Values: 1.000000 + ``` + +18. **`fading.nakagami.m2`**: Defines the shape factor to use for + distance >= fading.nakagami.distance1. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: double Occurrs: [1,1] Range: [0.500000,max_double] + Values: 200.000000 + ``` + +19. **`fixedantennagain`**: Defines the antenna gain in dBi and is + valid only when fixedantennagainenable is enabled. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: double Occurrs: [1,1] Range: [min_double,max_double] + Values: 0.000000 + ``` + +20. **`fixedantennagainenable`**: Defines whether fixed antenna gain + is used or whether antenna profiles are in use. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: true + ``` + +21. **`frequency`**: Defines the default transmit center frequency in + Hz when not provided by the MAC. This value is included in the Common + PHY Header of all transmitted OTA packets. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint64 Occurrs: [1,1] Range: [1,max_uint64] + Values: 2347000000 + ``` + +22. **`frequencyofinterest`**: Defines a set of center frequencies in + Hz that are monitored for reception as either in-band or out-of-band. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint64 Occurrs: [1,max_uint64] Range: [0,max_uint64] + Values: 2347000000 + ``` + +23. **`noisebinsize`**: Defines the noise bin size in microseconds and + translates into timing accuracy associated with aligning the start and + end of reception times of multiple packets for modeling of + interference effects. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint64 Occurrs: [1,1] Range: [1,max_uint64] + Values: 20 + ``` + +24. **`noisemaxclampenable`**: Defines whether segment offset, segment + duration and message propagation associated with a received packet + will be clamped to their respective maximums defined by + noisemaxsegmentoffset, noisemaxsegmentduration and + noisemaxmessagepropagation. When disabled, any packet with an above + max value will be dropped. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + +25. **`noisemaxmessagepropagation`**: Noise maximum message + propagation in microseconds. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint64 Occurrs: [1,1] Range: [1,max_uint64] + Values: 200000 + ``` + +26. **`noisemaxsegmentduration`**: Noise maximum segment duration in + microseconds. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint64 Occurrs: [1,1] Range: [1,max_uint64] + Values: 1000000 + ``` + +27. **`noisemaxsegmentoffset`**: Noise maximum segment offset in + microseconds. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint64 Occurrs: [1,1] Range: [1,max_uint64] + Values: 300000 + ``` + +28. **`noisemode`**: Defines the noise processing mode of operation: + none, all, outofband or passthrough. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: string Occurrs: [1,1] + Regex: ^(none|all|outofband|passthrough)$ + Values: all + ``` + +29. **`processingpoolsize`**: Defines the number of processing pool + threads. If > 2, pool threads are used to process receive paths per + receive antenna. Using a processing pool does not guarantee increased + performance. The processing pool can reduce the amount of processing + time for an upstream message that contains a large number of frequency + segments and/or a large number of transmit antenna (MIMO). Without a + processing pool, receive paths are calculated serially in a loop. + There is a threshold where serial processing is faster than the + context switching of the thread pool. Additionally, if the number of + cores available to a running emane process is less than the processing + pool size, worse performance may be encountered. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [0,65535] + Values: 0 + ``` + +30. **`propagationmodel`**: Defines the pathloss mode of operation: + precomputed, 2ray or freespace. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: string Occurrs: [1,1] + Regex: ^(precomputed|2ray|freespace)$ + Values: precomputed + ``` + +31. **`rxsensitivitypromiscuousmodeenable`**: Defines whether over- + the-air messages are sent upstream if below receiver sensitivity. + Compatibility mode > 1 only. Messages sent upstream without a + MIMOReceivePropertiesControlMessage. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + +32. **`spectralmaskindex`**: Defines the spectral mask index used for + all transmissions. Set to 0 to use the emulator default square + spectral mask. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [0,65535] + Values: 0 + ``` + +33. **`stats.observedpowertableenable`**: Defines whether the observed + power table will be populated. Large number of antenna (MIMO) and/or + frequency segments will increases processing load when populating. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: true + ``` + +34. **`stats.receivepowertableenable`**: Defines whether the receive + power table will be populated. Large number of antenna (MIMO) and/or + frequency segments will increases processing load when populating. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: true + ``` + +35. **`subid`**: Defines the emulator PHY subid used by multiple NEM + definitions. Once instantiated, these NEMs may be using the same + frequency. In order to differentiate between emulator PHY instances + for different waveforms, the subid is used as part of the unique + waveform identifying tuple: PHY Layer Registration Id, emulator PHY + subid and packet center frequency. + + ```no-highlighting + Default: no Required: yes Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [1,65535] + ``` + +36. **`systemnoisefigure`**: Defines the system noise figure in dB and + is used to determine the receiver sensitivity. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: double Occurrs: [1,1] Range: [min_double,max_double] + Values: 4.000000 + ``` + +37. **`timesyncthreshold`**: Defines the time sync detection threshold + in microseconds. If a received OTA message is more than this + threshold, the message reception time will be used as the source + transmission time instead of the time contained in the Common PHY + Header. This allows the emulator to be used across distributed nodes + without time sync. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint64 Occurrs: [1,1] Range: [1,max_uint64] + Values: 10000 + ``` + +38. **`txpower`**: Defines the transmit power in dBm. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: double Occurrs: [1,1] Range: [min_double,max_double] + Values: 0.000000 + ``` + + + +## Statistics + +1. **`avgDownstreamProcessingDelay0`**: Average downstream processing + delay + + ```no-highlighting + Type: float Clearable: yes + ``` + +2. **`avgDownstreamQueueDelay`**: + + ```no-highlighting + Type: float Clearable: yes + ``` + +3. **`avgProcessAPIQueueDepth`**: Average API queue depth for a + processUpstreamPacket, processUpstreamControl, + processDownstreamPacket, processDownstreamControl, processEvent and + processTimedEvent. + + ```no-highlighting + Type: double Clearable: yes + ``` + +4. **`avgProcessAPIQueueWait`**: Average API queue wait for a + processUpstreamPacket, processUpstreamControl, + processDownstreamPacket, processDownstreamControl, processEvent and + processTimedEvent in microseconds. + + ```no-highlighting + Type: double Clearable: yes + ``` + +5. **`avgTimedEventLatency`**: Average latency between the scheduled + timer expiration and the actual firing over the requested duration. + + ```no-highlighting + Type: double Clearable: yes + ``` + +6. **`avgTimedEventLatencyRatio`**: Average ratio of the delta between + the scheduled timer expiration and the actual firing over the + requested duration. An average ratio approaching 1 indicates that + timer latencies are large in comparison to the requested durations. + + ```no-highlighting + Type: double Clearable: yes + ``` + +7. **`avgUpstreamProcessingDelay0`**: Average upstream processing + delay + + ```no-highlighting + Type: float Clearable: yes + ``` + +8. **`numAPIQueued`**: The number of queued API events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +9. **`numDownstreamBytesBroadcastGenerated0`**: Number of layer + generated downstream broadcast bytes + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +10. **`numDownstreamBytesBroadcastRx0`**: Number of downstream + broadcast bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +11. **`numDownstreamBytesBroadcastTx0`**: Number of downstream + broadcast bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +12. **`numDownstreamBytesUnicastGenerated0`**: Number of layer + generated downstream unicast bytes + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +13. **`numDownstreamBytesUnicastRx0`**: Number of downstream unicast + bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +14. **`numDownstreamBytesUnicastTx0`**: Number of downstream unicast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +15. **`numDownstreamPacketsBroadcastDrop0`**: Number of downstream + broadcast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +16. **`numDownstreamPacketsBroadcastGenerated0`**: Number of layer + generated downstream broadcast packets + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +17. **`numDownstreamPacketsBroadcastRx0`**: Number of downstream + broadcast packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +18. **`numDownstreamPacketsBroadcastTx0`**: Number of downstream + broadcast packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +19. **`numDownstreamPacketsUnicastDrop0`**: Number of downstream + unicast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +20. **`numDownstreamPacketsUnicastGenerated0`**: Number of layer + generated downstream unicast packets + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +21. **`numDownstreamPacketsUnicastRx0`**: Number of downstream unicast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +22. **`numDownstreamPacketsUnicastTx0`**: Number of downstream unicast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +23. **`numDownstreamQueueDelay`**: + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +24. **`numHighWaterMark`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +25. **`numUpstreamBytesBroadcastRx0`**: Number of upstream broadcast + bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +26. **`numUpstreamBytesBroadcastTx0`**: Number of updtream broadcast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +27. **`numUpstreamBytesUnicastRx0`**: Number upstream unicast bytes + received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +28. **`numUpstreamBytesUnicastTx0`**: Number of upstream unicast bytes + transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +29. **`numUpstreamPacketsBroadcastDrop0`**: Number of upstream + broadcast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +30. **`numUpstreamPacketsBroadcastRx0`**: Number of upstream broadcast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +31. **`numUpstreamPacketsBroadcastTx0`**: Number of upstream broadcast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +32. **`numUpstreamPacketsUnicastDrop0`**: Number of upstream unicast + packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +33. **`numUpstreamPacketsUnicastRx0`**: Number upstream unicast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +34. **`numUpstreamPacketsUnicastTx0`**: Number of upstream unicast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +35. **`processedConfiguration`**: The number of processed + configuration. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +36. **`processedDownstreamControl`**: The number of processed + downstream control. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +37. **`processedDownstreamPackets`**: The number of processed + downstream packets. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +38. **`processedEvents`**: The number of processed events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +39. **`processedTimedEvents`**: The number of processed timed events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +40. **`processedUpstreamControl`**: The number of processed upstream + control. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +41. **`processedUpstreamPackets`**: The number of processed upstream + packets. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + + + +## Statistic Tables + +1. **`BroadcastPacketAcceptTable0`**: Broadcast packets accepted + + ```no-highlighting + Clearable: yes + ``` + +2. **`BroadcastPacketDropTable0`**: Broadcast packets dropped by + reason code + + ```no-highlighting + Clearable: yes + ``` + +3. **`EventReceptionTable`**: Received event counts + + ```no-highlighting + Clearable: yes + ``` + +4. **`NeighborMetricTable`**: Neighbor Metric Table + + ```no-highlighting + Clearable: no + ``` + +5. **`NeighborStatusTable`**: Neighbor Status Table + + ```no-highlighting + Clearable: no + ``` + +6. **`RFSignalTable`**: Rf Signal Table + + ```no-highlighting + Clearable: no + ``` + +7. **`UnicastPacketAcceptTable0`**: Unicast packets accepted + + ```no-highlighting + Clearable: yes + ``` + +8. **`UnicastPacketDropTable0`**: Unicast packets dropped by reason + code + + ```no-highlighting + Clearable: yes + ``` + + diff --git a/guide/site/preface.md b/guide/site/preface.md new file mode 100644 index 0000000..b5119df --- /dev/null +++ b/guide/site/preface.md @@ -0,0 +1,93 @@ +--- +layout: default +title: Home +nav_order: 1 +permalink: / +--- + + +# About The EMANE Guide + +## Who This Guide Is For + +The *emane-guide* is for anyone interested in using the [*Extendable +Mobile Ad-hoc Network +Emulator*](https://github.com/adjacentlink/emane) (*EMANE*) for +research and/or development of wireless communication systems. + +This guide assumes that you are familiar with basic wireless +communication concepts and have a working knowledge of the Linux +command line. The material presented throughout this guide is done in +a broadly accessible manner. Networking tools and operating system +components, such as Linux Containers, are used throughout the examples +that accompany this guide. If you find that you require more +information or direction using any of these, there is ample +documentation readily available on the Internet. + +## How to Use This Guide + +This guide is designed to be read in sequence, with each chapter +building on the previous. This guide comes with a set of examples, so +you will want to clone the latest version from +[GitHub](https://github.com) and try each of the examples yourself. + +```text +$ git clone https://github.com/adjacentlink/emane-guide +``` + +Some sections of this guide that focus on internal and external APIs +will make more sense if you have a programming background, +specifically experience with C++, Python, and Google Protocol +Buffers. None of which are a prerequisite for using *EMANE*, but if +you want to develop radio models or tools that interact with *EMANE*, +proficiency with each will be helpful. + +## Resources and Contributions + +All [Adjacent Link](https://adjacentlink.com) FOSS, including this +guide, is available on [Adjacent Link's +GitHub](https://github.com/adjacentlink) organization page. Each +project has its own *Issues* and *Pull Requests*. Please use these to +report any application specific bugs or questions. + +There are other Adjacent Link tutorials that cover in more detail +areas used in this guide. + +* The + [*emane-control-port-tutorial*](https://github.com/adjacentlink/emane-control-port-tutorial) + is a deep-dive into understanding how to interface with the *EMANE* + Control Port. + + [https://github.com/adjacentlink/emane-control-port-tutorial](https://github.com/adjacentlink/emane-control-port-tutorial) + +* The + (*letce2-tutorial*)[https://github.com/adjacentlink/letce2-tutorial] + provides an overview of the *Lightweight Experiment Template + Configuration Environment* (*letce2*) and covers how to define and + execute experiments. + + [https://github.com/adjacentlink/letce2-tutorial](https://github.com/adjacentlink/letce2-tutorial) + +* The + [*python-etce-tutorial*](https://github.com/adjacentlink/python-etce-tutorial) + provides an overview of the *Extendable Test Control Environment* + (*ETCE*). *ETCE* concepts are introduced through a sequence of + examples. The tutorial aims to explain ETCE with enough detail so + that users can effectively write, execute and automate their own + *EMANE* emulations upon completion. + + [https://github.com/adjacentlink/python-etce-tutorial](https://github.com/adjacentlink/python-etce-tutorial) + + +* The [*EMANE* + Wiki](https://https://github.com/adjacentlink/emane/wiki) and + [*emane-tutorial*](https://github.com/adjacentlink/emane-tutorial) + are the original *EMANE* guide. Both of which have been replaced + with this guide. However this guide is still in its infancy, so + there may be material in the wiki and tutorial that is not yet + included in this guide. + + [https://https://github.com/adjacentlink/emane/wiki](https://https://github.com/adjacentlink/emane/wiki) + + [https://github.com/adjacentlink/emane-tutorial](https://github.com/adjacentlink/emane-tutorial) + diff --git a/guide/site/raw-transport.md b/guide/site/raw-transport.md new file mode 100644 index 0000000..b8915fd --- /dev/null +++ b/guide/site/raw-transport.md @@ -0,0 +1,198 @@ +--- +layout: default +title: Raw Transport +nav_order: 16 +permalink: /raw-transport +--- + + + +# Raw Transport + +The Raw Transport uses a specified network interface as the emulation +boundary entry/exit point. + +## Features + +The Raw Transport emulation boundary provides the following set of +features: [Network Interface Raw +Read/Write](#network-interface-raw-readwrite), [Virtual Transport +Interoperability](#virtual-transport-interoperability), [Bitrate +Enforcement](#bitrate-enforcement), [Broadcast Only +Mode](#broadcast-only-mode), and [IPv4 and IPv6 +Capable](#ipv4-and-ipv6-capable). + +## Network Interface Raw Read/Write + +The Raw Transport uses a specific network interface as the emulation +boundary entry/exit point. The network interface can be a physical +interface, virtual interface, tunnel, etc. The interface is managed +external to the Raw Transport. + +Any traffic read from the interface will +be delivered to the Raw Transport's respective *NEM* for emulation +processing. + +## Virtual Transport Interoperability + +The Raw Transport supports interoperability with [Virtual Transport](virtual-transport#virtual-transport) +emulation boundaries using ARP caching to learn IP network to *NEM Id* +associations. + +### Bitrate Enforcement + +The Raw Transport supports bitrate enforcement for use with models +that do not limit bitrate based on emulation implementation. Set the +configuration parameter `bitrate` to the desired rate in `bps` to +enable bitrate enforcement or 0 to disable. + +### Broadcast Only Mode + +The Raw Transport supports forced *NEM* broadcasting of all IP +packet types: unicast, broadcast and multicast. Set the configuration +parameter `broadcastmodeenable` to `true` to enable broadcast only +mode. + +### IPv4 and IPv6 Capable + +The Raw Transport supports IPv4 and IPv6 packet processing. + +## Configuration + +1. **`arpcacheenable`**: Enable ARP request/reply monitoring to map + Ethernet address to NEM. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: true + ``` + +2. **`bitrate`**: Transport bitrate in bps. This is the total + allowable throughput for the transport combined in both directions + (upstream and downstream). A value of 0 disables the bitrate feature. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint64 Occurrs: [1,1] Range: [0,max_uint64] + Values: 0 + ``` + +3. **`broadcastmodeenable`**: Broadcast all packets to all NEMs. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + +4. **`device`**: Device to use as the raw packet entry point. + + ```no-highlighting + Default: no Required: no Modifiable: no + Type: string Occurrs: [1,1] + ``` + + + +## Statistics + +1. **`avgProcessAPIQueueDepth`**: Average API queue depth for a + processUpstreamPacket, processUpstreamControl, + processDownstreamPacket, processDownstreamControl, processEvent and + processTimedEvent. + + ```no-highlighting + Type: double Clearable: yes + ``` + +2. **`avgProcessAPIQueueWait`**: Average API queue wait for a + processUpstreamPacket, processUpstreamControl, + processDownstreamPacket, processDownstreamControl, processEvent and + processTimedEvent in microseconds. + + ```no-highlighting + Type: double Clearable: yes + ``` + +3. **`avgTimedEventLatency`**: Average latency between the scheduled + timer expiration and the actual firing over the requested duration. + + ```no-highlighting + Type: double Clearable: yes + ``` + +4. **`avgTimedEventLatencyRatio`**: Average ratio of the delta between + the scheduled timer expiration and the actual firing over the + requested duration. An average ratio approaching 1 indicates that + timer latencies are large in comparison to the requested durations. + + ```no-highlighting + Type: double Clearable: yes + ``` + +5. **`numAPIQueued`**: The number of queued API events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +6. **`processedConfiguration`**: The number of processed + configuration. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +7. **`processedDownstreamControl`**: The number of processed + downstream control. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +8. **`processedDownstreamPackets`**: The number of processed + downstream packets. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +9. **`processedEvents`**: The number of processed events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +10. **`processedTimedEvents`**: The number of processed timed events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +11. **`processedUpstreamControl`**: The number of processed upstream + control. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +12. **`processedUpstreamPackets`**: The number of processed upstream + packets. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + + + +## Statistic Tables + +1. **`EventReceptionTable`**: Received event counts + + ```no-highlighting + Clearable: yes + ``` + + + diff --git a/guide/site/rf-pipe-radio-model.md b/guide/site/rf-pipe-radio-model.md new file mode 100644 index 0000000..9d47585 --- /dev/null +++ b/guide/site/rf-pipe-radio-model.md @@ -0,0 +1,820 @@ +--- +layout: default +title: RF Pipe Radio Model +nav_order: 10 +permalink: /rf-pipe-radio-model +--- + + +# RF Pipe Radio Model + +The RF Pipe radio model is a generic model designed for use as a +surrogate for waveforms without a model of their own. + + +## Features + +The RF Pipe radio model provides the following set of features: +[Network Delay Emulation](#network-delay-emulation) and [Packet +Completion Rate Curves](#packet-completion-rate-curves). + +### Network Delay Emulation + +The RF Pipe radio model allows for downstream transmission network +delay emulation using a configurable delay and jitter. The RF Pipe +model will apply a network delay before a message is sent to the +physical layer for over-the-air transmission. + +The network delay is computed as follows: + +$$networkDelay = delay + jitter$$ + +Where, + +* $$delay$$ is defined by the configuration parameter `delay`. + +* $$jitter$$ is defined by the configuration parameter `jitter`. + +### Packet Completion Rate Curves + +The RF Pipe radio model Packet Completion Rate is specified as curve +defined via XML. The curve definition comprises a series of SINR +values along with their corresponding probability of reception. + +A curve definition must contain a minimum of two points with one SINR +representing *POR = 0* and one SINR representing *POR = 100*. Linear +interpolation is preformed when an exact SINR match is not found. + +Specifying a packet size (`
    ` attribute +`pktsize`) in the curve file will adjust the POR based on received +packet size. Specifying a `pktsize` of 0 disregards received packet +size when computing the POR. + +The POR is obtained using the following calculation when a non-zero +`pktsize` is specified: + +$$POR = POR_0 ^ {S_1/S_0}$$ + +Where, + +$$POR_0$$ is the POR value determined from the PCR curve for +the given SINR value + +$$S_0$$ is the packet size specified in the curve file +`pktsize` + +$$S_1$$ is the received packet size + +The below PCR curve file is used by all nodes in the `rfpipe-01` +example. This curve is for illustrative purposes only. Packet +Completion Rate curves should be representative of the waveform being +emulated. + +```xml + + + +
    + + + + + + + + + + + + + + + + + + + + + + +<... snippet: only 25 lines shown...> +``` +

    emane-guide/examples/rfpipe-01/node-1/emane-rfpipe-pcr.xml


    + +![](images/auto-generated-pcr-representation.png){: width="75%"; .centered} + +## Limitations + +The RF Pipe radio model has the following limitations: + +1. The RF Pipe radio model does not perform channel access. Since +there is no channel access protocol, the data rate defines the +transmission capacity of each node within the network. + +2. The RF Pipe radio model does not apply any in-band interference +effects and as such, the use of negative SINR values within the PCR +curve is valid only when the physical layer `nodemode` configuration +value is set to `outofband` in order to raise the noise floor above +the inherent receiver sensitivity. + +## Configuration + +1. **`datarate`**: Defines the transmit datarate in bps. The datarate + is used by the transmitter to compute the transmit delay (packet + size/datarate) between successive transmissions. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: uint64 Occurrs: [1,1] Range: [1,max_uint64] + Values: 1000000 + ``` + +2. **`delay`**: Defines an additional fixed delay in seconds applied + to each transmitted packet. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: float Occurrs: [1,1] Range: [0.000000,max_float] + Values: 0.000000 + ``` + +3. **`enablepromiscuousmode`**: Defines whether promiscuous mode is + enabled or not. If promiscuous mode is enabled, all received packets + (intended for the given node or not) that pass the probability of + reception check are sent upstream to the transport. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + +4. **`flowcontrolenable`**: Defines whether flow control is enabled. + Flow control only works with the virtual transport and the setting + must match the setting within the virtual transport configuration. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + +5. **`flowcontroltokens`**: Defines the maximum number of flow control + tokens (packet transmission units) that can be processed from the + virtual transport without being refreshed. The number of available + tokens at any given time is coordinated with the virtual transport and + when the token count reaches zero, no further packets are transmitted + causing application socket queues to backup. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [0,65535] + Values: 10 + ``` + +6. **`jitter`**: Defines delay jitter in seconds applied to each + transmitted packet. The jitter is added to the configured delay based + on a uniform random distribution between +/- the configured jitter + value. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: float Occurrs: [1,1] Range: [0.000000,max_float] + Values: 0.000000 + ``` + +7. **`neighbormetricdeletetime`**: Defines the time in seconds of no + RF receptions from a given neighbor before it is removed from the + neighbor table. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: float Occurrs: [1,1] Range: [1.000000,3660.000000] + Values: 60.000000 + ``` + +8. **`pcrcurveuri`**: Defines the URI of the Packet Completion Rate + (PCR) curve file. The PCR curve file contains probability of reception + curves as a function of Signal to Interference plus Noise Ratio + (SINR). + + ```no-highlighting + Default: no Required: yes Modifiable: no + Type: string Occurrs: [1,1] + ``` + +9. **`radiometricenable`**: Defines if radio metrics will be reported + up via the Radio to Router Interface (R2RI). + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + +10. **`radiometricreportinterval`**: Defines the metric report + interval in seconds in support of the R2RI feature. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: float Occurrs: [1,1] Range: [0.100000,60.000000] + Values: 1.000000 + ``` + +11. **`rfsignaltable.averageallantennas`**: Defines whether statistics + for all antennas with be averaged together. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + +12. **`rfsignaltable.averageallfrequencies`**: Defines whether + statistics for all frequencies with be averaged together. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + + + +## Statistics + +1. **`avgDownstreamProcessingDelay0`**: Average downstream processing + delay + + ```no-highlighting + Type: float Clearable: yes + ``` + +2. **`avgDownstreamQueueDelay`**: + + ```no-highlighting + Type: float Clearable: yes + ``` + +3. **`avgProcessAPIQueueDepth`**: Average API queue depth for a + processUpstreamPacket, processUpstreamControl, + processDownstreamPacket, processDownstreamControl, processEvent and + processTimedEvent. + + ```no-highlighting + Type: double Clearable: yes + ``` + +4. **`avgProcessAPIQueueWait`**: Average API queue wait for a + processUpstreamPacket, processUpstreamControl, + processDownstreamPacket, processDownstreamControl, processEvent and + processTimedEvent in microseconds. + + ```no-highlighting + Type: double Clearable: yes + ``` + +5. **`avgTimedEventLatency`**: Average latency between the scheduled + timer expiration and the actual firing over the requested duration. + + ```no-highlighting + Type: double Clearable: yes + ``` + +6. **`avgTimedEventLatencyRatio`**: Average ratio of the delta between + the scheduled timer expiration and the actual firing over the + requested duration. An average ratio approaching 1 indicates that + timer latencies are large in comparison to the requested durations. + + ```no-highlighting + Type: double Clearable: yes + ``` + +7. **`avgUpstreamProcessingDelay0`**: Average upstream processing + delay + + ```no-highlighting + Type: float Clearable: yes + ``` + +8. **`numAPIQueued`**: The number of queued API events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +9. **`numDownstreamBytesBroadcastGenerated0`**: Number of layer + generated downstream broadcast bytes + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +10. **`numDownstreamBytesBroadcastRx0`**: Number of downstream + broadcast bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +11. **`numDownstreamBytesBroadcastTx0`**: Number of downstream + broadcast bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +12. **`numDownstreamBytesUnicastGenerated0`**: Number of layer + generated downstream unicast bytes + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +13. **`numDownstreamBytesUnicastRx0`**: Number of downstream unicast + bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +14. **`numDownstreamBytesUnicastTx0`**: Number of downstream unicast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +15. **`numDownstreamPacketsBroadcastDrop0`**: Number of downstream + broadcast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +16. **`numDownstreamPacketsBroadcastGenerated0`**: Number of layer + generated downstream broadcast packets + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +17. **`numDownstreamPacketsBroadcastRx0`**: Number of downstream + broadcast packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +18. **`numDownstreamPacketsBroadcastTx0`**: Number of downstream + broadcast packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +19. **`numDownstreamPacketsUnicastDrop0`**: Number of downstream + unicast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +20. **`numDownstreamPacketsUnicastGenerated0`**: Number of layer + generated downstream unicast packets + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +21. **`numDownstreamPacketsUnicastRx0`**: Number of downstream unicast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +22. **`numDownstreamPacketsUnicastTx0`**: Number of downstream unicast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +23. **`numDownstreamQueueDelay`**: + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +24. **`numHighWaterMark`**: + + ```no-highlighting + Type: uint32 Clearable: yes + ``` + +25. **`numUpstreamBytesBroadcastRx0`**: Number of upstream broadcast + bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +26. **`numUpstreamBytesBroadcastTx0`**: Number of updtream broadcast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +27. **`numUpstreamBytesUnicastRx0`**: Number upstream unicast bytes + received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +28. **`numUpstreamBytesUnicastTx0`**: Number of upstream unicast bytes + transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +29. **`numUpstreamPacketsBroadcastDrop0`**: Number of upstream + broadcast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +30. **`numUpstreamPacketsBroadcastRx0`**: Number of upstream broadcast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +31. **`numUpstreamPacketsBroadcastTx0`**: Number of upstream broadcast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +32. **`numUpstreamPacketsUnicastDrop0`**: Number of upstream unicast + packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +33. **`numUpstreamPacketsUnicastRx0`**: Number upstream unicast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +34. **`numUpstreamPacketsUnicastTx0`**: Number of upstream unicast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +35. **`processedConfiguration`**: The number of processed + configuration. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +36. **`processedDownstreamControl`**: The number of processed + downstream control. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +37. **`processedDownstreamPackets`**: The number of processed + downstream packets. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +38. **`processedEvents`**: The number of processed events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +39. **`processedTimedEvents`**: The number of processed timed events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +40. **`processedUpstreamControl`**: The number of processed upstream + control. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +41. **`processedUpstreamPackets`**: The number of processed upstream + packets. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + + + +## Statistic Tables + +1. **`BroadcastPacketAcceptTable0`**: Broadcast packets accepted + + ```no-highlighting + Clearable: yes + ``` + +2. **`BroadcastPacketDropTable0`**: Broadcast packets dropped by + reason code + + ```no-highlighting + Clearable: yes + ``` + +3. **`EventReceptionTable`**: Received event counts + + ```no-highlighting + Clearable: yes + ``` + +4. **`NeighborMetricTable`**: Neighbor Metric Table + + ```no-highlighting + Clearable: no + ``` + +5. **`NeighborStatusTable`**: Neighbor Status Table + + ```no-highlighting + Clearable: no + ``` + +6. **`RFSignalTable`**: Rf Signal Table + + ```no-highlighting + Clearable: no + ``` + +7. **`UnicastPacketAcceptTable0`**: Unicast packets accepted + + ```no-highlighting + Clearable: yes + ``` + +8. **`UnicastPacketDropTable0`**: Unicast packets dropped by reason + code + + ```no-highlighting + Clearable: yes + ``` + + + + +## Examples + +This guide includes the RF Pipe example: + +1. `rfpipe-01`: A five node example using precomputed pathloss and + running the B.A.T.M.A.N manet protocol. + +### rfpipe-01 + +![](images/auto-generated-topology-rfpipe-01.png){: width="60%"; .centered} +

    rfpipe-01 experiment components


    + +The `rfpipe-01` example experiment contains five nodes, each running +the B.A.T.M.A.N. routing protocol. + +All physical layers are configured to use the `precomputed` propagation +model and `emaneeventservice` publishes [`PathlossEvents`](events#pathlossevent) +using pathloss values in `scenario.eel`. + +```text +0.0 nem:1 pathloss nem:2,70 +0.0 nem:1 pathloss nem:3,70 +0.0 nem:1 pathloss nem:4,70 +0.0 nem:1 pathloss nem:5,70 + +0.0 nem:2 pathloss nem:3,70 +0.0 nem:2 pathloss nem:4,70 +0.0 nem:2 pathloss nem:5,70 + +0.0 nem:3 pathloss nem:4,70 +0.0 nem:3 pathloss nem:5,70 + +0.0 nem:4 pathloss nem:5,70 +``` +

    emane-guide/examples/rfpipe-01/host/scenario.eel


    + +![](images/auto-generated-run-rfpipe-01.png){: width="75%"; .centered} + +With `emane-guide/examples/rfpipe-01` running, we can query `node-1`'s +physical layer to take a look at the `PathlossEventInfoTable` and +`ReceivePowerTable`. + +```text +$ emanesh node-1 get table nems phy PathlossEventInfoTable ReceivePowerTable +nem 1 phy PathlossEventInfoTable +| NEM | Forward Pathloss | Reverse Pathloss | +| 2 | 70.0 | 70.0 | +| 3 | 70.0 | 70.0 | +| 4 | 70.0 | 70.0 | +| 5 | 70.0 | 70.0 | + +nem 1 phy ReceivePowerTable +|NEM|Rx Antenna|Tx Antenna|Frequency |Rx Power|Tx Gain|Rx Gain|Tx Power|Pathloss|Doppler|Last Packet Time | +|2 |0 |0 |2400000000|-70.0 |0.0 |0.0 |0.0 |70.0 |0.0 |1688147153.189406 | +|3 |0 |0 |2400000000|-70.0 |0.0 |0.0 |0.0 |70.0 |0.0 |1688147153.293473 | +|4 |0 |0 |2400000000|-70.0 |0.0 |0.0 |0.0 |70.0 |0.0 |1688147153.2934668| +|5 |0 |0 |2400000000|-70.0 |0.0 |0.0 |0.0 |70.0 |0.0 |1688147153.30126 | +``` + +The `PathlossEventInfoTable` shows pathloss values matching those in +`scenario.eel`. Only the Forward Pathloss value is used by the +physical layer. The Reverse Pathloss value is an unused legacy value +but still useful when analyzing an experiment as it indicates if link +pathloss is symmetrical without requiring correlation of values +between nodes. + +Using the [Receive Power Calculation](physical-layer#receive-power-calculation), we +can verify the `Rx Power` value from the `ReceivePowerTable`. + +$$rxPower = txPower + txAntennaGain + rxAntennaGain - pathloss$$ + +$$rxPower = 0dBm + 0dB + 0dB - 70dB$$ + +$$rxPower = -70dBm$$ + +Testing connectivity between `node-1` and all nodes using `fping` shows +100% completion in both directions. + +```text +$ ssh node-1 fping -N -C 2 radio-2 radio-3 radio-4 radio-5 +radio-2 : [0], 64 bytes, 0.707 ms (0.707 avg, 0% loss) +radio-3 : [0], 64 bytes, 0.918 ms (0.918 avg, 0% loss) +radio-4 : [0], 64 bytes, 0.780 ms (0.780 avg, 0% loss) +radio-5 : [0], 64 bytes, 1.25 ms (1.25 avg, 0% loss) +radio-2 : [1], 64 bytes, 1.67 ms (1.19 avg, 0% loss) +radio-3 : [1], 64 bytes, 1.40 ms (1.16 avg, 0% loss) +radio-4 : [1], 64 bytes, 1.65 ms (1.21 avg, 0% loss) +radio-5 : [1], 64 bytes, 1.45 ms (1.35 avg, 0% loss) + +radio-2 : 0.707 1.67 +radio-3 : 0.918 1.40 +radio-4 : 0.780 1.65 +radio-5 : 1.25 1.45 +``` + +Using `emanesh` we can modify the latency for `node-2` to add 200msec +of delay to all transmitted packets and then rerun `fping` to verify +the results. + +```text +$ emanesh node-2 get config nems mac delay +nem 2 mac delay = 0.0 +$ emanesh node-2 set config nems mac delay=.2 +nem 2 mac configuration updated +``` + +```text +$ ssh node-1 fping -N -C 2 radio-2 radio-3 radio-4 radio-5 +radio-3 : [0], 64 bytes, 0.864 ms (0.864 avg, 0% loss) +radio-4 : [0], 64 bytes, 0.871 ms (0.871 avg, 0% loss) +radio-5 : [0], 64 bytes, 2.07 ms (2.07 avg, 0% loss) +radio-2 : [0], 64 bytes, 202 ms (202 avg, 0% loss) +radio-3 : [1], 64 bytes, 1.91 ms (1.39 avg, 0% loss) +radio-4 : [1], 64 bytes, 2.05 ms (1.46 avg, 0% loss) +radio-5 : [1], 64 bytes, 1.37 ms (1.72 avg, 0% loss) +radio-2 : [1], 64 bytes, 202 ms (202 avg, 0% loss) + +radio-2 : 202 202 +radio-3 : 0.864 1.91 +radio-4 : 0.871 2.05 +radio-5 : 2.07 1.37 +``` + +Connectivity is still 100% between `node-1` and all nodes but now +there is an additional 200msec of latency from `node-2`'s response. + +Using `otestpoint-labtools-mtabletool` to subscribe to all +`EMANE.RFPipe.Tables.Receive` probes, we can build a combined RF +Signal table showing the number of samples in each measurement +interval and the measurement interval averages computed from long +running averages for receive power, noise floor, and SINR. + +```text +$ otestpoint-labtools-mtabletool \ + localhost:9002 \ + Measurement_emane_rfpipe_tables_receive@rfsignaltable \ + EMANE.RFPipe.Tables.Receive \ + --actions \ + "pass(c=(0-2));" \ + "delta(c=(3))=>|{}_intvl|;" \ + "iavg(c=(4,5,6),n=(3))=>|{}_intvl|;" +``` + +The `rfsignaltable` published as part of +`Measurement_emane_rfpipe_tables_receive`, like all *OpenTestPoint* +measurements, is updated every 5 seconds. + +```text + Measurement_emane_rfpipe_tables_receive@rfsignaltable + _Publisher NEM AntennaId FrequencyHz NumSamples_intvl AvgRxPower_intvl AvgNoiseFloor_intvl AvgSINR_intvl +0 node-1 2 0 2400000000 69 -70.0 -96.9897 26.9897 +1 node-1 3 0 2400000000 69 -70.0 -96.9897 26.9897 +2 node-1 4 0 2400000000 69 -70.0 -96.9897 26.9897 +3 node-1 5 0 2400000000 69 -70.0 -96.9897 26.9897 +4 node-2 1 0 2400000000 69 -70.0 -96.9897 26.9897 +5 node-2 3 0 2400000000 69 -70.0 -96.9897 26.9897 +6 node-2 4 0 2400000000 69 -70.0 -96.9897 26.9897 +7 node-2 5 0 2400000000 69 -70.0 -96.9897 26.9897 +8 node-3 1 0 2400000000 69 -70.0 -96.9897 26.9897 +9 node-3 2 0 2400000000 69 -70.0 -96.9897 26.9897 +10 node-3 4 0 2400000000 69 -70.0 -96.9897 26.9897 +11 node-3 5 0 2400000000 69 -70.0 -96.9897 26.9897 +12 node-4 1 0 2400000000 69 -70.0 -96.9897 26.9897 +13 node-4 2 0 2400000000 69 -70.0 -96.9897 26.9897 +14 node-4 3 0 2400000000 69 -70.0 -96.9897 26.9897 +15 node-4 5 0 2400000000 69 -70.0 -96.9897 26.9897 +16 node-5 1 0 2400000000 69 -70.0 -96.9897 26.9897 +17 node-5 2 0 2400000000 69 -70.0 -96.9897 26.9897 +18 node-5 3 0 2400000000 69 -70.0 -96.9897 26.9897 +19 node-5 4 0 2400000000 69 -70.0 -96.9897 26.9897 + ``` + +The table output shows `AvgRxPower_intvl` matches the `Rx Power` from +the physical layer `ReceivePowerTable` and that the `AvgSINR_intvl` +between all nodes is 26.9dB. Taking a look at the RF Pipe PCR curve +used for this example, +`emane-guide/examples/rfpipe-01/node-1/emane-rfpipe-pcr.xml`, any SINR +over 20dB will have a 100% probability of completion. + +In order to experience 50% loss on each link, reduce the SINR to +10dB. This can be achieved by increasing the pathloss between nodes to +86.98dB. The `emaneevent-pathloss` script is a quick way to change +pathloss while investigating an experiment, provided +`emaneeventservice` is not actively publishing pathloss changes. + +```text +$ emaneevent-pathloss -i letce0 1:5 86.98 +``` + +The pathloss increase results in an `AvgSINR_intvl` of 10.009697 which +maps to an approximate POR of 50% within +`emane-guide/examples/rfpipe-01/node-1/emane-rfpipe-pcr.xml`. + +```text + Measurement_emane_rfpipe_tables_receive@rfsignaltable + _Publisher NEM AntennaId FrequencyHz NumSamples_intvl AvgRxPower_intvl AvgNoiseFloor_intvl AvgSINR_intvl +0 node-1 2 0 2400000000 22 -86.980003 -96.9897 10.009697 +1 node-1 3 0 2400000000 27 -86.980003 -96.9897 10.009697 +2 node-1 4 0 2400000000 25 -86.980003 -96.9897 10.009697 +3 node-1 5 0 2400000000 22 -86.980003 -96.9897 10.009697 +4 node-2 1 0 2400000000 21 -86.980003 -96.9897 10.009697 +5 node-2 3 0 2400000000 21 -86.980003 -96.9897 10.009697 +6 node-2 4 0 2400000000 21 -86.980003 -96.9897 10.009697 +7 node-2 5 0 2400000000 17 -86.980003 -96.9897 10.009697 +8 node-3 1 0 2400000000 20 -86.980003 -96.9897 10.009697 +9 node-3 2 0 2400000000 25 -86.980003 -96.9897 10.009697 +10 node-3 4 0 2400000000 26 -86.980003 -96.9897 10.009697 +11 node-3 5 0 2400000000 26 -86.980003 -96.9897 10.009697 +12 node-4 1 0 2400000000 28 -86.980003 -96.9897 10.009697 +13 node-4 2 0 2400000000 27 -86.980003 -96.9897 10.009697 +14 node-4 3 0 2400000000 25 -86.980003 -96.9897 10.009697 +15 node-4 5 0 2400000000 22 -86.980003 -96.9897 10.009697 +16 node-5 1 0 2400000000 23 -86.980003 -96.9897 10.009697 +17 node-5 2 0 2400000000 26 -86.980003 -96.9897 10.009697 +18 node-5 3 0 2400000000 27 -86.980003 -96.9897 10.009697 +19 node-5 4 0 2400000000 26 -86.980003 -96.9897 10.009697 + + ``` + +Using `ping` as a quick test shows an approximate completion of +25%. Which makes sense, 50% loss in each direction would yield a 25% +completion rate. + +```text +$ ssh node-1 ping radio-2 -i .02 -c 1000 -q +PING radio-2 (10.100.0.2) 56(84) bytes of data. + +--- radio-2 ping statistics --- +1000 packets transmitted, 234 received, 76.6% packet loss, time 20966ms +rtt min/avg/max/mdev = 0.500/1.540/2.649/0.447 ms +``` diff --git a/guide/site/tdma-radio-model.md b/guide/site/tdma-radio-model.md new file mode 100644 index 0000000..9df65e7 --- /dev/null +++ b/guide/site/tdma-radio-model.md @@ -0,0 +1,1273 @@ +--- +layout: default +title: TDMA Radio Model +nav_order: 12 +permalink: /tdma-radio-model +--- + + +# TDMA Radio Model + +The TDMA radio model implements a generic TDMA scheme that supports +[TDMA schedule](#tdma-schedule) distribution and updates in real-time +using [`TDMAScheduleEvents`](tdma-radio-model#tdmascheduleevent). + +## Features + +The TDMA radio model provides the following set of features: [Priority +Queues](#priority-queues), [Fragmentation](#fragmentation), +[Aggregation](#aggregation), [Reassembly](#reassembly), [TDMA +Schedule](#tdma-schedule), and [Packet Completion Rate +Curves](#packet-completion-rate-curves). + +### Priority Queues + +The TDMA radio model supports priority queues which map to user +traffic based priority levels assigned by emulation boundary +components. Outbound messages are dequeued FIFO based on slot service +class queue mapping and a highest to lowest priority queue search, if +necessary. + +The TDMA radio model classifies user traffic into four categories +which map to four queues. Traffic is assigned to a queue based on +downstream packet priority. The `queue.depth` configuration parameter +controls the queue depth for all queues. All queues will overflow, +dropping the oldest packet when an enqueue operation occurs on a queue +at max queue depth. The packet selected for discard will be the oldest +packet where no portion of the packet has been transmitted due to +[fragmentation](#fragmentation). If all packets in the queue have had +a portion transmitted, then the oldest packet is discarded regardless +of fragmentation state. + +The [Virtual Transport](virtual-transport#virtual-transport) and [Raw Transport](raw-transport#raw-transport) use DSCP as +downstream packet priority. + +|Queue ID| DSCP (6 MSBs of IP TOS Field)| Queue Priority| +|--------|------------------------------|---------------| +|0 | 0 - 7, 24 - 31 |0 (*lowest*) | +|1 | 8 - 23 |1 | +|2 | 32 - 47 |2 | +|3 | 48 - 63 |3 | +|4 | Reserved Control |4 (*highest*) | + +All transmit slots have a class or service assigned. This class +represents one of the four traffic queues or a fifth reserved +scheduler control queue. If the `queue.stricttxdequeue` configuration +parameter is enabled, only the queue matching the transmit slot class +is used to dequeue traffic. If `queue.stricttxdequeue` is disabled, an +attempt is made to dequeue traffic from the slot class matching queue, +followed by all other queues in highest to lowest priority order. + +Queues can be dequeued in one of two ways depending on whether the +current transmit slot has a destination *NEM* assigned. If a destination +is assigned, only packets matching the destination are dequeued +(FIFO). If no destination match is found, no transmission occurs. If a +destination is not assigned, packets are dequeued (FIFO) regardless of +their destination. + +Each slot has the same size and overhead, which is assigned using a + [`TDMAScheduleEvent`](tdma-radio-model#tdmascheduleevent). Transmit slots may be assigned + different data rates, making it possible for slots to have different + maximum byte limits. The TDMA radio model supports both fragmentation + and aggregation and allows either to be enabled or disabled + independently. + +### Fragmentation + +The TDMA radio model supports fragmentation and reassembly of large +outbound messages based on per slot data rates. If fragmentation is +enabled with the `queue.fragmentationenable` configuration parameter, +a large packet that is too big to fit in a given transmit slot is +fragmented into two or more message components. The actual number of +message components required cannot be determined beforehand since +each slot may vary in allowable size and destination assignment. If +fragmentation is disabled, packets that are too large to fit in a +transmit slot are discarded until one is found that fits. If none are +found in the slot class matching queue and `queue.stricttxdequeue` is +disabled, other queues will be searched but no packets will be +discarded due to length. In this case, as soon as a packet is found to +be too large for a given slot, the search ends in that queue and +continues in the next lowest priority queue. + +### Aggregation + +The TDMA radio model supports aggregation of smaller outbound +messages into larger over-the-air messages. If aggregation is enabled +with the `queue.aggregationenable` configuration parameter, one or +more message components for the same or different destinations +(unicast or broadcast) can be transmitted in a single slot. If all the +message components contained in a single slot transmission are for the +same *NEM* destination, that destination is used as the downstream +(outbound) packet destination. Otherwise, the *NEM* broadcast address is +used as the downstream packet destination. The latter case does not +imply the TDMA radio model treats these messages as broadcast. The TDMA +model handles each message component contained in a single +transmission as a separate message. However, when examining physical +layer statistics, the notion of unicast and broadcast transmission is +a bit fuzzy. + +If fragmentation is enabled, one or more message components in an +aggregate transmission may be a fragment. The +`queue.aggregationslotthreshold` configuration parameter controls the +percentage of a slot that must be filled in order to satisfy the +aggregation function and prevent further searching and/or fragmenting +of packets to fill the slot. + +### Reassembly + +If fragmentation and/or aggregation are disabled, the TDMA radio model will +still process upstream (inbound) aggregate messages and resemble +packet fragments. The TDMA radio model will attempt fragment reassembly on +one or more packets from one or more sources at the same time. Two +configuration parameters are used to control when individual fragment +reassembly efforts should be abandoned: +`fragmentcheckthreshold` and +`fragmenttimeoutthreshold`. The +`fragmentcheckthreshold` configuration +parameter controls how often the model checks to see if any active +reassembly efforts should be abandoned. The +`fragmenttimeoutthreshold` configuration +parameter is the amount of time that must pass since receiving a +fragment for a specific reassembly effort in order for that effort to +be considered timed out and subsequently abandoned. + +The radio model does not handle out of order fragments. As soon as a +non-consecutive fragment is received the reassembly effort for that +packet is abandoned. + +### TDMA Schedule + +The TDMA radio model supports TDMA schedule definition including [slot +size](#timing-and-slot-size), slot overhead, frame size as well as per +slot data rate, frequency, power, service class and optional +destination. + +The TDMA radio model uses three units to describe time allocation: *slot*, +*frame* and *multiframe*. A slot is the smallest unit of time and is +defined in microseconds. A slot supports the transmission of a single +burst of a maximum length accounting for payload and overhead +(preamble, headers, guard times, propagation delay, etc.). A frame +contains a number of slots. A multiframe contains a number of frames. + +The TDMA radio model receives a schedule via a [`TDMAScheduleEvent`](tdma-radio-model#tdmascheduleevent). There are two types of TDMA + schedules: *full* and *update*. A full TDMA schedule defines the TDMA + structure in use along with assigning per *NEM* transmit, receive and + idle slots. The TDMA structure defines: + + * Slot size in microseconds + + * Slot overhead in microseconds + + * Number of slots per frame + + * Number of frames per multiframe + + * Transceiver bandwidth in Hz + + +Slot overhead should be set to account for the various waveform +overhead parameters such as synchronization, waveform headers, +turnaround time, propagation delay, etc. At a minimum, the +*slotoverhead* should be set to the maximum propagation you expect the +signal to travel when using location events within your emulation. +For example, if you expect to support ranges out to 10km with the TDMA +model, the overhead in the schedule should be set to at least 34 +microseconds. This will ensure the *max amount of data packed in each +frame* + *the max propagation delay* will always be less than the +*slot size*. Failure to do so, can result in frames being discarded +by the receiver when end of reception crosses the slot boundary. + +An update TDMA schedule changes slot assignment information for an *NEM* +but does not change the TDMA structure. + +TDMA slots can be assigned as transmit, receive and idle. A transmit +slot is assigned a frequency (Hz), power (dBm), class ([0,4]), +data rate (bps) and an optional destination *NEM*. A receive slot is +assigned a frequency (Hz). An idle slot has no assignments and +indicates an *NEM* is neither transmitting nor receiving. + +When a TDMA radio model instance receives its schedule, it will take affect +at the start of the next multiframe boundary which is referenced from +the epoch: 00:00:00 UTC January 1, 1970. + +### Packet Completion Rate Curves + +The TDMA Model Packet Completion Rate is specified as curves defined +via XML. . Each curve definition comprises a series SINR values along +with their corresponding probability of reception for a given data rate +specified in *bps*. A curve definition must contain a minimum of two +points with one SINR representing *POR = 0* and one SINR representing +*POR = 100*. Linear interpolation is preformed when an exact SINR +match is not found. If a POR is requested for a data rate whose curve +was not defined, the first curve in the file is used regardless of its +associated data rate. + +Specifying a packet size (`` attribute +`packetsize`) in the curve file will adjust the POR based on received +packet size. Specifying a `packetsize` of 0 disregards received packet +size when computing the POR. + +The POR is obtained using the following calculation when a non-zero +*pktsize* is specified: + +$$POR = POR_0 ^ {S_1/S_0}$$ + +Where, + +$$POR_0$$ is the POR value determined from the PCR curve for +the given SINR value + +$$S_0$$ is the packet size specified in the curve file +`pktsize` + +$$S_1$$ is the received packet size + +The below PCR curve file is used by all nodes in the `tdma-01` +example. These curves are based on 802.11 modulation and data rate +combination based on theoretical equations for determining Bit Error +Rate (BER) in an Additive White Gaussian Noise (AWGN) channel and are +for illustrative purposes only. Packet Completion Rate curves should +be representative of the waveform being emulated. + +```xml + + + + + + + + + + + + + + + + + + + + + +<... snippet: only 20 lines shown...> +``` +

    emane-guide/examples/tdma-01/node-1/emane-tdma-pcr.xml


    + +![](images/auto-generated-pcr-representation.png){: width="75%"; .centered} + +## Working with TDMA Schedules + +A TDMA Schedule is defined using XML. The XML +[schema](https://github.com/adjacentlink/emane/blob/master/src/python/emane/events/schema/tdmaschedule.xsd) +documents the details involved in authoring a schedule. Some important +items to consider: + +1. A schedule that contains a `` element is a full schedule + and one without is an update schedule. + +2. A multiframe can define a default frequency, power, data rate and + class. A frame can define the same defaults, overriding all or some + of those defined in the multiframe. A transmit slot can override + all or some frame or multiframe defaults, plus add an optional + destination *NEM*. A receive slot can only override frequency. + +3. For a full schedule, any frame not defined will be idle for all + *NEMs* referenced in the schedule. + +4. For a full schedule, any slot not defined in a frame will be a + receive slot for all *NEMs* referenced in the schedule. The frame + default frequency will be used, if specified. Otherwise, the + multiframe default frequency will be used. + +5. For an update schedule, only those slots assigned for specified + *NEMs* are modified. No receive slot or idle frame auto-fill occurs. + +6. For a full schedule, the set of frequencies used by an *NEM* are sent + to the physical layer to configure the frequency of interest list + monitored by the spectrum monitor. + +7. For an update schedule, any additional frequencies used by an *NEM* + are added to the FOI frequency set cached since the last full + schedule and sent to the physical layer. + +8. Reception of a full schedule resets all TDMA schedule information. + +9. TDMA radio model instances can reject schedules that contains + errors. Acceptance and rejection of a schedule is conveyed using + the following statistics: + + * `scheduler.scheduleAcceptFull` + + * `scheduler.scheduleAcceptUpdate` + + * `scheduler.scheduleRejectFrameIndexRange` + + * `scheduler.scheduleRejectSlotIndexRange` + + * `scheduler.scheduleRejectUpdateBeforeFull` + + * `scheduler.scheduleRejectOther` + +10. Only *NEMs* referenced within a schedule XML file receive events + when using `emaneevent-tdmaschedule`. As such, all *NEMs* within + the scenario utilizing the TDMA radio model must be referenced + within a full schedule. + +11. Reception of a full or update schedule containing one or more + errors will cause a TDMA radio model instance to flush all + schedule information, resetting to its initial state of having no + schedule. + +Below is a complex example of a TDMA XML Schedule. + +```xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` + +### Sending a Schedule + +A TDMA schedule is sent to a TDMA radio model instance using a [`TDMAScheduleEvent`](tdma-radio-model#tdmascheduleevent). The `emaneevent-tdmaschedule` script + can be used to process a TDMA Schedule XML file. A schedule event is + sent to each *NEM* referenced in the schedule XML. Each event contains + only schedule information for the recipient *NEM*. + +```text +$ emaneevent-tdmaschedule your-desired-schedule.xml -i lo +``` + +### Verifying a Schedule + +TDMA radio model instances contain statistics to indicate the number +of full and update schedules accepted and rejected. + +```text +$ emanesh localhost get stat 1 mac | grep scheduler + +nem 1 mac scheduler.scheduleAcceptFull = 4 +nem 1 mac scheduler.scheduleAcceptUpdate = 0 +nem 1 mac scheduler.scheduleRejectFrameIndexRange = 0 +nem 1 mac scheduler.scheduleRejectSlotIndexRange = 0 +nem 1 mac scheduler.scheduleRejectUpdateBeforeFull = 0 +``` + +TDMA radio model instances maintain a schedule and structure table that +indicates the current schedule and slot structure. + +```text +$ emanesh localhost get table 1 mac scheduler.ScheduleInfoTable scheduler.StructureInfoTable + +nem 1 mac scheduler.ScheduleInfoTable +| Index | Frame | Slot | Type | Frequency | Data Rate | Power | Class | Destination | +| 0 | 0 | 0 | TX | 2400000000 | 1000000 | 0.0 | 0 | 0 | +| 1 | 0 | 1 | RX | 2400000000 | | | | | +| 2 | 0 | 2 | RX | 2400000000 | | | | | +| 3 | 0 | 3 | RX | 2400000000 | | | | | +| 4 | 0 | 4 | RX | 2400000000 | | | | | +| 5 | 0 | 5 | TX | 2400000000 | 1000000 | 0.0 | 0 | 0 | +| 6 | 0 | 6 | RX | 2400000000 | | | | | +| 7 | 0 | 7 | RX | 2400000000 | | | | | +| 8 | 0 | 8 | RX | 2400000000 | | | | | +| 9 | 0 | 9 | RX | 2400000000 | | | | | +| 10 | 1 | 0 | TX | 2400000000 | 11000000 | 0.0 | 0 | 0 | +| 11 | 1 | 1 | TX | 2400000000 | 11000000 | 0.0 | 0 | 0 | +| 12 | 1 | 2 | TX | 2400000000 | 11000000 | 0.0 | 0 | 0 | +| 13 | 1 | 3 | TX | 2400000000 | 11000000 | 0.0 | 0 | 0 | +| 14 | 1 | 4 | TX | 2400000000 | 11000000 | 0.0 | 0 | 0 | +| 15 | 1 | 5 | RX | 2400000000 | | | | | +| 16 | 1 | 6 | RX | 2400000000 | | | | | +| 17 | 1 | 7 | RX | 2400000000 | | | | | +| 18 | 1 | 8 | RX | 2400000000 | | | | | +| 19 | 1 | 9 | RX | 2400000000 | | | | | +| 20 | 2 | 0 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 21 | 2 | 1 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 22 | 2 | 2 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 23 | 2 | 3 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 24 | 2 | 4 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 25 | 2 | 5 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 26 | 2 | 6 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 27 | 2 | 7 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 28 | 2 | 8 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 29 | 2 | 9 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 30 | 3 | 0 | IDLE | | | | | | +| 31 | 3 | 1 | IDLE | | | | | | +| 32 | 3 | 2 | IDLE | | | | | | +| 33 | 3 | 3 | IDLE | | | | | | +| 34 | 3 | 4 | IDLE | | | | | | +| 35 | 3 | 5 | IDLE | | | | | | +| 36 | 3 | 6 | IDLE | | | | | | +| 37 | 3 | 7 | IDLE | | | | | | +| 38 | 3 | 8 | IDLE | | | | | | +| 39 | 3 | 9 | IDLE | | | | | | + +nem 1 mac scheduler.StructureInfoTable +| Name | Value | +| bandwidth | 1000000 | +| frames | 4 | +| slotduration | 1000 | +| slotoverhead | 0 | +| slots | 10 | +``` + +## `TDMAScheduleEvent` + +An `TDMAScheduleEvent` is used to set a TDMA radio model *NEM's* +schedule. + +```protobuf +package EMANEMessage; +option optimize_for = SPEED; +message TDMAScheduleEvent +{ + message Frame + { + message Slot + { + enum Type + { + SLOT_TX = 1; + SLOT_RX = 2; + SLOT_IDLE = 3; + } + message Tx + { + optional uint64 frequencyHz = 1; + optional uint64 dataRatebps = 2; + optional uint32 serviceClass = 3; + optional double powerdBm = 4; + optional uint32 destination = 5; + } + message Rx + { + optional uint64 frequencyHz = 1; + } + required uint32 index = 1; + required Type type = 2; + optional Tx tx = 3; + optional Rx rx = 4; + } + required uint32 index = 1; + optional uint64 frequencyHz = 2; + optional uint64 dataRatebps = 3; + optional uint32 serviceClass = 4; + optional double powerdBm = 5; + repeated Slot slots = 6; + } + message Structure + { + required uint32 slotsPerFrame = 1; + required uint32 framesPerMultiFrame = 2; + required uint64 slotDurationMicroseconds = 3; + required uint64 slotOverheadMicroseconds = 4; + required uint64 bandwidthHz = 5; + } + repeated Frame frames = 1; + optional Structure structure = 2; + optional uint64 frequencyHz = 3; + optional uint64 dataRatebps = 4; + optional uint32 serviceClass = 5; + optional double powerdBm = 6; +} +``` +

    emane/src/libemane/tdmascheduleevent.proto


    + + +## Timing and Slot Size + +Proper time synchronization is required for the TDMA radio model. The +required tightness of the time synchronization is a function of the +slot size configured using [`TDMAScheduleEvents`](tdma-radio-model#tdmascheduleevent). System +configuration, number of emulated nodes, traffic scenario and general +resource availability, are all factors in determining achievable slot +sizes. + +## Configuration + +1. **`enablepromiscuousmode`**: Defines whether promiscuous mode is + enabled or not. If promiscuous mode is enabled, all received packets + (intended for the given node or not) that pass the probability of + reception check are sent upstream to the transport. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + +2. **`flowcontrolenable`**: Defines whether flow control is enabled. + Flow control only works with the virtual transport and the setting + must match the setting within the virtual transport configuration. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + +3. **`flowcontroltokens`**: Defines the maximum number of flow control + tokens (packet transmission units) that can be processed from the + virtual transport without being refreshed. The number of available + tokens at any given time is coordinated with the virtual transport and + when the token count reaches zero, no further packets are transmitted + causing application socket queues to backup. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [0,65535] + Values: 10 + ``` + +4. **`fragmentcheckthreshold`**: Defines the rate in seconds a check + is performed to see if any packet fragment reassembly efforts should + be abandoned. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [0,65535] + Values: 2 + ``` + +5. **`fragmenttimeoutthreshold`**: Defines the threshold in seconds to + wait for another packet fragment for an existing reassembly effort + before abandoning the effort. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [0,65535] + Values: 5 + ``` + +6. **`neighbormetricdeletetime`**: Defines the time in seconds of no + RF receptions from a given neighbor before it is removed from the + neighbor table. + + ```no-highlighting + Default: yes Required: no Modifiable: yes + Type: float Occurrs: [1,1] Range: [1.000000,3660.000000] + Values: 60.000000 + ``` + +7. **`neighbormetricupdateinterval`**: Defines the neighbor table + update interval in seconds. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: float Occurrs: [1,1] Range: [0.100000,60.000000] + Values: 1.000000 + ``` + +8. **`pcrcurveuri`**: Defines the URI of the Packet Completion Rate + (PCR) curve file. The PCR curve file contains probability of reception + curves as a function of Signal to Interference plus Noise Ratio + (SINR). + + ```no-highlighting + Default: no Required: yes Modifiable: no + Type: string Occurrs: [1,1] + ``` + +9. **`queue.aggregationenable`**: Defines whether packet aggregation + is enabled for transmission. When enabled, multiple packets can be + sent in the same transmission when there is additional room within the + slot. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: true + ``` + +10. **`queue.aggregationslotthreshold`**: Defines the percentage of a + slot that must be filled in order to conclude aggregation when + queue.aggregationenable is enabled. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: double Occurrs: [1,1] Range: [0.000000,100.000000] + Values: 90.000000 + ``` + +11. **`queue.depth`**: Defines the size of the per service class + downstream packet queues (in packets). Each of the 5 queues (control + + 4 service classes) will be 'queuedepth' size. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint16 Occurrs: [1,1] Range: [0,65535] + Values: 256 + ``` + +12. **`queue.fragmentationenable`**: Defines whether packet + fragmentation is enabled. When enabled, a single packet will be + fragmented into multiple message components to be sent over multiple + transmissions when the slot is too small. When disabled and the + packet matches the traffic class for the transmit slot as defined in + the TDMA schedule, the packet will be discarded. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: true + ``` + +13. **`queue.strictdequeueenable`**: Defines whether packets will be + dequeued from a queue other than what has been specified when there + are no eligible packets for dequeue in the specified queue. Queues are + dequeued highest priority first. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + + + +## Statistics + +1. **`avgProcessAPIQueueDepth`**: Average API queue depth for a + processUpstreamPacket, processUpstreamControl, + processDownstreamPacket, processDownstreamControl, processEvent and + processTimedEvent. + + ```no-highlighting + Type: double Clearable: yes + ``` + +2. **`avgProcessAPIQueueWait`**: Average API queue wait for a + processUpstreamPacket, processUpstreamControl, + processDownstreamPacket, processDownstreamControl, processEvent and + processTimedEvent in microseconds. + + ```no-highlighting + Type: double Clearable: yes + ``` + +3. **`avgTimedEventLatency`**: Average latency between the scheduled + timer expiration and the actual firing over the requested duration. + + ```no-highlighting + Type: double Clearable: yes + ``` + +4. **`avgTimedEventLatencyRatio`**: Average ratio of the delta between + the scheduled timer expiration and the actual firing over the + requested duration. An average ratio approaching 1 indicates that + timer latencies are large in comparison to the requested durations. + + ```no-highlighting + Type: double Clearable: yes + ``` + +5. **`highWaterMarkQueue0`**: High water mark queue 0 + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +6. **`highWaterMarkQueue1`**: High water mark queue 1 + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +7. **`highWaterMarkQueue2`**: High water mark queue 2 + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +8. **`highWaterMarkQueue3`**: High water mark queue 3 + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +9. **`highWaterMarkQueue4`**: High water mark queue 4 + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +10. **`numAPIQueued`**: The number of queued API events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +11. **`numRxSlotErrorMissed`**: Number of Rx slot missed errors. + + ```no-highlighting + Type: uint64 Clearable: no + ``` + +12. **`numRxSlotErrorRxDuringIdle`**: Number of Rx slot rx during idle + errors. + + ```no-highlighting + Type: uint64 Clearable: no + ``` + +13. **`numRxSlotErrorRxDuringTx`**: Number of Rx slot during tx + errors. + + ```no-highlighting + Type: uint64 Clearable: no + ``` + +14. **`numRxSlotErrorRxLock`**: Number of Rx slot rx lock errors. + + ```no-highlighting + Type: uint64 Clearable: no + ``` + +15. **`numRxSlotErrorRxTooLong`**: Number of Rx slot rx too long + errors. + + ```no-highlighting + Type: uint64 Clearable: no + ``` + +16. **`numRxSlotErrorRxWrongFrequency`**: Number of Rx slot rx wrong + frequency errors. + + ```no-highlighting + Type: uint64 Clearable: no + ``` + +17. **`numRxSlotValid`**: Number of valid Rx slots + + ```no-highlighting + Type: uint64 Clearable: no + ``` + +18. **`numTxSlotErrorMissed`**: Number of Tx slot missed errors. + + ```no-highlighting + Type: uint64 Clearable: no + ``` + +19. **`numTxSlotErrorTooBig`**: Number of Tx slot too big errors. + + ```no-highlighting + Type: uint64 Clearable: no + ``` + +20. **`numTxSlotValid`**: Number of valid Tx slots + + ```no-highlighting + Type: uint64 Clearable: no + ``` + +21. **`processedConfiguration`**: The number of processed + configuration. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +22. **`processedDownstreamControl`**: The number of processed + downstream control. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +23. **`processedDownstreamPackets`**: The number of processed + downstream packets. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +24. **`processedEvents`**: The number of processed events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +25. **`processedTimedEvents`**: The number of processed timed events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +26. **`processedUpstreamControl`**: The number of processed upstream + control. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +27. **`processedUpstreamPackets`**: The number of processed upstream + packets. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +28. **`scheduler.scheduleAcceptFull`**: Number of full schedules + accepted. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +29. **`scheduler.scheduleAcceptUpdate`**: Number of update schedules + accepted. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +30. **`scheduler.scheduleRejectFrameIndexRange`**: Number of schedules + rejected due to out of range frame index. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +31. **`scheduler.scheduleRejectOther`**: Number of schedules rejected + due to other reasons. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +32. **`scheduler.scheduleRejectSlotIndexRange`**: Number of schedules + rejected due to out of range slot index. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +33. **`scheduler.scheduleRejectUpdateBeforeFull`**: Number of + schedules rejected due to an update before full schedule. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + + + +## Statistic Tables + +Aggregation and fragmentation make it difficult to convey packet based +statistic information. The TDMA radio model addresses this by keeping +track of byte statistics where message components are used and packet +statistics where queue information is conveyed. This is different from +other radio models. + +1. **`BroadcastByteAcceptTable0`**: Broadcast bytes accepted + + ```no-highlighting + Clearable: yes + ``` + +2. **`BroadcastByteAcceptTable1`**: Broadcast bytes accepted + + ```no-highlighting + Clearable: yes + ``` + +3. **`BroadcastByteAcceptTable2`**: Broadcast bytes accepted + + ```no-highlighting + Clearable: yes + ``` + +4. **`BroadcastByteAcceptTable3`**: Broadcast bytes accepted + + ```no-highlighting + Clearable: yes + ``` + +5. **`BroadcastByteAcceptTable4`**: Broadcast bytes accepted + + ```no-highlighting + Clearable: yes + ``` + +6. **`BroadcastByteDropTable0`**: Broadcast bytes dropped + + ```no-highlighting + Clearable: yes + ``` + +7. **`BroadcastByteDropTable1`**: Broadcast bytes dropped + + ```no-highlighting + Clearable: yes + ``` + +8. **`BroadcastByteDropTable2`**: Broadcast bytes dropped + + ```no-highlighting + Clearable: yes + ``` + +9. **`BroadcastByteDropTable3`**: Broadcast bytes dropped + + ```no-highlighting + Clearable: yes + ``` + +10. **`BroadcastByteDropTable4`**: Broadcast bytes dropped + + ```no-highlighting + Clearable: yes + ``` + +11. **`EventReceptionTable`**: Received event counts + + ```no-highlighting + Clearable: yes + ``` + +12. **`NeighborMetricTable`**: Neighbor Metric Table + + ```no-highlighting + Clearable: no + ``` + +13. **`NeighborStatusTable`**: Neighbor Status Table + + ```no-highlighting + Clearable: no + ``` + +14. **`PacketComponentAggregationHistogram`**: Shows a histogram of + the number of components contained in transmitted messages. + + ```no-highlighting + Clearable: no + ``` + +15. **`QueueFragmentHistogram`**: Shows a per queue histogram of the + number of message components required to transmit packets. + + ```no-highlighting + Clearable: no + ``` + +16. **`QueueStatusTable`**: Shows for each queue the number of packets + enqueued, dequeued, dropped due to queue overflow (enqueue), dropped + due to too big (dequeue) and which slot classes fragments are being + transmitted. + + ```no-highlighting + Clearable: no + ``` + +17. **`RxSlotStatusTable`**: Shows the number of Rx slot receptions + that were valid or missed based on slot timing deadlines + + ```no-highlighting + Clearable: no + ``` + +18. **`TxSlotStatusTable`**: Shows the number of Tx slot opportunities + that were valid or missed based on slot timing deadlines + + ```no-highlighting + Clearable: no + ``` + +19. **`UnicastByteAcceptTable0`**: Unicast bytes accepted + + ```no-highlighting + Clearable: yes + ``` + +20. **`UnicastByteAcceptTable1`**: Unicast bytes accepted + + ```no-highlighting + Clearable: yes + ``` + +21. **`UnicastByteAcceptTable2`**: Unicast bytes accepted + + ```no-highlighting + Clearable: yes + ``` + +22. **`UnicastByteAcceptTable3`**: Unicast bytes accepted + + ```no-highlighting + Clearable: yes + ``` + +23. **`UnicastByteAcceptTable4`**: Unicast bytes accepted + + ```no-highlighting + Clearable: yes + ``` + +24. **`UnicastByteDropTable0`**: Unicast bytes dropped + + ```no-highlighting + Clearable: yes + ``` + +25. **`UnicastByteDropTable1`**: Unicast bytes dropped + + ```no-highlighting + Clearable: yes + ``` + +26. **`UnicastByteDropTable2`**: Unicast bytes dropped + + ```no-highlighting + Clearable: yes + ``` + +27. **`UnicastByteDropTable3`**: Unicast bytes dropped + + ```no-highlighting + Clearable: yes + ``` + +28. **`UnicastByteDropTable4`**: Unicast bytes dropped + + ```no-highlighting + Clearable: yes + ``` + +29. **`scheduler.ScheduleInfoTable`**: Shows the current TDMA + schedule. + + ```no-highlighting + Clearable: no + ``` + +30. **`scheduler.StructureInfoTable`**: Shows the current TDMA + structure: slot size, slot overhead, number of slots per frame, number + of frames per multiframe and transceiver bandwidth. + + ```no-highlighting + Clearable: no + ``` + + + +## Examples + +This guide includes the TDMA example: + +1. `tdma-01`: A five node example using precomputed pathloss and + running the B.A.T.M.A.N manet protocol. + +### tdma-01 + +![](images/auto-generated-topology-tdma-01.png){: width="60%"; .centered} +

    tdma-01 experiment components


    + +The `tdma-01` example experiment contains five nodes, each running +the B.A.T.M.A.N. routing protocol. + +All physical layers are configured to use the `precomputed` propagation +model and `emaneeventservice` publishes [`PathlossEvents`](events#pathlossevent) +using pathloss values in `scenario.eel`. + +```text +0.0 nem:1 pathloss nem:2,80 +0.0 nem:1 pathloss nem:3,80 +0.0 nem:1 pathloss nem:4,80 +0.0 nem:1 pathloss nem:5,80 + +0.0 nem:2 pathloss nem:3,80 +0.0 nem:2 pathloss nem:4,80 +0.0 nem:2 pathloss nem:5,80 + +0.0 nem:3 pathloss nem:4,80 +0.0 nem:3 pathloss nem:5,80 + +0.0 nem:4 pathloss nem:5,80 +``` +

    emane-guide/examples/tdma-01/host/scenario.eel


    + +This example uses the TDMA schedule defined in `schedule.xml`. + +```xml + + + + + + + + + + + + +``` +

    emane-guide/examples/tdma-01/schedule.xml


    + +![](images/auto-generated-run-tdma-01.png){: width="75%"; .centered} + +With `emane-guide/examples/tdma-01` running, we can use `emanesh` to +view the schedule assigned to `node-1` and compare this to the TDMA +schedule XML. + +```text +$ emanesh node-1 get table nems mac scheduler.ScheduleInfoTable scheduler.StructureInfoTable +nem 1 mac scheduler.ScheduleInfoTable +| Index | Frame | Slot | Type | Frequency | Data Rate | Power | Class | Destination | +| 0 | 0 | 0 | TX | 1200000000 | 9000000 | 50.0 | 0 | 0 | +| 1 | 0 | 1 | RX | 1200000000 | | | | | +| 2 | 0 | 2 | RX | 1200000000 | | | | | +| 3 | 0 | 3 | RX | 1200000000 | | | | | +| 4 | 0 | 4 | RX | 1200000000 | | | | | +| 5 | 0 | 5 | TX | 1200000000 | 9000000 | 50.0 | 0 | 0 | +| 6 | 0 | 6 | RX | 1200000000 | | | | | +| 7 | 0 | 7 | RX | 1200000000 | | | | | +| 8 | 0 | 8 | RX | 1200000000 | | | | | +| 9 | 0 | 9 | RX | 1200000000 | | | | | + +nem 1 mac scheduler.StructureInfoTable +| Name | Value | +| bandwidth | 5000000 | +| frames | 1 | +| slotduration | 10000 | +| slotoverhead | 640 | +| slots | 10 | +``` + +Using `diff`, we can quickly compare the schedules for `node-1` and +`node-2` to verify the only differences are in the assigned transmit +slots. + +```text +$ diff \ + <(emanesh node-1 get table nems mac scheduler.ScheduleInfoTable scheduler.StructureInfoTable \ + | sed -e 's/| //g' -e 's/ |//g') \ + <(emanesh node-2 get table nems mac scheduler.ScheduleInfoTable scheduler.StructureInfoTable \ + | sed -e 's/| //g' -e 's/ |//g') \ + --side-by-side +nem 1 mac scheduler.ScheduleInfoTable | nem 2 mac scheduler.ScheduleInfoTable +Index Frame Slot Type Frequency Data Rate Power Class Destin Index Frame Slot Type Frequency Data Rate Power Class Destin +0 0 0 TX 1200000000 9000000 50.0 0 0 | 0 0 0 RX 1200000000 +1 0 1 RX 1200000000 | 1 0 1 TX 1200000000 9000000 50.0 0 0 +2 0 2 RX 1200000000 2 0 2 RX 1200000000 +3 0 3 RX 1200000000 3 0 3 RX 1200000000 +4 0 4 RX 1200000000 4 0 4 RX 1200000000 +5 0 5 TX 1200000000 9000000 50.0 0 0 | 5 0 5 RX 1200000000 +6 0 6 RX 1200000000 | 6 0 6 TX 1200000000 9000000 50.0 0 0 +7 0 7 RX 1200000000 7 0 7 RX 1200000000 +8 0 8 RX 1200000000 8 0 8 RX 1200000000 +9 0 9 RX 1200000000 9 0 9 RX 1200000000 + +nem 1 mac scheduler.StructureInfoTable | nem 2 mac scheduler.StructureInfoTable +Name Value Name Value +bandwidth 5000000 bandwidth 5000000 +frames 1 frames 1 +slotduration 10000 slotduration 10000 +slotoverhead 640 slotoverhead 640 +slots 10 slots 10 +``` + +Monitoring the `RxSlotStatusTable` and `TxSlotStatusTable` statistic +tables provides and way to assess the health of the emulation when +using the TDMA radio model. Both tables indicate the number of valid +slots, receive and transmit, respectively, along with the quartile the +radio model handled the slot activity. + +```text +$ emanesh node-1 get table nems mac RxSlotStatusTable TxSlotStatusTable +nem 1 mac RxSlotStatusTable +|Index|Frame|Slot|Valid|Missed|Idle|Tx|Long|Freq|Lock|.25 |.50|.75|1.0|1.25|1.50|1.75|>1.75| +|0 |0 |0 |0 |0 |0 |0 |2 |0 |0 |0 |2 |0 |0 |0 |0 |0 |0 | +|1 |0 |1 |23121|0 |0 |0 |6 |0 |0 |23127|0 |0 |0 |0 |0 |0 |0 | +|2 |0 |2 |24992|0 |0 |0 |35 |0 |0 |24988|3 |36 |0 |0 |0 |0 |0 | +|3 |0 |3 |23267|3 |0 |0 |2 |0 |0 |23266|3 |0 |0 |0 |0 |0 |3 | +|4 |0 |4 |25380|3 |0 |0 |0 |0 |0 |25378|2 |0 |0 |0 |0 |0 |3 | +|6 |0 |6 |25505|0 |0 |0 |2 |0 |0 |25505|2 |0 |0 |0 |0 |0 |0 | +|7 |0 |7 |23029|0 |0 |0 |0 |0 |0 |23029|0 |0 |0 |0 |0 |0 |0 | +|8 |0 |8 |25351|0 |0 |0 |0 |0 |0 |25351|0 |0 |0 |0 |0 |0 |0 | +|9 |0 |9 |23202|0 |0 |0 |21 |0 |0 |23202|21 |0 |0 |0 |0 |0 |0 | + +nem 1 mac TxSlotStatusTable +|Index|Frame|Slot|Valid|Missed|Big|.25 |.50|.75|1.0|1.25|1.50|1.75|>1.75| +|0 |0 |0 |60569|3 |0 |60569|0 |0 |0 |0 |0 |0 |3 | +|5 |0 |5 |60571|1 |0 |60571|0 |0 |0 |0 |0 |0 |1 | +``` + +A healthy emulation will have very minimal missed receive and transmit +slots, and will generally have most slot activity in the first two +quartiles. Activities such as decreasing slots size, increasing node +count, and increasing traffic profiles can affect TDMA radio model +performance as the server(s) hosting the emulation uses more CPU +resources. + +OpenTestPoint Labtools can be used to create a variety of monitoring +tools to correlate statistics and tables from multiple nodes in an +experiment. The `tdma-slot-status.py` script is an example monitoring +tool that displays the delta receive and transmit slot success and +error counts. + +Output can be displayed as a front-end graph or a text table (`-t/--table`). + +```text +$ ~/dev/emane-guide/examples/scripts/tdma-slot-status.py localhost:9002 +``` + +![](images/tdma-01-slot-status-monitor.png){:width="75%"; .centered} +

    OpenTestPoint Labtools TDMA slot status monitor view of nodes in tdma-01.


    + +```text +$ ~/dev/emane-guide/examples/scripts/tdma-slot-status.py localhost:9002 -t + Node Rx Slot Success Rx Slot Error Tx Slot Success Tx Slot Error +0 node-1 165 0 100 0 +1 node-2 162 0 100 0 +2 node-3 168 0 100 0 +3 node-4 166 0 100 0 +4 node-5 167 0 100 0 +``` diff --git a/guide/site/virtual-transport.md b/guide/site/virtual-transport.md new file mode 100644 index 0000000..e4d154c --- /dev/null +++ b/guide/site/virtual-transport.md @@ -0,0 +1,455 @@ +--- +layout: default +title: Virtual Transport +nav_order: 15 +permalink: /virtual-transport +--- + + +# Virtual Transport + +The Virtual Transport uses the +[TUN/TAP](https://www.kernel.org/doc/Documentation/networking/tuntap.txt) +interface to create a *virtual interface* (*vif*) as the emulation +boundary entry/exit point. + +## Features + +The Virtual Transport emulation boundary provides the following set of +features: [Virtual Interface +Management](#virtual-interface-management), [Raw Transport +Interoperability](#raw-transport-interoperability), [Bitrate +Enforcement](#bitrate-enforcement), [Broadcast Only +Mode](#broadcast-only-mode), and [IPv4 and IPv6 +Capable](#ipv4-and-ipv6-capable). + +## Virtual Interface Management + +The Virtual Transport creates a virtual interface for use as the +emulation boundary. IP packets routed to the virtual device are +encapsulated and transmitted to their respective *NEM* for downstream +processing. Packets received over-the-air are processed up the *NEM* +stack and transmitted to the *NEM*'s respective virtual transport for +injection back into the kernel IP stack. + +The newly created virtual interface is assigned an Ethernet address +derived from the *NEM Id* associated with the transport using the +following format: `02:02:00:00:XX:XX` , where `XX:XX` is the 16 bit +*NEM Id*. This allows easy mapping of Ethernet MAC addresses to NEM Ids +for unicast frames. Multicast and broadcast frames map to the NEM +broadcast address `0xFFFF`. + +A Virtual Transport managed virtual interface can be configured via +configuration parameters or managed externally, for example via DHCP. + +## Raw Transport Interoperability + +The Virtual Transport supports interoperability with [Raw Transport](raw-transport#raw-transport) +emulation boundaries using ARP caching to learn IP network to *NEM Id* +associations. + +### Bitrate Enforcement + +The Virtual Transport supports bitrate enforcement for use with models +that do not limit bitrate based on emulation implementation. Set the +configuration parameter `bitrate` to the desired rate in `bps` to +enable bitrate enforcement or 0 to disable. + +### Broadcast Only Mode + +The Virtual Transport supports forced *NEM* broadcasting of all IP +packet types: unicast, broadcast and multicast. Set the configuration +parameter `broadcastmodeenable` to `true` to enable broadcast only +mode. + +### IPv4 and IPv6 Capable + +The Virtual Transport supports IPv4 and IPv6 virtual interface address +assignments and packet processing. + +## Configuration + +1. **`address`**: IPv4 or IPv6 virutal device address. + + ```no-highlighting + Default: no Required: no Modifiable: no + Type: inetaddr Occurrs: [1,1] + ``` + +2. **`arpcacheenable`**: Enable ARP request/reply monitoring to map + Ethernet address to NEM. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: true + ``` + +3. **`arpmodeenable`**: Enable ARP on the virtual device. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: true + ``` + +4. **`bitrate`**: Transport bitrate in bps. This is the total + allowable throughput for the transport combined in both directions + (upstream and downstream). A value of 0 disables the bitrate feature. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: uint64 Occurrs: [1,1] Range: [0,max_uint64] + Values: 0 + ``` + +5. **`broadcastmodeenable`**: Broadcast all packets to all NEMs. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + +6. **`device`**: Virtual device name. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: string Occurrs: [1,1] + Values: emane0 + ``` + +7. **`devicepath`**: Path to the tuntap device. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: string Occurrs: [1,1] + Values: /dev/net/tun + ``` + +8. **`flowcontrolenable`**: Enables downstream traffic flow control + with a corresponding flow control capable NEM layer. + + ```no-highlighting + Default: yes Required: no Modifiable: no + Type: bool Occurrs: [1,1] Range: [false,true] + Values: false + ``` + +9. **`mask`**: IPv4 or IPv6 virutal device addres network mask. + + ```no-highlighting + Default: no Required: no Modifiable: no + Type: inetaddr Occurrs: [1,1] + ``` + + + +## Statistics + +1. **`avgDownstreamProcessingDelay`**: Average downstream processing + delay + + ```no-highlighting + Type: float Clearable: yes + ``` + +2. **`avgProcessAPIQueueDepth`**: Average API queue depth for a + processUpstreamPacket, processUpstreamControl, + processDownstreamPacket, processDownstreamControl, processEvent and + processTimedEvent. + + ```no-highlighting + Type: double Clearable: yes + ``` + +3. **`avgProcessAPIQueueWait`**: Average API queue wait for a + processUpstreamPacket, processUpstreamControl, + processDownstreamPacket, processDownstreamControl, processEvent and + processTimedEvent in microseconds. + + ```no-highlighting + Type: double Clearable: yes + ``` + +4. **`avgTimedEventLatency`**: Average latency between the scheduled + timer expiration and the actual firing over the requested duration. + + ```no-highlighting + Type: double Clearable: yes + ``` + +5. **`avgTimedEventLatencyRatio`**: Average ratio of the delta between + the scheduled timer expiration and the actual firing over the + requested duration. An average ratio approaching 1 indicates that + timer latencies are large in comparison to the requested durations. + + ```no-highlighting + Type: double Clearable: yes + ``` + +6. **`avgUpstreamProcessingDelay`**: Average upstream processing delay + + ```no-highlighting + Type: float Clearable: yes + ``` + +7. **`numAPIQueued`**: The number of queued API events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +8. **`numDownstreamBytesBroadcastGenerated`**: Number of layer + generated downstream broadcast bytes + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +9. **`numDownstreamBytesBroadcastRx`**: Number of downstream broadcast + bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +10. **`numDownstreamBytesBroadcastTx`**: Number of downstream + broadcast bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +11. **`numDownstreamBytesUnicastGenerated`**: Number of layer + generated downstream unicast bytes + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +12. **`numDownstreamBytesUnicastRx`**: Number of downstream unicast + bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +13. **`numDownstreamBytesUnicastTx`**: Number of downstream unicast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +14. **`numDownstreamPacketsBroadcastDrop`**: Number of downstream + broadcast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +15. **`numDownstreamPacketsBroadcastGenerated`**: Number of layer + generated downstream broadcast packets + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +16. **`numDownstreamPacketsBroadcastRx`**: Number of downstream + broadcast packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +17. **`numDownstreamPacketsBroadcastTx`**: Number of downstream + broadcast packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +18. **`numDownstreamPacketsUnicastDrop`**: Number of downstream + unicast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +19. **`numDownstreamPacketsUnicastGenerated`**: Number of layer + generated downstream unicast packets + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +20. **`numDownstreamPacketsUnicastRx`**: Number of downstream unicast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +21. **`numDownstreamPacketsUnicastTx`**: Number of downstream unicast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +22. **`numUpstreamBytesBroadcastRx`**: Number of upstream broadcast + bytes received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +23. **`numUpstreamBytesBroadcastTx`**: Number of updtream broadcast + bytes transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +24. **`numUpstreamBytesUnicastRx`**: Number upstream unicast bytes + received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +25. **`numUpstreamBytesUnicastTx`**: Number of upstream unicast bytes + transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +26. **`numUpstreamPacketsBroadcastDrop`**: Number of upstream + broadcast packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +27. **`numUpstreamPacketsBroadcastRx`**: Number of upstream broadcast + packets received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +28. **`numUpstreamPacketsBroadcastTx`**: Number of upstream broadcast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +29. **`numUpstreamPacketsUnicastDrop`**: Number of upstream unicast + packets dropped + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +30. **`numUpstreamPacketsUnicastRx`**: Number upstream unicast packets + received + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +31. **`numUpstreamPacketsUnicastTx`**: Number of upstream unicast + packets transmitted + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +32. **`processedConfiguration`**: The number of processed + configuration. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +33. **`processedDownstreamControl`**: The number of processed + downstream control. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +34. **`processedDownstreamPackets`**: The number of processed + downstream packets. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +35. **`processedEvents`**: The number of processed events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +36. **`processedTimedEvents`**: The number of processed timed events. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +37. **`processedUpstreamControl`**: The number of processed upstream + control. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + +38. **`processedUpstreamPackets`**: The number of processed upstream + packets. + + ```no-highlighting + Type: uint64 Clearable: yes + ``` + + + +## Statistic Tables + +1. **`BroadcastPacketAcceptTable`**: Broadcast packets accepted + + ```no-highlighting + Clearable: yes + ``` + +2. **`BroadcastPacketDropTable`**: Broadcast packets dropped by reason + code + + ```no-highlighting + Clearable: yes + ``` + +3. **`EventReceptionTable`**: Received event counts + + ```no-highlighting + Clearable: yes + ``` + +4. **`UnicastPacketAcceptTable`**: Unicast packets accepted + + ```no-highlighting + Clearable: yes + ``` + +5. **`UnicastPacketDropTable`**: Unicast packets dropped by reason + code + + ```no-highlighting + Clearable: yes + ``` + + + diff --git a/guide/tdma-radio-model.txt b/guide/tdma-radio-model.txt new file mode 100644 index 0000000..25b7ed0 --- /dev/null +++ b/guide/tdma-radio-model.txt @@ -0,0 +1,669 @@ +~{{frontmatter +layout: default +title: TDMA Radio Model +nav_order: 12 +permalink: /tdma-radio-model}}~ + +~{{layout type=newpage}}~ +# TDMA Radio Model + +The TDMA radio model implements a generic TDMA scheme that supports +[TDMA schedule](#tdma-schedule) distribution and updates in real-time +using ~{{link name="`TDMAScheduleEvents`" file="tdma-radio-model.md" +section="#tdmascheduleevent"}}~. + +## Features + +The TDMA radio model provides the following set of features: [Priority +Queues](#priority-queues), [Fragmentation](#fragmentation), +[Aggregation](#aggregation), [Reassembly](#reassembly), [TDMA +Schedule](#tdma-schedule), and [Packet Completion Rate +Curves](#packet-completion-rate-curves). + +### Priority Queues + +The TDMA radio model supports priority queues which map to user +traffic based priority levels assigned by emulation boundary +components. Outbound messages are dequeued FIFO based on slot service +class queue mapping and a highest to lowest priority queue search, if +necessary. + +The TDMA radio model classifies user traffic into four categories +which map to four queues. Traffic is assigned to a queue based on +downstream packet priority. The `queue.depth` configuration parameter +controls the queue depth for all queues. All queues will overflow, +dropping the oldest packet when an enqueue operation occurs on a queue +at max queue depth. The packet selected for discard will be the oldest +packet where no portion of the packet has been transmitted due to +[fragmentation](#fragmentation). If all packets in the queue have had +a portion transmitted, then the oldest packet is discarded regardless +of fragmentation state. + +The ~{{link name="Virtual Transport" file="virtual-transport.md" +section="#virtual-transport"}}~ and ~{{link name="Raw Transport" +file="raw-transport.md" section="#raw-transport"}}~ use DSCP as +downstream packet priority. + +|Queue ID| DSCP (6 MSBs of IP TOS Field)| Queue Priority| +|--------|------------------------------|---------------| +|0 | 0 - 7, 24 - 31 |0 (*lowest*) | +|1 | 8 - 23 |1 | +|2 | 32 - 47 |2 | +|3 | 48 - 63 |3 | +|4 | Reserved Control |4 (*highest*) | + +All transmit slots have a class or service assigned. This class +represents one of the four traffic queues or a fifth reserved +scheduler control queue. If the `queue.stricttxdequeue` configuration +parameter is enabled, only the queue matching the transmit slot class +is used to dequeue traffic. If `queue.stricttxdequeue` is disabled, an +attempt is made to dequeue traffic from the slot class matching queue, +followed by all other queues in highest to lowest priority order. + +Queues can be dequeued in one of two ways depending on whether the +current transmit slot has a destination *NEM* assigned. If a destination +is assigned, only packets matching the destination are dequeued +(FIFO). If no destination match is found, no transmission occurs. If a +destination is not assigned, packets are dequeued (FIFO) regardless of +their destination. + +Each slot has the same size and overhead, which is assigned using a + ~{{link name="`TDMAScheduleEvent`" file="tdma-radio-model.md" + section="#tdmascheduleevent"}}~. Transmit slots may be assigned + different data rates, making it possible for slots to have different + maximum byte limits. The TDMA radio model supports both fragmentation + and aggregation and allows either to be enabled or disabled + independently. + +### Fragmentation + +The TDMA radio model supports fragmentation and reassembly of large +outbound messages based on per slot data rates. If fragmentation is +enabled with the `queue.fragmentationenable` configuration parameter, +a large packet that is too big to fit in a given transmit slot is +fragmented into two or more message components. The actual number of +message components required cannot be determined beforehand since +each slot may vary in allowable size and destination assignment. If +fragmentation is disabled, packets that are too large to fit in a +transmit slot are discarded until one is found that fits. If none are +found in the slot class matching queue and `queue.stricttxdequeue` is +disabled, other queues will be searched but no packets will be +discarded due to length. In this case, as soon as a packet is found to +be too large for a given slot, the search ends in that queue and +continues in the next lowest priority queue. + +### Aggregation + +The TDMA radio model supports aggregation of smaller outbound +messages into larger over-the-air messages. If aggregation is enabled +with the `queue.aggregationenable` configuration parameter, one or +more message components for the same or different destinations +(unicast or broadcast) can be transmitted in a single slot. If all the +message components contained in a single slot transmission are for the +same *NEM* destination, that destination is used as the downstream +(outbound) packet destination. Otherwise, the *NEM* broadcast address is +used as the downstream packet destination. The latter case does not +imply the TDMA radio model treats these messages as broadcast. The TDMA +model handles each message component contained in a single +transmission as a separate message. However, when examining physical +layer statistics, the notion of unicast and broadcast transmission is +a bit fuzzy. + +If fragmentation is enabled, one or more message components in an +aggregate transmission may be a fragment. The +`queue.aggregationslotthreshold` configuration parameter controls the +percentage of a slot that must be filled in order to satisfy the +aggregation function and prevent further searching and/or fragmenting +of packets to fill the slot. + +### Reassembly + +If fragmentation and/or aggregation are disabled, the TDMA radio model will +still process upstream (inbound) aggregate messages and resemble +packet fragments. The TDMA radio model will attempt fragment reassembly on +one or more packets from one or more sources at the same time. Two +configuration parameters are used to control when individual fragment +reassembly efforts should be abandoned: +`fragmentcheckthreshold` and +`fragmenttimeoutthreshold`. The +`fragmentcheckthreshold` configuration +parameter controls how often the model checks to see if any active +reassembly efforts should be abandoned. The +`fragmenttimeoutthreshold` configuration +parameter is the amount of time that must pass since receiving a +fragment for a specific reassembly effort in order for that effort to +be considered timed out and subsequently abandoned. + +The radio model does not handle out of order fragments. As soon as a +non-consecutive fragment is received the reassembly effort for that +packet is abandoned. + +### TDMA Schedule + +The TDMA radio model supports TDMA schedule definition including [slot +size](#timing-and-slot-size), slot overhead, frame size as well as per +slot data rate, frequency, power, service class and optional +destination. + +The TDMA radio model uses three units to describe time allocation: *slot*, +*frame* and *multiframe*. A slot is the smallest unit of time and is +defined in microseconds. A slot supports the transmission of a single +burst of a maximum length accounting for payload and overhead +(preamble, headers, guard times, propagation delay, etc.). A frame +contains a number of slots. A multiframe contains a number of frames. + +The TDMA radio model receives a schedule via a ~{{link + name="`TDMAScheduleEvent`" file="tdma-radio-model.md" + section="#tdmascheduleevent"}}~. There are two types of TDMA + schedules: *full* and *update*. A full TDMA schedule defines the TDMA + structure in use along with assigning per *NEM* transmit, receive and + idle slots. The TDMA structure defines: + + * Slot size in microseconds + + * Slot overhead in microseconds + + * Number of slots per frame + + * Number of frames per multiframe + + * Transceiver bandwidth in Hz + + +Slot overhead should be set to account for the various waveform +overhead parameters such as synchronization, waveform headers, +turnaround time, propagation delay, etc. At a minimum, the +*slotoverhead* should be set to the maximum propagation you expect the +signal to travel when using location events within your emulation. +For example, if you expect to support ranges out to 10km with the TDMA +model, the overhead in the schedule should be set to at least 34 +microseconds. This will ensure the *max amount of data packed in each +frame* + *the max propagation delay* will always be less than the +*slot size*. Failure to do so, can result in frames being discarded +by the receiver when end of reception crosses the slot boundary. + +An update TDMA schedule changes slot assignment information for an *NEM* +but does not change the TDMA structure. + +TDMA slots can be assigned as transmit, receive and idle. A transmit +slot is assigned a frequency (Hz), power (dBm), class ([0,4]), +data rate (bps) and an optional destination *NEM*. A receive slot is +assigned a frequency (Hz). An idle slot has no assignments and +indicates an *NEM* is neither transmitting nor receiving. + +When a TDMA radio model instance receives its schedule, it will take affect +at the start of the next multiframe boundary which is referenced from +the epoch: 00:00:00 UTC January 1, 1970. + +### Packet Completion Rate Curves + +The TDMA Model Packet Completion Rate is specified as curves defined +via XML. . Each curve definition comprises a series SINR values along +with their corresponding probability of reception for a given data rate +specified in *bps*. A curve definition must contain a minimum of two +points with one SINR representing *POR = 0* and one SINR representing +*POR = 100*. Linear interpolation is preformed when an exact SINR +match is not found. If a POR is requested for a data rate whose curve +was not defined, the first curve in the file is used regardless of its +associated data rate. + +Specifying a packet size (`` attribute +`packetsize`) in the curve file will adjust the POR based on received +packet size. Specifying a `packetsize` of 0 disregards received packet +size when computing the POR. + +The POR is obtained using the following calculation when a non-zero +*pktsize* is specified: + +~{{math POR = POR_0 ^ {S_1/S_0}}}~ + +Where, + +~{{math POR_0}}~ is the POR value determined from the PCR curve for +the given SINR value + +~{{math S_0}}~ is the packet size specified in the curve file +`pktsize` + +~{{math S_1}}~ is the received packet size + +The below PCR curve file is used by all nodes in the `tdma-01` +example. These curves are based on 802.11 modulation and data rate +combination based on theoretical equations for determining Bit Error +Rate (BER) in an Additive White Gaussian Noise (AWGN) channel and are +for illustrative purposes only. Packet Completion Rate curves should +be representative of the waveform being emulated. + +~{{file path="../examples/tdma-01/node-1/emane-tdma-pcr.xml" + type=xml + skip=0 + showname=true + blank=false + path-cut="../examples" + path-replace="emane-guide/examples" + lines=20}}~ + +~{{imagemagick + file="images/pcr-representation.png" + scale=75 + images/exclamation.png -resize 25% \( -size 1100x -font DejaVu-Sans-Mono-Bold + -gravity east label:" PCR curves should be representative of the waveform being emulated. " \) + +append -transparent white}}~ + +## Working with TDMA Schedules + +A TDMA Schedule is defined using XML. The XML +[schema](https://github.com/adjacentlink/emane/blob/master/src/python/emane/events/schema/tdmaschedule.xsd) +documents the details involved in authoring a schedule. Some important +items to consider: + +1. A schedule that contains a `` element is a full schedule + and one without is an update schedule. + +2. A multiframe can define a default frequency, power, data rate and + class. A frame can define the same defaults, overriding all or some + of those defined in the multiframe. A transmit slot can override + all or some frame or multiframe defaults, plus add an optional + destination *NEM*. A receive slot can only override frequency. + +3. For a full schedule, any frame not defined will be idle for all + *NEMs* referenced in the schedule. + +4. For a full schedule, any slot not defined in a frame will be a + receive slot for all *NEMs* referenced in the schedule. The frame + default frequency will be used, if specified. Otherwise, the + multiframe default frequency will be used. + +5. For an update schedule, only those slots assigned for specified + *NEMs* are modified. No receive slot or idle frame auto-fill occurs. + +6. For a full schedule, the set of frequencies used by an *NEM* are sent + to the physical layer to configure the frequency of interest list + monitored by the spectrum monitor. + +7. For an update schedule, any additional frequencies used by an *NEM* + are added to the FOI frequency set cached since the last full + schedule and sent to the physical layer. + +8. Reception of a full schedule resets all TDMA schedule information. + +9. TDMA radio model instances can reject schedules that contains + errors. Acceptance and rejection of a schedule is conveyed using + the following statistics: + + * `scheduler.scheduleAcceptFull` + + * `scheduler.scheduleAcceptUpdate` + + * `scheduler.scheduleRejectFrameIndexRange` + + * `scheduler.scheduleRejectSlotIndexRange` + + * `scheduler.scheduleRejectUpdateBeforeFull` + + * `scheduler.scheduleRejectOther` + +10. Only *NEMs* referenced within a schedule XML file receive events + when using `emaneevent-tdmaschedule`. As such, all *NEMs* within + the scenario utilizing the TDMA radio model must be referenced + within a full schedule. + +11. Reception of a full or update schedule containing one or more + errors will cause a TDMA radio model instance to flush all + schedule information, resetting to its initial state of having no + schedule. + +Below is a complex example of a TDMA XML Schedule. + +~{{verbatim type=xml -- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +}}~ + +### Sending a Schedule + +A TDMA schedule is sent to a TDMA radio model instance using a ~{{link + name="`TDMAScheduleEvent`" file="tdma-radio-model.md" + section="#tdmascheduleevent"}}~. The `emaneevent-tdmaschedule` script + can be used to process a TDMA Schedule XML file. A schedule event is + sent to each *NEM* referenced in the schedule XML. Each event contains + only schedule information for the recipient *NEM*. + +~{{verbatim type=txt -- +$ emaneevent-tdmaschedule your-desired-schedule.xml -i lo}}~ + +### Verifying a Schedule + +TDMA radio model instances contain statistics to indicate the number +of full and update schedules accepted and rejected. + +~{{verbatim type=txt -- +$ emanesh localhost get stat 1 mac | grep scheduler + +nem 1 mac scheduler.scheduleAcceptFull = 4 +nem 1 mac scheduler.scheduleAcceptUpdate = 0 +nem 1 mac scheduler.scheduleRejectFrameIndexRange = 0 +nem 1 mac scheduler.scheduleRejectSlotIndexRange = 0 +nem 1 mac scheduler.scheduleRejectUpdateBeforeFull = 0}}~ + +TDMA radio model instances maintain a schedule and structure table that +indicates the current schedule and slot structure. + +~{{verbatim type=txt -- +$ emanesh localhost get table 1 mac scheduler.ScheduleInfoTable scheduler.StructureInfoTable + +nem 1 mac scheduler.ScheduleInfoTable +| Index | Frame | Slot | Type | Frequency | Data Rate | Power | Class | Destination | +| 0 | 0 | 0 | TX | 2400000000 | 1000000 | 0.0 | 0 | 0 | +| 1 | 0 | 1 | RX | 2400000000 | | | | | +| 2 | 0 | 2 | RX | 2400000000 | | | | | +| 3 | 0 | 3 | RX | 2400000000 | | | | | +| 4 | 0 | 4 | RX | 2400000000 | | | | | +| 5 | 0 | 5 | TX | 2400000000 | 1000000 | 0.0 | 0 | 0 | +| 6 | 0 | 6 | RX | 2400000000 | | | | | +| 7 | 0 | 7 | RX | 2400000000 | | | | | +| 8 | 0 | 8 | RX | 2400000000 | | | | | +| 9 | 0 | 9 | RX | 2400000000 | | | | | +| 10 | 1 | 0 | TX | 2400000000 | 11000000 | 0.0 | 0 | 0 | +| 11 | 1 | 1 | TX | 2400000000 | 11000000 | 0.0 | 0 | 0 | +| 12 | 1 | 2 | TX | 2400000000 | 11000000 | 0.0 | 0 | 0 | +| 13 | 1 | 3 | TX | 2400000000 | 11000000 | 0.0 | 0 | 0 | +| 14 | 1 | 4 | TX | 2400000000 | 11000000 | 0.0 | 0 | 0 | +| 15 | 1 | 5 | RX | 2400000000 | | | | | +| 16 | 1 | 6 | RX | 2400000000 | | | | | +| 17 | 1 | 7 | RX | 2400000000 | | | | | +| 18 | 1 | 8 | RX | 2400000000 | | | | | +| 19 | 1 | 9 | RX | 2400000000 | | | | | +| 20 | 2 | 0 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 21 | 2 | 1 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 22 | 2 | 2 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 23 | 2 | 3 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 24 | 2 | 4 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 25 | 2 | 5 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 26 | 2 | 6 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 27 | 2 | 7 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 28 | 2 | 8 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 29 | 2 | 9 | TX | 2000000000 | 1000000 | 0.0 | 3 | 0 | +| 30 | 3 | 0 | IDLE | | | | | | +| 31 | 3 | 1 | IDLE | | | | | | +| 32 | 3 | 2 | IDLE | | | | | | +| 33 | 3 | 3 | IDLE | | | | | | +| 34 | 3 | 4 | IDLE | | | | | | +| 35 | 3 | 5 | IDLE | | | | | | +| 36 | 3 | 6 | IDLE | | | | | | +| 37 | 3 | 7 | IDLE | | | | | | +| 38 | 3 | 8 | IDLE | | | | | | +| 39 | 3 | 9 | IDLE | | | | | | + +nem 1 mac scheduler.StructureInfoTable +| Name | Value | +| bandwidth | 1000000 | +| frames | 4 | +| slotduration | 1000 | +| slotoverhead | 0 | +| slots | 10 |}}~ + +## `TDMAScheduleEvent` + +An `TDMAScheduleEvent` is used to set a TDMA radio model *NEM's* +schedule. + +~{{file path="$emane_SRC_ROOT/src/libemane/tdmascheduleevent.proto" +type=protobuf +showname=true +blank=false +skip=33 +path-cut="$emane_SRC_ROOT" +path-replace="emane"}}~ + + +## Timing and Slot Size + +Proper time synchronization is required for the TDMA radio model. The +required tightness of the time synchronization is a function of the +slot size configured using ~{{link name="`TDMAScheduleEvents`" +file="tdma-radio-model.md" section="#tdmascheduleevent"}}~. System +configuration, number of emulated nodes, traffic scenario and general +resource availability, are all factors in determining achievable slot +sizes. + +## Configuration + +~{{emaneinfo plugin=tdmaeventschedulerradiomodel type=config}}~ + +## Statistics + +~{{emaneinfo plugin=tdmaeventschedulerradiomodel type=stat}}~ + +## Statistic Tables + +Aggregation and fragmentation make it difficult to convey packet based +statistic information. The TDMA radio model addresses this by keeping +track of byte statistics where message components are used and packet +statistics where queue information is conveyed. This is different from +other radio models. + +~{{emaneinfo plugin=tdmaeventschedulerradiomodel type=table}}~ + +## Examples + +This guide includes the TDMA example: + +1. `tdma-01`: A five node example using precomputed pathloss and + running the B.A.T.M.A.N manet protocol. + +### tdma-01 + +~{{graphviz + file="images/topology-tdma-01" scale=60 caption="tdma-01 experiment components" -- + digraph hierarchy { +rankdir="TB"; +node[shape=circle,style=filled] +"node-2" [fillcolor=green] +"OTA" [image="images/cloud.png",shape=none,fillcolor=none] +"node-1" [fillcolor=green] +"node-3" [fillcolor=green] +"node-1"->OTA [dir="both",label="10.100.0.1/24"] +OTA->"node-3" [dir="both",label="10.100.0.3/24"] +OTA->"node-2" [dir="both",label="10.100.0.2/24"] +"node-4" [fillcolor=green] +"node-5" [fillcolor=green] + +OTA->"node-4" [dir="both",label="10.100.0.4/24"] +OTA->"node-5" [dir="both",label="10.100.0.5/24"] + +{rank = min; "node-2";} +{rank = same; "node-1"; "node-3"; OTA;} +} +}}~ + +The `tdma-01` example experiment contains five nodes, each running +the B.A.T.M.A.N. routing protocol. + +All physical layers are configured to use the `precomputed` propagation +model and `emaneeventservice` publishes ~{{link +name="`PathlossEvents`" file="events.md" section="#pathlossevent"}}~ +using pathloss values in `scenario.eel`. + +~{{file path="../examples/tdma-01/host/scenario.eel" +type=txt +showname=true +blank=true +path-cut="../examples" +path-replace="emane-guide/examples"}}~ + +This example uses the TDMA schedule defined in `schedule.xml`. + +~{{file path="../examples/tdma-01/schedule.xml" +type=xml +showname=true +blank=false +path-cut="../examples" +path-replace="emane-guide/examples"}}~ + +~{{imagemagick + file="images/run-tdma-01.png" + scale=75 +images/pointing-finger.png -resize 25% \( -size 800x -font DejaVu-Sans-Mono-Bold +-gravity east label:" Run emane-guide/examples/tdma-01 and give it a try. " \) ++append -transparent white}}~ + +With `emane-guide/examples/tdma-01` running, we can use `emanesh` to +view the schedule assigned to `node-1` and compare this to the TDMA +schedule XML. + +~{{verbatim type=txt -- +$ emanesh node-1 get table nems mac scheduler.ScheduleInfoTable scheduler.StructureInfoTable +nem 1 mac scheduler.ScheduleInfoTable +| Index | Frame | Slot | Type | Frequency | Data Rate | Power | Class | Destination | +| 0 | 0 | 0 | TX | 1200000000 | 9000000 | 50.0 | 0 | 0 | +| 1 | 0 | 1 | RX | 1200000000 | | | | | +| 2 | 0 | 2 | RX | 1200000000 | | | | | +| 3 | 0 | 3 | RX | 1200000000 | | | | | +| 4 | 0 | 4 | RX | 1200000000 | | | | | +| 5 | 0 | 5 | TX | 1200000000 | 9000000 | 50.0 | 0 | 0 | +| 6 | 0 | 6 | RX | 1200000000 | | | | | +| 7 | 0 | 7 | RX | 1200000000 | | | | | +| 8 | 0 | 8 | RX | 1200000000 | | | | | +| 9 | 0 | 9 | RX | 1200000000 | | | | | + +nem 1 mac scheduler.StructureInfoTable +| Name | Value | +| bandwidth | 5000000 | +| frames | 1 | +| slotduration | 10000 | +| slotoverhead | 640 | +| slots | 10 |}}~ + +Using `diff`, we can quickly compare the schedules for `node-1` and +`node-2` to verify the only differences are in the assigned transmit +slots. + +~{{verbatim type=txt -- +$ diff \ + <(emanesh node-1 get table nems mac scheduler.ScheduleInfoTable scheduler.StructureInfoTable \ + | sed -e 's/| //g' -e 's/ |//g') \ + <(emanesh node-2 get table nems mac scheduler.ScheduleInfoTable scheduler.StructureInfoTable \ + | sed -e 's/| //g' -e 's/ |//g') \ + --side-by-side +nem 1 mac scheduler.ScheduleInfoTable | nem 2 mac scheduler.ScheduleInfoTable +Index Frame Slot Type Frequency Data Rate Power Class Destin Index Frame Slot Type Frequency Data Rate Power Class Destin +0 0 0 TX 1200000000 9000000 50.0 0 0 | 0 0 0 RX 1200000000 +1 0 1 RX 1200000000 | 1 0 1 TX 1200000000 9000000 50.0 0 0 +2 0 2 RX 1200000000 2 0 2 RX 1200000000 +3 0 3 RX 1200000000 3 0 3 RX 1200000000 +4 0 4 RX 1200000000 4 0 4 RX 1200000000 +5 0 5 TX 1200000000 9000000 50.0 0 0 | 5 0 5 RX 1200000000 +6 0 6 RX 1200000000 | 6 0 6 TX 1200000000 9000000 50.0 0 0 +7 0 7 RX 1200000000 7 0 7 RX 1200000000 +8 0 8 RX 1200000000 8 0 8 RX 1200000000 +9 0 9 RX 1200000000 9 0 9 RX 1200000000 + +nem 1 mac scheduler.StructureInfoTable | nem 2 mac scheduler.StructureInfoTable +Name Value Name Value +bandwidth 5000000 bandwidth 5000000 +frames 1 frames 1 +slotduration 10000 slotduration 10000 +slotoverhead 640 slotoverhead 640 +slots 10 slots 10}}~ + +Monitoring the `RxSlotStatusTable` and `TxSlotStatusTable` statistic +tables provides and way to assess the health of the emulation when +using the TDMA radio model. Both tables indicate the number of valid +slots, receive and transmit, respectively, along with the quartile the +radio model handled the slot activity. + +~{{verbatim type=txt -- +$ emanesh node-1 get table nems mac RxSlotStatusTable TxSlotStatusTable +nem 1 mac RxSlotStatusTable +|Index|Frame|Slot|Valid|Missed|Idle|Tx|Long|Freq|Lock|.25 |.50|.75|1.0|1.25|1.50|1.75|>1.75| +|0 |0 |0 |0 |0 |0 |0 |2 |0 |0 |0 |2 |0 |0 |0 |0 |0 |0 | +|1 |0 |1 |23121|0 |0 |0 |6 |0 |0 |23127|0 |0 |0 |0 |0 |0 |0 | +|2 |0 |2 |24992|0 |0 |0 |35 |0 |0 |24988|3 |36 |0 |0 |0 |0 |0 | +|3 |0 |3 |23267|3 |0 |0 |2 |0 |0 |23266|3 |0 |0 |0 |0 |0 |3 | +|4 |0 |4 |25380|3 |0 |0 |0 |0 |0 |25378|2 |0 |0 |0 |0 |0 |3 | +|6 |0 |6 |25505|0 |0 |0 |2 |0 |0 |25505|2 |0 |0 |0 |0 |0 |0 | +|7 |0 |7 |23029|0 |0 |0 |0 |0 |0 |23029|0 |0 |0 |0 |0 |0 |0 | +|8 |0 |8 |25351|0 |0 |0 |0 |0 |0 |25351|0 |0 |0 |0 |0 |0 |0 | +|9 |0 |9 |23202|0 |0 |0 |21 |0 |0 |23202|21 |0 |0 |0 |0 |0 |0 | + +nem 1 mac TxSlotStatusTable +|Index|Frame|Slot|Valid|Missed|Big|.25 |.50|.75|1.0|1.25|1.50|1.75|>1.75| +|0 |0 |0 |60569|3 |0 |60569|0 |0 |0 |0 |0 |0 |3 | +|5 |0 |5 |60571|1 |0 |60571|0 |0 |0 |0 |0 |0 |1 |}}~ + +A healthy emulation will have very minimal missed receive and transmit +slots, and will generally have most slot activity in the first two +quartiles. Activities such as decreasing slots size, increasing node +count, and increasing traffic profiles can affect TDMA radio model +performance as the server(s) hosting the emulation uses more CPU +resources. + +OpenTestPoint Labtools can be used to create a variety of monitoring +tools to correlate statistics and tables from multiple nodes in an +experiment. The `tdma-slot-status.py` script is an example monitoring +tool that displays the delta receive and transmit slot success and +error counts. + +Output can be displayed as a front-end graph or a text table (`-t/--table`). + +~{{verbatim type=txt -- +$ ~/dev/emane-guide/examples/scripts/tdma-slot-status.py localhost:9002}}~ + +~{{image file="images/tdma-01-slot-status-monitor.png" + scale=75 + caption="OpenTestPoint Labtools TDMA slot status monitor view of nodes in tdma-01." +}}~ + +~{{verbatim type=txt -- +$ ~/dev/emane-guide/examples/scripts/tdma-slot-status.py localhost:9002 -t + Node Rx Slot Success Rx Slot Error Tx Slot Success Tx Slot Error +0 node-1 165 0 100 0 +1 node-2 162 0 100 0 +2 node-3 168 0 100 0 +3 node-4 166 0 100 0 +4 node-5 167 0 100 0}}~ diff --git a/guide/virtual-transport.txt b/guide/virtual-transport.txt new file mode 100644 index 0000000..9300114 --- /dev/null +++ b/guide/virtual-transport.txt @@ -0,0 +1,81 @@ +~{{frontmatter +layout: default +title: Virtual Transport +nav_order: 15 +permalink: /virtual-transport}}~ + +~{{layout type=newpage}}~ +# Virtual Transport + +The Virtual Transport uses the +[TUN/TAP](https://www.kernel.org/doc/Documentation/networking/tuntap.txt) +interface to create a *virtual interface* (*vif*) as the emulation +boundary entry/exit point. + +## Features + +The Virtual Transport emulation boundary provides the following set of +features: [Virtual Interface +Management](#virtual-interface-management), [Raw Transport +Interoperability](#raw-transport-interoperability), [Bitrate +Enforcement](#bitrate-enforcement), [Broadcast Only +Mode](#broadcast-only-mode), and [IPv4 and IPv6 +Capable](#ipv4-and-ipv6-capable). + +## Virtual Interface Management + +The Virtual Transport creates a virtual interface for use as the +emulation boundary. IP packets routed to the virtual device are +encapsulated and transmitted to their respective *NEM* for downstream +processing. Packets received over-the-air are processed up the *NEM* +stack and transmitted to the *NEM*'s respective virtual transport for +injection back into the kernel IP stack. + +The newly created virtual interface is assigned an Ethernet address +derived from the *NEM Id* associated with the transport using the +following format: `02:02:00:00:XX:XX` , where `XX:XX` is the 16 bit +*NEM Id*. This allows easy mapping of Ethernet MAC addresses to NEM Ids +for unicast frames. Multicast and broadcast frames map to the NEM +broadcast address `0xFFFF`. + +A Virtual Transport managed virtual interface can be configured via +configuration parameters or managed externally, for example via DHCP. + +## Raw Transport Interoperability + +The Virtual Transport supports interoperability with ~{{link name="Raw +Transport" file="raw-transport.md" section="#raw-transport"}}~ +emulation boundaries using ARP caching to learn IP network to *NEM Id* +associations. + +### Bitrate Enforcement + +The Virtual Transport supports bitrate enforcement for use with models +that do not limit bitrate based on emulation implementation. Set the +configuration parameter `bitrate` to the desired rate in `bps` to +enable bitrate enforcement or 0 to disable. + +### Broadcast Only Mode + +The Virtual Transport supports forced *NEM* broadcasting of all IP +packet types: unicast, broadcast and multicast. Set the configuration +parameter `broadcastmodeenable` to `true` to enable broadcast only +mode. + +### IPv4 and IPv6 Capable + +The Virtual Transport supports IPv4 and IPv6 virtual interface address +assignments and packet processing. + +## Configuration + +~{{emaneinfo plugin=transvirtual type=config}}~ + +## Statistics + +~{{emaneinfo plugin=transvirtual type=stat}}~ + +## Statistic Tables + +~{{emaneinfo plugin=transvirtual type=table}}~ +