{"id":48684500,"url":"https://github.com/comnetshh/flowemu","last_synced_at":"2026-04-11T03:55:33.042Z","repository":{"id":46824201,"uuid":"370688735","full_name":"ComNetsHH/FlowEmu","owner":"ComNetsHH","description":"Flow-Based Network Emulator","archived":false,"fork":false,"pushed_at":"2024-04-19T14:46:07.000Z","size":1125,"stargazers_count":24,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-04-11T03:55:30.826Z","etag":null,"topics":["active-queue-management","flow-based-programming","network-emulator"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ComNetsHH.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-05-25T12:41:51.000Z","updated_at":"2025-01-21T10:46:48.000Z","dependencies_parsed_at":"2022-09-25T00:43:48.296Z","dependency_job_id":"482884c5-8285-4406-a7e3-e06b38e0fddc","html_url":"https://github.com/ComNetsHH/FlowEmu","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ComNetsHH/FlowEmu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ComNetsHH%2FFlowEmu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ComNetsHH%2FFlowEmu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ComNetsHH%2FFlowEmu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ComNetsHH%2FFlowEmu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ComNetsHH","download_url":"https://codeload.github.com/ComNetsHH/FlowEmu/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ComNetsHH%2FFlowEmu/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31668050,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T17:19:37.612Z","status":"online","status_checked_at":"2026-04-11T02:00:05.776Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["active-queue-management","flow-based-programming","network-emulator"],"created_at":"2026-04-11T03:55:32.576Z","updated_at":"2026-04-11T03:55:33.032Z","avatar_url":"https://github.com/ComNetsHH.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\t\u003cimg src=\".readme/flowemu_logo.svg\" width=\"600\" alt=\"FlowEmu\"\u003e\n\t\u003cbr /\u003e\n\t\u003cbr /\u003e\n\t\u003cb\u003eFlow-Based Network Emulator\u003c/b\u003e\n\t\u003cbr /\u003e\n\t\u003cbr /\u003e\n\t\u003cp\u003e\n\t\t\u003ca href=\"#about\"\u003eAbout\u003c/a\u003e\n\t\t\u0026thinsp;•\u0026thinsp;\n\t\t\u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e\n\t\t\u0026thinsp;•\u0026thinsp;\n\t\t\u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e\n\t\t\u0026thinsp;•\u0026thinsp;\n\t\t\u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\n\t\t\u0026thinsp;•\u0026thinsp;\n\t\t\u003ca href=\"#authors\"\u003eAuthors\u003c/a\u003e\n\t\t\u0026thinsp;•\u0026thinsp;\n\t\t\u003ca href=\"#publications\"\u003ePublications\u003c/a\u003e\n\t\u003c/p\u003e\n\u003c/div\u003e\n\n# About\nFlowEmu is an open-source flow-based network emulator, which allows the user to model a communication system via freely connectable modules that implement different types of impairments, queues and departure processes.\nIt comes with a Python toolchain that supports running experiments in a virtual Docker environment or on a hardware testbed.\nFlowEmu features a web-based Graphical User Interface (GUI) as well as a Message Queuing Telemetry Transport (MQTT) interface.\nVia these interfaces, the user can change the structure and parameters of the model at runtime and get real-time statistics.\n\n\u003cdiv align=\"center\"\u003e\n\t\u003cimg src=\".readme/screenshot.png\" width=\"800\" alt=\"Screenshot of the GUI\"\u003e\n\u003c/div\u003e\n\n# Features\n * Extendable set of freely connectable modules (see [Modules](#modules))\n * Written in C++\n * Runs on Linux as a single user space process\n * Access to Ethernet frames via raw sockets\n * Python toolchain for running experiments\n * Supports virtual Docker environments as well as hardware testbeds\n * Web-based Graphical User Interface (GUI)\n * Message Queuing Telemetry Transport (MQTT) interface\n * The structure and parameters of the model can be changed at runtime\n * Real-time statistics\n * Separate seedable pseudo random number generator for each module\n\n### Modules\n * Loss:\n    * Uncorrelated loss\n    * Continuous-time Gilbert-Elliot model\n    * Trace (compatible with [Link'Em](https://github.com/sys-uos/linkem))\n * Delay:\n    * Fixed delay\n    * Trace (compatible with [Link'Em](https://github.com/sys-uos/linkem))\n * Queues and Active Queue Management (AQM) algorithms:\n    * FIFO\n    * RED\n    * CoDel\n    * PIE\n    * PI2\n * Rate limiters / departure processes:\n    * Bitrate\n    * Fixed interval\n    * Trace (from [Mahimahi](http://mahimahi.mit.edu/))\n * Meters:\n    * Delay\n    * Throughput\n\n# Getting Started\nThis guide shows you how to get started by setting up a development environment using Docker.\nEven though **this guide is written for Ubuntu 20.04 LTS**, FlowEmu can be executed on any Linux distribution.\nPlease adapt the commands that are executed on the host system accordingly.\n\n## Install prerequisites\nBefore we can start, you need to install some packages that are required on the host system:\n```\nsudo apt-get install pipenv ethtool mosquitto-clients\n```\n\n### Docker\nAs the development environment is based on Docker, you also need to install and set up Docker and Docker Compose:\n```\nsudo apt-get install docker.io docker-buildx docker-compose\n```\n\nAdd your own user to the *docker* group, so you are able to control the Docker daemon:\n```\nsudo usermod -aG docker $USER\n```\n\nYou have to log out and log in again for the group settings to take effect.\n\n## Install and set up FlowEmu\nClone the FlowEmu repository and enter the directory:\n```\ngit clone https://github.com/ComNetsHH/FlowEmu.git\ncd FlowEmu\n```\n\n### Set up Python environment\nFlowEmu comes with a Pipfile for Pipenv.\nTo set up a virtual environment for Python and install all dependencies, run the following command:\n```\npipenv install\n```\n\nYou can then upgrade pip and install the FlowEmu Python library using:\n```\npipenv run pip install --upgrade pip\npipenv run pip install -e lib/python\n```\n\n### Install and start the MQTT broker\nFlowEmu needs an MQTT broker, which also serves the GUI.\nThis can be started using Docker Compose and the following command:\n```\ndocker-compose -f server/docker-compose.yml up -d\n```\n\nThe Docker Compose file is set up to automatically start the broker on system boot.\nIf you want to stop it, run the following command in the root directory of the repository:\n```\ndocker-compose -f server/docker-compose.yml down\n```\n\nAlternatively, you can run the broker in the foreground by omitting the `-d` option.\n\n### Build and start FlowEmu\nYou can now execute the run script:\n```\npipenv run ./run.py config/environments/docker\n```\n\nThe script will build the Docker image, which includes compiling FlowEmu.\nIt then starts three Docker containers: *source, channel and sink*.\nThe emulator is executed in the *channel* container, while the *source* and *sink* containers can be used to start the application under test.\nAll Docker containers are connected by manually creating bridge interfaces between their network namespaces.\nThis is done instead of using native Docker networks, because the Docker networks have shown to not be suitable for using them with the emulator.\n\nBy default, the bridge network interface of the *source* container has the IPv4 address *10.0.1.1*, while the one of the *sink* container has the address *10.0.2.1*.\nBoth containers also use the FlowEmu Docker image, which can be changed in the configuration files in `config/environments/docker`.\nAs elevated privileges are required to use some TCP congestion control kernel modules, the *source* and *sink* containers are started in privileged mode.\n\nThe script runs multiple commands via *sudo*, so it will ask you for your password.\nHowever, it only executes commands using *sudo* when necessary and does not do any permanent changes on your system configuration.\n\nIf you want to stop FlowEmu, just press `Ctrl + C` in the terminal.\nThis will gracefully shut down everything.\n\n## Run your first experiments\n\n### Access the GUI\nThe GUI is served by the MQTT broker via HTTP on port 9001.\nAs the MQTT broker is running on your local machine, you can access the GUI at: http://localhost:9001/\n\n### Create a simple channel model\nBy default, there is no connection between the two interfaces of the emulator.\nTherefore, you have to connect the two *raw socket* modules by clicking on one of their ports and then create a connection by clicking on the contrary port of the other module.\nRepeat this step for the other direction.\n\n### Ping\nTo see whether the connection was established successfully, you can run the *ping* command in the *source* container to send ICMP ping packets to the *sink* container.\nTo do so, run the following command in a separate terminal:\n```\ndocker exec -it source ping 10.0.2.1\n```\n\nIf you now see the responses from the *sink* container in the terminal output, you have successfully set up the emulator.\nIt is now time to start playing around with the GUI and observe the effects of the different modules on the round-trip time and packet loss.\n\n### iPerf\nIf you want to measure throughput, you can use iPerf.\nRun the following commands in separate terminals to execute the iPerf server in the *sink* container and the iPerf client in the *source* container:\n```\ndocker exec -it sink iperf -s\n```\n```\ndocker exec -it source iperf -c 10.0.2.1 -t 30 -Z cubic\n```\n\nAfter 30 seconds, you will see the measured throughput in the command line output.\n\n#### Changing the TCP congestion control algorithm\nThe TCP congestion control algorithm can be set via the `-Z` option.\nAs iPerf will use the kernel modules of the host's kernel, you can only use the currently loaded modules.\n\nTo get a list of all TCP congestion control kernel modules that can be loaded, execute the following command on the host system:\n```\nls -l /lib/modules/$(uname -r)/kernel/net/ipv4/tcp_*\n```\n\nTo load a specific TCP congestion control kernel module, run for example:\n```\nsudo modprobe tcp_bbr\n```\n\nThe module can then be used in iPerf by using `-Z bbr`.\n\n# License\nFlowEmu is licensed under the [GNU General Public License v3.0](COPYING) or later.\n\n# Authors\n * [Daniel Stolpmann](https://github.com/dstolpmann), Hamburg University of Technology, Institute of Communication Networks, Germany - \u003cdaniel.stolpmann@tuhh.de\u003e\n\n# Publications\n * [D. Stolpmann and A. Timm-Giel, “FlowEmu: An Open-Source Flow-Based Network Emulator,” Electronic Communications of the EASST, vol. 80: Conference on Networked Systems 2021 (NetSys 2021), Sep. 2021](https://doi.org/10.14279/tuj.eceasst.80.1141)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcomnetshh%2Fflowemu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcomnetshh%2Fflowemu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcomnetshh%2Fflowemu/lists"}