Frrouting学习笔记(三)——FPM协议规范

Frrouting学习笔记(三)——FPM协议规范FPM 用一个标头将所有数据帧化 以帮助外部读取器计算它必须读取多少字节才能读取完整消息 这有助于模拟数据报 就像在最初的

大家好,欢迎来到IT知识分享网。

本篇翻译自doc/developer/fpm

一、FPM概述

        FPM代表Forwarding Plane Manager(转发平面管理器),它是一个用于Zebra的模块。

        与FPM交换消息的封装头由frr树中的文件“FPM/FPM.h”定义。路由本身以Netlinkprotobuf格式编码,Netlink是默认格式。

        Netlink是Linux中对消息进行编码以与内核空间进行通信的标准格式,也是它所使用的套接字类型的名称。FPM netlink的使用与Linux的不同之处在于:

  1. Linux netlink套接字以多播方式使用数据报,FPM用作流,并且是单播的。
  2. FPM网络链接消息可能比正常消息包含更多或更少的信息

        Linux netlink套接字消息(例如:RTM_NEWROUTE可能会添加一个额外的路由属性来通知VxLAN封装)。

        Protobuf是许多新的序列化格式之一,其中消息模式用专门构建的语言表示。从模式生成用于对有线格式进行编码/解码的代码。Protobuf消息可以很容易地扩展,同时保持与旧代码的向后兼容性。ProtobufNetlink相比具有以下优势:

  1. 用于序列化/反序列化的代码是自动生成的。这降低了出现错误的可能性,允许快速集成第三方程序,并使添加字段变得容易。
  2. 消息格式不与操作系统(Linux)绑定,可以独立发展。

目前,“zebra”中有两个FPM模块:

  1. “fpm“
  2. “dplane_fpm_nl“

1.1 fpm

        第一个FPM实现是使用“zebra”路由处理函数中的钩子构建的。它使用自己的netlink/protobuf编码函数将“zebra”路由数据结构转换为格式化的二进制数据。

1.2 dplane_fpm_nl

        新的FPM实现是使用“zebra”的数据平面框架作为插件构建的。它只支持netlink,并共享“zebra”netlink函数,将路由事件快照转换为格式化的二进制数据。

二、协议规范

        FPM(在任何模式下)使用TCP连接与外部应用程序进行通信。它作为TCP客户端运行,并使用CLI配置的地址/端口连接到FPM服务器(默认为端口“2620”)。

        FPM用一个标头将所有数据帧化,以帮助外部读取器计算它必须读取多少字节才能读取完整消息(这有助于模拟数据报,就像在最初的netlink Linux内核使用中一样)。

2.1 帧头:

Frrouting学习笔记(三)——FPM协议规范

2.12 版本

        目前只有一个版本,因此应该始终为“1”

2.3 消息类型

        定义我们使用的下划线协议:netlink`1’`)或protobuf`2’`)。

2.3 消息长度

        此帧中按网络字节顺序排列的数据量。

2.4 数据

        netlink或protobuf消息负载。

2.5 来自ASIC的路由状态通知

        dplane_fpm_nl能够从底层fpm实现读取路由网络链接消息,该消息可以告诉zebra路由是否已卸载/失败或受阻。

        最终开发人员必须将数据发送到已创建的同一套接字,以侦听来自ZebraFPM消息。发送的数据必须具有“Frame Header”“Version”设置为1“Message Type”设置为1,以及适当的消息长度。消息数据必须包含RTM_NEWROUTE网络链接消息,该消息发送与路由相关联的前缀和下一跳。最后,rtm_flags必须包含rtm_F_OFFLOADrtm_F_TRAPrtm_F_OOFFLOAD_FAILED,以表示ASIC中的路由发生了什么。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/138008.html

(0)
上一篇 2025-06-16 13:45
下一篇 2025-06-16 14:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信