{"id":13769454,"url":"https://github.com/emufog/emufog","last_synced_at":"2026-01-11T23:06:00.631Z","repository":{"id":68656200,"uuid":"93321557","full_name":"emufog/emufog","owner":"emufog","description":"EmuFog: Extensible and Scalable Emulation of Large-Scale Fog Computing Infrastructures","archived":false,"fork":false,"pushed_at":"2020-09-28T12:00:01.000Z","size":1147,"stargazers_count":24,"open_issues_count":1,"forks_count":9,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-05-28T10:11:27.813Z","etag":null,"topics":["fog-computing","java"],"latest_commit_sha":null,"homepage":"https://arxiv.org/abs/1709.07563","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emufog.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2017-06-04T15:11:12.000Z","updated_at":"2024-09-08T09:23:07.000Z","dependencies_parsed_at":"2023-04-21T11:31:39.281Z","dependency_job_id":null,"html_url":"https://github.com/emufog/emufog","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/emufog/emufog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emufog%2Femufog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emufog%2Femufog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emufog%2Femufog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emufog%2Femufog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emufog","download_url":"https://codeload.github.com/emufog/emufog/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emufog%2Femufog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28326201,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T22:11:01.104Z","status":"ssl_error","status_checked_at":"2026-01-11T22:10:58.990Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["fog-computing","java"],"created_at":"2024-08-03T17:00:25.866Z","updated_at":"2026-01-11T23:06:00.605Z","avatar_url":"https://github.com/emufog.png","language":"Kotlin","funding_links":[],"categories":["Uncategorized"],"sub_categories":["Uncategorized"],"readme":"# EmuFog\n\n[![Build Status](https://travis-ci.org/emufog/emufog.svg?branch=master)](https://travis-ci.org/emufog/emufog)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/eb3e7eba854d4ebd9ce1afc2f29d5ea3)](https://www.codacy.com/manual/unly/emufog?utm_source=github.com\u0026utm_medium=referral\u0026utm_content=emufog/emufog\u0026utm_campaign=Badge_Grade)\n[![codecov](https://codecov.io/gh/emufog/emufog/branch/master/graph/badge.svg)](https://codecov.io/gh/emufog/emufog)\n[![MIT License](https://img.shields.io/badge/license-MIT-green \"MIT License\")](LICENSE)\n\nEmuFog helps to test fog computing applications more efficiently.\nInstead of actual deploying large network topologies with your application to test, EmuFog helps to generate networks that can be emulated easily with [MaxiNet](https://maxinet.github.io/), a distributed version of the popular [Mininet](https://mininet.org/).\nThis provides more realistic results than simulations and is cheaper and faster than real deployments.\nAs an input EmuFog supports generated topologies from [BRITE](https://www.cs.bu.edu/brite/) or measured real world topologies from [Caida](https://www.caida.org).\nIn those networks EmuFog places fog nodes efficiently based on user defined constrains such as network latency thresholds or resource constraints.\nApplications for clients and fog nodes can be anything shipped in a Docker container.\n\n## Build EmuFog From Source\n\nEmuFog is build using [Kotlin 1.4](https://github.com/JetBrains/kotlin/releases/tag/v1.4.10) on the JDK 11.\nIt uses [Gradle](https://gradle.org/) to include dependencies and build binaries from the source code.\nTherefore, this repository contains a Gradle wrapper file `gradlew` for Linux and macOS and a `gradlew.bat` for Windows.\n\nTo build EmuFog simply clone the git repository\n\n```bash\ngit clone https://github.com/emufog/emufog.git\n```\n\nchange the directory to the newly added emufog directory\n\n```bash\ncd emufog/\n```\n\nRun the Gradle `build` task to compile the sources and run the tests.\n\n```bash\n./gradlew build\n```\n\nThe distributions archives can be found in `build/distributions`.\n\n```bash\ndistributions/\n├── emufog.tar\n└── emufog.zip\n```\n\n## Running EmuFog\n\nDownload the latest release as an archive from the [here](https://github.com/emufog/emufog/releases).\n\nExtract the files from the archive e.g.\n\n```bash\nunzip -q emufog.zip\ncd emufog/bin\n```\n\nRun the script depending on your operating system.\nFor Linux and macOS:\n\n```bash\n./emufog --help\n```\n\nand for Microsoft Windows:\n\n```bash\n./emufog.bat --help\n```\n\nThe following steps explain how to use EmuFog in more detail.\n\n### Get A Network Topology\n\nEmuFog currently supports two different graph data formats:\n1. The [BRITE](https://www.cs.bu.edu/brite/) network generator supporting the following models:\n  * _Routing of Multipoint Connections_ by Waxman, DOI: [10.1109/infcom.2002.1019309](https://doi.org/10.1109%2F49.12889)\n  * _On Distinguishing between Power-Law Internet Topology Generators_ by Bu and Towsley, DOI: [10.1109/infcom.2002.1019309](https://doi.org/10.1109%2Finfcom.2002.1019309)\n  * _Emergence of Scaling in Random Networks_ by Barabási and Albert, DOI: [10.1126/science.286.5439.509](https://doi.org/10.1126%2Fscience.286.5439.509)\n  * _Topology of Evolving Networks: Local Events and Universality_ by Barabási and Albert, DOI: [10.1103/physrevlett.85.5234](https://doi.org/10.1103%2Fphysrevlett.85.5234)\n  \n2. The [Macroscopic Internet Topology Data Kit](https://www.caida.org/data/internet-topology-data-kit/) from Caida including measured real world internet topologies\n\n### Write The Configuration File\n\nTo specify the hardware capabilities and the software to test, EmuFog uses a configuration file containing all necessary information.\nThe EmuFog repository contains an [exemplary configuration file](src/dist/example-config.yaml) to get started.\nThe parameters used are explained in the tables below in more detail.\n\n| Parameter                 | Description                                                                                                                               |\n| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |\n| base-address              | The base IP address of the network containing all nodes. This is the starting point and first address assigned. Format: `XXX.XXX.XXX.XXX` |\n| overwrite-experiment-file | Indicates whether the output file should be overwritten in case it already exists. `true` to overwrite file, `false` to keep it.          |\n| max-fog-nodes             | The maximum number of fog nodes to place in the network.                                                                                  |\n| cost-threshold            | The cost function's threshold. Depends on the cost function chosen. The current implementation uses latency as a cost function.           |\n| host-device-latency       | Latency to use between a placed client device at the edge of the network and its associated edge node.                                    |\n| host-device-bandwidth     | Bandwidth to use between a placed client device at the edge of the network and its associated edge node. Measured in MB/s.                |\n| device-node-types         | List of device containers that get assigned to the edge of the network. See below.                                                        |\n| fog-node-types            | List of possible fog node types that can be placed in the topology. See below.                                                            |\n\nThe device containers use the following parameters:\n\n| Parameter            | Description                                                                                  |\n| -------------------- | -------------------------------------------------------------------------------------------- |\n| container-image      | Docker image to use. See below.                                                              |\n| scaling-factor       | Scales the workload of this device higher than 1. Defaults to `1`                            |\n| average-device-count | The average number of devices of this type connected to an edge node.                        |\n| memory-limit         | Memory size of this container in Bytes.                                                      |\n| cpu-share            | Scaling of the CPU power. Container receives share of its value in respect to the total sum. |\n\nFog nodes share some generic parameters with client devices. Still, all parameters are listed below.\n\n| Parameter           | Description                                                                                  |\n| ------------------- | -------------------------------------------------------------------------------------------- |\n| container-image     | Docker image to use. See below.                                                              |\n| maximum-connections | The maximum number of connections from client devices this container can handle.             |\n| costs               | Deployment costs of this fog node in the network.                                            |\n| memory-limit        | Memory size of this container in Bytes.                                                      |\n| cpu-share           | Scaling of the CPU power. Container receives share of its value in respect to the total sum. |\n\nA Docker container consists of:\n\n| Parameter | Description                                                  |\n| --------- | ------------------------------------------------------------ |\n| name      | Name of the Docker container to use.                         |\n| version   | Version of the Docker container to use. Defaults to `latest` |\n\n### Execute EmuFog\n\nEmuFog requires input by the user to run.\nTherefore, the information can be passed via a command line interface as arguments.\nThe following table lists the required arguments, their shortcut and their respective description.\n\n| Argument | Shortcut | Description                                                                                         |\n| -------- | -------- | --------------------------------------------------------------------------------------------------- |\n| --Config | -c       | Path to the configuration file to use.                                                              |\n| --Type   | -t       | The type of reader to use. Currently supported: BRITE and CAIDA. This argument is case insensitive. |\n| --File   | -f       | Path to a topology file to read in. This argument can be used multiple times.                       |\n| --Output | -o       | Path to the output file to write. Defaults to `output.py`.                                          |\n\nA call of EmuFog could look like this for Linux and macOS:\n\n```bash\n./emufog -c config.yaml -t brite -f topology.brite -o out.py\n```\n\n## Deploy An Experiment\n\nThe final outcome of EmuFog is the network graph with the defined devices and fog nodes placed in the topology.\nIn order to run an experiment it requires a network emulation tool executing the defined software.\nCurrently, EmuFog supports an export for the [MaxiNet](https://maxinet.github.io/) emulator.\nFollow the instructions to set it up and run the generated experiment file.\n\n## License\n\nLicensed under the [MIT](LICENSE) license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femufog%2Femufog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femufog%2Femufog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femufog%2Femufog/lists"}