SONiC架构DOCKER组件交互分析

BGP组件交互分析

在这里插入图片描述

  1. 内核中的bgp socket收到BGP更新报文,然后被上送到bgpd进程
  2. bgpd处理该报文,并通知zebra进程新增前缀和关联下一跳
  3. zebra确定该目的可达后,生成一个路由网络链接信息,并将该信息信息注入到内核中
  4. zebra进程通过fpm的接口将该该路由网络链接信息传递给fpmsyncd进程
  5. fpmsyncd将此状态推送到APPL_DB中
  6. orchagent订阅了(5)当中的message
  7. orchagent处理收到的信息,并调用sairedis APIs将新状态注入到ASIC_DB中
  8. syncd订阅orchagent生成的消息,并生成新的状态
  9. syncd调用SAI API将此状态注入到ASIC驱动的对应的状态
  10. 新的路由被写入硬件中,并进行转发
  11. bgpcfgd阅CONFIG_DB变化,通过vtysh下发配置到zebra/bgp等
     

DHCP_RELAY组件交互分析

在这里插入图片描述

  1. 设备起机后,dhcp_relay进程通过直接解析config_db.json里面相关的dhcp_relay的配置,然后Dhcp-relay docker里相关的配置文件/etc/supervisor/conf.d/docker-dhcp-relay.supervisord.conf
  2. /usr/bin/dhcp_relay.sh wait通过监听数据库里的接口状态,并动态获取接口的IP地址
  3. 当硬件收到一个dhcp报文(当报文是单播且单播地址非本地IP地址,则直接硬件转发,如果报文是广播或者且单播地址为本地IP,则上送到CPU),根据协议上送到CPU,CPU在根据对应的过滤规则,发送到内核空间对应的socker套接字,dhcp_relay进程从内核空间的dhcp的套件字获取到dhcp的数据包,并解析该数据包,是否转发或者丢弃
  4. dhcp_relay进程处理完数据包后,发到内核空间,由内核转发给硬件进行转发

host系统组件交互分析

在这里插入图片描述

LLDP组件交互分析

在这里插入图片描述

  1. lldpmgrd订阅数据库中STATE_DB获取端口的实时状态,并同步给lldpd
  2. lldpd进程从内核空间的lldp的套件字获取到lldp的数据包,并解析此状态,lldp_syncd通过执行lldp cli命令获取到该状态
  3. lldp_syncd将该新状态发布到database中的APPL_DB
  4. SNMP使用订阅方式获取到该message的变动并进行处理

PMON组件交互分析

在这里插入图片描述

PMON doncker软件组件主要用于管理平台硬件,包括风扇,热传感器,SFP,收发器,pmon等,其交互流程主要如下:

  1. syseepromd进程从内核空间的syseepromd的套件字获取到数据包,并解析此状态,xcvrd/sysmonitor/pmon_syslog通过syseepromd提供的接口进行信息获取
  2. xcvrd/sysmonitor/pmon_syslog通过syseepromd将该新状态发布到database中的STATE_DB
  3. SNMP使用订阅方式获取到该message的变动并进行处理

redis-server与client交互分析

在这里插入图片描述

SNMP组件交互分析

在这里插入图片描述

0、Config Manager从CLI / Rest接受配置请求,或者从Minigraph检索设备上的LAG和IP over LAG数据,然后将对象更新到ConfigDB中
1、teammgrd订阅ConfigDB的LAG对应的KEY值(PORTCHANNEL,PORTCHANNEL_MEMBER),经过teammgrd、teamdsyncd处理,将状态更新到APPL_DB,
对于相应的ConfigDB表中的任何更改,teammgrd/teamdsyncd将针对LAG和LAG成员执行Linux主机配置,一旦成功,它们将继续更新APPL_DB/STATE_DB中的LAG_TABLE /LAG_MEMBER_TABLE状态表。
2、orchagent,intfmgrd组件订阅APPl_DB/STATE_DB中的LAG_TABLE /LAG_MEMBER_TABLE状态表
3、经过进程处理后,转换成ASIC信息写入ASIC_DB
4、syncd订阅ASIC_DB的LAG信息,处理后写入SDK

SWSS组件交互分析

在这里插入图片描述

端口初始化:
(0)在初始化期间,portsyncd与redis引擎中的主数据库建立通信通道。 Portsyncd声明打算充当APPL_DB和STATE_DB的发布者,以及CONFIG_DB的订阅者。同样,portsyncd也订阅系统的netlink通道,该通道负责传送端口/链接状态信息。

(1)Portsyncd首先通过解析与系统中正在使用的硬件配置文件/ sku相关联的端口配置文件(port_config.ini)(有关更多详细信息,请参阅配置部分)。与端口相关的信息(例如通道,接口名称,接口别名,速度等)在通过此通道传输到APPL_DB的过程中。

(2)Orchagent听到了所有这些新状态,但是将推迟对其执行操作,直到portsyncd通知它已完全完成解析port_config.ini信息为止。一旦发生这种情况,orchagent将继续进行硬件/内核中相应端口接口的初始化。 Orchagent调用sairedis API来传递此请求,以通过常规ASIC_DB接口进行同步。

(3)Syncd通过ASIC_DB接收此新请求,并准备调用满足Orchagent的请求所需的SAI API。

(4)Syncd利用SAI API + ASIC SDK创建与正在初始化的物理端口相关的内核主机接口。

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

(6)作为上一步的一部分,portsyncd将一个记录条目写入到STATE_DB中,该条目与成功初始化的每个端口相对应。

