Science Score: 36.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: researchgate.net
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (14.1%) to scientific vocabulary
Last synced: 10 months ago · JSON representation

Repository

Basic Info
  • Host: GitHub
  • Owner: tariromukute
  • Language: HTML
  • Default Branch: main
  • Size: 273 MB
Statistics
  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Created almost 5 years ago · Last pushed about 2 years ago
Metadata Files
Readme Citation

README.md

Open Gi-LAN

The project builds the stack/infrastructure for an Open Gi-LAN or just Open LAN (Local Arear Network). The LAN sits after the mobile core network and will apply various network functions to the traffic from the core network.

Installation

```bash

Create virtual environment

python3 -m venv .venv

Activate virtual environment

source .venv/bin/activate

Install packages

pip install -r requirements.txt

Install packages for deploying with Azure

pip install -r requirements-azure.txt

```

Connect to test bed with a bastion host

```bash

generate ssh key(s). using different keys for bastion host and the testbed servers

ssh-keygen -t rsa -b 2048

add the public key(s) to the bastion host and testbed servers (replace id_rsa.pub with key name)

cat ~/.ssh/id_rsa.pub

copy above and put in other servers (can use ssh-copy-id instead)

mkdir ~/.ssh echo sshpubkey >> ~/.ssh/authorized_keys ```

Add the following to ~/.ssh/config

text Host bastion HostName url ForwardAgent yes User username IdentityFile ~/.ssh/id_rsa

```bash

test connection through bastion host

ssh -o ProxyCommand="ssh -W %h:%p -q bastion" -i ~/.ssh/chpc user@10.x.x.x ```

Run playbook

bash ansible-playbook -i inventory.ini monitor.yml -K

Notes

iperf -P can help influence the bandwidth results

Useful Resources

  • https://www.researchgate.net/publication/349761932MeasuringwithJPerfandPsPingThroughputandEstimatedPacketDeliveryDelayvsTCPWindowSizeParallel_Streams

mst wasn't working, to install it see link - wget https://content.mellanox.com/ofed/MLNXOFED-5.4-1.0.3.0/MLNXOFEDLINUX-5.4-1.0.3.0-ubuntu20.04-x8664.tgz - wget https://content.mellanox.com/ofed/MLNXOFED-4.9-4.0.8.0/MLNXOFEDLINUX-4.9-4.0.8.0-ubuntu18.04-x8664.tgz

install dpdk - link

for mellanox - link - wget tar mlx5 ofed - extract from it and run install

install pktgen - link - sudo apt install -y python3-pyelftools python-pyelftools lua5.3 liblua5.3-dev - sudo apt install make - sudp apt install cmake - * the pkg-config can be put in different folder - sudo apt install libpcap-dev libnuma-dev pkg-config build-essential librdmacm-dev libnuma-dev libmnl-dev meson - sudo apt install libibverbs-dev libmlx5-1 ibverbs-providers

edit cfg/xdp-40.cfg in pktgen

run pktgen - ./tools/run.py xdp-40 (might need to set it up first ./tools/run.py -s xdp-40)

check free huge pages - grep -i huge /proc/meminfo

sudo -E ./app/pktgen -l 0-3 -n 3 --proc-type auto -w 0000:41:00.0 -- -P -m "[1:3].0"

meson --reconfigure -Denable_lua=true Builddir

ninja -C Builddir

custom lua scripts tutorial - https://mishal.dev/running-dpdk-with-pktgen

blog - https://medium.com/codex/nvidia-mellanox-bluefield-2-smartnic-hands-on-tutorial-rig-for-dive-part-vii-b-contd-afaffce7af4f

sudo tc qdisc add dev ens3 root netem loss 100%

sudo tc qdisc show dev ens3

sudo tc qdisc del dev ens3 root netem loss 100%

sudo tc qdisc show dev ens3

https://access.redhat.com/documentation/en-us/redhatenterpriselinux/8/html/configuringandmanagingnetworking/getting-started-with-nftables_configuring-and-managing-networking

