{"id":13539385,"url":"https://github.com/snabbco/snabb","last_synced_at":"2025-12-18T02:53:10.429Z","repository":{"id":3780283,"uuid":"4857740","full_name":"snabbco/snabb","owner":"snabbco","description":"Snabb: Simple and fast packet networking","archived":false,"fork":false,"pushed_at":"2024-08-30T12:10:23.000Z","size":37446,"stargazers_count":3025,"open_issues_count":181,"forks_count":297,"subscribers_count":178,"default_branch":"master","last_synced_at":"2025-12-09T10:44:18.477Z","etag":null,"topics":["luajit","networking","nfv-framework","userspace-driver","userspace-networking"],"latest_commit_sha":null,"homepage":"","language":"Lua","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/snabbco.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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}},"created_at":"2012-07-02T09:06:38.000Z","updated_at":"2025-11-29T13:14:59.000Z","dependencies_parsed_at":"2024-06-25T16:22:03.369Z","dependency_job_id":"c2032453-34f6-42f0-a848-372e2555db26","html_url":"https://github.com/snabbco/snabb","commit_stats":{"total_commits":7999,"total_committers":101,"mean_commits":79.1980198019802,"dds":0.7472184023002875,"last_synced_commit":"885ac528ea6c864b9ec60a93ef7aec6c7c6004c4"},"previous_names":[],"tags_count":103,"template":false,"template_full_name":null,"purl":"pkg:github/snabbco/snabb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snabbco%2Fsnabb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snabbco%2Fsnabb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snabbco%2Fsnabb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snabbco%2Fsnabb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/snabbco","download_url":"https://codeload.github.com/snabbco/snabb/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snabbco%2Fsnabb/sbom","scorecard":{"id":834116,"data":{"date":"2025-08-11","repo":{"name":"github.com/snabbco/snabb","commit":"f32729274b0a1b0da612bface2eabd8b57eef200"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.2,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/2 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: COPYING:0","Info: FSF or OSI recognized license: Apache License 2.0: COPYING:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Info: Possibly incomplete results: error parsing shell code: reached $( without matching (( with )): src/scripts/snabb_doc.sh:0","Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:6: pin your Docker image by updating alpine:3.7 to alpine:3.7@sha256:8421d9a84432575381bfabd248f1eb56f3aa21d9d7cd2511583c68c9b7511d10","Warn: containerImage not pinned by hash: lib/ljsyscall/Dockerfile:1: pin your Docker image by updating alpine:3.4 to alpine:3.4@sha256:b733d4a32c4da6a00a84df2ca32791bb03df95400243648d8c539e7b4cce329c","Info:   0 out of   3 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T18:30:21.155Z","repository_id":3780283,"created_at":"2025-08-23T18:30:21.155Z","updated_at":"2025-08-23T18:30:21.155Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27789964,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-18T02:00:09.725Z","response_time":55,"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":["luajit","networking","nfv-framework","userspace-driver","userspace-networking"],"created_at":"2024-08-01T09:01:24.851Z","updated_at":"2025-12-18T02:53:10.412Z","avatar_url":"https://github.com/snabbco.png","language":"Lua","funding_links":[],"categories":["\u003ca id=\"1a9934198e37d6d06b881705b863afc8\"\u003e\u003c/a\u003e通信\u0026\u0026代理\u0026\u0026反向代理\u0026\u0026隧道","Lua","\u003ca id=\"eec238a1a2657b70f7bbbe68a4421249\"\u003e\u003c/a\u003e其他","Switching","others","Resources"],"sub_categories":["\u003ca id=\"56acb7c49c828d4715dce57410d490d1\"\u003e\u003c/a\u003e未分类-Proxy","\u003ca id=\"b239f12aca7aa942b45836032cbef99a\"\u003e\u003c/a\u003e转换","SD-WAN","Miscellaneous"],"readme":"![Snabb](snabb.png)\n\n# Snabb\n\nSnabb (formerly \"Snabb Switch\") is a simple and fast packet networking toolkit.\n\nWe are also a grassroots community of programmers and network\nengineers who help each other to build and deploy new network\nelements. We care about practical applications and finding simpler\nways to do things.\n\nThe Snabb community are active in\n[applying modern programming techniques](http://blog.ipspace.net/2014/09/snabb-switch-deep-dive-on-software-gone.html),\n[do-it-yourself operator networking](http://blog.ipspace.net/2014/12/l2vpn-over-ipv6-with-snabb-switch-on.html),\n[high-level device drivers](https://github.com/snabbco/snabb/blob/master/src/apps/intel/intel10g.lua),\n[fast userspace virtio networking](http://www.virtualopensystems.com/en/solutions/guides/snabbswitch-qemu/),\n[universal SIMD protocol offloads](https://groups.google.com/d/msg/snabb-devel/aez4pEnd4ow/WrXi5N7nxfkJ), and\n[applying compiler technology to networking](https://archive.fosdem.org/2015/schedule/event/packet_filtering_pflua/).\n\nYou are welcome to join our community! Scroll down to the bottom for\ntips on how you can get involved.\n\n## Documentation\n\n- [API Reference](http://snabbco.github.io/)\n- [Contributor Hints](https://github.com/snabbco/snabb/blob/master/CONTRIBUTING.md#hints-for-contributors)\n\n## How does it work?\n\nSnabb is written using these main techniques:\n\n- Lua, a high-level programming language that is easy to learn.\n- LuaJIT, a just-in-time compiler that is competitive with C.\n- Ethernet I/O with no kernel overhead (\"kernel bypass\" mode).\n\nSnabb compiles into a stand-alone executable called\n`snabb`. This single binary includes multiple applications and runs on\nany modern [Linux/x86-64](src/doc/porting.md) distribution. (You could\nthink of it as a\n[busybox](https://en.wikipedia.org/wiki/BusyBox#Single_binary) for\nnetworking.)\n\n## How is it being used?\n\nThe first generation of Snabb applications include:\n\n### snabbnfv\n\n[Snabb NFV](src/program/snabbnfv/) makes QEMU/KVM networking\nperformance practical for applications that require high packet rates,\nsuch as ISP core routers. This is intended for people who want to\nprocess up to 100 Gbps or 50 Mpps of Virtio-net network traffic per\nserver. We originally developed Snabb NFV to support Deutsche\nTelekom's [TeraStream](https://ripe67.ripe.net/archives/video/3/)\nnetwork.\n\nYou can deploy Snabb NFV stand-alone with QEMU or you can integrate it\nwith a cloud computing platform such as OpenStack.\n\n### lwAFTR\n\n[Snabb lwAFTR](src/program/lwaftr/) is the internet-facing component of\n\"lightweight 4-over-6\" (lw4o6), an IPv6 transition technology.  An ISP\ncan use lwAFTR functions to provide its users with access to the IPv4\ninternet while maintaining a simple IPv6-only internal network.  An ISP\ndeploying Snabb lwAFTR can also configure lw4o6 to share IPv4 addresses\nbetween multiple different customers, ameliorating the IPv4 address\nspace exhaustion problem and lowering costs.  See the [lwAFTR\ndocumentation](src/program/lwaftr/doc/) for more details.\n\n### VPWS\n\nVPWS (Virtual Private Wire Service) is a Layer-2 VPN application being\ndeveloped by Alexander Gall at [SWITCH](http://www.switch.ch/). His Github\n[`vpn` branch](https://github.com/alexandergall/snabbswitch/tree/vpn)\nis the master line of development.\n\n### packetblaster\n\n[packetblaster](src/program/packetblaster/) generates load by\nreplaying a [pcap format](https://en.wikipedia.org/wiki/Pcap) trace\nfile or synthesizing customizable packets onto any number of Intel 82599 10-Gigabit network\ninterfaces. This is very efficient: only a small % of one core per CPU\nis required even for hundreds of Gbps of traffic. Because so little\nCPU resources are required you can run packetblaster on a small server\nor even directly on a Device Under Test.\n\n### snsh\n\n[snsh](src/program/snsh/) (Snabb Shell) is a tool for interactively\nexperimenting with Snabb. It provides direct access to all APIs\nusing a Lua shell. You can operate snsh either from script files or\nfrom an interactive shell.\n\n## How do I get started?\n\nSetting up a Snabb development environment takes around one\nminute:\n\n```\n$ git clone https://github.com/SnabbCo/snabb\n$ cd snabb\n$ make -j\n$ sudo src/snabb --help\n```\n\nThe `snabb` binary is stand-alone, includes all of the applications,\nand can be copied between machines.\n\nFor example, to install on the local machine and use as a load generator:\n\n```\n$ cp src/snabb /usr/local/bin/\n$ sudo snabb packetblaster replay capture.pcap 01:00.0\n```\n\n### snabb container\n\nBasic support for building and running snabb in a Docker container is available via\n\n```\n$ make docker\n```\n\nThis will build a tiny snabb container (8MB), ready to be used:\n\n```\n$ docker run -ti --rm snabb --help\n```\n\nOr simply run snabb, as you would under linux. This is made possible by using a wrapper shell script that\ngets linked to as part of 'make docker':\n\n```\n$ src/snabb --help\n```\n\n## How do I get involved?\n\nHere are the ways you can get involved:\n\n- Use the Snabb applications in your network.\n- Create your very own application: [Getting Started](src/doc/getting-started.md).\n- Create Github Issues with your ideas and questions and problems.\n- [Join](https://join.slack.com/t/snabb/shared_invite/enQtMzIyOTIwMTg5ODYyLWUwYzg2MTIwMjAxZTM1N2RlNGFjMWY1YzRkZGZiN2U5ZGU1NTYwNWJiMmQ3MWQ1MDFjYTg0MjNjNTZjMTFlZGQ) the [Snabb Slack chat](https://snabb.slack.com/) to hang out and shoot the breeze.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnabbco%2Fsnabb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsnabbco%2Fsnabb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnabbco%2Fsnabb/lists"}