sonic交换机之端口点灯

sai有两中点灯方案:

a)sonic点灯,sonic配置/sys/class/leds/port52/brightness文件,sai起线程A(_ctc_sai_macled_polling_thread)扫描brightness文件,根据文件内容配置点灯模式,需要sonic参与

b)sai点灯,sai起一个线程B(_ctc_sai_macled_monitor_speed_polling_thread)读取flex_macled.cfg中端口的原始speed,和端口当前speed,如果没降速按board.json中的默认方式点灯("mode" : "LED_MODE_2_OFF_RXLNKBIACT"),如果降速按照board.json配置的("slow_speed_led_mode" : "LED_MODE_2_RXLNKBIACT_OFF",)方式点灯,sonic不用参与
端口LED点灯流程完整分析报告

端口点灯:

sonic方式 :

硬件 → SAI → Syncd → Orchagent → APPL_DB → Ledd → led_control.py → sysfs → LED 硬件

sai 方式 :

硬件 → SAI 内部监控线程 → SAI 直接控制硬件 LED 寄存器 → LED 硬件

------------------- ↑

------------不经过 SONiC ledd

1. 整体架构层次

应用层API

CTC Core层

SYS通用层 → 芯片特定实现

驱动层(Driver)

硬件寄存器

2. 主要API接口

文件: sdk/core/common/include/ctc_chip.h

核心数据结构 :

🟠ctc_chip_led_para_t : LED参数配置

port_id : 端口ID或MAC ID

lport_en : 是否使用lport作为key

ctl_id : LED控制器ID (0-1)

first_mode : 主LED模式

sec_mode : 次LED模式

polarity : 极性配置

op_flag : 操作标志

🟠ctc_chip_led_mode_t : LED工作模式(15种)

链路指示:

CTC_CHIP_RXLINK_MODE,

CTC_CHIP_TXLINK_MODE

活动指示:

CTC_CHIP_RXACTIVITY_MODE,

CTC_CHIP_TXACTIVITY_MODE

链路+活动:

CTC_CHIP_RXLINK_RXACTIVITY_MODE

强制模式:

CTC_CHIP_FORCE_ON_MODE,

CTC_CHIP_FORCE_OFF_MODE

🟠ctc_chip_mac_led_mapping_t : MAC到LED的映射关系

3. 主要API函数

c 复制代码
// 设置MAC LED模式
ctc_at_chip_set_mac_led_mode(lchip, p_led_para, led_type)

// 设置MAC LED映射
ctc_at_chip_set_mac_led_mapping(lchip, p_led_map)

// 设置MAC LED使能
ctc_at_chip_set_mac_led_en(lchip, enable)

4. LED配置流程详解

c 复制代码
用户调用API
    ↓
【步骤1】参数验证和预处理
    - 检查指针有效性
    - 检查芯片特性支持
    - lchip ID映射转换
    ↓
【步骤2】调用SYS层接口
    - sys_usw_peri_set_mac_led_mode()
    ↓
【步骤3】芯片特定实现
    - sys_tsingma_peri_set_mac_led_mode() [Tsingma芯片]
    - sys_at_peri_set_mac_led_mode() [Arctic芯片]
    ↓
【步骤4】模式转换
    _sys_tsingma_peri_get_mac_led_mode_cfg()
    - CTC LED模式 → 硬件寄存器值
    - 例如: RXLINK_MODE → (SYS_CHIP_LED_ON_RX_LINK | SYS_CHIP_LED_BLINK_OFF)
    ↓
【步骤5】配置硬件寄存器
    - LedCfgPortMode: LED模式
    - LedPolarityCfg: LED极性
    - LedCfgPortSeqMap: MAC-LED映射
    ↓
【步骤6】LED时钟配置
    - LedHiCwgDskCfg: 一级分频器
    - LedCwgDskCfg: 二级分频器
    ↓
【步骤7】硬件生效
    - 硬件自动根据链路状态点亮LED
    - 硬件自动监测收发包触发闪烁

5. 关键寄存器说明

LED模式寄存器 (LedCfgPortMode):

primaryLedMode[1:0]: 主LED状态

secondaryLedMode[3:2]: 次LED状态

secondaryLedModeEn[4]: 次LED使能