Why we will need deep inspectors for network function - https://ungleich.ch/u/blog/nftables-magic-redirect-all-ports-to-one-port/

UDP server - https://gist.github.com/karupanerura/00c8ff6a48d98dd6bec2

https://cs.baylor.edu/~donahoo/practical/CSockets/practical/

https://github.com/chronoxor/CppServer#example-udp-echo-server - sudo apt install binutils-dev uuid-dev libssl-dev - sudo apt install python3-pip - sudo pip3 install --prefix /usr/local gil - sudo apt install cmake

With a udp echo server from the above packets are always dropped from xxx - add permenent arp record to resolve that: sudo arp -s 10.0.0.7 00:22:48:65:6e:cf

https://dev.to/aws-builders/100g-networking-in-aws-a-network-performance-deep-dive-3bg0 - In the world of NICs, these workers are queues

sudo ethtool -L sudo ethtool -U eth1 flow-type udp4 dst-port 3333 action 2

https://blog.cloudflare.com/how-to-drop-10-million-packets/

Pktgen integration

  • Managed to set up pktgen on azure. There were issues when trying to use the latest versions of DPDK and Pktgen.
  • Managed to get it working with DPDKVER=20.02 and PKTGENVER=20.02.0
  • Ran lua scripts successfully but had the following issues:
    • The stats reported for tx where almost always the same, even when rate is changing. Not sure if this an issue with the Lua script or the pktgen
    • When I start return traffic from the DUT, pktgen stops printing stats (it freezes). I have to stop the DUT from returning traffic and wait for a while for the pktgen console to be responsive. This because an issue in this use case where I want to automate reading and reporting of stats.

Netsvc

Bpftrace

sudo cat /sys/kernel/debug/tracing/events/napi/napi_poll/format

Test scenarios

  1. UDP packet where all parts of the stack are used - eth, ip, transport, sock, and user
  2. RAW packets AF_PACKET
  3. Hooks inbetweeen
  4. Raw sockets where - eth, sock, user
  5. XDP & TC

AF_PACKET

Notes

  • For ease we can use BTF with tc programs. This will allow us to see the maps as json hence can do without a custom userspace programs for reading the stats from the maps. We can the use bpftool to print out the maps
  • However this requires the latest iproute (from tag 5.11.0) configured with support for libbpf. Might need to compile it from source.
  • For running tc (iproute2) with libbpf support set the PKGCONFIGPATH with the path to libpf.pc (PKGCONFIGPATH=/usr/local/lib64/pkgconfig) and configure
  • http://www.policyrouting.org/iproute2.doc.html
  • We install bpftrace from source because ...... _dataloc couldn't be printed in the default package version

Test with Open Source VNFs

VNF Lifecycle Docs

tcpdump -ttttnnr cap2/dns.pcap

Install libs for access TREX python API

https://trex-tgn.cisco.com/trex/doc/cpstldocs/index.html#how-to-install

export PYTHONPATH=/home/azureuser/trex-core/scripts/automation/trexcontrolplane/interactive

bash while true; do echo -n "hello" > /dev/udp/10.0.2.4/8000; done

```bash sudo ip r add 16.0.0.0/16 via 10.0.2.5 dev eth2

sudo ip r add 48.0.0.0/16 via 10.0.3.5 dev eth1 ```

To debug whether packets are being deliver, in our case testing UDR configurations we use nping to send raw packets.

```bash sudo nping --send-ip --source-mac 00:0d:3a:2e:43:f9 --dest-mac 00:0d:3a:2d:48:5e --source-ip 48.0.1.7 --dest-ip 16.0.1.6 --udp -g 5000 -p 5001 --data-length 16

sudo tcpdump -eni eth0 host 48.0.1.7 ```

bash scp -i ~/.ssh/id_rsa azureuser@olan151trex.southafricanorth.cloudapp.azure.com:/home/azureuser/tpstat/offcputime.out ~/Documents/personal/phd/dev/opengilan/ansible/.results/stl_dns_streams-rate_20-trex.json

