{"id":18578688,"url":"https://github.com/jech/sroamd","last_synced_at":"2026-01-05T16:02:34.049Z","repository":{"id":142347033,"uuid":"389977854","full_name":"jech/sroamd","owner":"jech","description":null,"archived":false,"fork":false,"pushed_at":"2024-01-22T13:47:04.000Z","size":43,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-22T20:11:16.516Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","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/jech.png","metadata":{"files":{"readme":"README","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":"2021-07-27T12:39:04.000Z","updated_at":"2024-01-22T13:47:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"204f7c97-c3eb-4e50-bf68-c2edf972f6af","html_url":"https://github.com/jech/sroamd","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jech/sroamd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jech%2Fsroamd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jech%2Fsroamd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jech%2Fsroamd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jech%2Fsroamd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jech","download_url":"https://codeload.github.com/jech/sroamd/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jech%2Fsroamd/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28217521,"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":"2026-01-05T02:00:06.358Z","response_time":57,"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":[],"created_at":"2024-11-06T23:36:47.593Z","updated_at":"2026-01-05T16:02:34.012Z","avatar_url":"https://github.com/jech.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"Sroamd -- the Simple Roaming Daemon\n===================================\n\nSroamd makes it possible to seamlessly roam between IP links (e.g. WiFi\naccess points) with no changes to clients.  There is no central controller,\nand no tunnelling is involved.\n\nThe daemon implements a custom DHCPv4 server, an IPv4 RA server and\na custom peer-to-peer flooding algorithm.  It depends on hostapd for\nlink-layer configuration, and a routing protocol able to efficiently deal\nwith host routes (for example Babel).\n\nUsage\n-----\n\nYour routers need to all belong to a single routing domain (typically\na single Babel domain with no internal firewalling), but the nodes running\nsroamd do not need to be neighbours.  In the following, we assume that\nyour nodes run Babel over eth0 and use wlan0 as the roaming interface.  We\nalso assume that you use 2001:db8:4444::/48 and 192.168.44/24 as the\nprefixes used for roaming hosts.\n\n### Set up the link layer\n\nRun hostapd on the wlan0 interface.  Your `/etc/hostapd/hostapd.conf`\nshould say something like\n\n    interface=wlan0\n    channel=11\n    hw_mode=g\n    wmm_enabled=1\n    ieee80211n=1\n    ssid=sroam\n    wpa=2\n    wpa_passphrase=topsecret\n    wpa_pairwise=CCMP\n    \n### Set up the IP layer\n\nAll of your roaming interfaces must have the same IPv4 address, and they\nshould have the same IPv6 link-local address.\n\n    ip addr flush dev wlan0\n    ip addr add 192.168.44.1/24 dev wlan0\n    ip -6 addr flush dev wlan0\n    ip -6 addr add fe80::44/64 dev wlan0\n    \n### Run Babel, redistributing routes to roaming clients\n\nYour routing daemon must be configured to redistribute routes with\nprotocol 44.  If using babeld, you could say\n\n    babeld -C 'redistribute proto 44 allow' eth0\n    \nIf you're running BIRD, you're on your own.\n\n### Run sroamd\n\nChoose an IPv4 prefix (at least /24) and an IPv6 prefix (at least /56) for\nyour roaming clients.\n\n  v4prefix=192.168.44.0/24\n  v6prefix=2001:0db8:1234::/48\n\nChoose a set of nameservers to advertise to your clients:\n\n  ns1=192.168.43.43\n  ns2=2001:0db8:4343::43\n\nPick one or two stable sroamd instances, call them A and B, to act as\nflooding servers:\n\nOn A:\n\n  sroamd -P $v4prefix -P $v6prefix -N $ns1 -N $ns2 -f 4444 wlan0\n\nOn B:\n\n  sroamd -P $v4prefix -P $v6prefix -N $ns1 -N $ns2 -f 4444 -F A:4444 wlan0\n\nOn all other sroamd instances:\n\n  sroamd -P $v4prefix -P $v6prefix -N $nameserver -f 4444 -F A:4444 -F B:4444 wlan0\n\nNotes:\n\n  * you must use the same prefixes (-P) on all instances, but you may use\n    different nameservers;\n  * the servers need not act as DHCPv4 and RA servers, in which case they\n    need not run babeld or hostapd and you should omit the interface name.\n\n### Find the bugs\n\nThis is experimental software.  Things will break.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjech%2Fsroamd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjech%2Fsroamd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjech%2Fsroamd/lists"}