交换机笔记6.3

44 篇文章 18 订阅

6.3地址翻译单元操作

         在设备中的地址翻译单元(ATU)支持用户命令访问MAC地址数据库的内容。什么是STU的描述和如何在交换机的操作中使用ATU的描述在6.2.6节的表中。本章节着重于ATU的结构和怎样访问它的内容。

         所有的ATU操作有相同的用户接口和协议。六个全局1寄存器的使用方式在下表中。ATU的协议的操作如下:

  1. 通过检查在ATU操作寄存器的ATUBusy位可以确保ATU是可用的。ATU一次只能执行一个用户命令。
  2. 如果需要的话通过选择操作载入ATU数据,ATU FID(转发信息数据库)和ATU MAC寄存器。
  3. 通过定义预期的ATUOp和在ATU操作寄存器(这些都可以在同一时间完成)的ATUBusy位为1来启动ATU操作。
  4. 等待ATU操作完成。这是通过查询ATU操作寄存器中的ATUBusy位或接收ATUDone中断来完成的(参阅交换机全局控制,全局1偏移量0x04和全局状态,全局1偏移量0x00)。
  5. 如果合适的话,请阅读结果。

PS:ATU是用于访问MAC地址数据库的内容

6.3.1 ATU数据库的格式

         ATU数据库中的每个MAC地址条目的大小均为79位。低48位包含48位的MAC地址。接下来的12位包含FID或过滤信息数据库编号,而最高的19们包含有关条目的信息,如下图所示。通过下表所示提的交换机全局1寄存器一次访问数据库16位。

         图中的右边的48位是与FID定义的数据库编号中的该ATU条目关联的48位MAC地址。高19位是与条目的MAC地址关联的数据即6个字节代表着MAC地址。高19位是与行的MAC 地址相关联的数据(如优先级,DPV,Trunk等)中间的12位是FID。高19位的定义如下:

  1. MAC Pri(78:76):MAC的优先级覆盖值,通过下面的EntryState(条目状态)位来启用。用于入口帧的优先级覆盖(2.4.6节)。在管理MAC地址上启用优先级(多播的EntryState为0x0E或单播的EntryState为0x0D)将覆盖这些管理帧的所有的优先级。如果端口的DAPriOverride和/或SAPriOverride位配置了(端口偏移量0x0C),则在静态非管理帧上启用优先级将只会覆盖帧的优先级。
  2. Trunk(75): 中继位用于限定下面的 DPV 或中继 ID 位的内容。当该位为零时,位74:64是与此MAC相关联的DPV(目标端口向量)。当该位为1时,位67:64是与此MAC相关的中继ID-在这种情况下位74:68必须为零(高6位是零,低4位是中继ID)
  3. DPV或中继ID(74:64):目的端口向量或中继ID。当中继位(上面的75位)为零时,这些位指示哪个端口或哪些端口与该MAC地址相关联(即帧应在哪里交换)。当它设置为1时目的地址全零的帧的DPV应当被丢弃和/或帧的源地址将会进行特殊的处理(见1.2.7节和2.1.2节)。位64分配给物理端口0,位65分配给物理端口1,位66给端口2等等。如果多个端口位设置为1,则映射到此MAC地址的帧将尝试输出多个。这用于多播过滤。

当中继位(上面的位75)设置为1时位67:64(低4位)指示与此MAC地址关联的中继ID(在这种情况下74:68必须为零)。此目的MAC地址映射到一个或多个端口由中继映射表的内容确定(全局2偏移量0x08)

  1. 条目状态(63:60):条目状态字段,与条目的多播位(位40)一起被用于决定条目的老化时间或如下的类型。

用于单播的MAC地址(位40=0)

    1. 0x0未使用的条目
    2. 0x1到0x7已使用的条目的条目状态=条目的老化时间其中0x1是最老的
    3. 0x8:静态策略的条目。
    4. 0x9:具有优先级覆盖的静态策略。
    5. 0xA:静态没有速率限制(NRL)的条目
    6. 0xB:静态没有速率限制(NRL)的条目并带有优先级覆盖
    7. 0xC:定义目的地址是管理的帧静态条目
    8. 0xD:定义目的地址是管理的帧静态条目并带有优先级覆盖
    9. 0xE:静态条目
    10. 0xF:静态条目并带有优先级覆盖

