SONiC架构DOCKER组件交互分析

2023-05-16

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
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SONiC架构DOCKER组件交互分析 的相关文章

  • 如果遇到删除文件删不了,连粉碎也粉碎不了,使用以下方法

    磁盘有问题 xff0c 有一个非常简单的办法来帮助我们删除这个文件 xff1a 首先点 开始 菜单或按 WIN键 43 R 启动 运行 xff0c 输入 CHKDSK D F xff0c 其中 D xff1a 为出问题的文件所在磁盘的盘符
  • 展讯8910DM:如果VBus和VBat接在一起,导致模组某些功能出现异常的问题分析

    一 无法通过调节电压进行正常开关机 Bug 在idh code components driver Kconfig以及drv charger c中对开关机电压进行配置后 外接电源调节电压对模组进行开关机测试 通过coolwatcher抓取l
  • Linux:xinetd服务安装与配置(操作环境:Ubuntu 18.04)

    xinetd服务简介 xinetd是一个守护进程 属于系统中的一个后台进程 周期性的执行某些任务 或者等待某个事件发生 不会随着用户的注销而退出 支持对tcp udp RPC服务 但是当前对RPC的支持不够稳定 基于时间段的访问控制 功能完
  • 【工作感悟】99%即是不成功

    今晚由于修改代码导致cpu使用率爆满 xff0c 然后疯狂地 kill 9 xxxx 事后究其原因 xff0c 还是我没有考虑完善 xff0c 很多事情都是考虑到眼前一段时间 xff0c 而非一个月之后怎么样 xff0c 一年之后怎么样 反
  • centos 自带python 2.6 链接mysql 报错

    mysql python安装时EnvironmentError mysql config not found error command 39 gcc 39 failed with exit status 1 参考 https www cn
  • Spring Boot自定义log4j2日志文件 按天记录

    转载 https www cnblogs com advancing p 7922463 html Spring Boot自定义log4j2日志文件 背景 xff1a 因为从 Spring Boot 1 4开始的版本就要用log4j2 了
  • datax fieldDelimiter ’\001’ fieldDelimiter": “\u0001”!!!

    原文 xff1a https blog csdn net Angular need article details 84000592 作者 xff1a Angular need 来源 xff1a CSDN 2 datax把数据从Mysql导
  • GPG key retrieval failed: [Errno 14] Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

    运维给分配了一个新的服务器 xff0c 发现服务器上并没有安装mysql xff0c 一些shell脚本调用的mysql命令就无法使用 xff0c 随后开始安装mysql xff0c 本来准备请运维帮忙安装 xff0c 但是运维说自己装吧
  • golang go get中断问题解决: git 推送出现 "fatal: The remote end hung up unexpectedly" 解决方案

    转自 https blog csdn net weixin 38450840 article details 80701173 git 推送出现 fatal The remote end hung up unexpectedly 解决方案
  • Maven 镜像源配置

    settings xml 文件 lt xml version 61 34 1 0 34 encoding 61 34 UTF 8 34 gt lt settings xmlns 61 34 http maven apache org SET
  • 前端免费模板

    最近发现了一个前端免费模板 xff0c 分享给大家 xff1a http www mobanwang com mb
  • Postman 使用教程

    关注 开源Linux xff0c 选择 设为星标 回复 学习 xff0c 有我为您特别筛选的学习资料 postman是一款支持http协议的接口调试与测试工具 xff0c 其主要特点就是功能强大 xff0c 使用简单且易用性好 无论是开发人
  • 3.卡尔曼滤波理论基础之最优估计(最小方差估计)

    文章目录 一 最小方差估计例子 二 线性最小方差估计三 其他最优估计1 极大验后估计2 极大似然估计 四 总结 一 最小方差估计 前两篇文章对最优估计中的最小二乘估计进行了较为系统的介绍 我们已经知道 xff0c 所谓最优估计就是让估值结果
  • YOLOV4与YOLOV3的区别

    YOLOV4与YOLOV3的区别 A big bliss的博客 CSDN博客 yolov3和yolov4的区别 首先 xff0c 先大概的说下二者之间的差别 xff1a 1 特征提取网络的不同 2 激活函数的不同 3 loss的不同 4 数
  • HTTP Authorization

    HTTP Authorization 授权流程 在项目中往往需要对访问的请求进行安全认证 xff0c 只有认证通过的请求 xff0c 才能进行相关的操作 开发者需要颁发 AccessKey 和 SecretKey 给用户 xff0c 用户如
  • 求助!!tensorflow无法调用GPU计算。。

    求助 xff01 xff01 tensorflow无法调用GPU计算 如题 xff0c 本人是小白级别的爱好者 xff0c 使用的是联想台式机 xff0c win10系统 xff0c 有一块GeForce GT730的独立显卡 xff0c
  • C++系列: 嵌套命名空间

    目录 1 什么是嵌套命名空间 xff1f 2 实验 2 1 外部引用嵌套命名空间内的符号 2 2 命名空间内容不同层次间符号的引用 3 最后 1 什么是嵌套命名空间 xff1f 嵌套命名空间就是在命名空间里面在定义其它的命名空间 xff0c
  • 树莓派:ssh“疯掉”了

    昨晚 xff0c 电脑用ssh连接不了树莓派 我非常淡定 xff0c 首先在树莓派上打开配置 xff0c 看看ssh有没有打开 xff0c 很明显 xff0c 一直开着的 嗯 xff0c 可能无线连接的分配的ip地址变了 于是 xff0c
  • 串口通信协议

    1 串口通信协议简介 串口通信 xff08 serial communication xff09 是一种设备间非常常用的串行通信方式 xff0c 大部分电子设备都支持 xff0c 电子工程师再调试设备时也经常使用该通信方式输出调试信息 2
  • vim 实现批量注释

    vim 实现批量注释 第一种方法 批量插入字符快捷键 xff1a Ctrl 43 v进入VISUAL BLOCK xff08 可视块 xff09 模式 xff0c 按 j xff08 向下选取列 xff09 或者 k xff08 向上选取列

随机推荐