Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Trinkle23897/router
造路由器 (清华大学 网络原理课程 2018-2019秋)
https://github.com/Trinkle23897/router
linux rip router socket
Last synced: about 2 months ago
JSON representation
造路由器 (清华大学 网络原理课程 2018-2019秋)
- Host: GitHub
- URL: https://github.com/Trinkle23897/router
- Owner: Trinkle23897
- License: mit
- Created: 2018-11-08T12:55:33.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2019-01-07T02:40:04.000Z (over 5 years ago)
- Last Synced: 2024-06-15T10:33:55.502Z (3 months ago)
- Topics: linux, rip, router, socket
- Language: C++
- Homepage:
- Size: 74.2 KB
- Stars: 73
- Watchers: 4
- Forks: 21
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# router
For exp3, use the following command to generate rip executable file:
```bash
g++ rip.cpp -orip -O2 -lpthread -DRIP_MAIN# RUN:
./rip
```The rip output log may seem like this:
```
get 192.168. 4. 1 iface enp7s0
get 172. 16. 9. 1 iface vmnet1
get 172. 16.181. 1 iface vmnet8
get 192.168. 3. 2 iface enx000ec6aa5f42
-----------------------------------------------------
| Network | Nexthop Addr | Metric
-----------------------------------------------------
C | 192.168. 4. 1 / 24 | 0. 0. 0. 0 | 1
C | 3. 0. 0. 0 / 24 | 0. 0. 0. 0 | 16
C | 172. 16. 9. 1 / 24 | 0. 0. 0. 0 | 1
C | 172. 16.181. 1 / 24 | 0. 0. 0. 0 | 1
C | 192.168. 3. 2 / 24 | 0. 0. 0. 0 | 1
-----------------------------------------------------
send to 192.168. 4. 1 succeed! packet len: 64
send to 172. 16. 9. 1 succeed! packet len: 64
send to 172. 16.181. 1 succeed! packet len: 64
send to 192.168. 3. 2 succeed! packet len: 64
receive len: 64 cmd: 2 ver: 2 from 192.168.3.1
get 192.168. 4. 1 iface enp7s0
get 172. 16. 9. 1 iface vmnet1
get 172. 16.181. 1 iface vmnet8
get 192.168. 3. 2 iface enx000ec6aa5f42
-----------------------------------------------------
| Network | Nexthop Addr | Metric
-----------------------------------------------------
C | 192.168. 4. 1 / 24 | 0. 0. 0. 0 | 1
C | 3. 0. 0. 0 / 24 | 0. 0. 0. 0 | 16
C | 172. 16. 9. 1 / 24 | 0. 0. 0. 0 | 1
C | 172. 16.181. 1 / 24 | 0. 0. 0. 0 | 1
C | 192.168. 3. 2 / 24 | 0. 0. 0. 0 | 1
R | 192.168. 1. 0 / 24 | 192.168. 3. 1 | 2
R | 192.168.198. 0 / 24 | 192.168. 3. 1 | 3
R | 192.168. 10. 0 / 24 | 192.168. 3. 1 | 3
-----------------------------------------------------
--- 192.168. 1. 0/24 192.168. 3. 1
--- 192.168.198. 0/24 192.168. 3. 1
--- 192.168. 10. 0/24 192.168. 3. 1
send to 192.168. 4. 1 succeed! packet len: 124
send to 172. 16. 9. 1 succeed! packet len: 124
send to 172. 16.181. 1 succeed! packet len: 124
send to 192.168. 3. 2 succeed! packet len: 64
--- 192.168. 1. 0/24 192.168. 3. 1
--- 192.168.198. 0/24 192.168. 3. 1
--- 192.168. 10. 0/24 192.168. 3. 1
receive len: 24 cmd: 1 ver: 2 from 192.168.4.2
send to 192.168. 4. 1 succeed! packet len: 144
--- 192.168. 1. 0/24 192.168. 3. 1
--- 192.168.198. 0/24 192.168. 3. 1
--- 192.168. 10. 0/24 192.168. 3. 1
get 192.168. 4. 1 iface enp7s0
get 172. 16. 9. 1 iface vmnet1
get 172. 16.181. 1 iface vmnet8
get 192.168. 3. 2 iface enx000ec6aa5f42
```For exp4, just type `mv lookuproute_simple.cpp.bak lookuproute.cpp; make -j` and run `sudo ./main`.
由于为了后续性能,把输出的部分给注释掉了。
## Additional exp
编译:直接 `make -j`
就写了个哈希边表,每次从/32查到/1,看看有没有对应的路由表项
可以理解为我开了32个数组,但是存的时候存得紧凑了点
该算法代码位于 `lookuproute.cpp` 中,不到30行(后面常数优化了一波,循环展开,做到差不多和4位trie一样快了,代码翻了一倍)
事实上是/32到/13存hash,/12到/1直接数组存下来
如果要单独测试性能的话:
```bash
mv test.cpp.bak test.cpp
g++ test.cpp lookuproute.cpp -oa -O2
# insert 1000 and query 10^7
time ./a 10000000
```本机i7-8750H差不多0.27s,找了个i7-7700HQ大概0.45s