以配置MTU 了解SONIC网络操作系统命令配置流程

2023-05-16

介绍

总览

本文档介绍了SONiC中的最大传输单元(MTU)配置和行为。在计算机网络中,层的通信协议的MTU定义了允许该层通过一个接口传输的最大协议数据单元的大小(以字节为单位)。每个接口,层和协议都与一个MTU关联。

在SONiC中,基于层的接口有两种类型的MTU。
1.端口MTU(第2层):以太网帧可以携带的最大字节数。
2. IP MTU(第3层):允许通过L3接口传输的IP有效负载的最大大小,不包括L2标头和尾部。

要求

1.默认的MTU为1500,可配置范围为68字节至9216字节。最小以太网帧为64字节,但我们的Linux主机只能占用68字节作为最小MTU。因此,我们选择68个字节作为下限。
2.在ASIC上配置的MTU比在相应主机接口上配置的MTU多22字节,其中包括L2头(14字节),FCS头(4字节)和Vlan标签(4字节)的开销。
3.端口MTU和IP MTU可以在同一接口上配置为不同的值。但是,IP MTU应该由端口MTU限制。否则,端口MTU较大的IP数据包可能仍会退出主机接口,但会被ASIC丢弃。

条件

1.通过新的Config DB模型配置端口MTU和IP MTU设置。

Port MTU

通过与CFG管理器通信的CLI或Restful API配置端口MTU,后者将更新CFG DB中的相应端口对象。然后portsyncd将在Linux环境下通过ip link set / ifconfig命令设置主机接口的MTU。成功后,portsyncd会将配置推送到APP DB内的PORT_TABLE中。如果PORT_TABLE有任何更改,则其订户PortsOrch将向相应的MTU添加额外的22个字节,写入SAI DB并对ASIC进行编程。
在这里插入图片描述

Host Interface MTU

	admin@sonic:~$ sudo ifconfig Ethernet0
Ethernet0 Link encap:Ethernet  HWaddr 00:05:64:30:17:ec  
          inet addr:10.1.0.1  Bcast:10.1.0.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

APP DB Schema

PORT_TABLE
Stores information for physical switch ports managed by the switch chip.

    ;Defines layer 2 ports
    ;In SONiC, Data is loaded from configuration file by portsyncd
    ;Status: Mandatory
    port_table_key      = PORT_TABLE:ifname    ; ifname must be unique across PORT,INTF,VLAN,LAG TABLES
    device_name         = 1*64VCHAR     ; must be unique across PORT,INTF,VLAN,LAG TABLES and must map to PORT_TABLE.name
    admin_status        = BIT           ; is the port enabled (1) or disabled (0)
    oper_status         = BIT           ; physical status up (1) or down (0) of the link attached to this port
    lanes               = list of lanes ; (need format spec???)
ifname              = 1*64VCHAR     ; name of the port, must be unique
    mtu         = 1*4DIGIT                  ; MTU for the interface
    mac                 = 12HEXDIG      ;
example:
127.0.0.1:6379> hgetall PORT_TABLE:Ethernet0
 1) "lanes"
 2) "1"
 3) "alias"
 4) "Ethernet0"
 5) "oper_status"
 6) "down"
 7) "admin_status"
 8) "down"
 9) "mtu"
10) "1500"

请注意,相同的架构适用于LAG。因此,也可以在LAG上配置端口MTU,并且每个LAG成员端口都将从LAG继承端口MTU。

例如,我们为LAG team0配置了3个成员端口Etherent10,Ethernet11和Ethernet12,其默认MTU为1500。更改team0的MTU后,成员端口MTU也将进行相应更新。

	admin@sonic:~$ sudo ifconfig team0 mtu 1600
	admin@sonic:~$ redis-cli -n 0 keys *LAG*
1) "LAG_MEMBER_TABLE:team0:Ethernet10"
2) "LAG_MEMBER_TABLE:team0:Ethernet12"
3) "LAG_MEMBER_TABLE:team0:Ethernet11"
4) "LAG_TABLE:team0"
admin@sonic:~$ redis-cli -n 0 hgetall LAG_TABLE:team0
1) "admin_status"
2) "down"
3) "oper_status"
4) "down"
5) "mtu"
6) "1600"
admin@sonic:~$ redis-cli -n 0 hgetall "PORT_TABLE:Ethernet10"
 1) "lanes"
 2) "11"
 3) "alias"
 4) "Ethernet10"
 5) "oper_status"
 6) "up"
 7) "admin_status"
 8) "up"
 9) "mtu"
10) "1600"
admin@sonic:~$ redis-cli -n 0 hgetall "PORT_TABLE:Ethernet11"
 1) "lanes"
 2) "12"
 3) "alias"
 4) "Ethernet11"
 5) "oper_status"
 6) "up"
 7) "admin_status"
 8) "up"
 9) "mtu"