lsb-release

gnupg

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4052245BD4284CDD

bcc tools from source

sudo apt install -y bison build-essential cmake flex git libedit-dev \ libllvm7 llvm-7-dev libclang-7-dev python zlib1g-dev libelf-dev libfl-dev python3-distutils

sudo apt-get -y install luajit libluajit-5.1-dev

sudo apt install -y iperf3 netperf

export PYTHONPATH=$(dirname find /usr/lib -name bcc):$PYTHONPATH

:/usr/src/5.10.76-linuxkit/include/:$CINCLUDEPATH

BCC tools tracings

bash git clone https://github.com/iovisor/bcc.git cd bcc git checkout v0.24.0 mkdir build; cd build cmake .. make sudo make install cmake -DPYTHON_CMD=python3 .. # build python3 binding pushd src/python/ make sudo make install popd

Lessons

Azure has limits for concurrent connections per VM see link The limit is 500,000, up to 1,000,000 for two or more NICs. It also has a list on the number of flows 250k see link

txbps txpps txutil suttotalrxpps - duration was 10s on trex 287342528.0 500291.25 3.6738912800000003 2101315 (500kpps) 574196480.0 996902.25 7.337008399999998 1946131 (1Mpps) 779903104.0 1355321.125 9.96754484 2636674 (set % to 10) 3128658688.0 5424779.0 39.966233280000004 3052634 (set % to 40)

The SUT at some level seems to roughly maintain the number of received packets. The bytes can go up as we increase the packet size but the number of packets seems to be roundabout the same range.

The Inbound flows on the SUT seems to be around 250 for sum. The limit on active flows is 250k. Not sure if the number of flows is the issue or the recording from the inbound flows is wrong or off by 1k. Regardless the Inbound flows seem to be ~250 everytime. Calculating the packets per second 500kpps if these are directly proportional to flows then we are probably getting to the limit of 500k flows with 250k flows per second.

The Azure Monitor doesn't record any outbound packets on the Trex VM. This maybe due to the DPDK being used, might need to verify with docs, see the screenshots in assests folder.\

Owner

  • Login: tariromukute
  • Kind: user

GitHub Events

Total
Last Year

Dependencies

ansible/requirements-azure.txt pypi
  • azure-cli-core ==2.33.0
  • azure-common ==1.1.11
  • azure-graphrbac ==0.61.1
  • azure-keyvault ==1.0.0a1
  • azure-mgmt-apimanagement ==0.2.0
  • azure-mgmt-authorization ==0.51.1
  • azure-mgmt-automation ==0.1.1
  • azure-mgmt-batch ==5.0.1
  • azure-mgmt-cdn ==3.0.0
  • azure-mgmt-compute ==10.0.0
  • azure-mgmt-containerinstance ==1.4.0
  • azure-mgmt-containerregistry ==2.0.0
  • azure-mgmt-containerservice ==9.1.0
  • azure-mgmt-cosmosdb ==0.5.2
  • azure-mgmt-datalake-store ==0.5.0
  • azure-mgmt-devtestlabs ==3.0.0
  • azure-mgmt-dns ==2.1.0
  • azure-mgmt-eventhub ==2.0.0
  • azure-mgmt-hdinsight ==0.1.0
  • azure-mgmt-iothub ==0.7.0
  • azure-mgmt-keyvault ==1.1.0
  • azure-mgmt-loganalytics ==1.0.0
  • azure-mgmt-managedservices ==1.0.0
  • azure-mgmt-managementgroups ==0.2.0
  • azure-mgmt-marketplaceordering ==0.1.0
  • azure-mgmt-monitor ==0.5.2
  • azure-mgmt-network ==12.0.0
  • azure-mgmt-notificationhubs ==2.0.0
  • azure-mgmt-nspkg ==2.0.0
  • azure-mgmt-privatedns ==0.1.0
  • azure-mgmt-rdbms ==1.9.0
  • azure-mgmt-recoveryservices ==0.4.0
  • azure-mgmt-recoveryservicesbackup ==0.6.0
  • azure-mgmt-redis ==5.0.0
  • azure-mgmt-resource ==10.2.0
  • azure-mgmt-search ==3.0.0
  • azure-mgmt-servicebus ==0.5.3
  • azure-mgmt-sql ==0.10.0
  • azure-mgmt-storage ==11.1.0
  • azure-mgmt-trafficmanager ==0.50.0
  • azure-mgmt-web ==0.41.0
  • azure-nspkg ==2.0.0
  • azure-storage ==0.35.1
  • msrest ==0.6.21
  • msrestazure ==0.6.4
  • packaging *
  • requests *
  • xmltodict *
