[0020] 为了使本领域相关技术人员更好地理解本发明的技术方案,下面将结合本发明实施方式的附图,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式仅仅是本发明一部分实施方式,而不是全部的实施方式。
[0021] 下面结合附图和实施方式对本发明作进一步说明。
[0022] 参阅图1,本发明提供的一种MAC地址学习时哈希冲突的同步方法,包括:
[0023] 步骤S100,创建一个同步队列,芯片每学习到一个MAC地址就将MAC地址信息加入到同步队列,MAC地址信息加入同步队列为先进先出的顺序;
[0024] MAC地址信息包括MAC地址学习内容和学习MAC地址的芯片标识,MAC地址学习内容即芯片学习到的MAC地址。芯片每学习到一个MAC地址,依照先后顺序放进同步队列,同步队列中,依照先进先出的原则,先进同步队列的MAC信息先同步。
[0025] 步骤S200,读取同步队列的第一条MAC地址信息。
[0026] 同步队列的第一条MAC地址,即同步队列的目标同步信息,同步队列的头部。读取第一条MAC地址信息,即MAC地址学习内容(MAC地址)和学习MAC地址的芯片标识。
[0027] 步骤S300,判断MAC地址对应的哈希桶是否已满;
[0028] 具体的,从MAC地址信息中提取出芯片标识;
[0029] 运用哈希算法得出哈希桶;
[0030] 判断非MAC地址学习芯片的哈希桶是否已满。
[0031] 芯片学习到的MAC地址是要同步到非学习芯片上,所以对应的哈希桶也是非学习芯片上的。
[0032] 步骤S400,若MAC地址对应的哈希桶未满,则将MAC地址同步到芯片;
[0033] 本实施例中,将MAC地址同步到芯片的步骤包括:
[0034] 从MAC地址信息提取地址添加到芯片;
[0035] 删除对应同步队列的MAC地址信息。
[0036] 步骤S500,若MAC地址对应的哈希桶已经满了,则进行哈希冲突处理步骤。
[0037] 具体的,哈希冲突处理步骤包括:
[0038] 逐条读取MAC地址对应的哈希桶里的地址信息并匹配所述同步队列中的MAC地址;
[0039] 若哈希桶里的地址信息与同步队列中的MAC地址匹配,则在芯片中删除匹配中的地址信息,并删除同步队列中匹配中的MAC地址信息,将同步队列的第一条MAC地址信息中的MAC地址同步到芯片;
[0040] 若哈希桶里的所有地址信息与同步队列中的MAC地址都不匹配,则直接删除同步队列中所有MAC地址信息。
[0041] 下面举例说明,假如现在有两个芯片,芯片对应的哈希桶容量为8,即可以存储8个MAC地址,。假设每个芯片都学习8个MAC地址,对应的哈希桶已经存储了8个MAC地址,还有8个在同步队列中。
[0042] 如何判断谁先学到谁后面学到呢?同步队列的顺序为准,先学到的肯定先进入队列,所以第一条MAC地址信息肯定比同步队列中的其他MAC地址先到,因为队列是按先进先出的原则操作的,第一条MAC地址信息是队列中的正在出队的MAC地址信息,其他的还在队列中。如果在一个芯片的哈希桶里面的地址信息与同步队列中MAC地址信息匹配,说明哈希桶里面的地址信息还没有完成同步,且该地址信息比同步队列第一条MAC地址信息晚学习到,应该将第一条MAC地址信息的MAC地址同步到该哈希桶,具体操作为先删除芯片中匹配的地址信息,并将同步队列中匹配中的MAC地址信息删除,再将第一条MAC地址信息中的MAC地址同步到芯片。
[0043] 在MAC地址对应的哈希桶满了后,通过上述步骤,提供一种哈希冲突处理机制,保证多个芯片的哈希表保持MAC地址一致,且保存先学习到的MAC地址。
[0044] 采用本发明的技术方案后,在MAC地址学习时发生哈希冲突,提供了一种处理方式,使多个芯片的哈希表保持MAC地址一致,且做到先学习到的MAC地址先存储到哈希表里,放弃后学习到的MAC地址。
[0045] 以上仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。