Définition des informations de NET_BUFFER_LIST

Un fournisseur de fractionnement d’en-tête-données doit définir les indicateurs de fractionnement en-tête-données dans le membre NblFlags des structures NET_BUFFER_LIST pour les indications de réception. Pour les trames fractionnées, une carte réseau doit également fournir l’adresse physique de la partie données de la trame reçue dans le membre DataPhysicalAddress de chaque structure NET_BUFFER .

Note Un pilote miniport peut définir le membre DataPhysicalAddress de la structure NET_BUFFER, même si le NET_BUFFER n’est pas associé à un frame fractionné. Dans ce cas, DataPhysicalAddress contient l’adresse physique de l’en-tête MDL.

Le fournisseur de fractionnement d’en-têtes de données combine les indicateurs du membre NblFlags avec une opération OR au niveau du bit.

Le fournisseur de fractionnement d’en-tête-données peut définir les indicateurs suivants même s’il ne fractionne pas un frame :

NDIS_NBL_FLAGS_IS_IPV4
Toutes les trames du NET_BUFFER_LIST sont des trames IPv4. Si cet indicateur est défini, l’indicateur NDIS_NBL_FLAGS_IS_IPV6 ne doit pas être défini.

NDIS_NBL_FLAGS_IS_IPV6
Toutes les trames du NET_BUFFER_LIST sont des images IPv6. Si cet indicateur est défini, l’indicateur NDIS_NBL_FLAGS_IS_IPV4 ne doit pas être défini.

NDIS_NBL_FLAGS_IS_TCP
Toutes les trames du NET_BUFFER_LIST sont des trames TCP. Si cet indicateur est défini, NDIS_NBL_FLAGS_IS_UDP ne doit pas être défini. Et NDIS_NBL_FLAGS_IS_IPV4 ou NDIS_NBL_FLAGS_IS_IPV6 doit être défini.

NDIS_NBL_FLAGS_IS_UDP
Toutes les trames du NET_BUFFER_LIST sont des trames UDP. Si cet indicateur est défini, NDIS_NBL_FLAGS_IS_TCP ne doit pas être défini. Et NDIS_NBL_FLAGS_IS_IPV4 ou NDIS_NBL_FLAGS_IS_IPV6 doit être défini.

Tout pilote NDIS peut définir les indicateurs précédents à des fins de débogage, de test ou à d’autres fins. Si un pilote définit ces indicateurs, les valeurs doivent décrire avec précision le contenu du frame reçu. Il est recommandé de définir ces indicateurs.

Le fournisseur de fractionnement d’en-tête-données peut définir les indicateurs de fractionnement d’en-tête-données suivants :

NDIS_NBL_FLAGS_HD_SPLIT
L’en-tête et les données sont fractionnées dans toutes les trames Ethernet associées à la structure NET_BUFFER_LIST .

NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER
Toutes les trames de la structure NET_BUFFER_LIST sont fractionnées au début de l’en-tête de protocole de couche supérieure. Si cet indicateur est défini, NDIS_NBL_FLAGS_IS_IPV4 ou NDIS_NBL_FLAGS_IS_IPV6 doit être défini. En outre, vous pouvez définir NDIS_NBL_FLAGS_IS_TCP ou NDIS_NBL_FLAGS_IS_UDP. Et NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD ne doit pas être défini.

NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD
Toutes les trames d’une structure NET_BUFFER_LIST sont fractionnées au début de la charge utile TCP ou au début de la charge utile UDP. Si cet indicateur est défini, NDIS_NBL_FLAGS_IS_IPV4 ou NDIS_NBL_FLAGS_IS_IPV6 doit être défini. Vous devez définir NDIS_NBL_FLAGS_IS_TCP ou NDIS_NBL_FLAGS_IS_UDP. En outre, NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER ne doit pas être défini.

Si le fournisseur de fractionnement d’en-tête-données ne fractionne pas un frame, le frame doit être indiqué avec les indicateurs suivants effacés dans NblFlags :

  • NDIS_NBL_FLAGS_HD_SPLIT

  • NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER

  • NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD