新闻详情

新闻详情

首页 / 资讯中心 / 详情

使用 cilium-dbg bpf srv6 sid 排查 Cilium SRv6 SID 映射表

发布时间:2026/9/12 9:14:39来源:尧图网络
使用 cilium-dbg bpf srv6 sid 排查 Cilium SRv6 SID 映射表
使用 cilium-dbg bpf srv6 sid 排查 Cilium SRv6 SID 映射表【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/ciliumcilium-dbg bpf srv6 sid是 Cilium 数据面排障工具cilium-dbg中用于直接查看内核 BPF 哈希表cilium_srv6_sid的命令该表记录着 SRv6Segment Routing over IPv6SIDSegment Identifier到 VRF ID 的映射关系。本文以 Documentation/cmdref/cilium-dbg_bpf_srv6_sid.md 为骨架结合仓库内命令实现cilium-dbg/cmd/bpf_srv6_sid.go、BPF map 定义pkg/maps/srv6map/sid.go、bpf/lib/srv6_maps.h及数据面查询逻辑bpf/lib/srv6.h完整讲解该命令的语法、输出格式、底层数据结构与数据面消费路径帮助你快速定位 SRv6 路由不生效的根因。命令定位SRv6 子命令家族中的一员cilium-dbg bpf srv6 sid是cilium-dbg bpf srv6命令族的三个叶子命令之一父命令srv6的职责是 Manage the SRv6 routing rules见 Documentation/cmdref/cilium-dbg_bpf_srv6.md其完整子命令树为cilium-dbg bpf srv6 policy— List SRv6 policy entries查看 SRv6 出向策略映射cilium-dbg bpf srv6 sid— List SRv6 SID entries查看本文主题SID→VRF ID 映射cilium-dbg bpf srv6 vrf— List SRv6 VRF mappings查看源地址/目的 CIDR 到 VRF ID 的映射在命令实现中srv6子命令由 cilium-dbg/cmd/bpf_srv6.go 中的BPFSRv6Cmd定义并挂载到BPFCmd即cilium-dbg bpf之下三个叶子命令分别对应三张不同的 BPF map。命令语法与全部选项根据官方 cmdref 文档命令用法如下cilium-dbg bpf srv6 sid [flags]专属选项选项说明-h, --help显示sid子命令的帮助信息-o, --output string指定输出格式取值范围为json、yaml、jsonpath{}--output选项由command.AddOutputOption(bpfSRv6SIDListCmd)注册见 cilium-dbg/cmd/bpf_srv6_sid.go执行时会走command.PrintOutput(bpfSIDList)路径将切片结构序列化为指定格式。继承自父命令的选项这些选项由cilium-dbg的根命令统一提供sid子命令同样适用选项说明--config string配置文件路径默认$HOME/.cilium.yaml-D, --debug启用调试消息输出-H, --host string服务端 API 的 URI--log-driver strings日志端点示例syslog--log-opt map日志驱动选项示例formatjson默认输出表格化的 SID 与 VRF ID 列表不带-o参数执行时命令将遍历 SID map 的全部条目并以 tabwriter 对齐的表格打印。表头固定为SID与VRF ID见 cilium-dbg/cmd/bpf_srv6_sid.go每个条目一行SID 以 IPv6 地址字符串形式展示VRF ID 以十进制无符号整数展示。示例输出SID VRF ID fd00::1 1 fd00::2 2当 map 中没有任何条目时命令向 stderr 输出No entries found.当 map 文件本身不存在例如节点未启用 SRv6时输出Cannot find SRv6 SID map并提前返回见 cilium-dbg/cmd/bpf_srv6_sid.go。机器可读输出JSON / YAML / jsonpath通过-o参数可以将结果导出为结构化格式便于与jq、yq或脚本管道配合做自动化巡检cilium-dbg bpf srv6 sid -o json cilium-dbg bpf srv6 sid -o yaml cilium-dbg bpf srv6 sid -o jsonpath{.items[*].SID}命令内部构造的条目结构体为见 cilium-dbg/cmd/bpf_srv6_sid.gotype srv6SID struct { SID string VRFID uint32 }因此 JSON 输出的每一条目形如{SID: fd00::1, VRFID: 1}。底层原理cilium_srv6_sidBPF 哈希表sid子命令读取的内核 map 名为cilium_srv6_sid其完整定义在 Go 侧 pkg/maps/srv6map/sid.go 与 BPF C 侧 bpf/lib/srv6_maps.h 中保持一致属性值说明map 名称cilium_srv6_sid按名称 pin 在 bpffs 上LIBBPF_PIN_BY_NAMEmap 类型BPF_MAP_TYPE_HASH普通哈希表keyunion v6addr128 位 IPv6 地址即 SID 本身value__u32对应的 VRF ID最大条目数SRV6_SID_MAP_SIZE 16384常量在 pkg/maps/srv6map/sid.go 与 bpf/node_config.h 中定义map flagsBPF_F_NO_PREALLOC \| BPF_F_RDONLY_PROG_COND不预分配内存条件性对 BPF 程序只读Go 侧的 key/value 类型分别为SIDKey{SID types.IPv6}与SIDValue{VRFID uint32}见 pkg/maps/srv6map/sid.goGo map 打开方式为OpenSIDMap(logger)同文件 pkg/maps/srv6map/sid.go该 map 仅在节点启用 SRv6DaemonConfig.EnableSRv6时创建并通过 Hive 生命周期钩子在OnStart时OpenOrCreate、OnStop时关闭见 pkg/maps/srv6map/sid.go。数据面如何消费这张表SID map 在数据面中的角色是解封装判定当内核收到一个内层协议为 IPIP/IPv6 或携带 SRH 的 IPv6 报文时数据面会以报文目的地址SID为 key 查询cilium_srv6_sid命中则说明本节点是该 SID 的终点应执行 SRv6 解封装并将流量送入对应 VRF。核心查询函数为 bpf/lib/srv6.h 中的srv6_lookup_sid()static __always_inline __u32 srv6_lookup_sid(const struct in6_addr *sid) { const __u32 *vrf_id; vrf_id map_lookup_elem(cilium_srv6_sid, sid); if (vrf_id) return *vrf_id; return 0; }可以看到map 的 valueVRF ID正是解封装后报文所属 VRF 的标识未命中时返回 0意味着该报文不会被当作 SRv6 终止处理。因此当你发现 SRv6 解封装没有按预期生效时第一步就是用cilium-dbg bpf srv6 sid确认目标 SID 是否已写入表中、其绑定的 VRF ID 是否符合预期。一张表三类子命令配合排障SRv6 数据面依赖三张 map 协作cilium_srv6_vrf_v4/v6LPM Trie源 IP目的 CIDR → VRF ID、cilium_srv6_policy_v4/v6LPM TrieVRF ID目的 CIDR → SID以及本文的cilium_srv6_sid哈希SID → VRF ID。完整的排查链路是用cilium-dbg bpf srv6 vrf确认入站报文能否映射到正确的 VRF用cilium-dbg bpf srv6 policy确认出向流量应封装的 SID再用cilium-dbg bpf srv6 sid确认该 SID 在对端节点是否已注册。三者定义分别见 pkg/maps/srv6map/vrf.go 与 pkg/maps/srv6map/policy.go。权限与运行环境要求命令在Run函数入口调用了common.RequireRootPrivilege(cilium bpf srv6 sid)见 cilium-dbg/cmd/bpf_srv6_sid.go因此必须以 root 权限或在支持非 root 读取 BPF map 的环境下具备相应能力执行。它读取的是本节点 bpffs 上 pin 的 map 文件属于对本地数据面的直接访问无需经由 API server。源码级验证测试用例仓库中的单元测试 pkg/maps/srv6map/sid_test.goTestPrivilegedSIDMapsHive验证了该 map 从创建到迭代的完整流程通过 Hive 注入newSIDMap断言SRV6_SID_MAP_SIZE宏被导出、map 文件存在于 bpffs、插入SIDfd00::1, VRFID1后能通过IterateWithCallback读回。数据面侧的集成测试 bpf/tests/tc_srv6_decap.c 则直接调用map_update_elem(cilium_srv6_sid, sid, vrf_id, 0)预置 SID 条目后验证解封装路径——这正对应了本命令所列举的条目类型。进一步阅读父命令参考cilium-dbg bpf srv6兄弟命令cilium-dbg bpf srv6 policy、cilium-dbg bpf srv6 vrf命令实现cilium-dbg/cmd/bpf_srv6_sid.goBPF map 定义bpf/lib/srv6_maps.h、pkg/maps/srv6map/sid.go数据面查询逻辑bpf/lib/srv6.h【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

