igb(4)を理解する為にデータシートを読む(RSSハッシュ関数用のシード設定)

igb_initialize_receive_unitsをみると

arc4rand(&random, sizeof(random), 0);

でランダムな値を取得してきて

for (int i = 0; i < 10; i++)
        E1000_WRITE_REG_ARRAY(hw,
            E1000_RSSRK(0), i, random[i]);

で書き込んでいる。
データシートを読むとRSSRKはRSS Random Key Registerと書いてある(8.10.21)ので、ハッシュ関数のシードだと考えられる。

同一のシードを元にToeplitzハッシュ関数で同じパケットのヘッダ値からハッシュ値を計算すると、OS上で計算した値とNICで計算した値が一致する事を確認した(詳細は省略)。