Verilog开源项目——百兆以太网交换机(七)包修改模块设计

Verilog开源项目——百兆以太网交换机(七)包修改模块设计


🔈声明:未经作者允许,禁止转载
😃博主主页:王_嘻嘻的CSDN主页
🔑全新原创以太网交换机项目,Blog内容将聚焦整体架构、模块设计方面;更新周期可能会略慢,希望朋友们多多包涵
🧡关注本专题的朋友们可以学习到原创交换机设计的全流程,包括设计与验证(FPGA)。
🚩第一代交换机  从零开始 verilog 以太网交换机系列专栏:点击这里
💥第二代交换机  Atom(百兆以太网交换机)专栏:点击这里

  包修改模块 PM(Packet Modifier)和PF对称,负责Atom出口Packet的整合,Packet从PM出去后就不再被改变。PM将负责出口带宽控制、风暴控制、VLAN映射、VLAN透传等VLAN管理,以及流量统计。



一、Feature

  • 100M时钟下,pipeline处理,处理速度支持25Gbps;
  • 支持通过令牌桶控制发送速率;
  • VLAN manage:Insert VLAN、VLAN map、QinQ VLAN透传;
  • 支持风暴控制(multicast、boardcast和no dest packet);
  • 支持流量统计;
  • 支持Flush功能;


二、概述

请添加图片描述

  PM采用申请的方式从DB获取Packet,这是因为PM需要支持Port出口限速,以及风暴控制,会导致某些Port不能接收Packet,所以由PM主动申请数据更合理。PM内存在4个Port buffer,各自对应一个MAC,并提供buffer almost full信号。每个Port使用两个TKM来实现output QoS,一个负责Port出口控速,另一个负责Port的风暴控制,共计8个TKM。PM根据buffer almost full和TKM的令牌情况决定如何从DB获取Packet

  当DB发送Packet至PM后,PM根据LPH确定VLAN策略,重新组包发送至对应mac buffer,并进行相应Packet type进行统计。



三、接口

在这里插入图片描述


在这里插入图片描述


四、功能设计

a)QoS & Storm control

  为了在出口Port同样支持带宽控制,以及风暴控制,将在PM模块中支持该特性。

  Normal Packet(单播)的output width control通过TKM来实现,TKM动态维护normal Packet令牌数,由TKM增加令牌数量,每次发包PM请求减少令牌数量。PM对multicast、boardcast pkt采用另一个TKM,以此控制多播包的速率,该TKM将不针对单播包改变令牌数量。

  风暴控制:每个Port都需要有独立的TKM,共PORT_NUM * 2=8个,当发生风暴时,可以有以下三种策略

  1. 不受风暴TKM控制;
  2. 受风暴TKM控制;
  3. 风暴严重时关闭端口;

b)VLAN管理

  和商用交换机类似,Atom的Port也分为了三种模式:access、trunk、hybrid,默认状态下统一为hybird模式,每种模式对VLAN tag的处理都不相同。

  PM主要功能就是根据LPH的dst Port、Port type、VLAN状态进行组包,并发送至TMAC,其中最为复杂的便是VLAN处理。

  在Atom中支持VLAN以及QinQ,以下是untagged Packet、tagged Packet和QinQ Packet结构,tagged Packet在Source MAC和Length field间插入了一个4B的VLAN tag,而QinQ加入了内外两层的VLAN tag,其中内层VLAN tag常用于用户定义,外层VLAN tag常用于厂商定义。Atom中如何识别VLAN和QinQ Packet的具体实现方案可以参考PF模块的介绍:Verilog开源项目——百兆以太网交换机(六)Packet filter单元设计。

请添加图片描述

  • TPID:Tag Protocol Identifier(标签协议标识符),表示数据帧类型;
  • PRI:帧优先级,dot1p;
  • CFI:规范标识位,0为规范格式;
  • VID:VLAN ID;