10) "1600"
admin@sonic:~$ redis-cli -n 0 hgetall "PORT_TABLE:Ethernet12"
 1) "lanes"
 2) "21"
 3) "alias"
 4) "Ethernet12"
 5) "oper_status"
 6) "up"
 7) "admin_status"
 8) "up"
 9) "mtu"
10) "1600"

SAI Attribute

sai_attribute_t attr;
attr.id = SAI_PORT_ATTR_MTU;
attr.value.u32 = mtu;

SAI API

sai_status_t status = sai_port_api->set_port_attribute(id, &attr);

IP MTU

同样,IP MTU也通过CLI / Restful API配置,该API设置CFG DB中路由器接口对象的if_mtu值。然后,Intfsyncd将相应的更改复制到APP DB中。在收到来自APP DB的更新通知后,IntfsOrch将if_mtu值推入SAI DB,并在sai路由器接口创建期间将MTU属性添加到属性列表。

APP DB Schema

 INTF_TABLE
intfsyncd manages this table.  In SONiC, CPU (management) and logical ports (vlan, loopback, LAG) are declared in /etc/network/interface and loaded into the INTF_TABLE.

IP prefixes are formatted according to [RFC5954](https://tools.ietf.org/html/rfc5954) with a prefix length appended to the end

    ;defines logical network interfaces, an attachment to a PORT and list of 0 or more
    ;ip prefixes
    ;
    ;Status: stable
    key            = INTF_TABLE:ifname:IPprefix   ; an instance of this key will be repeated for each prefix
    IPprefix       = IPv4prefix / IPv6prefix   ; an instance of this key/value pair will be repeated for each prefix
    scope          = "global" / "local"        ; local is an interface visible on this localhost only
    if_mtu         = 1*4DIGIT                  ; MTU for the interface
family         = "IPv4" / "IPv6"           ; address family
example:
127.0.0.1:6379> hgetall INTF_TABLE:Ethernet0:10.1.0.1/24
1) "scope"
2) "global"
3) "family"
4) "IPv4"
5) "if_mtu"
6) "1500"

SAI Attribute

if_attr.id = SAI_ROUTER_INTERFACE_ATTR_MTU;
rif_attr.value.u32 = mtu;
rif_attrs.push_back(rif_attr);

SAI API

sai_status_t status = sai_rif_api->create_router_interface(&rif_id, rif_attrs.size(), rif_attrs.data());

Limitations

1.当前brcm_sai中未处理SAI_ROUTER_INTERFACE_ATTR_MTU。因此,无法使用ip mtu正确编程asic。为Broadcom提供了修复。
2.当前SONiC中没有路由器接口的属性更新路径。因此,只能在创建路由器接口时设置ip mtu。在配置数据库和接口架构就绪后,需要实现set_router_interface_attribute和get_router_interface_attribute。

MTU设计

如果在Linux主机接口上配置了内核MTU,则相应的端口将使用具有额外22个字节的内核MTU作为SAI_PORT_ATTR_MTU。在端口上创建的任何路由器接口都将使用内核MTU作为SAI_ROUTER_INTERFACE_ATTR_MTU。
总结:
Kernel MTU = IP MTU = Port MTU – 22 Bytes

Config DB Schema

"PORT": {
    "Ethernet8": {
        "alias": "Ethernet9",
         "mtu": "1500"
    },
    …
 },

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

以配置MTU 了解SONIC网络操作系统命令配置流程 的相关文章

