編集:私が知る限り、イーサネットヘッダーを実際に確認せずに、sk_buff構造体を使用してゼロパディングを直接チェックする方法はありません。これは非常に簡単です。
とは言うものの、いくつかの単純なポインター演算とバイト減算を使用すると、IPデータの長さフィールドを使用してパディングを把握できます。
これはsk_buffの良いリファレンスです:http:
//vger.kernel.org/~davem/skb_data.html
そして、これはパケット構造の良いリファレンスであり、「データ」内の一番下の画像の「長さ」フィールドを示しています。
http://nerdcrunch.com/wp-content/uploads/2011/05/Ethernet-Frame-Explained.png
これが行われなければならない方法だと思いますが、以前に維持していたように解析する必要はありません。ヘッダー/データ構造フィールドは、解析せずにポインター/配列を介して直接参照/削除できるように設定されています。次に、生のパケット長からヘッダー+データ長を差し引くことで、すべてデータを検査せずにパディングを取得できます。
お役に立てば幸いです。
また、ベストプラクティスとして、802.3の両方のバージョンのドライバーアカウントを使用している必要があります。これを行うには、Ethertype/lengthフィールドを調べます。値が1536(0x0600)より大きい場合、それはイーサネットIIタイプのパケットであり、フィールドにはイーサネットパケットが何をカプセル化するかを示すイーサタイプが含まれます。「Ethertype」のウィキペディアで人気のあるものがいくつかあります。
たとえば、IP=0x0800です。フィールドがEthertypeを指定している場合、パディングを見つけるために、内部のデータ長フィールドを見つけることに頼らなければなりません。そうでない場合、イーサネットベースのLANの多くはまだそうではありませんが、長さとして指定されたフィールドを直接使用して作業を行うことができます。