一种分布式动态二层转发表的维护方法与流程

文档序号:11253878阅读:600来源:国知局
本发明涉及集成电路
技术领域
:,具体的说,是一种分布式动态二层转发表的维护方法。
背景技术
::二层转发即网络通信七层模型中的数据链路层转发一般在集成电路芯片中完成,常见的二层转发电路采用一个存储器来实现转发表的功能,同时采用一个哈希函数完成查询信息与储存器地址的转换。哈希映射容易出现冲突,即两个查询信息被转换到同一个存储器地址。为了避免表项地址的冲突,一般在同一地址采用冗余的方式预留多个表项,这就需要存储器为同一个地址准备多个存储空间来减小冲突的影响,因此会造成存储空间的浪费。为了提高集成度,可以将二层转发的功能采用fpga来实现。二层单播转发功能的核心在于二层转发表的维护与查询,而在fpga的二层转发功能实现中,出于成本以及电路板设计复杂度的考虑,往往采用fpga内部的bram来实现转发表,而bram在fpga内部的资源是受限的,不能像外部存储器那样不用太关心冗余带来的空间浪费。技术实现要素:本发明的目的在于提供一种分布式动态二层转发表的维护方法,用于解决现有技术中二层转发电路中外部存储器采用冗余的方式预留多个表项来减小哈希映射的冲突,从而导致外部存储器空间利用率不高、读写速率不高的问题以及采用fpga内部的bram来实现,存在bram在fpga内部资源受限的问题。为了达到上述目的,本发明通过下述技术方案实现:一种分布式动态二层转发表的维护方法,包括转发表的训练、转发表的查询和转发表的老化,所述转发表的训练包括步骤:s1)fpga在上电启动时,外部输入n个互异的真随机数r,在有限域中表示为gf(r),保存在顶层控制模块的寄存器中,所述寄存器连接哈希计算模块的输入端口,所述n为fpga内部bram中转发表的数目,所述转发表的表项包括:mac:存储的源地址sa;vlan:与mac关联的vlanid;port:与mac关联的端口号;vld:该表项有效标志,“1”表示有效,“0”表示无效;age:计数项,用于记录老化计数,老化控制电路每隔一个固定的时间控制age减“1”;s2)交换电路发送数据信息写入fifo电路缓存,训练电路每隔一个时钟周期从fifo电路中读取一个数据信息,如果此时fifo为空,则读取出来的数据有效标志为0,所述数据信息包括源地址sa、虚拟局域网信息vlan和端口号port,训练控制模块将源地址sa和虚拟局域网信息vlan送入哈希计算模块,将源地址sa、虚拟局域网信息vlan和端口号port放入延迟模块;s3)将所述步骤s1)中的真随机数gf(r)和所述步骤s2)中源地址sa和虚拟局域网信息vlan的结合即sa_vlan,同时分别输入n个并行计算的训练控制电路进行哈希计算,运算结果为所述sa_vlan在转发表中待写入的地址;所述哈希计算产生训练地址train_addr和训练地址有效train_addr_vld,并传递至流水线读写电路,所述流水线读写电路包括锁存电路、判断电路和延迟模块;s4)所述判断电路读取所述地址对应的表项的有效标志vld以及所述训练地址train_addr和训练地址有效train_addr_vld,所述判断电路产生可写指示match_vld,若存在以下三个条件之一:哈希计算模块输出的训练地址有效train_addr_vld=0或在判断电路中发现train_addr跟当前写入表项的地址相等或在判断电路中欲写入的表项的有效标志vld=1但是所述表项的sa_vlan与欲写入表项的sa_vlan不相等,则将欲写使能信号pw_ena_1x被置为无效,即可写指示match_vld和训练地址有效train_addr_vld均置为“0”即无效状态,此表项不再写入;s5)转发表优先选择电路搜集所述地址对应的表项的欲写使能信号pw_ena_1x即可写指示match_vld和训练地址有效train_addr_vld,设置转发表的优先级,向具有优先级的转发表发送写使能信号wr_ena_1x,在sel电路中将wr_ena_1x为有效的转发表的表项写入sa_vlan和端口port,并将age置于最大值,同时表项的vld被置为高;s6)将要查询的转发端口的数据信息输入查询电路,用于与所述步骤s3)中的真随机数gf(r)经过与所述步骤s3)中相同的哈希计算,计算得出所述数据信息在转发表中的地址,从该表项中的port读出要查询的转发端口。fifo电路每隔一个时钟周期读取一个sa_vlan与端口号port,并与锁存在寄存器中互异且保持不变的真随机数做哈希计算,若源地址sa中不包含虚拟局域网信息vlan,则只将源地址sa与互异的真随机数做哈希计算。由于真随机数互异即哈希计算的哈希算子参数互异,可以得到sa_vlan和端口号port映射到转发表的表项的地址,训练控制模块将sa_vlan送入哈希计算模块,将sa_vlan、端口号port放入延迟模块。判断电路读取所述地址对应的表项的有效标志vld,如果有效标志vld=1,且表项中存储的sa_vlan与想要写入的sa_vlan不一样时,则放弃此次写入,当有效标志vld=0时,判断从哈希计算电路生成的训练地址train_addr在传递的过程中,是否train_addr地址对应的表项被写入,如果有,则train_addr被置为无效,将欲写使能信号即可写指示match_vld和训练地址有效train_addr_vld均置为0,放弃此次写操作。如果在传递的过程中,表项没有被写入,则训练地址train_addr、训练地址有效train_addr_vld和可写指示match_vld均为有效,继续向下传递。在传递至sel电路之前,由转发表优先选择电路对上述信号进行设定优先级,在sel电路,则根据表项的优先级,将信息写入优先级别较高的转发表的表项。当需要查询待发送的数据包的转发端口号时,由数据包的目的地址da和虚拟局域网信息vlan即da_vlan,与来自顶层控制模块的寄存器中的真随机数做哈希计算,如果目的地址da中不包含虚拟局域网信息vlan,则只将da与真随机数做哈希计算。所述真随机数是由顶层控制模块一起接入转发表训练模块和转发表查询模块的哈希计算电路中,并且由于此时的da_vlan,即转发表训练电路中的sa_vlan,因此哈希计算的规则相同,因此哈希计算的结果即为转发表训练过程中映射到表项的地址,找到所述地址对应的转发表的表项,读取表项中的sa_vlan的内容,与查询的da_vlan比较,如果相同,则读取表项中的port的内容,即找到转发该数据包的端口号。优选地,所述s4)具体步骤为:每隔一个时钟周期,哈希计算模块将输出一个训练地址train_addr与训练地址有效train_adr_vld,若train_adr_vld=0,不做任何动作,当train_adr_vld=1时,sa_vlan和端口号port会在流水线读写电路传递,通过训练地址train_addr读取表项,将这个地址对应的sa_vlan与表项相互比较:a)读取的表项没有被占即表项的vld=0,则训练地址train_addr与训练地址有效train_adr_vld原样向下传递;b)读取的表项已经被占用,但是占用该表项mac的内容与需要训练的sa_vlan不符合,则训练地址有效train_adr_vld=0,不做任何动作;c)读取的表项已经被占用,并且占领的mac与需要训练的sa_vlan相同,则train_adr_vld原样向下传递;d)流水线读写电路新置一个可写指示match_vld,当所述c)中的条件出现时,设置可写指示match_vld=1用于指示当前可写入的转发表,同一时间内表项的可写指示match_vld为“1”的转发表不超过一个;e)在训练地址train_addr与训练地址有效train_adr_vld的向下传递过程,若训练地址train_addr对应的表项被执行了一次写入操作,则设置所述表项的训练地址有效train_adr_vld=0,设置可写指示match_vld=0,此表项不再被写入。流水线读写电路中的锁存电路0的电路根据tarin_addr产生一个读请求发送给sel电路,被sel电路选中,发送到转发表,信息继续向下传,经过锁存电路1,锁存电路2,判断电路1,到达判断电路2,判断电路2新产生可写信号match_vld,锁存电路0读取的信息在3个时钟周期后返回判断电路2,同时训练地址train_addr也传递到判断电路2。判断电路2查看读回来的表项的有效标志vld和训练地址有效train_addr_vld是不是有效,如果二者有一个无效,则设置可写指示match_vld=0,判断电2路直接将训练地址train_addr、可写指示match_vld跟着训练信息向下传递到判断电路3;如果二者都有效,则需要判断读回来的sa_vlan跟想要写入的源地址sa_vlan是否一致,如果一致,将可写指示match_vld设置为1,跟其他信息一起向下传到判断电路3。如果不一样,则表明此地址已经被其他的sa_vlan占据,将可写指示match_vld与训练地址有效train_addr_vld设置为0,设置train_addr_vld=0,跟其他信息一起向下传到判断电路3。判断电路中的判断电路1和判断电路3,用于时刻监视本时钟周期内sel电路对转发表的写操作。如果sel电路对转发表本周期没有一个有效的写操作,则不做任何动作,信息直接向下传递。如果有一个有效的写操作,则提取写操作的地址,与传递至判断电路1或判断电路3的打算写入的地址进行比较,如果不相同,则不做任何操作,信息向下传递;如果相同,则需将信息中的可写指示match_vld与训练地址有效train_addr_vld同时置于0,表明本次的训练无效。在判断电路中,如果欲写入信息的转发表的表项被占用或者当前希望写入的地址已经或正在被sel电路进行写操作,保证了转发表的写入不会产生冲突和重复。流水线读写电路采用奇偶时隙对转发表进行读和写的操作,提升了转发表的最大包转发率。优选地,所述s5)具体步骤为:s51)训练地址train_addr与训练地址有效train_adr_vld以及可写指示match_vld向下传至转发表优先选择电路,所述转发表优先选择电路做优先级判断:match_vld=1的表项优先级设置为最高;否则,判断train_adr_vld=1的几个表项,序号最小的转发表的表项,优先级别设置为高级;s52)转发表优先选择电路将优先级别最高或高级的转发表的表项的写使能指示wr_ena_1x置为1,其他表项的写使能指示wr_ena_1x置为0;s53)sel电路根据写使能指示wr_ena_1x来决定是否sa_vlan和端口号port写入训练地址train_addr对应的表项,同时,表项中age也会被写入最大值max_age_times,有效标志vld设置为1。判断电路3的输出pw_ena_1x就是指match_vld以及train_addr_vld,发送到转发表优先选择电路,转发表优先选择电路判断转发表的优先级别,向优先级别最高的转发表发送写使能信号wr_ena_1x。这样可以保证在训练转发表的过程中,每次最多只有一个转发表的表项被选中,因此可以保证以太包的转发信息被写入转发表中的表项是唯一的。优选地,还包括老化控制电路,所述老化控制电路设置有age地址age_addr和老化周期age_period,所述老化控制电路的工作过程包括:m1):初始化age地址age_addr=0;m2):判断age地址age_addr是否大于转发表的深度table_deep,如果大于,结束老化过程;否则进入下一步;m3):读取age地址age_addr,获得表项中的age计数,将其减“1”,如果age≤1,则将表项的有效标志vld设置为“0”即当前转发表的该表项状态为可写入状态;m4):将减“1”后的age写入age地址age_addr;m5):age地址加1:age_addr=age_addr+1,返回步骤m2)。转发表的表项在写入信息之后,age这一项将被写入最大老化次数max_age_times在每个时隙即timeslot,采用遍历的方法对转发表的每个表项的age计数进行减“1”。当表项的age计数为“0”,表明该表项为空,该表项的状态为可写入状态。这样实现了转发表的动态更新。优选地,所述老化控制电路用于表项的老化过程,所述老化过程具体为:每过一个老化周期age_period的时间,老化控制电路将依次读取转发表中的每一个表项,然后判断,如果所述转发表的表项中age≤1,设置表项的有效标志vld=0;如果age>1,age=age-1,返回。转发表中表项的内容经过最大老化次数max_age_times的老化周期age_period后,如果还没有相同的训练信息来刷新这个表项,那么这个表项的信息将删除,通过将表项中的vld置“0”表示表项内容为空,为可写入状态。优选地,所述步骤s1)中fpga在上电启动时,外部输入n个互异的真随机数r,保存在顶层控制模块的寄存器的具体步骤包括:s1.1)系统上电:上电后由初始状态转换到锁存真随机数的状态;s1.2)锁存真随机数:从外部端口锁存一个真随机数,然后进入下一步;s1.3)相异检查:把当前锁存的真随机数与已经保存好的真随机数gf(r)依次对比,如果互不相同,进入下一步;否则,返回步骤s1.2)以锁定一个新的真随机数进来;s1.4)真随机数计数:记录当前已经锁存的真随机数的数量,如果当前真随机数的数量与转发表的数量相同,则进入下一步,否则,返回步骤s1.2)以锁定一个新的真随机数进来。当前随机数的数量少于转发表的数量时,继续锁存输入的随机数,当锁存的随机数的数量与转发表的数量相同是,进入工作状态,可以进行正常的训练与查询。采用这样随机确定映射参数方式,使转发表的性能稳定,避免由于极端的输入组合,造成哈希映射的恶化。优选地,所述转发表的训练包括mux电路、fifo电路、训练控制模块、转发表和转发表优先选择电路,所述转发表的查询包括mux电路、fifo电路、查询控制模块和输出电路比较电路,其中:mux电路:为fpga二选一电路,用以实现在电路处于初始状态与锁存真随机数状态时候,转发表电路不接受外部的训练与查询信息;fifo电路缓存所述数据信息源地址sa、虚拟局域网vlan和端口号port,每隔一个时钟周期提取一条信息并输入下游电路;训练控制模块:用于接收fifo电路输入的训练信息,包括哈希计算电路,以及由锁存电路与判断电路组成的读写流水控制电路,根据读写流水控制电路的判决来控制sa_vlan与端口号port的关联信息写入转发表;转发表优先选择电路:用于控制各个转发表被写入表项的优先级,当某一个sa_vlan与端口号port的关联信息可以被写入多个转发表中时候,此电路根据优先级确定只有最高优先级的转发表能写入此关联信息;查询控制模块:包括哈希计算电路、老化控制电路和时隙控制电路,用于接收fifo电路输入的查询信息,并选择转发表读取数据并输出至输出比较电路,同时由老化控制电路完成表项的老化功能;输出比较电路:由比较器组成,所述比较器的数量与转发表的数量相同,首先判断转发表输出表项内容是否有效,如果有效,则判断输出的sa_vlan是否与输入的da_vlan一致,如果一致则输出查询结果。优选地,所述查询控制模块包括:时隙控制电路:所述时隙控制电路在奇时隙选择查询模块对转发表进行读取操作,偶时隙选择age控制模块的对转发表进行读写操作;老化控制电路:用于转发表的表项的老化;哈希计算电路:用于转发表的训练和转发表的查询中,真随机数与da_vlan的哈希计算。外部交换电路收到一个数据包,会将数据包的da_vlan,与真随机数经过哈希计算,计算出一个地址。如果需要转发的数据包中不包含虚拟局域网vlan,则只将目的地址da与真随机数进行哈希计算。如果转发表的数量为n,则将同时计算n个地址,并且查询出n个表项的内容。这n个表项中,如果其中一个表项满足:表项有效并且表项的sa_vlan与查询的da_vlan相同,则查询成功,将此表项中的端口号作为数据包的转发端口发送出去。否则,显示查询失败。老化控制电路和哈希计算电路输出至时隙控制电路的控制信号包括转发表表项地址addr和读写控制信号rw_ena。优选地,所述哈希计算为:将输入的从以太包中提取的sa_vlan或da_vlan由数据分段电路分割为n个m比特,分别为gf(k1),gf(k2),…,gf(kn),与输入的随机数gf(r)的计算公式为:再将h做crc运算。采用同一个哈希计算规则gf(r),输入不同的参数构造成不同的哈希算子。同时采用随机数作为哈希算子的参数来增加不同哈希映射之间的不相干性。本发明与现有技术相比,具有以下优点及有益效果:(1)本发明采用多个小的转发表配合工作,来实现转发的功能,采用同一个哈希计算规则,即哈希算子,不同的参数构造成不同的哈希映射规则。采用随机数作为哈希算子的参数来增加不同哈希映射之间的不相干性,每个表使用不同的哈希映射,取得远高于通常的一张统一的转发表的表项负载率,并且大大节约fpga内部珍贵的bram资源。(2)整个电路工作在奇与偶两个时隙上,其中奇数时隙用于外部mac的查询;偶数时隙用于转发表的老化控制电路,训练电路的奇时隙写入与老化控制电路的时隙错开来,这样就可以避免出现同时对双口ram一个地址进行操作的冲突。流水线读写电路采用奇偶时隙对转发表进行读和写的操作,提升了转发表的最大包转发率。(3)本发明采用了时分复用的方式来控制转发表的读和写以及老化控制电路的老化功能,提高了并行处理的效率。(4)每次上电或者接收外部初始化的请求,都会触发对真随机数的重新选取,即每个哈希表在重新上电或者初始化后,其映射的规则都不相同,这样避免采用固定的哈希映射规则,使得对于某些特殊的mac或sa_vlan学习组合,转发表训练和转发表查询效果劣化的问题。附图说明图1为本发明的系统原理框图;图2为哈希计算电路的原理图;图3为读写控制流水线的原理图;图4为查询控制模块的原理图。具体实施方式下面结合实施例对本发明作进一步地详细说明,但本发明的实施方式不限于此。实施例1:结合附图1所示,一种分布式动态二层转发表的维护方法,包括转发表的训练、转发表的查询和转发表的老化,所述转发表的训练包括步骤:s1)fpga在上电启动时,外部输入n个互异的真随机数r,在有限域中表示为gf(r),保存在顶层控制模块的寄存器中,所述寄存器连接哈希计算模块的输入端口,所述n为fpga内部bram中转发表的数目,所述转发表的表项包括:mac:存储的源地址sa;vlan:与mac关联的vlanid;port:与mac关联的端口号;vld:该表项有效标志,“1”表示有效,“0”表示无效;age:计数项,用于记录老化计数,老化控制电路每隔一个固定的时间控制age减“1”;s2)交换电路发送数据信息写入fifo电路缓存,训练电路每隔一个时钟周期从fifo电路中读取一个数据信息,如果此时fifo为空,则读取出来的数据有效标志为0,所述数据信息包括源地址sa、虚拟局域网信息vlan和端口号port,训练控制模块将源地址sa和虚拟局域网信息vlan送入哈希计算模块,将源地址sa、虚拟局域网信息vlan和端口号port放入延迟模块;s3)将所述步骤s1)中的真随机数gf(r)和所述步骤s2)中源地址sa和虚拟局域网信息vlan的结合即sa_vlan,同时分别输入n个并行计算的训练控制电路进行哈希计算,运算结果为所述sa_vlan在转发表中待写入的地址;所述哈希计算产生训练地址train_addr和训练地址有效train_addr_vld,并传递至流水线读写电路,所述流水线读写电路包括锁存电路、判断电路和延迟模块;s4)所述判断电路读取所述地址对应的表项的有效标志vld以及所述训练地址train_addr和训练地址有效train_addr_vld,所述判断电路产生可写指示match_vld,若存在以下三个条件之一:哈希计算模块输出的训练地址有效train_addr_vld=0或在判断电路中发现train_addr跟当前写入表项的地址相等或在判断电路中欲写入的表项的有效标志vld=1但是所述表项的sa_vlan与欲写入表项的sa_vlan不相等,则将欲写使能信号pw_ena_1x被置为无效,即可写指示match_vld和训练地址有效train_addr_vld均置为“0”即无效状态,此表项不再写入;s5)转发表优先选择电路搜集所述地址对应的表项的欲写使能信号pw_ena_1x即可写指示match_vld和训练地址有效train_addr_vld,设置转发表的优先级,向具有优先级的转发表发送写使能信号wr_ena_1x,在sel电路中将wr_ena_1x为有效的转发表的表项写入sa_vlan和端口port,并将age置于最大值,同时表项的vld被置为高;s6)将要查询的转发端口的数据信息输入查询电路,用于与所述步骤s3)中的真随机数gf(r)经过与所述步骤s3)中相同的哈希计算,计算得出所述数据信息在转发表中的地址,从该表项中的port读出要查询的转发端口。fifo电路每隔一个时钟周期读取一个sa_vlan与端口号port,并与锁存在寄存器中互异且保持不变的真随机数做哈希计算,若源地址sa中不包含虚拟局域网信息vlan,则只将源地址sa与互异的真随机数做哈希计算。由于真随机数互异即哈希计算的哈希算子参数互异,可以得到sa_vlan和端口号port映射到转发表的表项的地址,训练控制模块将sa_vlan送入哈希计算模块,将sa_vlan、端口号port放入延迟模块。判断电路读取所述地址对应的表项的有效标志vld,如果有效标志vld=1,且表项中存储的sa_vlan与想要写入的sa_vlan不一样时,则放弃此次写入,当有效标志vld=0时,判断从哈希计算电路生成的训练地址train_addr在传递的过程中,是否train_addr地址对应的表项被写入,如果有,则train_addr被置为无效,将欲写使能信号即可写指示match_vld和训练地址有效train_addr_vld均置为0,放弃此次写操作。如果在传递的过程中,表项没有被写入,则训练地址train_addr、训练地址有效train_addr_vld和可写指示match_vld均为有效,继续向下传递。在传递至sel电路之前,由转发表优先选择电路对上述信号进行设定优先级,在sel电路,则根据表项的优先级,将信息写入优先级别较高的转发表的表项。当需要查询待发送的数据包的转发端口号时,由数据包的目的地址da和虚拟局域网信息vlan即da_vlan,与来自顶层控制模块的寄存器中的真随机数做哈希计算,如果目的地址da中不包含虚拟局域网信息vlan,则只将da与真随机数做哈希计算。所述真随机数是由顶层控制模块一起接入转发表训练模块和转发表查询模块的哈希计算电路中,并且由于此时的da_vlan,即转发表训练电路中的sa_vlan,因此哈希计算的规则相同,因此哈希计算的结果即为转发表训练过程中映射到表项的地址,找到所述地址对应的转发表的表项,读取表项中的sa_vlan的内容,与查询的da_vlan比较,如果相同,则读取表项中的port的内容,即找到转发该数据包的端口号。值得说明的是,步骤s3)-s6)在fpga电路中是同时进行的,因此大大缩短了计算时间,提高了效率。实施例2:在实施例1的基础上,结合附图1和图3所示,所述s4)具体步骤为:每隔一个时钟周期,哈希计算模块将输出一个训练地址train_addr与训练地址有效train_adr_vld,若train_adr_vld=0,不做任何动作,当train_adr_vld=1时,sa_vlan和端口号port会在流水线读写电路传递,通过训练地址train_addr读取表项,将这个地址对应的sa_vlan与表项相互比较:a)读取的表项没有被占即表项的vld=0,则训练地址train_addr与训练地址有效train_adr_vld原样向下传递;b)读取的表项已经被占用,但是占用该表项mac的内容与需要训练的sa_vlan不符合,则训练地址有效train_adr_vld=0,不做任何动作;c)读取的表项已经被占用,并且占领的mac与需要训练的sa_vlan相同,则train_adr_vld原样向下传递;d)流水线读写电路新置一个可写指示match_vld,当所述c)中的条件出现时,设置可写指示match_vld=1用于指示当前可写入的转发表,同一时间内表项的可写指示match_vld为“1”的转发表不超过一个;e)在训练地址train_addr与训练地址有效train_adr_vld的向下传递过程,若训练地址train_addr对应的表项被执行了一次写入操作,则设置所述表项的训练地址有效train_adr_vld=0,设置可写指示match_vld=0,此表项不再被写入。流水线读写电路中的锁存电路0的电路根据tarin_addr产生一个读请求发送给sel电路,被sel电路选中,发送到转发表,信息继续向下传,经过锁存电路1,锁存电路2,判断电路1,到达判断电路2,判断电路2新产生可写信号match_vld,锁存电路0读取的信息在3个时钟周期后返回判断电路2,同时训练地址train_addr也传递到判断电路2。判断电路2查看读回来的表项的有效标志vld和训练地址有效train_addr_vld是不是有效,如果二者有一个无效,则设置可写指示match_vld=0,判断电2路直接将训练地址train_addr、可写指示match_vld跟着训练信息向下传递到判断电路3;如果二者都有效,则需要判断读回来的sa_vlan跟想要写入的源地址sa_vlan是否一致,如果一致,将可写指示match_vld设置为1,跟其他信息一起向下传到判断电路3。如果不一样,则表明此地址已经被其他的sa_vlan占据,将可写指示match_vld与训练地址有效train_addr_vld设置为0,设置train_addr_vld=0,跟其他信息一起向下传到判断电路3。判断电路中的判断电路1和判断电路3,用于时刻监视本时钟周期内sel电路对转发表的写操作。如果sel电路对转发表本周期没有一个有效的写操作,则不做任何动作,信息直接向下传递。如果有一个有效的写操作,则提取写操作的地址,与传递至判断电路1或判断电路3的打算写入的地址进行比较,如果不相同,则不做任何操作,信息向下传递;如果相同,则需将信息中的可写指示match_vld与训练地址有效train_addr_vld同时置于0,表明本次的训练无效。在判断电路中,如果欲写入信息的转发表的表项被占用或者当前希望写入的地址已经或正在被sel电路进行写操作,保证了转发表的写入不会产生冲突和重复。优选地,所述s5)具体步骤为:s51)训练地址train_addr与训练地址有效train_adr_vld以及可写指示match_vld向下传至转发表优先选择电路,所述转发表优先选择电路做优先级判断:match_vld=1的表项优先级设置为最高;否则,判断train_adr_vld=1的几个表项,序号最小的转发表的表项,优先级别设置为高级;s52)转发表优先选择电路将优先级别最高或高级的转发表的表项的写使能指示wr_ena_1x置为1,其他表项的写使能指示wr_ena_1x置为0;s53)sel电路根据写使能指示wr_ena_1x来决定是否sa_vlan和端口号port写入训练地址train_addr对应的表项,同时,表项中age也会被写入最大值max_age_times,有效标志vld设置为1。判断电路3的输出pw_ena_1x就是指match_vld以及train_addr_vld,发送到转发表优先选择电路,转发表优先选择电路判断转发表的优先级别,向优先级别最高的转发表发送写使能信号wr_ena_1x。这样可以保证在训练转发表的过程中,每次最多只有一个转发表的表项被选中,因此可以保证以太包的转发信息被写入转发表中的表项是唯一的。实施例3:在实施例1的基础上,结合附图1和图4所示,还包括老化控制电路,所述老化控制电路设置有age地址age_addr和老化周期age_period,所述老化控制电路的工作过程包括:m1):初始化age地址age_addr=0;m2):判断age地址age_addr是否大于转发表的深度table_deep,如果大于,结束老化过程;否则进入下一步;m3):读取age地址age_addr,获得表项中的age计数,将其减“1”,如果age≤1,则将表项的有效标志vld设置为“0”即当前转发表的该表项状态为可写入状态;m4):将减“1”后的age写入age地址age_addr;m5):age地址加1:age_addr=age_addr+1,返回步骤m2)。转发表的表项在写入信息之后,age这一项将被写入最大老化次数max_age_times在每个时隙即timeslot,采用遍历的方法对转发表的每个表项的age计数进行减“1”。当表项的age计数为“0”,表明该表项为空,该表项的状态为可写入状态。这样实现了转发表的动态更新。优选地,所述老化控制电路用于表项的老化过程,所述老化过程具体为:每过一个老化周期age_period的时间,老化控制电路将依次读取转发表中的每一个表项,然后判断,如果所述转发表的表项中age≤1,设置表项的有效标志vld=0;如果age>1,age=age-1,返回。转发表中表项的内容经过一个老化周期age_period,如果还没有相同的训练信息来刷新这个表项,那么这个表项的信息将删除,通过将表项中的vld置“0”表示表项内容为空,为可写入状态。转发表训练过程会将表项的age刷新到最大值,老化控制电路是将age不断减小到0.老化控制电路的目的是将表项的有效标志vld置为“0”,age刷新的过程是为了将表项保持有效标志vld=1。实施例4:在实施例1的基础上,结合附图1所示,所述步骤s1)中fpga在上电启动时,外部输入n个互异的真随机数r,保存在顶层控制模块的寄存器的具体步骤包括:s1.1)系统上电:上电后由初始状态转换到锁存真随机数的状态;s1.2)锁存真随机数:从外部端口锁存一个真随机数,然后进入下一步;s1.3)相异检查:把当前锁存的真随机数与已经保存好的真随机数gf(r)依次对比,如果互不相同,进入下一步;否则,返回步骤s1.2)以锁定一个新的真随机数进来;s1.4)真随机数计数:记录当前已经锁存的真随机数的数量,如果当前真随机数的数量与转发表的数量相同,则进入下一步,否则,返回步骤s1.2)以锁定一个新的真随机数进来。当前随机数的数量少于转发表的数量时,继续锁存输入的随机数,当锁存的随机数的数量与转发表的数量相同是,进入工作状态,可以进行正常的训练与查询。采用这样随机确定映射参数方式,使转发表的性能稳定,避免由于极端的输入组合,造成哈希映射的恶化。实施例5:在实施例1的基础上,结合附图1、图3和图4所示,所述转发表的训练包括mux电路、fifo电路、训练控制模块、转发表和转发表优先选择电路,所述转发表的查询包括mux电路、fifo电路、查询控制模块和输出电路比较电路,其中:mux电路:为fpga二选一电路,用以实现在电路处于初始状态与锁存真随机数状态时候,转发表电路不接受外部的训练与查询信息;fifo电路缓存所述数据信息源地址sa、虚拟局域网vlan和端口号port,每隔一个时钟周期提取一条信息并输入下游电路;训练控制模块:用于接收fifo电路输入的训练信息,包括哈希计算电路,以及由锁存电路与判断电路组成的读写流水控制电路,根据读写流水控制电路的判决来控制sa_vlan与端口号port的关联信息写入转发表;转发表优先选择电路:用于控制各个转发表被写入表项的优先级,当某一个sa_vlan与端口号port的关联信息可以被写入多个转发表中时候,此电路根据优先级确定只有最高优先级的转发表能写入此关联信息;查询控制模块:包括哈希计算电路、老化控制电路和时隙控制电路,用于接收fifo电路输入的查询信息,并选择转发表读取数据并输出至输出比较电路,同时由老化控制电路完成表项的老化功能;输出比较电路:由比较器组成,所述比较器的数量与转发表的数量相同,首先判断转发表输出表项内容是否有效,如果有效,则判断输出的sa_vlan是否与输入的da_vlan一致,如果一致则输出查询结果。优选地,所述查询控制模块包括:时隙控制电路:所述时隙控制电路在奇时隙选择查询模块对转发表进行读取操作,偶时隙选择age控制模块的对转发表进行读写操作;老化控制电路:用于转发表的表项的老化;哈希计算电路:用于转发表的训练和转发表的查询中,真随机数与da_vlan的哈希计算。外部交换电路收到一个数据包,会将数据包的da_vlan,与真随机数经过哈希计算,计算出一个地址。如果需要转发的数据包中不包含虚拟局域网vlan,则只将目的地址da与真随机数进行哈希计算。如果转发表的数量为n,则将同时计算n个地址,并且查询出n个表项的内容。这n个表项中,如果其中一个表项满足:表项有效并且表项的sa_vlan与查询的da_vlan相同,则查询成功,将此表项中的端口号作为数据包的转发端口发送出去。否则,显示查询失败。fifo电路将数据包的mac和vlan提取出来,然后与真随机数经过哈希计算,计算出一个地址。如果转发表的数量为n,则将同时计算n个地址,并且查询出n个表项的内容。这n个表项中,如果其中一个表项满足:表项是有效的且表项内的mac和vlan与查询的目的mac和vlan一样,则查询成功,将此表项中的端口号作为数据包的转发端口发送出去。否则,显示查询失败。fpga的bram有两个接口,这两个接口可以同时访问,其中一个接口给转发表训练电路专用,而另外一个接口给查询功能以及老化控制电路按照时隙轮流使用。当一个数据包需要转发,fifo电路会提取mac或sa_vlan,然后发送给转发表,转发表查询模块收到一个mac或sa_vlan后,会先缓存于fifo电路中,每到奇计数时钟周期,一个mac或sa_vlan会被读取出来,经过哈希计算,计算的结果是一个表项的地址,记作ki(i=1,2,3,…n),这样n个表的地址ki(i=1,2,3,…n)对应的表项都会被读取出来,然后送入输出比较电路,判断哪个有效表项中的mac或sa_vlan与待查询能对应上,则表项中的端口号就是要输出的端口。实施例6:在以上实施例的基础上,结合附图1-4所示,所述哈希计算为:将输入的从以太包中提取的sa_vlan或da_vlan由数据分段电路分割为n个m比特,分别为gf(k1),gf(k2),…,gf(kn),与输入的随机数gf(r)的计算公式为:再将h做crc运算。采用同一个哈希计算规则gf(r),输入不同的参数构造成不同的哈希算子。同时采用随机数作为哈希算子的参数来增加不同哈希映射之间的不相干性。以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化,均落入本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1