项目简介
本项目是 2019 年网络原理课程实验采用的框架,使用 C/C++ 语言开发。其目的在于降低实验难度,将与底层打交道的部分抽象成通用接口,减少学习底层 API 的负担;实现代码复用,使程序可在不同平台运行;方便测试,提供文件读写 PCAP 的后端用于黑箱测试。实验最终目标是完成一个具备转发和路由功能的路由器。
项目的主要特性和功能
框架特性
- 硬件抽象层(HAL):隐藏底层细节,提供统一接口,支持 Linux、macOS、stdio、Xilinx 等多平台运行。
- 代码复用性:在一个平台编写的程序可直接用于其他平台。
- 便捷测试:提供文件读写 PCAP 的后端,支持黑盒测试,能在真机调试前解决诸多问题。
路由器功能
- 转发功能:收到 IP 包后查表确定下一棒,若目的地址直接可达则下一棒为目的地址,然后进行接力转发。
- 路由功能:通过 RIP 协议学习网络拓扑信息,用于转发以连通网络。
HAL 功能
提供 HAL_Init
、HAL_GetTicks
、HAL_ArpGetMacAddress
等函数,可实现软路由,Example
目录下有使用范例。
实验测试
Homework
目录下有多个题目,通过数据测试路由器核心功能,采用黑盒测试方法,使用评分脚本评测。
安装使用步骤
环境准备
若使用 Debian 系列发行版(包括 Ubuntu、Raspbian),执行以下命令安装依赖:
bash
sudo apt install git make cmake python3 python3-pip libpcap-dev libreadline-dev libncurses-dev wireshark tshark iproute2 g++
pip3 install pyshark
其他发行版使用类似的包管理器安装方法。
复制仓库
shell
cd Router-Lab
git submodule update --init --recursive
使用 HAL
CMake 方式
bash
mkdir build
cd build
cmake.. -DBACKEND=Linux
make router_hal # 编译 HAL 库,生成./HAL/librouter_hal.a
make capture # 编译 Example 中的 capture,生成./Example/capture
make # 编译 HAL 库和所有 Example
非 CMake 方式
将 router_hal.h
放到 Header Include Path 中,把对应后端的文件编译并链接进程序,同时在编译选项中写 -DROUTER_BACKEND_LINUX
(根据后端修改),可参考 Homework/checksum/Makefile
。
本地自测
以 checksum
题目为例,在 Homework/checksum
目录下执行:
bash
pip install pyshark # 仅第一次,一些平台下要用 pip3 install pyshark
make # 编译,得到可以执行的 checksum
./checksum < data/checksum_input1.pcap # 手动运行查看效果
make grade # 运行评分脚本
在线测试
选课同学需在 OJ 上提交代码,将修改的函数所在文件提交到对应题目。建议自行设计测试样例,减少真机调试困难。
实验验收
实验分为三部分:第一部分完成 Homework
下的题目并在 OJ 提交通过;第二部分个人测试,在树莓派上运行软件,检查多项功能;第三部分组队测试,检查连通性,复杂拓扑连通可加分。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】