开源Android加固:从黑盒工具到可验证构建流水线 2026/9/12 10:32:51

开源Android加固:从黑盒工具到可验证构建流水线

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Spring父子容器原理与Web应用分层架构实践 2026/9/12 10:32:51

Spring父子容器原理与Web应用分层架构实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
绝缘子污染图像分类:14400张标注数据集与PyTorch训练实战 2026/9/12 10:32:51

绝缘子污染图像分类:14400张标注数据集与PyTorch训练实战

简介:面向绝缘子污染物识别与图像分类任务,提供一套已标注的模拟图像数据集,覆盖灰尘、脏污、正常等四类场景,适合电力巡检、深度学习分类模型训练与算法验证。数据已按训练集、测试集划分,并配有可视化脚本&#xff0…

阅读更多 →
情人节乐园里的单一异常值:从数据画像到人的阅读理解 2026/9/12 10:32:51

情人节乐园里的单一异常值:从数据画像到人的阅读理解

情人节晚上九点十七分,乐园的灯光还亮着。城堡前的情侣摩肩接踵,但大多数人的行为模式像是同一个模板印出来的:女生举着发光的气球,男生举着手机,两人保持半臂距离,以几乎相同的速度朝烟花观景区移动。我那…

阅读更多 →
WeXPort怎么用?找月嫂育儿嫂用微信聊天记录导出做服务约定与留证 2026/9/12 10:32:51

WeXPort怎么用?找月嫂育儿嫂用微信聊天记录导出做服务约定与留证

一、一次真实的"说好的都管"翻了车 朋友小L通过微信找了一位月嫂,聊的时候对方爽快:"带孩子、做饭、家务都管。“可真到岗,双方对"带睡归不归月嫂”“一天做几顿饭”"周末算不算加班"理解完全不一样。更麻烦的…

阅读更多 →
DeepSeek Harness(DSH)入门:轻量级Agent开发实战指南 2026/9/12 10:29:50

DeepSeek Harness(DSH)入门:轻量级Agent开发实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