LED状态值:

0: 强制熄灭

1: RX链路UP时点亮

2: TX链路UP时点亮

3: 强制常亮

LED闪烁模式:

0: 不闪烁

1: RX活动时闪烁

2: TX活动时闪烁

3: 常闪烁

LED时钟寄存器:

LedHiCwgDskCfg.cfgClkLedHiDivide: 一级分频(最大32倍)

LedCwgDskCfg.cfgClkLedDivide: 二级分频(最大32倍)

可实现1KHz ~ 1.35GHz的时钟配置

6. 配置示例

示例1: 配置端口0为RX链路+活动模式

c 复制代码
ctc_chip_led_para_t led_para;
sal_memset(&led_para, 0, sizeof(led_para));

led_para.lchip = 0;           // 芯片ID
led_para.port_id = 0;         // 端口ID
led_para.lport_en = 1;        // 使用lport
led_para.ctl_id = 0;         // LED控制器0
led_para.first_mode = CTC_CHIP_RXLINK_RXACTIVITY_MODE;

ctc_at_chip_set_mac_led_mode(0, &led_para, CTC_CHIP_USING_ONE_LED);

示例2: 配置双LED模式

c 复制代码
ctc_chip_led_para_t led_para;
sal_memset(&led_para, 0, sizeof(led_para));

led_para.lchip = 0;
led_para.port_id = 0;
led_para.lport_en = 1;
led_para.ctl_id = 0;
led_para.first_mode = CTC_CHIP_RXLINK_RXACTIVITY_MODE; // LED0
led_para.sec_mode = CTC_CHIP_TXACTIVITY_MODE;       // LED1

ctc_at_chip_set_mac_led_mode(0, &led_para, CTC_CHIP_USING_TWO_LED);

7. 关键文件路径汇总

层级 文件路径(说明)
应用层 sdk/core/common/include/ctc_chip.h (API定义和数据结构)
CTC Core层 sdk/core/usw/src/ctc_at/ctc_at_chip.c (CTC Core实现)
SYS通用层 sdk/core/usw/src/sys/sys_usw_peri.c (通用SYS实现)
Tsingma芯片 sdk/core/usw/src/sys/tsingma/sys_tsingma_peri.c (Tsingma特定实现)
Arctic芯片 sdk/core/usw/src/sys/arctic/sys_at_peri.c (Arctic特定实现)
MAC层 sdk/core/usw/src/sys/sys_usw_mac.c (MAC相关配置)
驱动层 sdk/driver/usw/include/drv_ds.h (寄存器定义)

8. 特点总结

分层架构: 应用层→CTC Core→SYS→驱动层→硬件,层次清晰

模块化设计: 不同芯片系列有独立实现

灵活配置: 支持15种LED工作模式,可自由组合

硬件加速: 闪烁由硬件自动控制,降低CPU开销

动态映射: MAC到LED的映射可动态配置

精确控制: 支持时钟分频,实现精确闪烁频率

相关推荐
haosend6 天前
通俗易懂深入浅出OSPF-LSA类型讲解
路由器·交换机·数据网络·华三模拟器
haosend10 天前
传输网络概述:从PTN到SPN
路由器·交换机·spn·光传输·ptn
久绊A11 天前
H3C 交换机用户密码修改与策略管理指南
服务器·交换机·h3c
haosend15 天前
数据网络小知识-VLAN基础及延伸技术简介
路由器·vlan·交换机·数据网络
haosend17 天前
IP计算不求人,掩码,反掩码,通配符一次学会
路由器·交换机·数据网络
haosend23 天前
计算机基础百科-彻底搞懂子网掩码(Subnet Mask)与CIDR的地址掩码(Address Mask):从困惑到清晰
路由器·交换机·数据网络
haosend1 个月前
【练习版】使用paramiko批量的查询,管理,配置路由器交换机
python·路由器·交换机·网络自动化
haosend1 个月前
极简小白Python教程-实现能基本看懂和简单编写代码
python·路由器·交换机·网络自动化
希赛网1 个月前
2026华为认证数通HCIA备考知识:生成树协议的原理、选举过程与配置要点
服务器·网络·stp·交换机·2026华为认证数通考试·stp生成树的概念·stp常用配置