Udostępnij przez


Zarządzanie elementami pierścienia sieciowego

Postępuj zgodnie ze wskazówkami w tym temacie, aby zarządzać strukturami NET_RING i ich elementami podczas transferu danych sieciowych. Reguły opisane w tym temacie dotyczą tego, które członkowie elementów pierścienia sieci mogą być modyfikowane przez sterowniki klientów i kiedy, w zależności od scenariusza ścieżki danych, jak również ogólnych informacji, które sterowniki klientów powinny mieć na uwadze w przypadku tych struktur.

Ważny

Sterowniki klientów powinny być zgodne z tymi wskazówkami we wszystkich fazach opracowywania. Jeśli sterownik klienta nie jest zgodny z tymi wskazówkami podczas testowania za pomocą Weryfikatora sterowników , weryfikator sterowników zgłasza naruszenie i powoduje sprawdzenie błędów na urządzeniu testowym.

NET_RING

Po uruchomieniu nadrzędnej kolejki pakietów NET_RINGwszystkie indeksy w pierścieniu są inicjowane na 0.

W poniższej tabeli opisano, które elementy członkowskie pierścienia sieci mogą modyfikować sterowniki klienta.

Pole Ma prawo do modyfikowania sterownika klienta
OSReserved1 Nie
ElementStride Nie
LiczbaElementów Nie
ElementIndexMask Nie
IndeksKońcowy Nie
OSReserved0 Nie
OSReserved2 Nie
BeginIndex Tak (wymagane)
NastępnyIndeks Tak (opcjonalnie) Uwaga: struktura nigdy nie odczytuje NextIndex.
Zadrapanie Tak (opcjonalnie) Uwaga: framework nigdy nie odczytuje Scratch.
Bufor Nie

Sterowniki klienta nie mogą modyfikować żadnych elementów członkowskich tylko do odczytu tej struktury ani nigdy nie powinny zwiększać BeginIndex przez EndIndex w trakcie wywoływania EvtPacketQueueAdvance.

Aby uzyskać więcej informacji na temat własności indeksu w pierścieniach sieciowych, zobacz Wprowadzenie do pierścieni sieciowych.

NET_PACKET

Pola w NET_PACKET są wrażliwe na różne konteksty, w których działa ścieżka danych. Określa, czy pakiet Ignoruj pole jest ustawione i czy sterownik odbiera (Rx) lub przesyła pakiet (Tx) zmienia zestaw reguł, który jest stosowany do pakietu.

Poniższa tabela zawiera wskazówki dla kierowców w każdym scenariuszu.

Rx lub Tx Pole ignorowania jest ustawiane przez... Notatki
Rx Sterownik klienta
  • Podczas Rx sterowniki klienta ustawiają Ignoruj w razie potrzeby, a platforma to odczytuje. Sterowniki klienta nie muszą odczytywać ignoruj w żadnym momencie podczas języka Rx.
  • Jeśli sterownik klienta ustawia pole Ignoruj podczas języka Rx, wówczas:
    • Sterowniki klienta muszą zapisywać w polu Ignoruj podczas anulowania operacji Rx dla każdego pakietu, który nie został pomyślnie zaprogramowany na sprzętowe urządzenie. Aby uzyskać więcej informacji, zobacz Anulowanie danych sieciowych za pomocą pierścieni sieciowych.
    • Sterowniki klienta nie mogą kojarzyć zasobów z pakietem, ponieważ nie zostaną zwolnione.
  • Jeśli sterownik klienta nie ustawi pola Ignoruj podczas Rx, wówczas:
    • Sterowniki klienta muszą wypełniać FragmentIndex, FragmentCounti wszystkie pola w Layout.
    • FragmentIndex musi znajdować się między BeginIndex włącznie a EndIndex wyłączając w pierścieniu fragmentów.
    • FragmentCount nie może przekraczać liczby fragmentów między BeginIndex włącznie i EndIndex wyłącznie w pierścieniu fragmentów.
    • Sterowniki klienta muszą przenieść pierścień pakietów BeginIndex, jeśli przeniosą odpowiadający mu pierścień fragmentu BeginIndex.
    • Po wywołaniu EvtPacketQueueAdvance, jeśli sterownik klienta inkrementuje indeks pierścienia pakietów BeginIndex, to sterownik musi również inkrementować indeks pierścieni fragmentów BeginIndex pomiędzy fragmentami tego pakietu. Innymi słowy, fragment pierścienia BeginIndex powinien przesunąć się do EndIndex fragmentów poprzedniego pakietu.
Tx NetAdapterCx
  • Sterowniki klienta nie mogą modyfikować żadnych pól w żadnym pakiecie z wyjątkiem Scratch.
  • Sterowniki klienta mogą odczytywać wartość Ignore, ale nigdy nie mogą do niej zapisywać.
  • Jeśli pakiet Tx jest ignorowany, sterownik nie może odczytać żadnych pól, z wyjątkiem ewentualnie Scratch, w razie potrzeby.

UKŁAD_ZAKRESU_SIECI

Podczas operacji Rx pole LayoutNET_PACKET podlega następującym regułom:

  • Wszystkie pola z wyjątkiem Reserved0 muszą być inicjowane przez sterownik klienta.
  • Jeśli Layer2Type jest ustawiona na NetPacketLayer2TypeEthernet, Layer2HeaderLength musi być 14 lub nowszy.
  • Jeśli Layer2Type ma ustawioną wartość NetPacketLayer2TypeNull, Layer2HeaderLength musi być ustawiona na wartość 0.
  • Jeśli Layer3Type jest typem IPv4, layer3HeaderLength musi być 20 lub nowszy.
  • Jeśli Layer3Type jest typem IPv6, Layer3HeaderLength musi być 40 lub nowszy.
  • Jeśli Layer4Type jest ustawiony na Tcp, długość nagłówka warstwy 4 musi być 40 lub większa.
  • Jeśli Layer4Type jest ustawiony na UDP, wtedy Layer4HeaderLength musi być 8 lub większy.
  • Pola typu warstwy muszą mieścić się w odpowiednim zakresie wartości wyliczeniowych.

Layout nie jest używany podczas tx.

NET_FRAGMENT

NET_FRAGMENT reguły pól zależą od tego, czy sterownik odbiera, czy przesyła, oraz od tego, czy bufory fragmentów są dołączone do pakietów przez sterownik, czy przez ramy.

Rx lub Tx Notatki
Rx
  • Sterowniki klienta nie mogą zapisywać w polu OsReserved_Bounced.
  • Jeśli sterownik nie jest dołączany, nie należy modyfikować pojemności, ale należy zmodyfikować ValidLength i przesunięcia.
  • Jeśli sterownik jest dołączany, Capacity, ValidLengthi Offset muszą zostać zmodyfikowane.
  • przesunięcie + ValidLength musi być mniejsze niż pojemność.
Tx
  • Sterowniki klienta nie mogą modyfikować żadnych pól z wyjątkiem Scratch .