Menambahkan Data Port Destinasi Switch yang Bisa Diperluas ke Paket
Topik ini menjelaskan bagaimana ekstensi sakelar Hyper-V yang dapat diperluas menentukan bagaimana pengiriman paket ke satu atau lebih port tujuan. Ekstensi ini juga dapat meneruskan paket ke adaptor jaringan fisik individu yang terhubung ke adaptor jaringan eksternal switch yang dapat diperluas.
Catatan Hanya ekstensi penerusan atau sakelar itu sendiri yang dapat meneruskan paket ke sakelar ekstensible atau ke adaptor jaringan individual.
Gambar berikut menunjukkan jalur data untuk lalu lintas paket melalui tumpukan driver sakelar yang dapat diperluas untuk NDIS 6.40 (Windows Server 2012 R2) dan versi yang lebih baru. Kedua gambar juga menunjukkan jalur data lalu lintas paket menuju atau dari adaptor jaringan yang terhubung ke port sakelar ekstensi.
Gambar berikut menunjukkan jalur data untuk lalu lintas paket data melalui tumpukan driver sakelar ekstensibel untuk NDIS 6.30 (Windows Server 2012).
Setiap port tujuan sakelar ekstensibel ditentukan oleh elemen NDIS_SWITCH_PORT_DESTINATION dalam struktur NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY. Array ini terkandung dalam konteks penerusan out-of-band (OOB) dari struktur NET_BUFFER_LIST paket. Untuk informasi lebih lanjut mengenai konteks ini, lihat Hyper-V Konteks Penerusan Sakelar Ekstensibel.
Jika ekstensi penerusan terikat dan diaktifkan dalam tumpukan driver sakelar yang dapat diperluas, ia bertanggung jawab untuk menentukan port tujuan untuk setiap paket yang diperoleh dari jalur data masuk sakelar ekstensi, kecuali jika paket tersebut adalah paket NVGRE. Untuk informasi selengkapnya tentang jalur data ini, lihat Gambaran Umum Hyper-V Extensible Switch Data Path. Untuk informasi lebih lanjut tentang paket NVGRE, lihat Penerusan Hibrid.
Catatan Jika ekstensi penerusan tidak terikat atau diaktifkan di tumpukan driver, sakelar yang dapat diperluas menentukan port tujuan untuk paket yang diperolehnya dari jalur data masuk.
Ekstensi penerusan harus mengikuti panduan ini ketika menentukan port tujuan untuk paket yang diperoleh pada jalur data ingress:
Ekstensi harus menginisialisasi struktur NDIS_SWITCH_PORT_DESTINATION dalam struktur NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY dengan informasi port tujuan.
Jika port tujuan tidak terhubung ke adaptor jaringan eksternal, ekstensi harus menetapkan anggota NicIndex dari struktur NDIS_SWITCH_PORT_DESTINATION ke NDIS_SWITCH_DEFAULT_NIC_INDEX.
Jika port tujuan tersambung ke adaptor jaringan eksternal pada sakelar yang dapat diperluas, ekstensi dapat menentukan indeks dari adaptor jaringan fisik di bawahnya untuk meneruskan permintaan pengiriman. Ekstensi melakukan ini dengan menetapkan anggota NicIndex ke nilai NDIS_SWITCH_NIC_INDEX yang tidak nol dari adaptor jaringan tujuan yang terikat pada adaptor jaringan eksternal.
Untuk informasi selengkapnya, lihat Penerusan Paket ke Adaptor Jaringan Fisik di bagian .
Ekstensi harus menambahkan port tujuan ke data OOB paket hanya untuk port yang memiliki koneksi adaptor jaringan aktif. Jika ekstensi telah meneruskan permintaan OID_SWITCH_NIC_DISCONNECT, ekstensi tidak boleh menambahkan port tujuan yang terkait dengan adaptor jaringan yang terputus.
Untuk meningkatkan performa, ekstensi hanya boleh menambahkan tujuan port yang valid untuk pengiriman paket. Dalam hal ini, ekstensi harus menetapkan anggota struktur IsExcluded dari NDIS_SWITCH_PORT_DESTINATION port tujuan ke FALSE.
Untuk menyimpan data jaringan area lokal virtual (VLAN) 802.1Q dalam paket sebelum dikirimkan ke port, ekstensi mengatur anggota PreserveVLAN menjadi TRUE.
Untuk menghapus data jaringan area lokal virtual (VLAN) 802.1Q dalam paket sebelum dikirimkan ke port, ekstensi mengatur anggota PreserveVLAN ke FALSE.
Untuk menyimpan data prioritas 802.1Q dalam paket sebelum dikirimkan ke port, ekstensi mengatur PreservePriority anggota ke TRUE.
Untuk menghapus data prioritas 802.1Q dari sebuah paket sebelum paket tersebut dikirim ke port, ekstensi mengatur anggota PreservePriority menjadi FALSE.
Jika ekstensi penerusan menambahkan beberapa port tujuan untuk paket, ekstensi tersebut harus mengikuti langkah-langkah berikut:
Ekstensi pertama-tama mengakses struktur NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO paket dengan menggunakan makro NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL. Ekstensi kemudian membaca anggota NumAvailableDestinations untuk menentukan berapa banyak elemen port tujuan yang tidak digunakan yang tersedia dalam array port tujuan. Jika ekstensi memerlukan lebih banyak port tujuan daripada yang tersedia dalam array, ekstensi harus memanggil fungsi GrowNetBufferListDestinations untuk mengalokasikan ruang untuk port tujuan tambahan dalam array.
Ketika ekstensi memanggil growNetBufferListDestinations, ekstensi mengatur parameter NumberOfNewDestinations ke jumlah port tujuan baru yang akan ditambahkan ke paket.
Ekstensi ini juga menetapkan parameter NetBufferLists ke penunjuk ke struktur NET_BUFFER_LIST paket.
Catatan Jika ada port tujuan yang tersedia dalam array, ekstensi tidak boleh memanggil GrowNetBufferListDestinations.
Jika fungsiGrowNetBufferListDestinations berhasil dikembalikan, fungsi tersebut telah menambahkan port tujuan tambahan ke akhir array tujuan dalam struktur NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY. Penunjuk ke struktur ini dikembalikan dalam parameter Tujuan.
Catatan Jika fungsiGrowNetBufferListDestinations tidak dapat mengalokasikan jumlah port tujuan yang diminta, fungsi tersebut mengembalikan NDIS_STATUS_RESOURCES.
Ekstensi menentukan elemen port tujuan baru dalam struktur NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY. Ekstensi ini menginisialisasi setiap port tujuan baru sebagai struktur NDIS_SWITCH_PORT_DESTINATION.
** Ekstensi ini menginisialisasi port tujuan baru ke dalam array mulai dari offset NumDestinations. NumDestinations adalah anggota struktur NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY.
Setelah ekstensi selesai menambahkan atau memodifikasi elemen port tujuan, ekstensi harus memanggil UpdateNetBufferListDestinations untuk menerapkan perubahan tersebut.
Jika ekstensi menambahkan satu port tujuan untuk paket, ekstensi harus mengikuti langkah-langkah berikut:
Ekstensi menginisialisasi informasi port tujuan untuk paket dalam struktur NDIS_SWITCH_PORT_DESTINATION yang telah dialokasikan oleh ekstensi.
Ekstensi memanggil addNetBufferListDestination untuk menerapkan perubahan pada struktur NET_BUFFER_LIST untuk paket. Ekstensi meneruskan alamat struktur NDIS_SWITCH_PORT_DESTINATION dalam parameter Destination.
Catatan Ekstensi tidak boleh memanggil fungsiUpdateNetBufferListDestinationsuntuk menerapkan perubahan pada paket hanya dengan satu port tujuan.
Ketika ekstensi penerusan memanggil AddNetBufferListDestination atau UpdateNetBufferListDestinations untuk menerapkan perubahan untuk port tujuan, antarmuka sakelar yang dapat diperluas tidak akan menghapus port sakelar yang dapat diperluas yang ditentukan dalam elemen struktur NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY. Setelah operasi pengiriman atau penerimaan paket selesai, antarmuka bebas untuk menghapus port jika diperlukan.
Catatan Setelah ekstensi penerusan menerapkan perubahan untuk port tujuan ke dalam konteks penerusan, port tujuan tidak dapat dihapus dan hanya anggota IsExcluded dari struktur NDIS_SWITCH_PORT_DESTINATION port tujuan yang dapat diubah. Untuk informasi selengkapnya, lihat Mengecualikan Pengiriman Paket ke Port Tujuan Switch yang Dapat Diperluas.
Ekstensi penerusan harus menyinkronkan penanganan permintaan set pengidentifikasi objek (OID) OID_SWITCH_NIC_DISCONNECT dengan kodenya yang menambahkan port tujuan untuk adaptor jaringan yang terputus.
Jika dipanggilnya ekstensi penerusan untuk permintaan OID_SWITCH_NIC_DISCONNECT melaluiFilterOidRequest, ekstensi dapat melakukan salah satu hal berikut:
Jika ekstensi bernama NdisFOidRequest digunakan untuk meneruskan permintaan OID ini, ekstensi tidak boleh menentukan port yang adaptor jaringannya putus sebagai port tujuan paket.
Catatan Jika satu-satunya port tujuan untuk paket adalah yang memiliki adaptor jaringan yang terputus, ekstensi harus menghilangkan paket.
Ekstensi dapat mengembalikan NDIS_STATUS_PENDING untuk menyelesaikan permintaan secara asinkron. Ini memungkinkan ekstensi untuk menambahkan port dengan adaptor jaringan yang terputus sebagai port tujuan untuk paket. Ini juga memungkinkan ekstensi untuk memanggil AddNetBufferListDestination atau UpdateNetBufferListDestinations dan menyelesaikan penambahan port tujuan ke paket.
Ekstensi mungkin ingin melakukan ini untuk paket yang harus diteruskan ke port sebelum koneksi port dicabut.
Catatan Jika ekstensi mengembalikan NDIS_STATUS_PENDING, ekstensi juga dapat memanggil ReferenceSwitchPort untuk menaikkan penghitung referensi untuk port dengan adaptor jaringan yang terputus. Namun, ekstensi tidak dapat meneruskan permintaan OID hingga setelah memanggil DereferenceSwitchPort guna mengurangi penghitung referensi pada port.
Jika jumlah port tujuan adalah nol, ekstensi penerusan harus memanggil NdisMSendNetBufferListsComplete untuk menghilangkan paket. Ekstensi juga harus memanggil ReportFilteredNetBufferLists untuk memberi tahu antarmuka sakelar yang dapat diperluas tentang paket yang dihilangkan.
Catatan Jika ekstensi penerusan memperoleh daftar tertaut struktur NET_BUFFER_LIST untuk beberapa paket dari jalur data ingress, ekstensi tersebut harus membuat daftar terpisah paket yang dihilangkan. Dengan melakukan ini, ekstensi dapat memanggil NdisMSendNetBufferListsComplete dan ReportFilteredNetBufferLists sekali saja.
Jika jumlah port tujuan lebih besar dari nol, ekstensi penerusan harus memanggil NdisFSendNetBufferLists untuk meneruskan paket melalui jalur data masuk ke tepi miniport sakelar yang dapat diperluas.
Catatan Jika ekstensi penerusan memperoleh daftar tertaut struktur NET_BUFFER_LIST untuk beberapa paket dari jalur data ingress, ekstensi tersebut harus membuat daftar terpisah paket yang diteruskan. Dengan melakukan ini, ekstensi dapat memanggil NdisFSendNetBufferLists hanya sekali untuk meneruskan daftar paket. Selain itu, ekstensi harus mempertahankan daftar terpisah untuk meneruskan paket yang memiliki port tujuan yang sama. Untuk informasi selengkapnya, lihat Fitur Kirim dan Terima Sakelar Ekstensibel Hyper-V.