# DUP_Router **Repository Path**: chen-yanjun_code/dup_router ## Basic Information - **Project Name**: DUP_Router - **Description**: 这是一个在 Containerlab/Docker 环境以 OS-Ken 的 BGP 实现为可编程软件路由器内核,改进BGP路由器从而实现的一个高效路由收敛系统:其中共实现R-BGP与DUP两个模块,此仓库为DUP模块的实现。通过消息分级的更新机制预期达到将收敛时延缩短 80%,降低无效更新开销的效果。 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-19 - **Last Updated**: 2025-09-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DUP_Router #### 介绍 这是一个在 Containerlab/Docker 环境以 OS-Ken 的 BGP 实现为可编程软件路由器内核,改进BGP路由器从而实现的一个高效路由收敛系统:其中共实现R-BGP与DUP两个模块,此仓库为DUP模块的实现。通过消息分级的更新机制预期达到将收敛时延缩短 80%,降低无效更新开销的效果。 # DUP_Router开发仓库 ## 📁 项目结构 ``` DUP_Router/ ├── README.md # 项目主文档 ├── docker/ # Docker构建和开发工具 │ ├── clab-dev.sh # 🔧 核心开发工具脚本 │ ├── Dockerfile # 基本osken镜像 │ ├── Dockerfile.zebra # 添加zebra支持的osken镜像 │ └── README.md # Docker详细使用说明 ├── os-ken/ # OS-Ken BGP源码 │ ├── os_ken/lib/packet/bgp.py # BGP协议实现 │ ├── os_ken/services/protocols/bgp/ # BGP服务 │ └── ... └── topo/ # ContainerLab网络拓扑 ├── p2p-v6/ # IPv6点对点拓扑 ├── multias-tcpdump-v6/ # 带抓包的IPv6多AS拓扑 ├── multias/ # 多AS互联拓扑 └── multias-tcpdump/ # 带抓包的多AS拓扑 ``` ## ⚡ 快速开始 ### 1. 克隆仓库 ```bash ``` ### 2. 初始化开发环境 ```bash # 构建基础镜像(首次使用,约5-10分钟) ./docker/clab-dev.sh init ``` ### 3. 启动第一个BGP拓扑 ```bash # 构建开发镜像 ./docker/clab-dev.sh build # 启动拓扑(选择想要的拓扑) ./docker/clab-dev.sh restart-clab ``` ### 4. 验证BGP连接 ```bash # 查看拓扑状态 ./docker/clab-dev.sh status # 进入BGP路由器查看邻居状态 docker exec -it clab-<拓扑名>-r1 bash ``` ## 🛠️ 开发工作流 ### 修改代码 → 构建 → 测试循环 ```bash # 1. 创建开发分支 cd os-ken git checkout -b dev/你的昵称 # 2. 修改BGP代码 # 比如 vim os_ken/services/protocols/bgp/peer.py # 3. 快速构建新镜像 ./docker/clab-dev.sh build # 4. 重启拓扑测试 ./docker/clab-dev.sh restart-clab # 5. 查看运行状态 ./docker/clab-dev.sh status ``` ### 开发工具详解 | 命令 | 功能 | 使用场景 | |------|------|----------| | `./docker/clab-dev.sh init` | 构建基础镜像 | 首次使用或依赖更新 | | `./docker/clab-dev.sh build` | 快速构建开发镜像 | 修改源码后 | | `./docker/clab-dev.sh restart-clab` | 重启拓扑 | 部署新代码 | | `./docker/clab-dev.sh stop-clab` | 关闭指定拓扑 | 释放资源 | | `./docker/clab-dev.sh stop-all` | 关闭所有拓扑 | 清理环境 | | `./docker/clab-dev.sh status` | 查看状态 | 监控和调试 | | `./docker/clab-dev.sh diagnose` | 诊断问题 | 故障排查 | ## 🔧 开发指南 ### 调试技巧 ```bash # 1. 查看BGP日志 docker logs clab-<拓扑名>-r1 # 2. 进入容器调试 docker exec -it clab-<拓扑名>-r1 bash # 3. 抓包分析 docker exec -it clab-<拓扑名>-r1 tcpdump -i eth1 -w bgp.pcap # 4. 诊断工具 ./docker/clab-dev.sh diagnose ``` ## 📊 性能优化 ### 构建时间优化 - **首次构建**: ~10分钟(完整环境) - **日常构建**: ~30秒(仅源码层) - **快速构建**: ~10秒(缓存命中) ### 内存使用 - **基础镜像**: ~200MB - **运行时**: ~100MB/容器 - **建议配置**: 4GB+ RAM ## 🚨 故障排查 ### 常见问题 1. **BGP连接失败** ```bash # 检查IPv6配置 ./docker/clab-dev.sh diagnose # 查看网络连通性 docker exec -it clab-xxx-r1 ping6 2001:db8::2 ``` 2. **镜像构建失败** ```bash # 清理缓存 ./docker/clab-dev.sh clean # 重新初始化 ./docker/clab-dev.sh init ``` 3. **拓扑启动失败** ```bash # 清理现有拓扑 ./docker/clab-dev.sh stop-all # 重新启动 ./docker/clab-dev.sh restart-clab ``` ## 📚 进阶使用 ### 自定义拓扑 1. 复制现有拓扑目录 2. 修改 `.clab.yaml` 配置 3. 调整 BGP 配置文件 4. 使用 `restart-clab` 部署 ### 分支管理 - `main`: 稳定主分支 - `dev/*`: 个人开发分支 - `feature/*`: 功能特性分支 - `bugfix/*`: 错误修复分支