用于多播的MAC地址(位40=1)

  1. 0x0未使用的条目
  2. 0x1到0x3:保留以供以后使用
  3. 0x4:静态策略的条目。
  4. 0x5:静态没有速率限制(NRL)的条目
  5. 0x6:定义目的地址是管理的帧静态条目
  6. 0x7:静态条目
  7. 0x8到0xB:保留以供以后使用
  8. 0xC:具有优先级覆盖的静态策略
  9. 0xD:静态没有速率限制(NRL)的条目并带有优先级覆盖
  10. 0xE:定义目的地址是管理的帧静态条目并带有优先级覆盖
  11. 0xF:静态条目并带有优先级覆盖

自动学习条目(1.2.3节)的条目状态值始终是在0x1(最老)到0x7(最近添加或刷新)范围内的单播条目。

以下各节介绍了其他各种EntryState值的用法:

      1. 策略 EntryState 值在第 2.1.3 节中介绍
      2. 无速率限制条目状态值在2.5节中介绍
      3. 管理条目状态值在5.3.2节中介绍
      4. 优先级覆盖条目状态值在2.4.5节中介绍
  1. FID(59:48):转发信息数据表的编号。如果多地址数据库没有被使用,则这些位必须保持为零。如果使用多地址数据库,则这些位被用于设置预期地址数据库编号,它是与ATU条目的MAC地址相关联的。当帧进入交换机时,分配给该帧的VID将用于访问VTU。VTU返回与该VID相关的FID,以便在ATU中进行MAC地址查找。

PS:ATU的格式:优先级<-中继位(0/1)<-DPV/Trunk ID<-条目状态<-FID<-MAC地址。优先级通过条目状态来控制,中继位可以控制DPV/Trunk ID为0 是DPV模式,为1是Trunk ID模式(只用低4位),条目状态可以控制优先级,速率限制等,FID在上面,MAC地址由48位控制即6字节即6组十六进制的数据构成。

6.3.2读取地址数据库

         地址数据库的内容可以通过使用传输到CPU(或其他设备)的以太网帧进行转储。每帧最多可以检索48个有效条目。请参阅第7节的远程管理。

         或者,可以使用寄存器的接口转储或者搜索地址数据库的内容。转储操作被称为获取下一个因为它以递增的网络字节顺序返回地址数据库的活动内容。搜索操作也可以使用获取下一个操作来完成。如果使用了多地址数据库(1.2.8节),则在使用获取下一个功能时,将ATU FID寄存中的FID字段设置为要搜索的数据库编号。

         获取下一个操作从ATU MAC寄存器中包含的MAC地址开始,并返回地址数据库中当前存在的下一个较高的活动的MAC地址。从一个全1的ATU MAC地址开始,来获得第一个或最低活动的MAC地址。返回的MAC地址和它相关的数据在ATU MAC和ATU数据寄存器中是可访问的。为了获取下一个更高活动的MAC地址,获取下一个操作可以再次开始而无需设置ATU MAC寄存器,因为他们已经包含了“最后”的地址。返回全1的ATU MAC地址表明没有更高的活动的MAC地址被找到或找到了广播MAC地址。无论上述的哪种情况都表明达到数据库的末尾。如果使用有效的广播地址到达该条目,则将以非零值返回该条目的条目状态。下表总结了获取下一个操作如何使用ATU寄存器。

         ATU获取下一个操作寄存器的用法

如果条目状态=0x0则返回数据是无效的,如果返回全1的mac地址但是条目状态不为零则它是有效的即为广播。

         要搜索特定的MAC地址,请使用要搜索的数据库的FID以比目标MAC地址少一个的MAC地址开始获取下一个操作。如果找到了所需的MAC地址,则将其与ATU数据寄存器中的相关数据一起返回到ATU MAC寄存器中。如果发现搜索到的MAC地址未激活,则ATU MAC寄存器将不等于目标地址。

6.3.3载入和清除地址数据库中的条目

         通过使用加载操作,可以将任何MAC地址(单播或多播)加载到地址数据库中或从中删除。如果条目状态在ATU数据寄存器是非零的出那么地址将会载入到数据库中。值为0时是表示清除ATU的操作。

         加载操作搜索地址数据库表示通过转发信息数据库编号(ATU FID全局1偏移量0x1)对包含在ATU MAC寄存器中的MAC地址。

NOTE:如果ATU数据的条目状态等于0则加载操作将成为清除操作;静态地址可以被修改在他们不被清除的情况下。

