{"id":19451848,"url":"https://github.com/skoef/crapvd","last_synced_at":"2025-09-10T03:35:36.503Z","repository":{"id":19921481,"uuid":"23187544","full_name":"skoef/crapvd","owner":"skoef","description":"Custom Router Apvertisment Daemon","archived":false,"fork":false,"pushed_at":"2016-09-02T14:31:17.000Z","size":21,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-25T09:36:08.056Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","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/skoef.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}},"created_at":"2014-08-21T13:11:45.000Z","updated_at":"2016-08-19T12:01:48.000Z","dependencies_parsed_at":"2022-08-30T23:11:42.623Z","dependency_job_id":null,"html_url":"https://github.com/skoef/crapvd","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/skoef/crapvd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skoef%2Fcrapvd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skoef%2Fcrapvd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skoef%2Fcrapvd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skoef%2Fcrapvd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skoef","download_url":"https://codeload.github.com/skoef/crapvd/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skoef%2Fcrapvd/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274407337,"owners_count":25279269,"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-09-10T02:00:12.551Z","response_time":83,"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-10T16:43:14.084Z","updated_at":"2025-09-10T03:35:36.443Z","avatar_url":"https://github.com/skoef.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Custom Router APVertisment Daemon\n\nSend custom, directed IPv6 router advertisements on any network.\n\n## Background\nAt my current employer, we run a lot of customer virtual machines in shared VLANs.\nEach of these customers gets an IPv6 /64, but still have to use a prefixlen of 48 since\nthe router has a /48 gateway address. We know this is not how it should be implemented,\nbut resist to the fact of configuring gateways or next-hops for each /64. So this is where\nwe came up with:\n\n- generate lists of mac address and prefix combinations per customer\n- listen for router solicitation from any of these link-local addresses\n- reply with a matching router advertisements, forging the given link-local address and MAC\naddress of the router itself\n- send periodic router advertisements anyhow, with or without router solicitation\n\n## Usage\nGiven the following YAML based config file:\n```YAML\ncustomer1:\n  macaddr: '01:23:45:67:89:ab'\n  prefix:  '2a01:f000:f000:f000::/64'\n```\n\n`crapvd` will periodically send router advertisements to customer1 for prefix `2a01:f000:f000:f000::/64`, as well as respond to router solicitations from `01:23:45:67:89:ab`.\n\nBy default, `crapvd` will listen to router advertisements from the actual router and then uses the IPv6 link-local and MAC address found in there to send more specific router advertisements to each client. For information how to override these, and other available settings, refer to the example config file.\n\n## Dependencies\n```crapvd``` depends on [scapy](http://www.secdev.org/projects/scapy/ \"Scapy\") and [pyyaml](http://pyyaml.org/ \"PyYAML\")\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskoef%2Fcrapvd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskoef%2Fcrapvd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskoef%2Fcrapvd/lists"}