20级信息类-6系 大三下计算机网络实验 提高层次实验——OSPF协议实现(基于Linux内核)
笑死,原本想写成守护进程的所以取名后有一个d;但最终并没有,不过鉴于尾缀d有种平衡的美感,就不改删了
doc
:文档,包含一些实现时的注意事项src
:实现代码
main.cpp # 主函数,开关程序以及相应线程,初始化
setting.cpp/.h # OSPF配置 + 全局通用变量/常量
common.h # 通用头文件汇总,供.cpp直接引用,根据规约不在.h中引用
----------------
ospf_packet.cpp/.h # 定义OSPF报文和LSA数据结构
interface.cpp/.h # 定义OSPF协议中接口数据结构
neighbor.cpp/.h # 定义OSPF协议中邻居数据结构
lsdb.cpp/.h # 定义OSPF协议中连接状态数据库结构
----------------
package_manage.cpp/.h # 负责处理报文收发逻辑
lsa_manage.cpp/.h # 负责处理LSA的生成
routing.cpp/.h # 负责路由计算,内核路由表更新与重置(提供route_manager)
----------------
retransmitter.cpp/.h # 重传工具
try
:一些功能技术小试验
根目录 make
编译,然后sudo ./my_ospf
执行 (啊目前还没写检测环境+动态配置,所以不手动调整setting.cpp/.h
的话只能在我自己的虚拟机上跑doge);输入 exit
退出程序
**精简控制台输出:**去除 setting.h
的 #define DEBUG
调试环境中g++用的标准是C++14,但估计顶多用到C++11的功能为止
**仿真验证环境搭建:**华为ensp接入VMWare。在ensp搭建网络拓扑结构,然后连入VMWare的NAT虚拟网络适配器(VMware Network Adapter VMnet8
);同时配置虚拟机网络连接为NAT模式。(参考链接:Ensp接入VMWare,其中端口映射的类型若为E,然后使用ensp路由器GE接口连接,似乎也没问题;不过感觉设置为一样最好)
- RFC 2328:有种规范的美感
- 《OSPF完全实现》及其源码:比较复杂完整,没有太多精力借鉴。源码分享,提取码:dz89
- pcyin/OSPF_Router:感恩,对照着写的(但读了遍有好多bug,感觉跑不起来的样子)