我正在编写一个 Linux 内核模块,我需要提出一个哈希函数,它需要两个整数作为输入。因为代码在内核空间中运行,所以没有一个标准库可供我使用。
基本上,我需要一个散列函数,其中:
hash(a, b) = c
hash(b, a) = c
其中 a 和 b 可接受的输入是无符号 32 位整数。散列函数应该返回一个无符号的 64 位整数。冲突(即 hash(a, b) = c 和 hash(d, f) = c)是不可取的,因为这些值将用于二叉搜索树。搜索的结果是可能结果的链接列表,然后在实际比较 a 和 b 的位置进行迭代。所以一些碰撞是可以接受的,但碰撞越少,需要的迭代越少,运行速度就越快。
性能也非常重要,当我编写防火墙应用程序时,此查找将用于系统中收到的每个数据包(整数实际上是数据包源和目标地址)。该函数用于查找现有的网络会话。
感谢您的时间。