ansible/requirements.txt pypi
  • Cerberus ==1.3.2
  • Jinja2 ==3.0.1
  • MarkupSafe ==2.0.1
  • PyJWT ==1.7.1
  • PyNaCl ==1.4.0
  • PyYAML ==5.4.1
  • Pygments ==2.9.0
  • adal ==1.2.7
  • ansible ==5.0.1
  • ansible-core ==2.12.1
  • ansible-lint ==5.1.2
  • arrow ==1.1.1
  • backports.entry-points-selectable ==1.1.0
  • bcrypt ==3.2.0
  • binaryornot ==0.4.4
  • bracex ==2.1.1
  • certifi ==2021.5.30
  • cffi ==1.14.6
  • cfgv ==3.3.0
  • chardet ==4.0.0
  • charset-normalizer ==2.0.3
  • click ==8.0.1
  • click-help-colors ==0.9.1
  • colorama ==0.4.4
  • commonmark ==0.9.1
  • cookiecutter ==1.7.3
  • cryptography ==3.4.7
  • distlib ==0.3.2
  • distro ==1.6.0
  • docker ==5.0.0
  • enrich ==1.2.6
  • filelock ==3.0.12
  • humanfriendly ==10.0
  • identify ==2.2.11
  • idna ==3.2
  • isodate ==0.6.0
  • jinja2-time ==0.2.0
  • jmespath ==0.10.0
  • knack ==0.9.0
  • mccabe ==0.6.1
  • molecule ==3.3.4
  • molecule-docker ==0.2.4
  • molecule-vagrant ==0.6.3
  • msal ==1.16.0
  • msal-extensions ==0.3.1
  • nodeenv ==1.6.0
  • oauthlib ==3.1.1
  • packaging ==21.0
  • paramiko ==2.7.2
  • pathspec ==0.9.0
  • pkginfo ==1.7.1
  • platformdirs ==2.1.0
  • pluggy ==0.13.1
  • portalocker ==1.7.1
  • poyo ==0.5.0
  • pre-commit ==2.13.0
  • psutil ==5.9.0
  • pyOpenSSL ==21.0.0
  • pycodestyle ==2.7.0
  • pycparser ==2.20
  • pyflakes ==2.3.1
  • pyparsing ==2.4.7
  • python-dateutil ==2.8.2
  • python-slugify ==5.0.2
  • python-vagrant ==0.5.15
  • requests ==2.26.0
  • requests-oauthlib ==1.3.0
  • resolvelib ==0.5.4
  • rich ==10.6.0
  • ruamel.yaml ==0.17.10
  • ruamel.yaml.clib ==0.2.6
  • selinux ==0.2.1
  • six ==1.16.0
  • subprocess-tee ==0.3.2
  • tabulate ==0.8.9
  • tenacity ==8.0.1
  • text-unidecode ==1.3
  • toml ==0.10.2
  • urllib3 ==1.26.6
  • virtualenv ==20.6.0
  • wcmatch ==8.2
  • websocket-client ==1.1.0
  • yamllint ==1.26.1
