Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
NetAdapterCx, çalışma zamanında TCP/IP sağlama toplamı görevlerinin aktarımını destekler.
TCP/IP aktarımı, istemci sürücüsüne bir NET_PACKET yapısını iletmeden önce, NET_PACKET_CHECKSUM paket uzantısında NET_PACKET ile ilişkili sağlama toplamı bilgilerini belirtir.
TCP/IP aktarımı, bir TCP/UDP paketi için sağlama toplamı hesaplama görevini devretmeden önce TCP/UDP geçici başlığı için birin tümleyeni toplamını hesaplar, bu durum Sağlama Toplamı Görevlerini Devretmekısmında açıklanmaktadır.
Genel Segmentasyon Boşaltma (GSO) etkinleştirildiğinde sağlama toplamı boşaltmalarının kapatılması, istemci sürücüsünün GSO özelliği tarafından oluşturulan paketlere sağlama toplamlarını hesaplamasını ve eklemesini engellemez. Sağlama toplamı boşaltmalarını tamamen devre dışı bırakmak için GSO'yi da devre dışı bırakmanız gerekir.
Sağlama toplamı boşaltmasını denetlemek için INF anahtar sözcükleri
NetAdapterCx, etkin boşaltma özelliklerini etkinleştirirken kayıt defteri anahtar sözcüklerini denetler ve bunlara saygı gösterir. Sürücünün başka bir işlem gerçekleştirmesi gerekmez.
Görev Aktarımını Etkinleştirmek ve Devre Dışı Bırakmak için Kayıt Defteri Değerlerini Kullanma başlığı altında belirtilen sağlama anahtar sözcükleri, bir kayıt defteri anahtarı ayarıyla sağlama aktarımını etkinleştirip/devre dışı bırakmak için kullanılabilir. Gruplandırılmış anahtar sözcükler desteklenmez.
Anahtar sözcük değerleri REG_SZtüründe olmalıdır.
Sağlama toplamı boşaltmayı yapılandırma
İstemci sürücüleri, ağ bağdaştırıcısı başlatma sırasında donanımlarının kontrol toplamı boşaltma özelliklerini ilk olarak tanıtır. Bir ağ bağdaştırıcısını başlatmadan önce, bu durum EvtDevicePrepareHardware geri çağırmasında oluşabilir.
İletme (Tx) doğrulama toplamı boşaltmayı yapılandırmak için istemci sürücüsünün:
NET_ADAPTER_OFFLOAD_TX_CHECKSUM_CAPABILITIES yapısını ayırır.
Yapıyı başlatmak için NET_ADAPTER_OFFLOAD_TX_CHECKSUM_CAPABILITIES_INIT çağırır.
Yapıyı NetAdapterCx'e kaydetmek için NetAdapterOffloadSetTxChecksumCapabilitiesçağırır.
NET_ADAPTER_OFFLOAD_TX_CHECKSUM_CAPABILITIES_INIT çağrısı sırasında istemci sürücüsü EVT_NET_ADAPTER_OFFLOAD_SET_TX_CHECKSUM geri çağırmaya yönelik bir işaretçi sağlar. Etkin boşaltma özellikleri değişirse sistem daha sonra bu geri çağırmayı çağırır.
Alma (Rx) sağlama toplamı boşaltmasını yapılandırmak için istemci sürücüsü:
NET_ADAPTER_OFFLOAD_RX_CHECKSUM_CAPABILITIES bir yapıyı ayırır.
Yapıyı başlatmak için NET_ADAPTER_OFFLOAD_RX_CHECKSUM_CAPABILITIES_INIT çağırır.
Yapıyı NetAdapterCx'e kaydetmek için NetAdapterOffloadSetRxChecksumCapabilitiesçağırır.
NET_ADAPTER_OFFLOAD_RX_CHECKSUM_CAPABILITIES_INIT çağrısı sırasında, istemci sürücüsü, EVT_NET_ADAPTER_OFFLOAD_SET_RX_CHECKSUM geri çağırma işlevine bir işaretçi sağlar. Etkin boşaltma özellikleri değişirse sistem daha sonra bu geri çağırmayı çağırır.
Donanımda iletim sağlama toplamı yeteneklerini belirten kurallar
NET_ADAPTER_OFFLOAD_TX_CHECKSUM_CAPABILITIES yapısındaki Layer3Flags ayarlanmalıdır. Layer4Flags ayarı isteğe bağlıdır. Layer3Flags ve Layer4Flags'ün ayarlanması, NIC'nin sağlama toplamı boşaltmasını gerçekleştirebileceği paketleri gösterir.
NET_ADAPTER_OFFLOAD_TX_CHECKSUM_CAPABILITIES içerisinde bulunan Layer3HeaderOffsetLimit ve Layer4HeaderOffsetLimit isteğe bağlıdır. İşletim sistemi, üst bilgi uzaklığı belirtilen sınırdan büyük olan bir paket gönderirse, NIC'den bu katmanın sağlama toplamını hesaplamasını istemez.
Seçenekler/uzantılar destekleniyorsa, seçenekler/uzantılar içermeyen IP/TCP paketleri desteklenmelidir.
Donanımın alma sağlama toplamı yeteneklerini belirten kurallar
NetAdapterCx, sürücünün donanımda alınan sağlama toplamı özelliklerini bildirmesini gerektirmez. Sağlama toplamı boşaltma etkinse, NIC işleyebileceği tüm paketlerde sağlama toplamı boşaltma gerçekleştirmelidir. NIC bir pakette hata kontrolü toplamı işlemi gerçekleştiremezse, NetAdapterCx bunu yazılımda gerçekleştirir.
Bu örnek, bir istemci sürücüsünün donanım sağlama toplamı boşaltma özelliklerini nasıl ayarlayabileceğini gösterir:
VOID
MyAdapterSetOffloadCapabilities(
NETADAPTER NetAdapter
)
{
// Configure the hardware's Tx checksum offload capabilities
NET_ADAPTER_OFFLOAD_TX_CHECKSUM_CAPABILITIES txChecksumOffloadCapabilities;
auto const layer3Flags = NetAdapterOffloadLayer3FlagIPv4NoOptions |
NetAdapterOffloadLayer3FlagIPv4WithOptions |
NetAdapterOffloadLayer3FlagIPv6NoExtensions |
NetAdapterOffloadLayer3FlagIPv6WithExtensions;
auto const layer4Flags = NetAdapterOffloadLayer4FlagTcpNoOptions |
NetAdapterOffloadLayer4FlagTcpWithOptions |
NetAdapterOffloadLayer4FlagUdp;
NET_ADAPTER_OFFLOAD_TX_CHECKSUM_CAPABILITIES_INIT(
&txChecksumOffloadCapabilities,
layer3Flags,
EvtAdapterOffloadSetTxChecksum);
txChecksumOffloadCapabilities.Layer4Flags = layer4Flags;
txChecksumOffloadCapabilities.Layer4HeaderOffsetLimit = 127;
// Set the current Tx checksum offload capabilities and register the callback for future changes in active capabilities
NetAdapterOffloadSetTxChecksumCapabilities(NetAdapter,
&txChecksumOffloadCapabilities);
// Configure the hardware's Rx checksum offload capabilities
NET_ADAPTER_OFFLOAD_RX_CHECKSUM_CAPABILITIES rxChecksumOffloadCapabilities;
NET_ADAPTER_OFFLOAD_RX_CHECKSUM_CAPABILITIES_INIT(
&rxChecksumOffloadCapabilities,
EvtAdapterOffloadSetRxChecksum);
// Set the current Rx checksum offload capabilities and register the callback for future changes in active capabilities
NetAdapterOffloadSetRxChecksumCapabilities(NetAdapter,
&rxChecksumOffloadCapabilities);
}
Donanım yüklerini güncelleştirme
TCP/IP yığını veya üzerindeki protokol sürücüsü, ağ bağdaştırıcısının etkin özelliklerinde değişiklik talep ederse, NetAdapterCx, istemci sürücüsünün bağdaştırıcı başlatma sırasında kaydedilen EVT_NET_ADAPTER_OFFLOAD_SET_TX_CHECKSUM veya EVT_NET_ADAPTER_OFFLOAD_SET_RX_CHECKSUM geri çağırma işlevini çalıştırır. Bu işlevlerde sistem, istemci sürücüsünün yük boşaltma özelliklerini güncelleştirmek için sorguladığı NETOFFLOAD nesnesinde güncelleştirilmiş özellikler sağlar.
İstemci sürücüleri, hangi sağlama toplamı boşaltmalarının etkinleştirildiğini belirlemek için aşağıdaki işlevleri çağırabilir:
- NetOffloadIsTxChecksumIPv4Enabled
- NetOffloadIsTxChecksumTcpEnabled
- NetOffloadIsTxChecksumUdpEnabled
- NetOffloadIsRxChecksumIPv4Enabled
- NetOffloadIsRxChecksumTcpEnabled
- NetOffloadIsRxChecksumUdpEnabled
Aşağıdaki örnekte, bir istemci sürücüsünün Tx/Rx checksum boşaltma özelliklerini nasıl güncelleyebileceği gösterilmektedir.
VOID
MyEvtAdapterOffloadSetTxChecksum(
NETADAPTER NetAdapter,
NETOFFLOAD Offload
)
{
PMY_NET_ADAPTER_CONTEXT adapterContext = MyGetNetAdapterContext(NetAdapter);
// Store the updated information in the context
adapterContext->TxHardwareIpChecksum = NetOffloadIsTxChecksumIPv4Enabled(Offload);
adapterContext->TxHardwareTcpChecksum = NetOffloadIsTxChecksumTcpEnabled(Offload);
adapterContext->TxHardwareUdpChecksum = NetOffloadIsTxChecksumUdpEnabled(Offload);
// Update the new hardware Tx checksum offload capabilities
MyUpdateHardwareChecksum(adapterContext);
}
VOID
MyEvtAdapterOffloadSetRxChecksum(
NETADAPTER NetAdapter,
NETOFFLOAD Offload
)
{
PMY_NET_ADAPTER_CONTEXT adapterContext = MyGetNetAdapterContext(NetAdapter);
// Store the updated information in the context
adapterContext->RxHardwareIpChecksum = NetOffloadIsRxChecksumIPv4Enabled(Offload);
adapterContext->RxHardwareTcpChecksum = NetOffloadIsRxChecksumTcpEnabled(Offload);
adapterContext->RxHardwareUdpChecksum = NetOffloadIsRxChecksumUdpEnabled(Offload);
// Update the new hardware Rx checksum offload capabilities
MyUpdateHardwareChecksum(adapterContext);
}
Ön kontrol toplamı işleme
İstemci sürücüsü, genellikle iletim yolunda aşağıdaki sağlama toplamı işlemlerini gerçekleştirir:
İstemci sürücüsü, NET_PACKET_CHECKSUM bir yapı elde etmek için paket diziniyle NetExtensionGetPacketChecksum işlevini çağırır.
İstemci sürücüsü, NET_PACKET_CHECKSUM yapısındaki katmana özgü bayrakları test eder.
Bayrak
NetPacketTxChecksumActionPassthroughise, NIC bu katmanda sağlama toplamı işlemlerini gerçekleştirmemelidir.bayrağı
NetPacketTxChecksumActionRequiredise istemci sürücüsü, NET_PACKET_LAYOUT yapısını kullanarak bu katmanda o pakette kullanılan protokolü belirlemeli ve paket için hangi sağlama toplamını hesaplaması gerektiğini NIC'ye göstermelidir.
İstemci sürücüsü paketi NIC'ye iletir; NIC ise paket için uygun sağlama toplamlarını hesaplar.
Sağlama toplamı kontrolü gerçekleştirme
sağlama toplamı görevlerini gerçekleştirdiği bir alma paketi için NET_PACKET yapısını göstermeden önce istemci sürücüsü sağlama toplamlarını doğrular ve NET_PACKET_CHECKSUM yapısında uygun bayrakları ayarlar.
Bayraklar aşağıdakilerden biri olabilir:
| Bayrak | Açıklama |
|---|---|
NetPacketRxChecksumEvaluationNotChecked |
NIC paketin sağlama toplamını doğrulayamadı |
NetPacketRxChecksumEvaluationValid |
Paketin sağlama toplamı geçerli |
NetPacketRxChecksumEvaluationInvalid |
Paketin sağlama toplamı geçersiz |