searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

SONiC端口状态交互流程详解

2024-04-18 01:12:53
63
0

       与传统商业交换机相比,SONiC采用容器技术、redis数据库技术、并抽像出SAI的概念做到软硬件解耦,南向可以兼容各厂商ASIC,北向适配统一的SONIC软件系统。SAI是SONiC的核心,并为SONiC提供了统一的API。设备厂家、网络开发者可以基于芯片厂家提供的SAI接口开发应用,而不需要关心底层硬件实现,加速产品迭代与创新。在数据库架构方面,SONiC使用数据库架构代替原有的模块化耦合架构,将应用模块之间的传递数据模式变成应用模块之间通过数据库进行数据交换的模式,从关注流程转变为关注数据,实现了功能模块之间的解耦。数据库成为了所有模块的枢纽,模块与模块之间解耦,数据库是稳定的,各个模块升级与故障不会影响其他模块,在整个切换过程中转发面不受到影响。容器化使得SONiC具有极高的可扩展性,网络运营管理人员能够快速引入第三方、专有或开源组件,而不对原有业务造成影响。本文主要介绍基于容器技术、数据库技术及SAI的端口状态交互流程,SONiC端口状态交互分为端口初始化以及端口状态变化两部分,以下将对这两个部分做详细说明。

端口初始化

(0) 初始化阶段,portsyncd构建与redis-engine的主要databases间的通信通道。Portsyncd 是 APPL_DB 和 STATE_DB 的发布者,是 CONFIG_DB 的订阅者。同样的,portsyncd 也订阅了系统的netlink 通道来传输 port/link-state信息。

(1) Portsyncd 通过解析端口配置文件(port_config.ini) 和被系统正在使用的hardware-profile/sku 开始启动。端口相关信息例如lanes, interface name, interface alias, speed等等,都通过此通道到达APPL_DB。

(2) Orchagent 监听所有的新状态,但是会延迟操作直到portsyncd 通知已经完全解析完port_config.ini。一旦解析结束,orchagent将继续进行硬件/内核中相应端口接口的初始化。Orchagent调用sairedis APIs 发送请求到syncd 通过常规ASIC-DB接口。

(3) Syncd 通过 ASIC_DB 接收到请求,准备调用 SAI APIs 来满足 Orchagent’s 请求。

(4) Syncd利用SAI APIs + ASIC SDK 创建与正在初始化物理端口相关的内核 host-interfaces 。

(5) 上一步将生成 netlink 信息,会被portsyncd接收。 与先前从port_config.ini解析的所有端口相关的消息到达portsyncd后,portsyncd 会继续声明已完成初始化步骤。

(6) 作为上一步的一部分,portsyncd记录 record-entry到STATE_DB,对应于每个成功初始化的端口。

(7) 此时起,应用之前订阅的STATE_DB 内容会接收到一个通知,允许他们开始利用他们需要的端口。换句话说,如果没有在STATE_DB 中发现某个端口的有效的entry,没有应用可以使用他们。

端口状态变化

(0) 和之前提到的一样,syncd既作为ASIC_DB的发布者也是订阅者。订阅模式被syncd评判来获取北向绑定的应用状态,例如所有模块交互的例子。发布模式被需要允许syncd通知高层次组件硬件衍生事件的到达。

(1) 通过ASIC对应光学模块,一点检测到有loss-of-carrier,一个通知就被发送到相关驱动,最终传输到syncd。

(2) Syncd 调用合适的通知处理机制发送port-down事件给ASIC_DB。