notebooks/requirements.txt pypi
  • Babel ==2.9.1
  • Brotli ==1.0.9
  • Cython ==0.29.27
  • Flask ==2.0.3
  • Flask-Compress ==1.10.1
  • Jinja2 ==3.0.3
  • MarkupSafe ==2.1.0
  • Pillow ==9.0.0
  • Pygments ==2.10.0
  • Send2Trash ==1.8.0
  • Werkzeug ==2.0.3
  • ansi2html ==1.7.0
  • anyio ==3.5.0
  • appnope ==0.1.2
  • argon2-cffi ==21.3.0
  • argon2-cffi-bindings ==21.2.0
  • attrs ==21.4.0
  • autopep8 ==1.6.0
  • backcall ==0.2.0
  • bleach ==4.1.0
  • certifi ==2021.10.8
  • cffi ==1.15.0
  • charset-normalizer ==2.0.12
  • click ==8.0.4
  • cycler ==0.11.0
  • dash ==2.2.0
  • dash-core-components ==2.0.0
  • dash-html-components ==2.0.0
  • dash-table ==5.0.0
  • debugpy ==1.4.1
  • decorator ==5.0.9
  • defusedxml ==0.7.1
  • entrypoints ==0.3
  • fonttools ==4.29.0
  • idna ==3.3
  • importlib-resources ==5.4.0
  • install ==1.3.5
  • ipykernel ==6.3.1
  • ipython ==7.27.0
  • ipython-genutils ==0.2.0
  • ipywidgets ==7.6.5
  • itsdangerous ==2.1.0
  • jedi ==0.18.0
  • json5 ==0.9.6
  • jsonschema ==4.4.0
  • jupyter-client ==7.0.2
  • jupyter-core ==4.7.1
  • jupyter-dash ==0.4.1
  • jupyter-server ==1.13.5
  • jupyterlab ==3.2.9
  • jupyterlab-pygments ==0.1.2
  • jupyterlab-server ==2.10.3
  • jupyterlab-widgets ==1.0.2
  • kaleido ==0.2.1
  • kiwisolver ==1.3.2
  • matplotlib ==3.5.1
  • matplotlib-inline ==0.1.2
  • mistune ==0.8.4
  • nbclassic ==0.3.5
  • nbclient ==0.5.11
  • nbconvert ==6.4.2
  • nbformat ==5.1.3
  • nest-asyncio ==1.5.1
  • notebook ==6.4.8
  • numpy ==1.22.1
  • packaging ==21.3
  • pandas ==1.4.0
  • pandocfilters ==1.5.0
  • parso ==0.8.2
  • pexpect ==4.8.0
  • pickleshare ==0.7.5
  • plotly ==5.6.0
  • prometheus-client ==0.13.1
  • prompt-toolkit ==3.0.20
  • ptyprocess ==0.7.0
  • py4j ==0.10.9
  • pycodestyle ==2.8.0
  • pycparser ==2.21
  • pyparsing ==3.0.7
  • pyrsistent ==0.18.1
  • pyspark ==3.1.2
  • python-dateutil ==2.8.2
  • pytz ==2021.3
  • pyzmq ==22.2.1
  • requests ==2.27.1
  • retrying ==1.3.3
  • six ==1.16.0
  • sniffio ==1.2.0
  • tenacity ==8.0.1
  • terminado ==0.13.1
  • testpath ==0.6.0
  • toml ==0.10.2
  • tornado ==6.1
  • traitlets ==5.1.0
  • urllib3 ==1.26.8
  • wcwidth ==0.2.5
  • webencodings ==0.5.1
  • websocket-client ==1.3.1
  • widgetsnbextension ==3.5.2
  • zipp ==3.7.0
.github/workflows/ci-playbooks.yml actions
  • actions/checkout v2 composite
  • actions/setup-python v2.3.1 composite
.github/workflows/publish-role-galaxy.yml actions
  • actions/checkout v2 composite
  • actions/setup-python v2.3.1 composite
Dockerfile docker
  • zlim/bcc latest build