{"id":15056994,"url":"https://github.com/kioubit/l3mp","last_synced_at":"2026-01-02T12:16:04.492Z","repository":{"id":219120759,"uuid":"748223139","full_name":"Kioubit/L3MP","owner":"Kioubit","description":"Multiplex layer 3 tunnels through another layer 3 tunnel (eBPF)","archived":false,"fork":false,"pushed_at":"2024-01-25T17:45:06.000Z","size":59,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-14T10:14:22.978Z","etag":null,"topics":["ebpf","networking","tunnel"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Kioubit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2024-01-25T14:33:49.000Z","updated_at":"2024-07-08T12:15:59.000Z","dependencies_parsed_at":"2024-09-29T04:20:34.372Z","dependency_job_id":null,"html_url":"https://github.com/Kioubit/L3MP","commit_stats":null,"previous_names":["kioubit/l3mp"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kioubit%2FL3MP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kioubit%2FL3MP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kioubit%2FL3MP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kioubit%2FL3MP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Kioubit","download_url":"https://codeload.github.com/Kioubit/L3MP/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243558478,"owners_count":20310574,"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","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":["ebpf","networking","tunnel"],"created_at":"2024-09-24T21:59:50.246Z","updated_at":"2026-01-02T12:16:04.488Z","avatar_url":"https://github.com/Kioubit.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# L3MP\nMultiplex up to 16 layer 3 tunnels through a single layer 3 tunnel\n- Uses the `diffserv` field in the IPv4/IPv6 headers to label packets\n- Zero byte overhead (no MTU penalty)\n- Performant: Packets are never copied to userspace.\n(Uses an eBPF TC direct-action program that runs in the kernel eBPF sandbox)\n\n\n## How It Works\n\nL3MP uses an eBPF TC (Traffic Control) direct-action program to:\n1. Intercept packets on the managed interfaces created by the program\n2. Mark them using the DiffServ field (6 bits in IP header)\n3. Route them through a single external interface\n4. Demultiplex incoming packets back to their respective interfaces\n\n## Usage:\n```\nUsage: L3MP -ext \u003cexternal interface\u003e -if \u003cinterface@label\u003e [-if \u003cinterface@label\u003e ...]\n\nOptions:\n  -ext string\n        External interface name (required)\n  -if value\n        Interface-label pair in format 'interface@label' (can be repeated up to 16 times)\n\nExample:\n  L3MP -ext eth0 -if mp1@1 -if mp2@2\n\nNotes:\n  - Label must be a number from 0 to 16\n  - Maximum 16 interface-label pairs allowed\n```\n\nRequires root privileges or the `CAP_NET_ADMIN`, `CAP_BPF`, (`CAP_SYS_RESOURCE`) Linux capabilities.\n\n### Examples\n\n**Simple setup with 2 tunnels:**\n```bash\nsudo L3MP -ext wg0 -if multi0@1 -if multi1@2\n```\n\n**Multiple VPN tunnels:**\n```bash\nsudo L3MP -ext wg0 \\\n  -if vpn1@1 \\\n  -if vpn2@2 \\\n  -if vpn3@3 \\\n  -if vpn4@4\n```\n\n**Maximum configuration (16 tunnels):**\n```bash\nsudo L3MP -ext wg0 \\\n  -if mp1@1 -if mp2@2 -if mp3@3 -if mp4@4 \\\n  -if mp5@5 -if mp6@6 -if mp7@7 -if mp8@8 \\\n  -if mp9@9 -if mp10@10 -if mp11@11 -if mp12@12 \\\n  -if mp13@13 -if mp14@14 -if mp15@15 -if mp16@16\n```\n\n### Building\n#### Main program\nRun ``go build -o L3MP .``\n#### Re-compile included eBPF program (Optional)\nRequires llvm and clang to be installed. To start the compilation, run ``go generate .``\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkioubit%2Fl3mp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkioubit%2Fl3mp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkioubit%2Fl3mp/lists"}