概览
源码目录结构
- bpf: eBPF 内核态程序源码,处理收发包路径相关 C 代码(该目录下执行 make gen_compile_commands 可生成 clangd 索引代码时需要的
compile_commands.json,需在 linux 环境下执行,且依赖 llvm、clang、bear 等工具)。 - daemon: cilium-agent 相关代码,cilium 的数据面。
- operator: cilium-operator 相关代码,cilium-agent 的控制面。
- cilium-cli: cilium-cli 命令行工具相关代码。
- cilium-dbg: cilium-dbg 调试工具相关代码。
- clustermesh-apiserver: clustermesh-apiserver 相关代码,ServiceMesh 能力的控制面。
- plugins: 容器网络插件,主要是 cilium-cni 插件。
- pkg: 项目依赖的各种包,可被多个组件共享。
阅读 C 语言 eBPF 源码
生成 compile_commands.json
cilium 的 bpf 目录中 Makefile 提供了 gen_compile_commands 指令,用于生成 compile_commands.json 文件,该文件用于 clangd LSP 索引 C 语言 eBPF 程序:
cd bpf
make gen_compile_commands
说明
安装的 llvm 版本需要与 cilium llvm 基础镜像 中的 llvm 版本一致,否则可能出现报错的情况。
笔者当前分析的 cilium 最新版本是 1.18.2,llvm 基础镜像中的 llvm 版本是 19.x,而通过 brew 安装的 llvm 最新版本是 20.x,所以通过 brew 安装 llvm 时需指定下版本:
brew install llvm@19
# 如果已经有 20.x 的 llvm 安装,通过一下方式 llvm 的软链接指向 19.x 的版本
# brew unlink llvm
# brew link llvm@19
然后在基于 clangd 作为 C/C++ 语言 LSP 的 IED/编辑器中就可以愉快的阅读 eBPF 程序代码了:
