SONiC teamd 聚合组配置

teamd总体流程图如下所示:

image.png

配置

teamdmgrd 负责配置过程。

  • CLI创建名称为PortChannel0001的聚合组,加入聚合组成员口Ethernet0和Ethernet4,在CONFIG_DB中生成配置表项;

image.png

  • teamdmgrd 进程监听相应键值变化,调用doLagTask和doLagMemberTask方法处理。a)doLagTask方法解析参数并生成所需的配置文件conf,通过调用teamd命令创建并配置聚合组,并调用ip命令设置聚合组接口MAC地址和管理状态;b) doLagMemberTask方法中先判断聚合组及待加入聚合组成员接口状态是否满足要求,如果满足则调用teamdctl和ip命令来配置聚合成员接口,这里会将聚合成员口设置为down,否则挂起当前任务后续再处理;

image.png

  • teamdmgrd作为生产者将聚合组和成员的配置信息写入APPL_DB。

  • portsorch作为消费者订阅APP_LAG_TABLEAPP_LAG_MEMBER_TABLE进行处理。

image.png

  • portsorch调用sairedis的API,检查参数类型合法性并将LAG配置信息写入ASIC_DB。

  • SYNCD订阅ASIC_DB中的LAG相关表项并处理。

image.png

  • SYNCD调用ASIC SDK对SAI API的实现,并通过ASICdriver下发到底层芯片。

聚合过程

teamsyncd 负责聚合过程:

  • teamsyncd初始化阶段注册监听RTM_NEWLINK和RTM_DELLINK类型的netlink消息,同时也会注册teamd的操作handler,用于处理teamd聚合成员口状态变化以及teamd参数变化触发的事件。a) 一类是netlink消息,当触发NEWLINK或DELLINK时对应操作STATE_LAG_TABLE设置聚合组状态;b) 另一类是teamd状态变化消息,当teamd通过LACP交互及内部状态机产生聚合成员口状态变化,调用TeamSync::TeamPortSync::onChange进行处理。

  • teamd感知聚合成员口发生状态变化,teamsyncd从teamd获取当前聚合成员列表和状态,与变化前的聚合成员列表进行比较。如果聚合成员已存在且状态发生变化,则直接修改相应的APP_LAG_MEMBER_TABLE成员状态,如果成员列表发生变化,则向APP_LAG_MEMBER_TABLE添加新增的成员口并设置成员状态以及删除不存在的成员口。
    image.png

  • portsorch作为消费者订阅APP_LAG_MEMBER_TABLE进行处理,根据聚合成员口状态设置SAI_LAG_MEMBER_ATTR_INGRESS_DISABLE和SAI_LAG_MEMBER_ATTR_EGRESS_DISABLE,决定是否允许通过该成员口接收流量以及从该成员口发送流量。

  • portsorch 调用sairedis的API,并更新LAG Member配置表项及属性到ASIC_DB。
    image.png

  • SYNCD订阅ASIC_DB中的LAG Member表项并处理。

  • 调用ASIC SDK对SAI API的实现,并通过ASIC driver下发到底层芯片。

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

Was this helpful?

1 / 0

发表回复 0