2016-03-19 25 views
2

ドライバレベルでパケット操作をテストします。必要に応じて、既存のドライバコードを変更するはずです。 NICはRealtek 8101Eです。パケットをネットワークカードに送信する前にパケットを変更する方法

私はドライバの流れを見て、自分のデータをネットワークに送信する直前に自分のデータをパケットに追加したいと思っています。だから私はNICがパケットの所有権を取る直前に、ソースを読んでいます。

ドライバコードを変更する必要があるのは、後で新しいデータを書き込むために他のハードウェアレジスタを使用する必要があるからです。

  1. xxx_xmit()機能は、送信パケットを変更する適切な場所にする必要がありますか?

  2. xxx_xmit()機能でパケットマングリングコードを直接追加することに他の意味がありますか?

答えて

1

まず、xmitコールバックで実行できます。このコールバックは割り込みコンテキスト(SOFTIRQ)で実行されるので、ブロック操作を行うことはできません。 第2に、xmit関数のパケット変更には、受信関数の同様の「取り消し」関連コードが必要です。 パケットが上位層のネットワークフィルタを使用しています

+0

たとえば、追加のデータを埋めるためにハードウェアレジスタを使用する必要がある場合は、netfilterフックでアクセスすることができます(POST ROUTING )。 – Haswell

+0

問題がない場合は、ioremapを物理アドレスと一緒に使用して、たとえば次のように読み書きします。char * p = ioremap(ADDRESS、LEN); p [0] = 0x200; –

+0

アドレスをハードコーディングしたくない場合は、モジュールパラメータを使用してください。 –

関連する問題