hash 表配置管理状态机如下IDLE空闲状态。当复位完成、hash 表初始化时或每次命令执行结束均回到此状态等待。当软件下发增加/删除/修改/查询一个 MAC 地址映射关系的命令且 hash 值计算模块空闲时便启动状态机即从此状态跳出。HASH_CALhash 值计算。在软件配置映射关系后逻辑首先计算这个配置的 MAC 地址的 hash 值。Hash 算法为 CRC32 取低 13bit 。计算完毕之后进入 SEARCH_HASHT1。SEARCH_HASHT11 级 hash 表搜索。根据计算得到的 hash 值读 1 级hash 表获取链首信息。进入 LINK_JUDGE。LINK_JUDGE链表有效判断。此状态根据从一级 hash 表中读出的链首信息如果这是一条空链那么增加节点命令则直接进行请求删除/修改/查询节点命令则上报错误并回 IDLE 。如果这不是否是一条空链跳转入SEARCH_HASHT2。SEARCH_HASHT22 级 hash 表搜索。根据当前有效的表项指针信息读取表项内容。读取之后进入 NODE_JUDGE。NODE_JUDGE表项判断。对于每次查询到的节点信息按以下规则进行判断与当前配置的MAC地址匹配如果是增加节点信息则上报错误并回IDLE如果是查询节点信息则上报节点信息并回IDLE如果是删除/修改节点信息则跳转入UPDATE_NODE。与当前配置的MAC地址不匹配本级节点为链尾如果是增加节点信息则跳转入REQ如果是删除/修改/查询节点信息则上报错误并回IDLE本级节点不是链尾则回跳至SEARCH_HASHT2 进行下次的查找。REQ新表项申请。进入此状态如果表项未耗尽的话则申请一个新表项否则上报错误并回 IDLE。WAIT_UPDATE等待更新表项。因为逻辑的交换查询与软件的增加/删除/更改可能同时产生未了避免对 HASH 表同时读写而造成异常的风险。故在此状态等待 HASH 表操作空闲后进入 UPDATE_NODE。UPDATE_NODE更新表项。将软件配置的 MAC 地址映射信息更新当前的节点。如果是增加/删除表项在更新完当前节点后进入 UPDATE_PT 。如果是修改节点则结束任务回到 IDLE。UPDATE_PT更新指针。如果是增加表项将当前节点的地址指针写入上级节点中去。结束后回到 IDLE 。如果是删除表项将下级节点的地址指针写入上级节点中去。结束后进入 RLS。RLS旧表项释放。在删除完表项之后将旧表项写回资源池。进入IDLE。监控发送通道模块通过通过一个状态机完成对目的 MAC 交换映射关系的查询过程。目的 MAC 交换映射关系查询状态机如下IDLE空闲状态。当复位完成、hash 表初始化完成或每次命令执行结束均回到此状态等待。当收到 switch_ctrl 模块送过来的查询启动信号时便启动状态机即从此状态跳出。如果是广播地址则直接进入 SEARCH_FFT否则进入 HASH_CAL。HASH_CALhash 值计算。根据 switch_ctrl 模块送过来的 MAC 地址的计算 hash 值。Hash 算法为 CRC32 取低 13bit 。计算完毕之后进入SEARCH_HASHT1。SEARCH_HASHT11 级 hash 表搜索。根据计算得到的 hash 值读 1 级hash 表获取链首信息。进入 JUDGE。SEARCH_HASHT22 级 hash 表搜索。使用前次读出的链表指针作为 2级表地址读出表项信息并进入 JUDGE 状态。JUDGE节点判断状态。对于每次查询到的节点信息按以下规则进行判断如果是空链则进入SEARCH_FFT如果表项匹配则进入OUTPUT 输出目的端口号信息如果表项不匹配如果是链尾或查询次数超过256级则进入SEARCH_FFT如果不是链尾则回到SEARCH_HASHT2 继续查找下一级节点。SEARCH_FFT查询不匹配交换表。进入此状态则表示是广播地址或hash 表中没有匹配的表项。对于此类报文则统一查询 FFTFailed ForwardTable。OUTPUT查询结果输出。根据进入此状态的不同情况屏蔽源端口后输出最终的查询结果。