{"id":13643931,"url":"https://github.com/jech/babeld","last_synced_at":"2025-05-15T16:04:25.983Z","repository":{"id":2064677,"uuid":"2145286","full_name":"jech/babeld","owner":"jech","description":"The Babel routing daemon","archived":false,"fork":false,"pushed_at":"2024-11-04T10:58:17.000Z","size":3191,"stargazers_count":396,"open_issues_count":11,"forks_count":95,"subscribers_count":31,"default_branch":"master","last_synced_at":"2025-04-07T21:13:25.191Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://www.irif.fr/~jch/software/babel/","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":"CHANGES","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":"2011-08-02T21:40:59.000Z","updated_at":"2025-04-07T03:12:18.000Z","dependencies_parsed_at":"2024-01-14T09:18:12.536Z","dependency_job_id":"1732afe7-7e45-41aa-9247-c3d241a90db7","html_url":"https://github.com/jech/babeld","commit_stats":{"total_commits":1977,"total_committers":37,"mean_commits":"53.432432432432435","dds":0.3115832068791098,"last_synced_commit":"0cc49174368282ba28c97b5cbacc503d426984fe"},"previous_names":[],"tags_count":87,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jech%2Fbabeld","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jech%2Fbabeld/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jech%2Fbabeld/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jech%2Fbabeld/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jech","download_url":"https://codeload.github.com/jech/babeld/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254374407,"owners_count":22060610,"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":[],"created_at":"2024-08-02T01:01:54.991Z","updated_at":"2025-05-15T16:04:25.962Z","avatar_url":"https://github.com/jech.png","language":"C","funding_links":[],"categories":["C"],"sub_categories":[],"readme":"Babel\n=====\n\nBabel is a loop-avoiding distance-vector routing protocol roughly\nbased on HSDV and AODV, but with provisions for link cost estimation\nand redistribution of routes from other routing protocols.\n\n\nGetting the source\n==================\n\n    $ git clone https://github.com/jech/babeld.git\n    $ cd babeld\n\n    $ git submodule init\n    $ git submodule update\n\n\nInstallation\n============\n\n    $ make\n    $ su -c 'make install'\n\nIf compiling for OpenWRT, you will probably want to say something like\n\n    $ make CC=mipsel-linux-gcc PLATFORM_DEFINES='-march=mips32'\n\nOn Mac OS X, you'll need to do\n\n    $ make LDLIBS=''\n\n\nSetting up a network for use with Babel\n=======================================\n\n1. Set up every node's interface\n--------------------------------\n\nOn every node, set up the wireless interface:\n\n    # iwconfig eth1 mode ad-hoc channel 11 essid \"my-mesh-network\"\n    # ip link set up dev eth1\n\n2. Set up every node's IP addresses\n-----------------------------------\n\nYou will need to make sure that all of your nodes have a unique IPv6\naddress, and/or a unique IPv4 address.\n\nOn every node, run something like:\n\n    # ip addr add 192.168.13.33/32 dev eth1\n    # ip -6 addr add $(generate-ipv6-address -r)/128 dev eth1\n\nYou will find the generate-ipv6-address utility, which can generate random\nIPv6 addresses according to RFC 4193, on\n\n      https://www.irif.fr/~jch/software/files/\n\n\nA note about tunnels and VPNs\n-----------------------------\n\nSome VPN implementations (notably OpenVPN and Linux GRE) do not\nautomatically add an IPv6 link-local address to the tunnel interface.\nIf you attempt to run Babel over such an interface, it will complain\nthat it ``couldn't allocate requested address''.\n\nThe solution is to manually add the link-local address to the\ninterface.  This can be done by running e.g.\n\n    # ip -6 addr add $(generate-ipv6-address fe80::) dev gre0\n\n\n3. Start the routing daemon\n---------------------------\n\nRun Babel on every node, specifying the set of interfaces that it\nshould consider:\n\n    # babeld eth1\n\nIf your node has multiple interfaces which you want to participate in\nthe Babel network, just list them all:\n\n    # babeld eth0 eth1 sit1\n\n\n4. Setting up an Internet gateway\n---------------------------------\n\nIf you have one or more Internet gateways on your mesh network, you\nwill want to set them up so that they redistribute the default route.\nBabel will only redistribute routes with an explicit protocol\nattached, so you must say something like:\n\n    # ip route add 0.0.0.0/0 via 1.2.3.4 dev eth0 proto static\n\nIn order to redistribute all routes, you will say:\n\n    # babeld -C 'redistribute metric 128' eth1\n\nYou may also be more selective in the routes you redistribute, for\ninstance by specifying the interface over which the route goes out:\n\n    # babeld -C 'redistribute if eth0 metric 128' eth1\n\nor by constraining the prefix length:\n\n    # babeld -C 'redistribute ip ::/0 le 64 metric 128' \\\n             -C 'redistribute ip 0.0.0.0/0 le 28 metric 128' \\\n             eth1\n\nYou may also want to constrain which local routes (routes to local\ninterface addresses) you advertise:\n\n    # babeld -C 'redistribute local if eth1' -C 'redistribute local deny' \\\n             -C 'redistribute metric 128' \\\n             eth1\n\n-- Juliusz Chroboczek\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjech%2Fbabeld","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjech%2Fbabeld","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjech%2Fbabeld/lists"}