如果地址没有被找到,并且ATU数据寄存器的条目状态不为0,该地址将使用与自动地址学习相同的协议加载到地址数据库中。ATU数据寄存器的16位将会写到ATU条目的63:48中(6.3.1节)。ATU操作寄存器的3位MACPri将会写到ATU条目的66:64中。

下表总结了Load操作如何使用ATU的寄存器。

6.3.4刷新条目

         通过ATU操作可以从整个地址数据库或特定的地址数据库中可以将所有的MAC地址或只有未锁定(非静态)的MAC地址清除。

这些ATU操作如下:

  1. 刷新所有的条目
  2. 刷新所有的非静态的条目
  3. 刷新在特定FID数据库中的所有条目
  4. 刷新在特定FID数据库中的所有非静态的条目

刷新要求在ATU数据寄存器的条目状态位被设置为0x00。ATU MAC地址寄存是不用这些操作的并且会保持不变。ATU FID寄存器用于需要定义数据库编号的刷新操作。

6.3.5移动或移除单个端口的映射

         所有的MAC地址端口的映射会与一个特殊的端口关联的并且它是可以移动到其他端口的或者可以从地址数据库中移除。这个操作的方式是通过使用单个ATU操作将地址数据库或只有特定的地址数据库的条目进行设置来执行。这些ATU操作是:

  1. 移动所有的条目
  2. 移动所有的非静态的条目
  3. 移动在特定的FID数据库中的所有条目
  4. 移动在特定的FID数据库中的所有非静态的条目

移动操作要求在ATU数据寄存器(全局1偏移量0x0C)中的条目状态位为0xF。在ATU数据寄存器中的PortVec位被用于定义FromPort(PortVec的[3:0]位)和ToPort(PortVec的[7:4]位)。ATU MAC地址寄存器(全局1偏移量0x0D到0x0F)不用于这些操作,并且他们是未修改的。ATU FID寄存器的FID字段(全局1偏移量0x01)用于需要定义数据库编号的刷新操作。

ATU移动操作检查地址数据库中的所有条目。任何符合要求的有效条目都会被处理。它的要求是:

  1. 地址是有效的(它的条目状态是非零的)
  2. 地址包含在选定的数据库中(全部或一个选定的FID)
  3. 地址与中继不相关(条目的T位没有设置)
  4. 地址处于选定状态(全部或非静态的)
  5. 地址在其DPV字段中将FromPort的位设置为1

通过将他们的ATU数据寄存器的FromPort位清零,ToPort位置1来处理条目。如果ToPort的值是0xF则FromPort位会被清零而ToPort位不会被设置。这就是如何从地址数据库中移除特定端口关联条目的方式。

NOTE:使用这些命令无法移动或移除与中继关联的条目。这些机制只能将条目移动到该设备的内部,并不适用于多芯片。

PS:

6.3.6 ATU违规服务