(7)从现在开始,以前订阅STATE_DB内容的应用程序将收到通知,以允许这些应用程序开始使用它们所依赖的端口。
端口down:
1、ASIC光模块造成的载波丢失,该消息被发送到ASIC驱动,ASIC驱动发送给syncd模块
2、syncd调用通知处理程序来把端口关闭时间发送给ASIC_DB
3、orchagent使用其通知处理程序来收集ASIC_DB中的新状态,并发布端口更新状态到:
<3a>发布新的状态到APPL_DB中,用于警告依靠这个端口状态进行操作的应用程序
<3b>调用sairedis APIs来警告更新与主机接口关联的接口被关闭
4、syncd通过ASIC_DB接收此新请求,并调用SAI API去满足 orchagent的请求
5、syncd使用SAI APIs + ASIC SDK使用
受影响的主机接口的最新操作状态(DOWN)
6、与上一步关联的netlink消息是在portsyncd接收到,并作为所有SONiC静默丢弃,组件现在完全了解端口关闭事件
7、作为上一步的一部分,portsyncd将记录条目写入与成功初始化的每个端口相对应的STATE_DB中。
8、从现在开始,以前订阅STATE_DB内容的应用程序将收到通知,以允许这些应用程序开始使用它们所依赖的端口。 换句话说,如果在STATE_DB中找不到用于特定端口的有效条目,则任何应用程序都将无法使用它。
 

Syncd组件交互分析

在这里插入图片描述

端口初始化:
0、在初始化期间,portsyncd与redis引擎中的主数据库建立通信通道。 Portsyncd声明打算充当APPL_DB和STATE_DB的发布者,以及CONFIG_DB的订阅者。同样,portsyncd也订阅系统的netlink通道,该通道负责传送端口/链接状态信息。
1、Portsyncd首先通过解析与系统中正在使用的硬件配置文件/ sku相关联的端口配置文件(port_config.ini)(有关更多详细信息,请参阅配置部分)。与端口相关的信息(例如通道,接口名称,接口别名,速度等)在通过此通道传输到APPL_DB的过程中。
2、Orchagent听到了所有这些新状态,但是将推迟对其执行操作,直到portsyncd通知它已完全完成解析port_config.ini信息为止。一旦发生这种情况,orchagent将继续进行硬件/内核中相应端口接口的初始化。 Orchagent调用sairedis API来传递此请求,以通过常规ASIC_DB接口进行同步。
3、Syncd通过ASIC_DB接收此新请求,并准备调用满足Orchagent的请求所需的SAI API。
4、Syncd利用SAI API + ASIC SDK创建与正在初始化的物理端口相关的内核主机接口。
/5、上一步将生成一个netlink消息,该消息将被portsyncd接收。与先前从port_config.ini解析的所有端口相关的消息到达portsyncd后(在步骤1中),portsyncd将继续声明“初始化”过程已完成。
/6、作为上一步的一部分,portsyncd将一个记录条目写入到STATE_DB中,该条目与成功初始化的每个端口相对应。
/7、从现在开始,以前订阅STATE_DB内容的应用程序将收到通知,以允许这些应用程序开始使用它们所依赖的端口。
 

端口down:
1、ASIC光模块造成的载波丢失,该消息被发送到ASIC驱动,ASIC驱动发送给syncd模块
2、syncd调用通知处理程序来把端口关闭时间发送给ASIC_DB
3、orchagent使用其通知处理程序来收集ASIC_DB中的新状态,并发布端口更新状态到:
<3a>发布新的状态到APPL_DB中,用于警告依靠这个端口状态进行操作的应用程序
<3b>调用sairedis APIs来警告更新与主机接口关联的接口被关闭
4、syncd通过ASIC_DB接收此新请求,并调用SAI API去满足 orchagent的请求
5、syncd使用SAI APIs + ASIC SDK使用
受影响的主机接口的最新操作状态(DOWN)
6、与上一步关联的netlink消息是在portsyncd接收到,并作为所有SONiC静默丢弃,组件现在完全了解端口关闭事件
7、作为上一步的一部分,portsyncd将记录条目写入与成功初始化的每个端口相对应的STATE_DB中。
8、从现在开始,以前订阅STATE_DB内容的应用程序将收到通知,以允许这些应用程序开始使用它们所依赖的端口。 换句话说,如果在STATE_DB中找不到用于特定端口的有效条目,则任何应用程序都将无法使用它。
 

TEAMD组件交互分析

在这里插入图片描述

0、Config Manager从CLI / Rest接受配置请求,或者从Minigraph检索设备上的LAG和IP over LAG数据,然后将对象更新到ConfigDB中
1、teammgrd订阅ConfigDB的LAG对应的KEY值(PORTCHANNEL,PORTCHANNEL_MEMBER),经过teammgrd、teamdsyncd处理,将状态更新到APPL_DB,
对于相应的ConfigDB表中的任何更改,teammgrd/teamdsyncd将针对LAG和LAG成员执行Linux主机配置,一旦成功,它们将继续更新APPL_DB/STATE_DB中的LAG_TABLE /LAG_MEMBER_TABLE状态表。
2、orchagent,intfmgrd组件订阅APPl_DB/STATE_DB中的LAG_TABLE /LAG_MEMBER_TABLE状态表
3、经过进程处理后,转换成ASIC信息写入ASIC_DB
4、syncd订阅ASIC_DB的LAG信息,处理后写入SDK
 

猜你喜欢

转载自blog.csdn.net/weixin_39094034/article/details/115188740