{"id":13645566,"url":"https://github.com/Trinkle23897/router","last_synced_at":"2025-04-21T14:31:32.957Z","repository":{"id":65497666,"uuid":"156707054","full_name":"Trinkle23897/router","owner":"Trinkle23897","description":"造路由器 （清华大学 网络原理课程 2018-2019秋）","archived":false,"fork":false,"pushed_at":"2019-01-07T02:40:04.000Z","size":76,"stargazers_count":77,"open_issues_count":1,"forks_count":21,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-04T21:23:20.326Z","etag":null,"topics":["linux","rip","router","socket"],"latest_commit_sha":null,"homepage":"","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/Trinkle23897.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-11-08T12:55:33.000Z","updated_at":"2025-03-10T17:18:38.000Z","dependencies_parsed_at":"2023-01-26T03:25:09.863Z","dependency_job_id":null,"html_url":"https://github.com/Trinkle23897/router","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Trinkle23897%2Frouter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Trinkle23897%2Frouter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Trinkle23897%2Frouter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Trinkle23897%2Frouter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Trinkle23897","download_url":"https://codeload.github.com/Trinkle23897/router/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250070173,"owners_count":21369839,"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":["linux","rip","router","socket"],"created_at":"2024-08-02T01:02:37.409Z","updated_at":"2025-04-21T14:31:32.730Z","avatar_url":"https://github.com/Trinkle23897.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"# router\n\nFor exp3, use the following command to generate rip executable file:\n\n```bash\ng++ rip.cpp -orip -O2 -lpthread -DRIP_MAIN\n\n# RUN:\n./rip\n```\n\nThe rip output log may seem like this:\n\n```\nget 192.168.  4.  1\tiface enp7s0\nget 172. 16.  9.  1\tiface vmnet1\nget 172. 16.181.  1\tiface vmnet8\nget 192.168.  3.  2\tiface enx000ec6aa5f42\n-----------------------------------------------------\n   |        Network       |   Nexthop Addr  | Metric \n-----------------------------------------------------\n C | 192.168.  4.  1 / 24 |   0.  0.  0.  0 |    1\n C |   3.  0.  0.  0 / 24 |   0.  0.  0.  0 |   16\n C | 172. 16.  9.  1 / 24 |   0.  0.  0.  0 |    1\n C | 172. 16.181.  1 / 24 |   0.  0.  0.  0 |    1\n C | 192.168.  3.  2 / 24 |   0.  0.  0.  0 |    1\n-----------------------------------------------------\nsend to 192.168.  4.  1 succeed! packet len: 64\nsend to 172. 16.  9.  1 succeed! packet len: 64\nsend to 172. 16.181.  1 succeed! packet len: 64\nsend to 192.168.  3.  2 succeed! packet len: 64\nreceive len: 64\tcmd: 2\tver: 2\tfrom 192.168.3.1\nget 192.168.  4.  1\tiface enp7s0\nget 172. 16.  9.  1\tiface vmnet1\nget 172. 16.181.  1\tiface vmnet8\nget 192.168.  3.  2\tiface enx000ec6aa5f42\n-----------------------------------------------------\n   |        Network       |   Nexthop Addr  | Metric \n-----------------------------------------------------\n C | 192.168.  4.  1 / 24 |   0.  0.  0.  0 |    1\n C |   3.  0.  0.  0 / 24 |   0.  0.  0.  0 |   16\n C | 172. 16.  9.  1 / 24 |   0.  0.  0.  0 |    1\n C | 172. 16.181.  1 / 24 |   0.  0.  0.  0 |    1\n C | 192.168.  3.  2 / 24 |   0.  0.  0.  0 |    1\n R | 192.168.  1.  0 / 24 | 192.168.  3.  1 |    2\n R | 192.168.198.  0 / 24 | 192.168.  3.  1 |    3\n R | 192.168. 10.  0 / 24 | 192.168.  3.  1 |    3\n-----------------------------------------------------\n--- 192.168.  1.  0/24 192.168.  3.  1\n--- 192.168.198.  0/24 192.168.  3.  1\n--- 192.168. 10.  0/24 192.168.  3.  1\nsend to 192.168.  4.  1 succeed! packet len: 124\nsend to 172. 16.  9.  1 succeed! packet len: 124\nsend to 172. 16.181.  1 succeed! packet len: 124\nsend to 192.168.  3.  2 succeed! packet len: 64\n--- 192.168.  1.  0/24 192.168.  3.  1\n--- 192.168.198.  0/24 192.168.  3.  1\n--- 192.168. 10.  0/24 192.168.  3.  1\nreceive len: 24\tcmd: 1\tver: 2\tfrom 192.168.4.2\nsend to 192.168.  4.  1 succeed! packet len: 144\n--- 192.168.  1.  0/24 192.168.  3.  1\n--- 192.168.198.  0/24 192.168.  3.  1\n--- 192.168. 10.  0/24 192.168.  3.  1\nget 192.168.  4.  1\tiface enp7s0\nget 172. 16.  9.  1\tiface vmnet1\nget 172. 16.181.  1\tiface vmnet8\nget 192.168.  3.  2\tiface enx000ec6aa5f42\n```\n\nFor exp4, just type `mv lookuproute_simple.cpp.bak lookuproute.cpp; make -j` and run `sudo ./main`.\n\n由于为了后续性能，把输出的部分给注释掉了。\n\n## Additional exp\n\n编译：直接 `make -j`\n\n就写了个哈希边表，每次从/32查到/1，看看有没有对应的路由表项\n\n可以理解为我开了32个数组，但是存的时候存得紧凑了点\n\n该算法代码位于 `lookuproute.cpp` 中，不到30行（后面常数优化了一波，循环展开，做到差不多和4位trie一样快了，代码翻了一倍）\n\n事实上是/32到/13存hash，/12到/1直接数组存下来\n\n如果要单独测试性能的话：\n\n```bash\nmv test.cpp.bak test.cpp\ng++ test.cpp lookuproute.cpp -oa -O2\n# insert 1000 and query 10^7\ntime ./a 10000000\n```\n\n本机i7-8750H差不多0.27s，找了个i7-7700HQ大概0.45s\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FTrinkle23897%2Frouter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FTrinkle23897%2Frouter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FTrinkle23897%2Frouter/lists"}