{"id":20074240,"url":"https://github.com/juniper/vmx-docker-lwaftr","last_synced_at":"2026-03-07T23:31:05.054Z","repository":{"id":92815597,"uuid":"73819074","full_name":"Juniper/vmx-docker-lwaftr","owner":"Juniper","description":"vMX Lightweight 4over6 Virtual Network Function with Snabb in a Docker Container","archived":false,"fork":false,"pushed_at":"2018-01-28T07:18:07.000Z","size":13061,"stargazers_count":30,"open_issues_count":1,"forks_count":7,"subscribers_count":19,"default_branch":"master","last_synced_at":"2025-07-23T12:34:00.862Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Juniper.png","metadata":{"files":{"readme":"README.md","changelog":"Changelog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"SUPPORT-INFO.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-11-15T14:02:29.000Z","updated_at":"2022-05-18T02:55:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"c99e76e9-59b8-48f1-b2e9-66ba9fb82ee9","html_url":"https://github.com/Juniper/vmx-docker-lwaftr","commit_stats":null,"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/Juniper/vmx-docker-lwaftr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Juniper%2Fvmx-docker-lwaftr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Juniper%2Fvmx-docker-lwaftr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Juniper%2Fvmx-docker-lwaftr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Juniper%2Fvmx-docker-lwaftr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Juniper","download_url":"https://codeload.github.com/Juniper/vmx-docker-lwaftr/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Juniper%2Fvmx-docker-lwaftr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30237329,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T23:24:20.706Z","status":"ssl_error","status_checked_at":"2026-03-07T23:21:10.486Z","response_time":53,"last_error":"SSL_read: 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":[],"created_at":"2024-11-13T14:50:01.699Z","updated_at":"2026-03-07T23:31:04.725Z","avatar_url":"https://github.com/Juniper.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Juniper Networks vMX lwaftr Docker Container\n\nThe vmx-docker-lwaftr Docker Container contains everything thats required to successfully launch vMX 16.1R3 and newer images with a configuration file and license key. This document describes how that Container can be built from source. The actual vMX images is NOT part of the Container. It will be loaded from the official vMX tar file placed in the local directory from where the Container is launched.\n\nConsult the Juniper White Paper on [vMX Lightweight 4over6 Virtual Network Function](https://www.juniper.net/assets/us/en/local/pdf/whitepapers/2000648-en.pdf) for a solution overview and listen to the podcast on Software Gone Wild by Ivan Pepelnjak, Dec 2016: [Blog](http://blog.ipspace.net/2016/12/snabb-switch-with-vmx-control-plane-on.html), [MP3](http://stream.ipspace.net/nuggets/podcast/Show_68-lwAFTR_Snabb_Data_Plane_with_vMX_Control_Plane.mp3).\n\n## Build instructions\n\nThe Container vmx-docker-lwaftr is based on the official Ubuntu Docker 14.04.5 base Container and includes the following elements:\n\n* Qemu 2.4.1 with reconnect patch downloaded and built from source in qemu/\n* Snabb, downloaded and built from source in snabb/\n* JET Python Client Library\n\nThe build process requires a Docker Engine and the make tool. Please follow the official \n[Install Docker Engine on Linux](https://docs.docker.com/engine/installation/linux/) guide. Docker engine 1.12.1 \nor newer is required to run the lwaftr1 simulation in the tests directory. \n\nThe Qemu patch used to build Qemu comes from https://github.com/snabbco/snabb/pull/332. \n\nClone the repo with submodules:\n\n```\ngit clone --recursive https://github.com/Juniper/vmx-docker-lwaftr\n```\n\nOr to clone a specific version by tag, use git option '-b' to specify a specific tag:\n\n```\ngit clone --recursive -b v1.1.19 https://github.com/juniper/vmx-docker-lwaftr\n```\n\nA single top level execution of make will build Snabb, Qemu and, dumb-init with a temporary build container and create the vmx-docker-lwaftr Docker container plus the b4cpe client simulator container.\n\n```\nmake\n```\n\nThe name and version of the Container can be found the toplevel file VERSION:\n\n```\n$ cat VERSION\nvmx-docker-lwaftr:v1.2.0\n```\n\n```\n$ mwiget@st:~/vmx-docker-lwaftr$ docker images\nREPOSITORY              TAG                 IMAGE ID            CREATED              SIZE\nvmx-docker-lwaftr       v1.2.0               2779b5c29172        About a minute ago   253.2 MB\nbuildqemu               latest              dfcbe71b7896        2 minutes ago        432.5 MB\nbuildsnabb              latest              60f090d9d3e0        4 minutes ago        344.7 MB\nbuild-dumb-init         latest              866eb14689e5        6 minutes ago        347.8 MB\nb4cpe                   v0.1                fb4f557e6249        3 days ago           258.6 MB\nubuntu                  14.04.4             38c759202e30        10 weeks ago         196.6 MB\n...\n```\n\nThe image build be removed via 'make clean' from the qemu, respectively snabb directory. Only the 'vmx-docker-lwaftr' Container is required.\n\n### 5. Save vmx-docker-lwaftr Container to file\n\nTo save the vmx-docker-lwaftr Container into an image file use:\n\n```\n$ docker save -o vmx-docker-lwaftr-v1.2.0.img vmx-docker-lwaftr:v1.2.0\n$ ls -l vmx-docker-lwaftr-v1.2.0.img\n-rw------- 1 mwiget staff 262911488 Sep  11 21:40 vmx-docker-lwaftr-v1.2.0.img\n```\n\n## Running the vmx-docker-lwaftr Container\n\n```\ndocker run --name \u003cname\u003e --rm -v \\$PWD:/u:ro \\\\\n   --privileged -i -t marcelwiget/vmx-docker-lwaftr[:version] \\\\\n   -c \u003cjunos_config_file\u003e -I identity [-l license_file]\\\\\n   [-V \u003c# of cores\u003e] [-W \u003c# of cores\u003e] [-P \u003ccores\u003e] [-R \u003ccores\u003e] \\\\\n   [-m \u003ckbytes\u003e] [-M \u003ckBytes\u003e] \\\\\n   \u003cimage\u003e \u003cpci-address/core\u003e [\u003cpci-address/core\u003e ...]\n\n[:version]       Container version. Defaults to :latest\n\n -v \\$PWD:/u:ro   Required to access a file in the current directory\n                 docker is executed from (ro forces read-only access)\n                 The file will be copied from this location\n\n \u003cimage\u003e         vMX distribution tar file, e.g. vmx-bundle-16.1R3.10.tgz\n\n \u003cpci-address/core\u003e [\u003cpci-address/core\u003e ..]\n                 One or more PCI addresses and physical core to lock\n                 the Snabb process to. For simulation purposes use\n                 'tap' instead of the pci-address. \n\n -I  username,password for the JETapp to communicate with the Junos\n     control plane or ssh private key file. Must also be configured in \n     the Junos config with super-user privileges\n\n -c  Junos configuration file\n\n -l  Junos license key file\n\n -m  Specify the amount of memory for the vRE/VCP (default $VCPMEM kB)\n -M  Specify the amount of memory for the vPFE/VFP (default $VFPMEM kB)\n\n -P  Cores to pin the VFP to via numactl --physcpubind \u003ccores\u003e\n -R  Cores to pin the VCP to via numactl --physcpubind \u003ccores\u003e\n \n -V  number of virtual cores to assign to VCP (default 1)\n -W  number of virtual cores to assign to VFP (default 3)\n\n -d  launch debug shell before launching vMX and before existing the container\n\n```\n\nSee tests/run0.sh, tests/run1.sh and tests/run2.sh for examples on how to launch. The \nvMX distribution tar file must be on the local directory from which the container\nis launched.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuniper%2Fvmx-docker-lwaftr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuniper%2Fvmx-docker-lwaftr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuniper%2Fvmx-docker-lwaftr/lists"}