0

マスターからスレーブに udp パケットを送信する低遅延アプリケーションに取り組んでいます。マスターは、データをスレーブに直接送信するアクセス ポイントとして機能します。ほとんどの場合、問題なく動作していますが、データが遅れてスレーブに到着することがあります。遅延の考えられる原因を絞り込むために、マスター デバイスで送信されたときにパケットにタイムスタンプを付けたいと考えています。

これを実現するには、パケットが送信された直後にタイムスタンプを取得できるフックが必要です。

http://www.xml.com/ldd/chapter/book/ch14.html#t7によると、パケットが送信された後に割り込みが発生するはずですが、tx 割り込みが処理されている場所を実際に見つけることができません。

これはドライバーです: drivers/net/wireless/bcmdhd/dhd_linux.c

dhd_start_xmit(..)別のドライバーから呼び出して、パケットを送信します。dhd_start_xmit(..)呼び出しdhd_sendpkt(..)、次にdhd_bus_txdata(..)(bcmdhd/dhdpcie.c で) が呼び出され、データがキューに入れられます。それは基本的に、キューが でスケジュールされた後に何が起こるかを見失うところですdhd_bus_schedule_queue(..)

質問

この特定のドライバーでパケットが物理的に送信された直後に何が起こるか知っている人はいますか?コードの一部を教えてくれますか?

もちろん、問題に取り組むための他のアドバイスも大歓迎です。

ありがとう

4

2 に答える 2

2

ネットワーク ハードウェアとネットワーク ドライバーの場合、次の手順が実行されます。

1. ドライバーには、ハードウェアが理解できる形式の送信記述子があります。

2. ドライバーは、現在の送信パケットでディスクリプターを埋め、それをハードウェア キューに送信して送信します。

  1. 送信が成功すると、ハードウェアによって割り込みが生成されます。

  2. この割り込みはドライバの送信完了関数と呼ばれ、前のパケットのメモリを解放し、ディスクリプタなどを含む多くのものをリセットします。

ここに行番号はありません。1829年、パケットが解放されていることがわかります。

PKTFREE(dhd->osh, pkt, TRUE);

ありがとう

于 2016-11-13T14:58:55.833 に答える
1

パケットは関数で解放されます

static void BCMFASTPATH
dhd_prot_txstatus_process(dhd_pub_t *dhd, void * buf, uint16 msglen)

ファイルdhd_msgbuf.c 内

PKTFREE(dhd->osh, pkt, TRUE);
于 2016-11-06T01:15:12.457 に答える