Bagikan melalui


Paket NDIS Looping Back

Jika bendera NDIS_NBL_FLAGS_IS_LOOPBACK_PACKET di anggota NblFlags dari struktur NET_BUFFER_LIST diatur, paket adalah paket loopback. Driver protokol dan driver filter dapat memeriksa bendera ini untuk menentukan apakah paket adalah paket loopback.

NDIS mengulang paket kembali jika semua dari tiga kondisi berikut terpenuhi:

  1. Jenis media adaptor miniport yang mendasar adalah NdisMedium802_3 atau NdisMedium802_5.

  2. Salah satu dari tiga kondisi berikut ini terpenuhi:

    1. Pengikatan protokol mengatur pengaturan NDIS_PACKET_TYPE_PROMISCUOUS dengan OID_GEN_CURRENT_PACKET_FILTER OID untuk menentukan filter paketnya (dan, untuk Windows 8 dan yang lebih baru, tidak mengatur NDIS_PACKET_TYPE_NO_LOCAL dalam OID yang sama) dan salah satu hal berikut ini benar:

      • Ada lebih dari satu pengikatan ke adaptor miniport.
      • Ada modul filter yang dilampirkan ke adaptor miniport dan modul filter mendaftarkan handler penerima.
    2. Pengikatan protokol mengatur pengaturan NDIS_PACKET_TYPE_ALL_LOCAL dengan OID_GEN_CURRENT_PACKET_FILTER OID untuk menentukan filter paketnya dan salah satu hal berikut ini benar.

      • Ada lebih dari satu pengikatan ke adaptor miniport.
      • Ada modul filter yang dilampirkan ke adaptor miniport dan modul filter mendaftarkan handler penerima.
    3. Pemanggil mengatur bendera NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK di parameter SendFlags dari fungsi NdisSendNetBufferLists .

  3. Paket dapat diterima sebagaimana ditentukan oleh filter paket yang diatur dengan OID_GEN_CURRENT_PACKET_FILTER OID untuk adaptor miniport. Berikut ini adalah beberapa contoh:

    • Jika paket adalah paket langsung, alamat tujuan dalam paket harus cocok dengan alamat MAC adaptor miniport.
    • Jika paket adalah paket multicast, filter paket harus memiliki set NDIS_PACKET_TYPE_ALL_MULTICAST atau alamat tujuan cocok dengan salah satu alamat multicast dalam daftar alamat multicast adaptor miniport dan filter paket memiliki set NDIS_PACKET_TYPE_MULTICAST.
    • Jika paket adalah paket siaran, filter paket adaptor miniport harus memiliki set NDIS_PACKET_TYPE_BROADCAST.
    • Filter paket adaptor miniport memiliki set NDIS_PACKET_TYPE_PROMISCUOUS atau NDIS_PACKET_TYPE_ALL_LOCAL.

Pengikatan protokol menerima paket loopback jika salah satu hal berikut ini benar:

  1. Pengikatan protokol adalah pengirim asli paket dan NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK diatur.

  2. Pengikatan protokol tidak diatur NDIS_PACKET_TYPE_NO_LOCAL dalam filter paket.

Pengikatan protokol tidak akan menerima paket loopback jika salah satu hal berikut ini benar:

  1. Set pengikatan protokol NDIS_PACKET_TYPE_NO_LOCAL dalam filter paket dan itu bukan pengirim asli untuk paket.

  2. Pengikatan protokol adalah pengirim asli tetapi NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK tidak diatur dalam parameter SendFlags dalam panggilan ke fungsi NdisSendNetBufferLists .

Gambar berikut menunjukkan alur logika algoritma loopback.

Diagram alur yang menunjukkan alur logika algoritma loopback.