VLAN管理

  VLAN映射可以修改报文携带的VLAN Tag或为报文添加VLAN Tag,实现不同VLAN ID之间的相互转换。Atom支持下面几种映射能力:

  • 1:1 VLAN映射:将某一特定VLAN的报文所携带的VLAN Tag替换为新的VLAN Tag;
  • N:1 VLAN映射:将多个VLAN的报文所携带的不同VLAN Tag替换为相同的VLAN Tag;
  • 1:2 VLAN映射:为携带有一层VLAN Tag的报文添加外层VLAN Tag,使报文携带两层VLAN Tag。
  • 0:2 VLAN映射:为没有携带VLAN Tag的报文添加两层VLAN Tag。
  • 2:2 VLAN映射:将携带有两层VLAN Tag的报文的内、外层VLAN Tag都替换为新的VLAN Tag。

  Atom在PM中通过VLAN map table来实现VLAN映射功能,当packet从DB发送到PM后,PM即开始判断是否需要VLAN map。只有规则完全匹配,才能进行VLAN map,例如packet为双层VLAN,但是内层VLAN对应1:2VLAN映射规则,此时判断为匹配失败,拒绝映射

  Atom每个Port将支持128条映射规则


VLAN透传

  VLAN透传功能可使端口在收到带有指定VLAN Tag的报文后,不为其添加外层VLAN Tag而直接在运营商网络中传输

  Atom如果需要开启VLAN透传功能,必须在配置VLAN透传功能前,配置端口路为Trunk/Hybrid类型,并在报文传输路径的所有端口上都配置允许透传VLAN通过。为了便于实现Atom将不支持同一接口上同时配置VLAN透传和VLAN映射。

  Atom每个port将支持16条VLAN透传配置(直接以寄存器形式实现),当启用透传后,原本的QinQ规则将无效


基于端口管理的VLAN

  Atom支持两种VLAN管理方式:基于端口管理的VLAN、基于MAC地址管理的VLAN。缺省情况下,对于Untagged报文的处理优先级为:基于MAC的VLAN > 基于端口的VLAN。

  以下为不同端口类型的VLAN管理行为:

在这里插入图片描述
  当端口为Trunk或Hybrid类型时,每个端口存在一份VLAN ID list配置,用于控制允许哪些VLAN向外发送,Access类型端口可以不进行配置。


基于MAC地址管理的VLAN

  无线终端可能本次使用Port A接入网络,下次使用Port B接入网络。如果Port A和Port B的VLAN配置不同,那么第二次设备接入会被划分到另一VLAN,导致报文丢失或发生其它不可预计的情况;如果Port A和Port B的VLAN配置相同,当Port B被分配给别的终端设备时,又会引入安全问题,这种情况下基于MAC的VLAN将起到作用。

  Atom中仅支持静态MAC VLAN配置,且只在Hybrid端口类型起作用:

  • 手动配置静态MAC VLAN:用户强制配置MAC、VLAN、Port等关系,无法被后续相同的MAC所修改;
  • 动态触发端口加入静态MAC VLAN:当用户不确定该MAC会从哪个Port接收时,先绑定MAC和VLAN关系,等交换机运行后,根据该MAC的实际情况确定Port信息;

在这里插入图片描述

  基于MAC地址管理的VLAN将在PF实现,仅负责插入VLAN tag或更新MAC VLAN list。

请添加图片描述


c)流量统计

  支持Port level的流量统计,例如:

  • Port totally byte cnt / packet number
  • Port ipv4/ipv6 byte cnt / packet number
  • 组播/广播packet byte cnt / packet number

  将这些寄存器放在PM本地维护,直接assign to CSR,上层通过读寄存器获得统计值。


d)Flush

  当PM完成LPH中携带Flush标志的Packet后,通过给CSR发送一个flush done的脉冲使得CSR结束Flush流程。




五、数据结构

a)LPH

  LPH(Local Packet Header)是Atom定义的内部传输的一种数据格式,把Packet中提取的重要信息,或者需要在Atom中传输的自定义数据都放在LPH中,避免模块冗余逻辑。

请添加图片描述


b)VLAN map table


请添加图片描述

  Atom的每个Port将支持128条VLAN映射规则,具体映射表如上图所示,需要用户定义映射类型、原始内外层VLAN tag以及映射后的内外层VLAN tag

  其中VLAN map type由0x0~0x4分别对应了1:1、N:1、1:2、0:2、2:2的映射方式,需要注意的是packet需要完全和规则对应才能执行映射规则,否则结束映射检测。例如:rule0对应1:2映射,此时只需比较Packet.inner VLAN ID是否为0x100,若匹配成功,则将内层VLAN ID替换为0x200,并插入VLAN ID为0x3的外层VLAN tag,不需要在意原始外层VLAN这项。

  而rule1对应为2:2映射方式,就需要Packet的内外层VLAN ID完全匹配,当然Packet需要满足基础的VLAN tag个数。


