{"id":17334407,"url":"https://github.com/marshallasch/saf","last_synced_at":"2026-01-19T08:01:13.087Z","repository":{"id":43413074,"uuid":"336047091","full_name":"MarshallAsch/saf","owner":"MarshallAsch","description":"Hara's Static Access Frequency (SAF) data storage scheme for NS3","archived":false,"fork":false,"pushed_at":"2023-10-19T11:37:21.000Z","size":111,"stargazers_count":1,"open_issues_count":11,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-06T11:48:57.445Z","etag":null,"topics":["data-replication","manet","masters","mesh-networks","ns-3","ns3","reproducibility"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MarshallAsch.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-04T18:31:51.000Z","updated_at":"2022-01-30T23:47:43.000Z","dependencies_parsed_at":"2024-12-19T21:28:20.154Z","dependency_job_id":"e97272eb-67a8-422f-a0d7-f37edfc4e73b","html_url":"https://github.com/MarshallAsch/saf","commit_stats":{"total_commits":54,"total_committers":3,"mean_commits":18.0,"dds":"0.11111111111111116","last_synced_commit":"cd74275e57749959ba446371e99ea81d49d33298"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MarshallAsch/saf","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarshallAsch%2Fsaf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarshallAsch%2Fsaf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarshallAsch%2Fsaf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarshallAsch%2Fsaf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MarshallAsch","download_url":"https://codeload.github.com/MarshallAsch/saf/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarshallAsch%2Fsaf/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28563209,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T03:31:16.861Z","status":"ssl_error","status_checked_at":"2026-01-19T03:31:15.069Z","response_time":67,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["data-replication","manet","masters","mesh-networks","ns-3","ns3","reproducibility"],"created_at":"2024-10-15T15:05:58.246Z","updated_at":"2026-01-19T08:01:13.070Z","avatar_url":"https://github.com/MarshallAsch.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Code linter on main](https://img.shields.io/github/workflow/status/marshallasch/saf/Clang-format/main?style=plastic)\n![ns3 build checker on main](https://img.shields.io/github/workflow/status/marshallasch/saf/build-ns3/main?style=plastic)\n![GitHub](https://img.shields.io/github/license/marshallasch/saf?style=plastic)\n![Lines of code](https://img.shields.io/tokei/lines/github/marshallasch/saf?style=plastic)\n![NS3 version](https://img.shields.io/badge/NS--3-3.32-blueviolet?style=plastic)\n\n# SAF Simulation\n\nThis modified version of the SAF simulator is designed to allow the SAF storage scheme\nto run as a module independently of the simulation runner logic. \n\nThe previous version of this implementation involved putting this repository into the \n`scratch` folder in NS-3, this is no longer the case. \nThis module is designed to be placed in the `contrib` folder so it can be used as its own module\nand can be run independently of my simulation runner code. \n\nThis NS-3 scratch simulator code that attempts to implement the SAF data storage\nscheme and reproduce the performance evaluation as described in:\n\n\u003e T. Hara, :Effective replica allocation in ad hoc networks for improving data\n\u003e accessibility\" Proceedings IEEE INFOCOM 2001. Apr. 2001\n\n\n## Motivation\n\nAs part of my masters work as part of the Gillis Lab group\u003csup\u003e[1]\u003c/sup\u003e I am\nevaluating existing data storage schemes that does not have any available\nimplementations to evaluate.\nA challenge that our lab group discovered is that there although there have been\na number of works published that focus on developing new, better algorithms\nvery little work has been done to evaluate the ones that exist, largely due to\nchallenges around replicating the studies or reproducing the algorithms.\n\nThe goal of this implementation is to be able to have a baseline to compare other\ndata storage schemes too (since there are none that are readily available\nand Hara's methods have been the defacto standard that others are compared to).\n\n*Note*: Hara implemented their algorithm using a custom built simulator, we have\nchosen to implement it using the popular NS-3 network simulator instead.\n\n## Prereqs:\nNot sure if there are others but on ubuntu:\n- sqlite3, libsqlite3-dev\n\nIf building netanim:\n- qt4-qmake\n- libqt4-dev\n\n(additionally, on ubuntu 20.10, you need to add an additional repo because qt4 no longer ships with it)\n- https://launchpad.net/~gezakovacs/+archive/ubuntu/ppa\n\n## Building this project\n\nReproducibility is one of the key goals of simulator studies.\n\n 1. Download and build copy of the ns-3.32 all-in-one distribution.\n\n    ```sh\n    wget https://www.nsnam.org/release/ns-allinone-3.32.tar.bz2\n    tar xjvf ns-allinone-3.32.tar.bz2\n    cd ns-allinone-3.32\n    python3 ./build.py --enable-examples\n    ```\n\n 2. Change directories to the `contrib/` folder of the ns-3.32 source\n    distribution.\n\n    ```sh\n    cd ns-3.32/contrib/\n    ```\n\n 3. Clone this repository.\n\n    ```sh\n    git clone git@github.com:marshallasch/saf.git saf\n    ```\n\n4. Change directory back to the `ns-3.32` folder of the source distribution\n   and re-configure `./waf` so it can cache the new changes\n\n   ```sh\n   cd ..\n   ./waf configure --enable-examples --enable-tests\n   ./waf build\n   ```\n\n5. Run the example simulation that is included within the module.\n\n   ```sh\n   ./waf --run 'saf-example'\n   ```\n\n6. Create your own simulations using the SAF module. \n   This is done the same way you would run any other simulation using NS-3. \n   Setup your nodes, add a mobility model, install the SAF application using the\n   helper, then run the simulation. \n\n   One this to note is that the current implementation does not separate the SAF\n   validation simulation from the base SAF implementation that can then be used \n   in other applications, that is a work in progress.\n\n## Running the simulation\n\nIf you're familiar with ns-3, then you should know that the simulation is run\nvia the `waf` build tool. Arguments to this program *must* be part of the same\nstring that is passed to `./waf --run` (that's just how it works :shrug:).\n\nEvery parameter of the simulation is configurable. Run the following to see\nall the configurable parameters. The default values are as described in the\nSAF paper cited at the top of this document.\n\n```sh\n./waf --run 'saf-example --printHelp'  # \u003c-- mind the quotes!\n```\n\nYou can view an animation of the simulation using `NetAnim`, which is included\nwith the ns-3 all-in-one distribution. To do so, run the following:\n\n```sh\n./waf --run 'saf-example --animation-xml=path/to/saf.xml'\n```\n\nThis will generate an XML file at the specified path. You can then open this\nfile with `NetAnim` to view what happens during the simulation run.\n\n**NOTE: currently the generation of the animation has been disabled to improve the run time**\n\n## Code style\n\nThis project is formatted according to the `.clang-format` file included in this repository. It intentionally deviates from the code style used by the ns-3 library and simulator developers.\n\nThe code can be formatted using the included python script created by Guillaume Papin ([@Sarcasm]) and can be found [Sarcasm/run-clang-format].\n\n\nThe following command can be run to automatically reformat the code in place according the included style guideline.\n\n```sh\n./run-clang-format.py -r -i --style file .\n```\n\n## Special Thanks\n\nI would like to acknowledge the amazing work that was done by Keefer Rourke ([@keeferrourke])\non the initial [RHPMAN] project that I used as a base for this implementation.\n\n\n## License\nWhile ns-3 is itself licensed under the GNU General Public License v2, the code in this repository is made available under the Internet Systems Consortium (ISC) License.\n\nA copy of this license is included in this repository, and embedded in the top of each source file.\n\n\u003c!-- links --\u003e\n\n[1]: https://danielgillis.wordpress.com/students/\n[RHPMAN]: https://github.com/keeferrourke/rhpman-sim\n[@keeferrourke]: https://github.com/keeferrourke\n[Sarcasm]: https://github.com/Sarcasm\n[Sarcasm/run-clang-format]: https://github.com/Sarcasm/run-clang-format\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarshallasch%2Fsaf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarshallasch%2Fsaf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarshallasch%2Fsaf/lists"}