ATU会捕获ATU已满,SA成员违规,SA丢失违规和已老化的违规数据。

  1. 如果ATU已满发生了,即自动地址学习(1.2.3节)或ATU载入操作(6.3.3节)不能将新的MAC地址放到地址数据库中,那么为了弥补它,将会把MAC地址哈希后的四个二进制地址作为静态条目锁定。
  2. 当帧的源地址在地址数据库中作为静态被找到了并且条目的目的端口向量(DPV)数据没有与端口的编号或模式对齐则源地址成员违规发生了。如果端口是锁定的(端口偏移量0x0B),端口的RefreshLocked位(端口偏移量0x0B)清零了,ATU老化中断没有启用(全局2偏移量0x05),端口的DPV数据中的端口编号或模式没有对齐,也会发生源地址成员违规。如果ATU老化中断启用了条目的条目状态位小于0x4,则ATU丢失违规通常会取代成员违规。通过将端口的(IgnoreWrongData)忽略错误数据位置1(端口偏移量0x0B)成员违规中断可以对每个端口的基本配置进行屏蔽。
  3. 当帧的源地址在地址数据库没有找到并且由于端口的LockedPort位设置为1(端口偏移量0x0B)那么端口是被锁定的这会发生源地址丢失违规。通过清除端口的LockedPort位为零,可以在每个端口的基础上屏蔽第一个学习中断。如果端口是锁定的,帧的源地址在地址数据库中被找到但是它的条目状态小于0x4,ATUAgeIntEn位(全局2偏移量0x05)是设置了的,则也会发生源地址丢失违规。如果ATU条目仍被入口帧使用,在他们老化之前刷新中断允许CPU重载(刷新)老化中的条目。如果端口被配置成自动刷新已学习过的条目(见RefreshLocked,端口偏移量0x0B)那么老化中断将不会发生。
  4. 当条目的条目状态处于0x1并且它开始老化时,并且ATU端口的条目与它的IntOnAgeOut位设置(端口偏移量0x0B)相关联时则ATU老化违规将会发生。最多可以存储两个老化违例,它们比已满,成员和丢失违规更前得到服务。默认的老化时间为0x16(老化时间为330秒-全局1偏移量0x0A),两个背对背的ATU条目最快的老化时间是5.75毫秒。因此,除非CPU需要超过10毫秒以上的时间处理中断,否则两个深度的FIFO将不会丢失任何老化违规。PS:意思是说back-to-back如果设置为5.75毫秒,而CPU处理某个中断时在10毫秒以上,那么这个违规将不会被记录。对于CPU的定向学习,通过设置端口的HoldAt1位(端口偏移量0x0B,设置为0时是正常模式为1是聚合端口的配置)来确保没有老化违规的丢失。HoldAt1选项可通过将条目的EntryState减为0x00,确保自动老化单元从不清除该条目。相反,它将保持所有的与端口相关联的条目在EntryState为0x1的地方。CPU将会获取另一个从该条目的下一次通过地址数据库的老化扫描时的老化违规。当端口的HoldAt1位被设置时,CPU将清除所有的条目,因为它们不会自行老化。

捕获ATU违规和他们相关联的中断是通过获取/清除违规数据ATU操作来清除的。ATU操作返回在ATU操作寄存器(全局1偏移量0x0B)中的违规类型,源端口导致的在ATU数据寄存器(全局1偏移量0x0c)中的EntryState/SPID字段的违规并且返回MAC地址导致在ATU MAC寄存器(全局1偏移量0x0D到0x0F)中的ATUByte[5:0]字段的违规和与帧相关联的FID(全局1偏移量0x01)。

下表总结了获取/清除违规数据操作如何使用ATU寄存器

6.3.7 ATU统计

         ATU支持一个简单的统计计数器来帮助确定当前数据库的使用情况。地址数据库的概述将有助于了解这些计数器的含义。

         地址数据库的8192个条目被组织为2048个存储桶,每个存储桶包含4个存储仓(1.2.1节)。通过将48位MAC地址哈希成11位该存储桶就被地址化了。由于多个MAC地址可以哈希到相同的存储桶中(哈希碰撞),因此每个存储桶中提供了4个仓。第一个先填充,然后是第二个,依此类推。

         ATU统计信息返回当前在四个仓中的每个仓中的地址数据库中存在的所选条目的数量。将这四个位的计数相加得出一个总条目数。单独的bin(仓)值指示当前地址数据库中有多少个哈希冲突。如:如果3和4的bin(仓)为空,则学习到的地址数据库中的所有地址都不会出现任何问题。如果4bin(仓)为空,但是3仓的条目超过1024地址数据库仍然会学习所有的地址,但是它已接近极限了。如果4仓是非零的那么某些最近使用的较少的地址会被更新的地址覆盖。如果4仓的条目超过了1024则数据库将受到严重的压力。

         每次执行ATU Get Next时都会收集ATU统计信息(6.3.2节),并将结果保存在计数器中,直到下一个Get Next操作开始为止。可以在ATU Get Next操作开始之前选择要收集的统计信息。选择有:

  1. 计算所有的有效条目
  2. 计数所有的有效非静态的条目(仅计数动态条目)
  3. 计数所有的在FID中定义的有效的条目
  4. 计数所有的在FID中定义的有效的非静态条目

如果选择了定义的FID选项则计数的FID是ATU FID寄存器中定义的FID(全局1偏移量0x01)。

收集ATU统计信息的过程如下:

  1. 设置要在ATU状态寄存器中收集的统计信息的类型(全局2偏移量0x0E)。
  2. 定义要计数的ATU FID(如果需要在全局1偏移量0x01)然后发出ATU Get Next ATUOp并等待其完成(全局1偏移量0x0B)
  3. 从4个仓中的每个仓中读取统计的结果(全局2偏移量0x0E)
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值