c)VLAN ID list

  Atom采用全局VLAN ID list共享的模式,支持所有内层VLAN ID的管理,采用一块32-bits x 512的ram实现,每个VLAN ID占据4-bits,分别对应4个Port,每个个地址存放8个VLAN ID,共4096 VLAN ID,其中VLAN0和VLAN4095默认全0,保留功能。

  具体格式如下图,VLAN1存放在地址0的7~4 bits,图中值为‘0110’,表示只有Port1、Port2允许该VLAN通过。

请添加图片描述


d)MAC VLAN list

  Atom的MAC VLAN list同样共享,格式如下:

  • MAC VLAN type用以区分是手动配置还是动态触发;
  • Src mac和mask为用户定义的源MAC地址和掩码,用来控制MAC地址的模糊匹配或精确匹配;
  • VLAN ID为该MAC地址所对应的VLAN ID;

请添加图片描述

 &emsp手动配置模式,定义的MAC VLAN只对untagged Packet进行VLAN 插入的作用;而动态触发模式,会将匹配上的VLAN记录在VLAN ID list中,并点亮对应Port。






若有不专业或错误之处,欢迎指正!

具体电路实现及验证环境代码会在准备完毕后开源,目前暂时不能给出,请见谅


搜索关注我的微信公众号【IC墨鱼仔】,获取我的更多IC干货分享!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/52929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java项目: 基于SpringBoot+mysql网上订餐系统分前后台(含源码+数据库+开题报告+PPT+毕业论文)

一、项目简介 本项目是一套基于SpringBootmysql网上订餐系统分前后台 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单…

【北森-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

(二)Kafka离线安装 - Zookeeper下载及安装

一、下载 下载ZooKeeper之前,需要根据下载的Kafka版本,来确定ZooKeeper的版本。 Kafka官方地址:Apache Kafka 1、先下载源码版本,下载完后解压,在kafka-3.8.0-src\gradle目录下找到dependencies.gradle文件&#xff…

我用GPT对RAG技术的学习和探索

思维导图 下图是我的学习和探索过程,红点表示已研究,黄点表示待研究 目录 思维导图RAG技术概述RAG 的关键优点应用场景 如何了解RAG技术的原理和应用1. **基础理论学习**2. **实战演练**3. **学习资源利用**4. **保持学习的连贯性**5. **多角度理解**6. …

RASA使用长文记录以及一些bug整理

RASA 学习笔记整理 一 安装 在虚拟环境中安装,进入python3版本的环境 conda activate python3 ai04机器旧版本:rasa-nlu和rasa-core是分开安装的 最新版本:rasa 将二者做了合并 直接安装 pip3 install rasa 在安装到如下步骤时候会报…

应急响应-爆破漏洞应急响应流程(以SSH爆破为例)

目录 概述研判分析登录成功登录失败历史命令authorized_keys 定损止损攻击链路还原清理恢复总结复盘参考 概述 爆破漏洞是比较常见漏洞,端口开放,管理后台没有做登录频率限制等情况都可能遭受到爆破攻击,本文以SSH爆破为例,介绍下…

N10 - NLP中的注意力机制

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目录 1. 注意力机制是什么2. 注意力实现步骤0. 准备隐藏状态1. 获取每个编码器隐藏状态的分数2. 通过softmax层运行所有分数3. 通过softmax得分将每个编码器的…

以低代码技术加速推动企业数字创新

在数字化转型的浪潮中,企业面临着前所未有的挑战和机遇。随着技术的不断进步,企业需要快速适应市场变化,创新产品和服务,以保持竞争力。低代码技术作为一种新兴的开发模式,正逐渐成为企业数字创新的重要推动力。 低代码…

《深入浅出WPF》读书笔记.8路由事件

《深入浅出WPF》读书笔记.8路由事件 背景 路由事件是直接响应事件的变种。直接响应事件,事件触发者和事件响应者必须显示订阅。而路由事件的触发者和事件响应者之间的没有显示订阅,事件触发后,事件响应者安装事件监听器,当事件传…

