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
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
Metadata Files
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
- UDP packet where all parts of the stack are used - eth, ip, transport, sock, and user
- RAW packets AF_PACKET
- Hooks inbetweeen
- Raw sockets where - eth, sock, user
- XDP & TC
AF_PACKET
- Send an arbitrary Ethernet frame using an AF_PACKET socket in C
- Touch on reasons for using AFPACKET and alternatives to AFPACKET
- Also the portable way of using AF_PACKET (libpcap)
- Send an arbitrary Ethernet frame using libpcap
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
- Repositories: 3
- Profile: https://github.com/tariromukute
GitHub Events
Total
Last Year
Dependencies
- 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 *
- 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
- 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
- actions/checkout v2 composite
- actions/setup-python v2.3.1 composite
- actions/checkout v2 composite
- actions/setup-python v2.3.1 composite
- zlim/bcc latest build