Compartilhar via


união NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO (ndis.h)

A união NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO especifica as informações para encaminhar um pacote para uma ou mais portas de comutador extensível do Hyper-V.

Essas informações estão contidas nos dados OOB (fora de banda) da estrutura de NET_BUFFER_LIST do pacote.

Sintaxe

typedef union _NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO {
  UINT64 AsUINT64;
  struct {
    UINT32 NumAvailableDestinations : 16;
    UINT32 SourcePortId : 16;
    UINT32 SourceNicIndex : 8;
    UINT32 NativeForwardingRequired : 1;
#if ...
    UINT32 Reserved1 : 1;
#else
    UINT32 Reserved1 : 2;
#endif
    UINT32 IsPacketDataSafe : 1;
    UINT32 SafePacketDataSize : 12;
    UINT32 IsPacketDataUncached : 1;
    UINT32 IsSafePacketDataUncached : 1;
    UINT32 Reserved2 : 7;
  };
} NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO, *PNDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO;

Membros

AsUINT64

O valor NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO completo de 64 bits.

NumAvailableDestinations

Um valor que especifica o número de elementos de portas de destino de comutador extensível não utilizados em uma estrutura NET_BUFFER_LIST . Para obter mais informações, consulte a seção Comentários.

SourcePortId

O identificador da porta do comutador extensível de origem da qual o NET_BUFFER_LIST se originou.

SourceNicIndex

Um valor UINT32 que especifica o índice do adaptador de rede de origem que está conectado à porta de comutador extensível especificada pelo membro SourcePortId .

Para obter mais informações sobre esse valor de índice, consulte Valores de índice do adaptador de rede.

NativeForwardingRequired

Se esse membro for definido como TRUE, o pacote será um pacote NVGRE e o componente HNV (Virtualização de Rede Hyper-V) do comutador extensível do Hyper-V encaminhará esse pacote. Para obter mais informações, consulte Encaminhamento híbrido.

Esse sinalizador não deve ser gravado por nenhuma extensão.

Nota Esse sinalizador só está disponível no NDIS 6.40 e posterior.

Reserved1

Esse membro é reservado para uso futuro pelo NDIS.

Esse membro é reservado para uso futuro pelo NDIS.

IsPacketDataSafe

Se esse membro estiver definido como TRUE, todos os dados do pacote serão provenientes da memória de host confiável.

SafePacketDataSize

Um valor que especifica o número de bytes consecutivos nos dados do pacote localizados na memória de host confiável. Esse valor está em unidades de bytes desde o início dos dados do pacote. O restante dos dados do pacote (se houver) após o valor SafePacketDataSize está localizado na memória compartilhada não confiável que é acessada pelas partições pai e filho do Hyper-V.

Para obter mais informações, consulte a seção Comentários.

Nota Esse membro só será válido se o membro IsPacketDataSafe estiver definido como FALSE.

IsPacketDataUncached

Se esse sinalizador não estiver definido, todos os dados do pacote serão armazenados em cache. Se estiver definido, parte ou todos os dados não serão armazenados em cache. Quando definido, marcar o campo IsSafePacketDataUncached para ver se pelo menos a parte SafePacketData está armazenada em cache.

IsSafePacketDataUncached

Se o sinalizador IsPacketDataUncached estiver definido, esse campo indicará se a parte SafePacketData do pacote está armazenada em cache. Nesse caso, consulte o campo SafePacketDataSize para saber quantos bytes são armazenados em cache.

Reserved2

Esse membro é reservado para uso futuro pelo NDIS.

Comentários

As extensões de comutador extensíveis podem usar a macro NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL para acessar a união NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO em uma estrutura NET_BUFFER_LIST .

O membro NumAvailableDestinations da união NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO especifica o número de elementos de porta de destino de comutador extensível não utilizados em uma estrutura de NET_BUFFER_LIST . Cada porta de destino do comutador extensível é especificada por um elemento NDIS_SWITCH_PORT_DESTINATION dentro da estrutura NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY de uma estrutura NET_BUFFER_LIST . A extensão de comutador extensível chama GetNetBufferListDestinations para obter o NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY atual em uma estrutura NET_BUFFER_LIST .

O membro NativeForwardingRequired especifica se o pacote é um pacote NVGRE ou não. Se for TRUE, o pacote será um pacote NVGRE e a extensão de encaminhamento não determinará a matriz de porta de destino de encaminhamento do pacote, embora possa adicionar ou excluir portas de destino na matriz. Para obter mais informações, consulte Encaminhamento híbrido.

O sinalizador IsPacketDataUncached pode ajudar as extensões de comutador a determinar se parte ou todos os dados do pacote estão armazenados em cache ou não. Se esse sinalizador estiver definido, parte ou todos os dados não serão armazenados em cache e o sinalizador IsSafePacketDataUncached informará à extensão se a parte de dados do pacote seguro está armazenada em cache. Se os dados do pacote seguro forem armazenados em cache, o membro SafePacketDataSize especificará quantos bytes serão armazenados em cache.

SafePacketDataSize especifica o tamanho dos dados do pacote localizados na memória local ou confiável no sistema operacional pai da partição pai do Hyper-V. Essa memória não é acessível pela partição filho. Portanto, ele é considerado "seguro" contra atualizações não sincronizadas pelo sistema operacional convidado que é executado nessa partição.

Se uma extensão de comutador extensível exigir mais espaço confiável para inspecionar os dados do pacote, ela deverá seguir estas etapas:

  1. A extensão deve duplicar a estrutura NET_BUFFER_LIST do pacote alocando uma estrutura de NET_BUFFER_LIST e NET_BUFFER . Em seguida, a extensão chama NdisCopyFromNetBufferToNetBuffer para duplicar a estrutura de NET_BUFFER do pacote. Se essa função for concluída com êxito, os dados do pacote serão copiados para a memória confiável.
  2. A extensão deve chamar CopyNetBufferListInfo para copiar os dados OOB do pacote para o pacote duplicado.
  3. Depois que o pacote original tiver sido duplicado, a extensão deverá obter a união NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO no pacote duplicado usando a macro NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL . A extensão deve definir o membro IsPacketDataSafe como TRUE.
Para obter mais informações sobre como duplicar pacotes na interface de comutador extensível, consulte Originando o tráfego de pacotes.

Requisitos

Requisito Valor
Cliente mínimo com suporte Com suporte no NDIS 6.30 e posterior.
Cabeçalho ndis.h (inclua Ndis.h)

Confira também

Extensões de encaminhamento

Encaminhando pacotes para portas de comutador extensível do Hyper-V

Encaminhando pacotes para adaptadores de rede física

GetNetBufferListDestinations

Encaminhamento híbrido

NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY

NDIS_SWITCH_PORT_DESTINATION

NET_BUFFER_LIST

NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL

Visão geral do comutador extensível do Hyper-V