SONiC 端口交互

端口初始化

如下图所示,展示了公开系统中对生成或使用端口相关信息感兴趣的多个组件:

image.png

  • 建立连接,声明角色:初始化期间,portsyncd与redis引擎中的主数据库建立通信通道。Portsyncd声明它打算充当APPL_DB和STATE_DB的发布者,以及CONFIG_DB的订户。同样,portsyncd还订阅负责承载端口/链路状态信息的系统netlink通道。
  • 解析配置:Portsyncd首先解析与系统中使用的硬件配置文件/sku关联的端口配置文件(port_config.ini)(有关更多详细信息,请参阅配置部分)。与端口相关的信息,如通道、接口名称、接口别名、速度等,通过该通道传输到APPL_DB。
  • 转换到ASIC_DB:Orchagent听到所有这些新状态,但将推迟对其进行操作,直到portsyncd通知它已完全完成对port_config.ini信息的解析。一旦发生这种情况,orchagent将继续初始化硬件/内核中相应的端口接口。Orchagent调用sairedis API,通过常用的ASIC_DB接口将此请求传递给syncd
  • 创建端口:Syncd通过ASIC_DB接收此新请求,并准备调用满足Orchagent请求所需的SAI API。Syncd使用SAI API+ASIC SDK创建与正在初始化的物理端口相关联的内核主机接口。
  • 更新状态:上一步生成netlink消息,被portsyncd接收,并与先前从port_config.ini(步骤1)解析的所有端口进行对比,若都完成,则声明“初始化”过程已完成。portsyncd 将写入一个条目到 STATE_DB 中,表示端口初始化完成。
  • 依赖使用:从现在起,以前订阅STATE_DB content的应用程序将收到一个通知,允许这些应用程序开始使用它们所依赖的端口。换句话说,如果在STATE_DB中找不到特定端口的有效条目,则任何应用程序都无法使用它。

端口状态变化

image.png

  • 当端口状态发生变化时,驱动通过syncd注册的函数通知syncd
  • syncd调用通知函数发送事件给 ASIC_DB
  • Orchagent 通过notification 线程监听ASIC_DB事件,执行端口状态变化函数:1)产生APPL_DB更新消息,通知上层应用;2)调用sairedis API以提醒syncd需要更新与所选端口的主机接口关联的内核状态,orchagent再次通过常用的ASIC_DB接口将此请求传递给syncd
  • Syncd使用SAI API+ASIC SDK将受影响主机接口状态(关闭)更新;
  • portsyncd接收到与上一步相关的netlink消息,由于所有SONiC组件现在都完全知道端口关闭事件,因此该消息将被悄悄丢弃。

nfvschool 微信公共号: nfvschool
nfvschool网址: nfvschool.cn

Was this helpful?

0 / 0

发表回复 0