lldpd开发指南:如何为开源链路层协议贡献代码
lldpd开发指南:如何为开源链路层协议贡献代码
【免费下载链接】lldpdimplementation of IEEE 802.1ab (LLDP)项目地址: https://gitcode.com/gh_mirrors/ll/lldpd
lldpd是一个实现IEEE 802.1ab(LLDP)协议的开源项目,它支持多种操作系统,包括FreeBSD、GNU/Linux、macOS等,能够实现链路层发现协议的接收和发送,并提供SNMP子代理等功能。本指南将详细介绍如何为lldpd项目贡献代码,帮助新手和普通用户快速参与到开源链路层协议的开发中。
一、准备开发环境
1.1 克隆代码仓库
首先,你需要克隆lldpd的代码仓库到本地。打开终端,执行以下命令:
git clone https://gitcode.com/gh_mirrors/ll/lldpd1.2 编译项目
克隆完成后,进入项目目录,按照以下步骤编译项目:
cd lldpd ./autogen.sh ./configure make sudo make install在编译过程中,lldpd使用特权分离来提高安全性,需要创建用户_lldpd和组_lldpd,以及目录/usr/local/var/run/lldpd(该目录需由root拥有)。
1.3 开发期间运行
在开发过程中,若不想执行make install,可以使用以下命令在当前位置执行lldpd:
sudo ./libtool execute src/daemon/lldpd -L $PWD/src/client/lldpcli -d你可以在命令后追加其他参数。如果lldpd无法找到lldpcli,它将以未配置模式启动,不会发送或接受LLDP帧。
二、编码规范
2.1 整体风格
贡献的代码应大致遵循OpenBSD风格。重要的是使用制表符,每个制表符宽度为8个字符,这能限制过度嵌套。尽量遵守80列的限制。
2.2 代码格式示例
函数的返回类型单独占一行,函数体的左花括号在单独的行上,右花括号也总是单独占一行,例如:
int main(int argc, char *argv[]) { /* [...] */ }三、提交补丁
3.1 提交修改
完成代码修改后,使用有意义的提交消息进行提交。提交消息应遵循以下规则:
- 第一行使用描述性内容。
- 第一行前加上修改的子系统名称(如
lldpd、lib、client)或更精确的内容。 - 不要害怕在提交消息中添加大量细节。
3.2 生成补丁
使用git format-patch生成要提交的补丁:
git format-patch origin/master你也可以使用git send-email直接通过电子邮件发送补丁,或者在代码托管平台上打开拉取请求。
四、测试
4.1 一般测试套件
项目提供了一般测试套件,使用以下命令运行:
make check4.2 集成测试
集成测试需要pytest,并依赖Linux容器执行。你可以在项目中找到相关的测试文件,如tests/integration/test_basic.py等。
4.3 代码覆盖率
要启用代码覆盖率,使用以下配置和命令:
../configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \ --enable-sanitizers --enable-gcov --with-snmp \ CFLAGS="-O0 -g" make make check # 可能还需要运行集成测试 lcov --base-directory $PWD/src/lib \ --directory src --capture --output-file gcov.info genhtml gcov.info --output-directory coverage五、代码结构
5.1 主要目录
src/daemon/:包含守护进程相关代码,如协议实现(src/daemon/protocols/lldp.c)、接口管理等。src/client/:客户端相关代码,如lldpcli的实现。src/lib/:库文件代码,如liblldpctl。
5.2 重要文件
- CONTRIBUTE.md:贡献指南,包含编码规范和提交补丁的说明。
- README.md:项目概述、安装和使用说明。
六、常见问题解决
6.1 编译兼容性
如果内核版本早于Linux 4.0,需要使用--enable-oldies编译lldpd以启用一些兼容性函数:
./configure --enable-oldies6.2 网络接口问题
某些网络接口可能会影响LLDP数据包的接收和发送,如Intel X710网卡可能会自行处理LLDP。若使用tcpdump看不到数据包,可以尝试停止嵌入式LLDP守护进程。在Linux上:
for f in /sys/kernel/debug/i40e/*/command; do echo lldp stop > $f done在FreeBSD上:
for oid in $(sysctl -Nq dev.ixl | grep fw_lldp); do sysctl $oid=0 done七、总结
通过本文的指南,你可以了解如何准备lldpd的开发环境、遵循编码规范、提交补丁、进行测试以及解决常见问题。希望这些内容能帮助你顺利为lldpd项目贡献代码,推动开源链路层协议的发展。如果你在开发过程中遇到其他问题,可以查阅项目的官方文档或在社区中寻求帮助。
【免费下载链接】lldpdimplementation of IEEE 802.1ab (LLDP)项目地址: https://gitcode.com/gh_mirrors/ll/lldpd
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考