(3) Orchagent 利用通知线程(专门用于此任务)来收集ASIC_DB的新状态,并且执行 ‘port-state-change’ ,即:

  • 生成APPL_DB的更新来警告依赖此状态的操作(例如,CLI – "show interface)
  • 调用 sairedis APIs 来警告syncd需要更新与端口的主机接口相关的内核状态,orchagent 传输这个需求到syncd通过常规ASIC_DB接口。

(4) Syncd 接收来自ASIC_DB的请求准备调用SAI APIs 来满足此请求。

(5) Syncd 利用 SAI APIs + ASIC SDK 来用受影响的主机接口的最新操作状态(DOWN)。

(6) portsyncd获得一个与上述步骤相关的netlink消息,由于所有SONiC组件现在都已完全意识到port-down事件,因此该消息被丢弃。

 

       通过对SONiC端口状态交互流程可以学习到SONiC的交互机制,其中涉及到与内核的通信机制,数据库的订阅及发布,应用层容器与syncd及ASIC的交互流程。同时端口状态的交互也是协议交互及路由交互的基础。

0条评论
作者已关闭评论
石****露
3文章数
0粉丝数
石****露
3 文章 | 0 粉丝
石****露
3文章数
0粉丝数
石****露
3 文章 | 0 粉丝
原创

SONiC端口状态交互流程详解

2024-04-18 01:12:53
63
0

       与传统商业交换机相比,SONiC采用容器技术、redis数据库技术、并抽像出SAI的概念做到软硬件解耦,南向可以兼容各厂商ASIC,北向适配统一的SONIC软件系统。SAI是SONiC的核心,并为SONiC提供了统一的API。设备厂家、网络开发者可以基于芯片厂家提供的SAI接口开发应用,而不需要关心底层硬件实现,加速产品迭代与创新。在数据库架构方面,SONiC使用数据库架构代替原有的模块化耦合架构,将应用模块之间的传递数据模式变成应用模块之间通过数据库进行数据交换的模式,从关注流程转变为关注数据,实现了功能模块之间的解耦。数据库成为了所有模块的枢纽,模块与模块之间解耦,数据库是稳定的,各个模块升级与故障不会影响其他模块,在整个切换过程中转发面不受到影响。容器化使得SONiC具有极高的可扩展性,网络运营管理人员能够快速引入第三方、专有或开源组件,而不对原有业务造成影响。本文主要介绍基于容器技术、数据库技术及SAI的端口状态交互流程,SONiC端口状态交互分为端口初始化以及端口状态变化两部分,以下将对这两个部分做详细说明。

端口初始化

(0) 初始化阶段,portsyncd构建与redis-engine的主要databases间的通信通道。Portsyncd 是 APPL_DB 和 STATE_DB 的发布者,是 CONFIG_DB 的订阅者。同样的,portsyncd 也订阅了系统的netlink 通道来传输 port/link-state信息。

(1) Portsyncd 通过解析端口配置文件(port_config.ini) 和被系统正在使用的hardware-profile/sku 开始启动。端口相关信息例如lanes, interface name, interface alias, speed等等,都通过此通道到达APPL_DB。

(2) Orchagent 监听所有的新状态,但是会延迟操作直到portsyncd 通知已经完全解析完port_config.ini。一旦解析结束,orchagent将继续进行硬件/内核中相应端口接口的初始化。Orchagent调用sairedis APIs 发送请求到syncd 通过常规ASIC-DB接口。

(3) Syncd 通过 ASIC_DB 接收到请求,准备调用 SAI APIs 来满足 Orchagent’s 请求。

(4) Syncd利用SAI APIs + ASIC SDK 创建与正在初始化物理端口相关的内核 host-interfaces 。

(5) 上一步将生成 netlink 信息,会被portsyncd接收。 与先前从port_config.ini解析的所有端口相关的消息到达portsyncd后,portsyncd 会继续声明已完成初始化步骤。

(6) 作为上一步的一部分,portsyncd记录 record-entry到STATE_DB,对应于每个成功初始化的端口。

(7) 此时起,应用之前订阅的STATE_DB 内容会接收到一个通知,允许他们开始利用他们需要的端口。换句话说,如果没有在STATE_DB 中发现某个端口的有效的entry,没有应用可以使用他们。

端口状态变化

(0) 和之前提到的一样,syncd既作为ASIC_DB的发布者也是订阅者。订阅模式被syncd评判来获取北向绑定的应用状态,例如所有模块交互的例子。发布模式被需要允许syncd通知高层次组件硬件衍生事件的到达。

(1) 通过ASIC对应光学模块,一点检测到有loss-of-carrier,一个通知就被发送到相关驱动,最终传输到syncd。

(2) Syncd 调用合适的通知处理机制发送port-down事件给ASIC_DB。

(3) Orchagent 利用通知线程(专门用于此任务)来收集ASIC_DB的新状态,并且执行 ‘port-state-change’ ,即:

  • 生成APPL_DB的更新来警告依赖此状态的操作(例如,CLI – "show interface)
  • 调用 sairedis APIs 来警告syncd需要更新与端口的主机接口相关的内核状态,orchagent 传输这个需求到syncd通过常规ASIC_DB接口。

(4) Syncd 接收来自ASIC_DB的请求准备调用SAI APIs 来满足此请求。

(5) Syncd 利用 SAI APIs + ASIC SDK 来用受影响的主机接口的最新操作状态(DOWN)。

(6) portsyncd获得一个与上述步骤相关的netlink消息,由于所有SONiC组件现在都已完全意识到port-down事件,因此该消息被丢弃。

 

       通过对SONiC端口状态交互流程可以学习到SONiC的交互机制,其中涉及到与内核的通信机制,数据库的订阅及发布,应用层容器与syncd及ASIC的交互流程。同时端口状态的交互也是协议交互及路由交互的基础。

文章来自个人专栏
SONIC白盒交换机
3 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0