随机推荐

  • 迪文屏幕T5L平台学习笔记三:定时器使用

    上篇博客介绍了第一个C51程序Demo xff0c 在文本上显示一个 xff08 中英文混合 xff09 字符串 xff0c 这篇博客介绍下定时器2的使用 xff08 定时器0和1类似 xff09 一 先看定时器2的寄存器 在其他章节 xf
  • 使用闲置主机共享资源赚钱教程,收益不知道多少,不知道够不够电费的

    下载网心云的镜像ISO文件 xff0c 使用Rufus将镜像烧到一个U盘中 注意 此操作会清空U盘 xff0c 做完镜像后用U盘启动系统进入安装模式 安装完开机激活就可以了 瞧瞧我的收益 xff0c 1TB硬盘4核2G的工业主机 xff0c
  • 迪文屏幕T5L平台学习笔记七:RS485测试

    由于串口通信距离近 xff0c 且容易受到干扰 xff0c 最近改为RS485通信方案 xff0c 迪文屏幕DMG10600K070 03WTC正好也支持RS485通信 xff0c 把调试过程记录下 1 首先看下数据手册 xff1a 串口5
  • 烧录flash_烧录固件完成后,配置JFLASH让程序自动运行

    问题描述 xff1a 当使用IAR调试Cortex M0 43 产品 xff0c 在IAR MDK调试环境下烧录以后可以正常运行 xff0c 但是如果使用Segger的JFLASH直接烧录固件 bin或者 hex格式二进制文件 后程序并没有
  • 电力网络安全区域概念及划分

    笔者的专栏有很多人询问电力网络安全区的内容 xff0c 加上笔者多年来也一直看得很混乱 xff0c 这次多方收集信息 xff0c 加上自己的理解 xff0c 写成此文 内容可能更符合电网网络结构 xff0c 如有疏漏欢迎到电力知识图谱网站
  • 一文了解DTU、FTU、TTU、RTU的区别

    电力自动化有一堆 某TU xff08 不敢写X 怕被认为新设备 xff09 的设备 xff0c 搞得不做自动化的同学们很晕 xff0c 这里为大家收集下这几者的定义和区别 想要了解更加详细的内容 xff0c 可以点击电力知识图谱网站 xff
  • PIC单片机的配置字总结

    平台为 xff1a MPLAB V8 92 xff0c 这个ID有两个编译选项 xff1a DEBUG和RELEASE xff0c 那么可以根据系统预定宏来自动根据选择模式 xff0c 配置配置字 一 PIC18F系列配置字编写 MUC P
  • USB 2.0 A型、B型、Mini和Micro接口 type-c 定义及封装

    免责声明 xff1a 所有资料均来自互联网 xff0c 如有错误之处 xff0c 本人概不负责 出处 xff1a http blog 163 com wilicedon lee blog static 8158848320101174142
  • 对于嵌入式初学者建议读的书

    刚加入了几个嵌入式群 xff0c 群里提问最多的是怎么能够快速入门 xff1f 对于这个问题 xff0c 一千人个人可能有一千个答案 我也在嵌入式行业里混了几年 xff0c 虽然说技术很水 xff0c 经 验不多 xff0c 但是比起没有入
  • matlab学习笔记二:plot画图怎么设置线条类型和颜色

    出处 xff1a https jingyan baidu com article 48b558e338aaa37f38c09a80 html matlab的绘图功能很强大 xff0c 因此它在科学实验和社会调研中被广泛应用 我们在 绘制图形
  • XModem协议

    出处 xff1a XModem协议 XModem协议介绍 xff1a XModem是一种在串口通信中广泛使用的异步文件传输协议 xff0c 分为XModem和1k XModem协议两种 xff0c 前者使用128字节的数据块 xff0c 后
  • 详解,N沟道MOS管和P沟道MOS管

    出处 xff1a P沟道mos管作为开关的条件 xff08 GS gt GS xff08 TH xff09 xff09 1 P沟道mos管作为开关 xff0c 栅源的阀值为 0 4V xff0c 当栅源的电压差为 0 4V就会使DS导通 x
  • python通过pip安装torch错误及解决办法ERROR: Could not find a version that satisfies the requirement torch

    错误代码 pip install torch 61 61 1 6 0 43 cu101 to rchvision 61 61 0 7 0 43 cu101 f https download pytorch org whl torch sta
  • 智能代码补全工具 tabnine

    安装方法链接 xff1a https www tabnine com install 亲测有效 xff1a tabnine vim Without Vundle Run git clone depth 1 https github com
  • ovsdb <7> OVSDB操作实践及各种机制的分析

    4 2OVSDB操作实践及各种机制的分析 在安装了上述的openvswitch和做了相应的配置之后 xff0c 下面对openvswitch中提供的各种ovsdb的工具 操作方式和工作机制做一些简单的说明 xff1a 1 Ovsdb ser
  • ovsdb <10> Ops-cli结合ovsdb部分流程及接口分析

    4 6Ops cli结合ovsdb部分流程及接口分析 Ops中对于ovsdb的应用主要是基于上述的ovsdb的简单用法上的一个扩展和函数封装 xff0c 现在就其与之前不同的地方做补充说明并就各个函数的使用做相应的说明 根据前面的ovsdb
  • 项目管理:代码检查 pre-commit 使用详解

    Git钩子脚本对于在提交代码审查之前识别简单问题很有用 我们在每次提交时都运行钩子 xff0c 以自动指出代码中的问题 xff0c 例如缺少分号 xff0c 尾随空白和调试语句 通过在代码审阅之前指出这些问题 xff0c 代码审阅者可以专注
  • SOCAT详解

    概述 socat xff0c 是linux下的一个工具 xff0c 其功能与有 瑞士军刀 之称的netcat类似 xff0c 不过据说可以看做netcat的加强版 的确如此 xff0c 它有一些netcat所不具备却又很有需求的功能 xff
  • sonic 架构学习

    射人先射马 xff0c 擒贼先擒王 在我们学习sonic的过程中 xff0c 无疑了解sonic的架构是非常重要的 xff0c 然后再去了解各个模块的细节 xff0c 总分学习模式 下面是我自我学习并翻译的链接https github co
  • 以配置MTU 了解SONIC网络操作系统命令配置流程

    介绍 总览 本文档介绍了SONiC中的最大传输单元 xff08 MTU xff09 配置和行为 在计算机网络中 xff0c 层的通信协议的MTU定义了允许该层通过一个接口传输的最大协议数据单元的大小 xff08 以字节为单位 xff09 每