财富趋势金融大模型已通过备案

财富趋势金融大模型已通过备案 8月28日晚,国内领先的证券软件与信息服务提供商——财富趋势,公布了其2024年上半年财务报告: 今年上半年,财富趋势营收1.48亿元,同比增长0.14%;实现归母净利润为1亿元&#x…

国标GB28181视频监控EasyCVR视频汇聚平台国标注册被陌生IP入侵如何处理?

GB28181国标/GA/T1400协议/安防综合管理系统EasyCVR视频汇聚平台能在复杂的网络环境中,将前端设备统一集中接入与汇聚管理。智慧安防/视频存储/视频监控/视频汇聚EasyCVR平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级…

nginx容器映射配置文件后,启动一直报错提示:failed (13: Permission denied)的排查

问题现象: 使用harbor 的install.sh 创建docker-compose之后,出现nginx容器一直重启。 查看日志发现是:配置文件无权限。报错信息如下: Sep 2 16:43:13 172.28.0.1 nginx[1344]: 2024/09/02 08:43:13 [emerg] 1#0: open() “/e…

HarmonyOS开发实战( Beta5版)线程间通信场景最佳实践

简介 在应用开发中,经常会需要处理一些耗时的任务,如果全部放在主线程中执行就会导致阻塞,从而引起卡顿或者掉帧现象,降低用户体验,此时就可以将这些耗时操作放到子线程中处理。通常情况下,子线程可以独立…

linux离线安装nacos

1、打开 Nacos-GitHub ,点击 Release 可以看到 Nacos 的各版本跟新信息和安装包之类的 点击下载nacos-server-2.4.1.tar.gz,在linux创建nacos文件夹,把下载好的文件上传到nacos文件夹,并通过命令解压:tar -zxvf nacos-server-2.4.…

《花100块做个摸鱼小网站! 》第五篇—通过xxl-job定时获取热搜数据

⭐️基础链接导航⭐️ 服务器 → ☁️ 阿里云活动地址 看样例 → 🐟 摸鱼小网站地址 学代码 → 💻 源码库地址 一、前言 我们已经成功实现了一个完整的热搜组件,从后端到前端,构建了这个小网站的核心功能。接下来,我们…

chrome插件模拟isTrusted的事件

文章目录 方法原理 使用js模拟的事件isTrusted的值时false。有的时候我们想要模拟sTrusted未true的事件就比较麻烦了。 我们可以利用chrome插件的 chrome.debugger解决改问题。 方法 大体思路是:模拟事件的请求从content_script.js发出,到达background…

【类模板】类模板的特化

一、类模板的泛化 与函数模板一样&#xff0c;类模板的泛化就是普通的模板&#xff0c;不具有特殊性的模板。 以下的类模板为泛化的版本 //类模板的泛化 template<typename T,typename U> struct TC {//静态成员变量static int static_varible; //声明TC() {std::cout…

常见图像图片属性的介绍与说明

图像属性是指图像的一些基本特征和参数&#xff0c;它们定义了图像的外观和存储方式。以下是一些常见的图像属性&#xff1a; 1. 分辨率&#xff1a; 分辨率通常以像素数&#xff08;如800x600&#xff09;来表示&#xff0c;指的是图像的宽度和高度上的像素点数。分辨率越高&…

【Spring Boot-IDEA创建spring boot项目方法】

1. 使用Spring Initializr 的 Web页面创建项目 2. 使用 IDEA 直接创建项目&#xff0c;其中有两种不同的搭建路径 3. 使用 IDEA 创建Maven项目并改造为springBoot 最常使用的两种方法其实就是一种&#xff0c;这里介绍在ieda中如何搭建 SpringBoot项目。 1.new Project--> 2…

剑侠情缘c#版(游戏源码+资源+工具+程序),百度云盘下载,大小1.68G

剑侠情缘c#版&#xff08;游戏源码资源工具程序&#xff09;&#xff0c;c#开发的&#xff0c;喜欢研究游戏的可以下载看看。亲测可进游戏。 剑侠情缘c#版&#xff08;游戏源码资源工具程序&#xff09;下载地址&#xff1a; 通过网盘分享的文件&#xff1a;【游戏】剑侠情缘c#…