質問: 私の認識ではsk_buffに格納されているデータ=通信で送られてきたor送るパケットデータです。 今私はubuntu 16.04を使っているのですが、訳あってパケットサイズを調べたいです。 ネットワークインターフェースでしているmtuサイズを越えず、ちゃんと処理されて送られているかを知りたいです。 もし越えているようならフラグメンテーション処理が行われて変なパケットサイズになっていないかを調べたいです。 私は今printkを使用して、skb->lenでsk_buff内の全体の長さを出しています。 これで表示される数値がパケットサイズという認識なんですが、合っていますか? もしくはdata_lenでしょうか? mtuでは1500と設定されているのに、2000や3000といった明らかに大きい数値がでたので、私の認識が合っているを確認したく質問しました。 mtu<=sk_buff lenという認識で合っていますか?
回答: `sk_buff.len`であっていると思います。 ただ、NICでTSOやGSOを有効に設定していると、MTU以上のサイズのパケットが格納されることもあったと思います。(ドライバ層でパケットが再構成されるはず) `ethtool`コマンドで設定確認/無効化できるので、確認するとよいと思います。 なお、本来確認したいことについては、ネットワーク途中のスイッチやネットワークタップからパケットキャプチャして確認する方が正確かと思います。