Partilhar via


Recebendo notificação de alterações

Muitos clientes podem atualizar simultaneamente a tabela de roteamento e os clientes devem ser notificados quando ocorrem alterações nas informações de roteamento. Por exemplo, um cliente que não é notificado sobre as alterações de outro cliente na tabela de roteamento pode anunciar informações de rota desatualizadas. Isso pode ser impedido por clientes de programação de se registrarem no gerenciador de tabelas de roteamento para serem notificados sobre as alterações na tabela de roteamento. O gerenciador de tabelas de roteamento envia notificações de alterações para todos os clientes que se registram para recebê-las.

A notificação de alteração se aplica somente aos destinos. Não há como consultar o gerenciador de tabelas de roteamento para obter alterações em uma rota específica.

Quando uma alteração é feita em uma das rotas para um destino, o gerenciador de tabelas de roteamento envia uma notificação de que ocorreu uma alteração. Essa notificação vai somente para os clientes que se registraram no gerenciador de tabelas de roteamento para o tipo de alteração que ocorreu. Todas as alterações nas informações de roteamento no gerenciador de tabelas de roteamento ocorrem em um ou mais modos de exibição e as mensagens de notificação de alteração podem ser solicitadas em qualquer subconjunto de exibições com suporte.

Atualmente, há três tipos de notificações de alteração para os quais um cliente pode se registrar:

  • Notificação de qualquer alteração nas rotas para o destino. Essa solicitação é feita usando o sinalizador RTM_CHANGE_TYPE_ALL.

  • Notificação se a melhor rota para o destino for alterada ou se qualquer uma das seguintes informações para a melhor rota atual for alterada:

    • Preferência
    • Próximos saltos
    • Sinalizadores de rota

    Essa solicitação é feita usando o sinalizador RTM_CHANGE_TYPE_BEST.

  • Notificação de todas as alterações do tipo RTM_CHANGE_TYPE_BEST, exceto alterações em sinalizadores de não encaminhamento na melhor rota. Por exemplo, o gerenciador de roteador aguarda alterações desse tipo no modo de exibição unicast e atualiza as informações no encaminhador unicast. Essa solicitação é feita usando o sinalizador RTM_CHANGE_TYPE_FORWARDING.

As solicitações de notificações de alterações também podem ser restritas a um subconjunto de destinos registrando-se para notificações de alterações somente para destinos "marcados". O cliente pode marcar um destino para notificação de alteração chamando RtmMarkDestForChangeNotification.

Quando ocorre uma alteração, o gerenciador de tabelas de roteamento verifica se há clientes que devem ser notificados sobre essa alteração. Um cliente deverá ser notificado de uma alteração se todas as seguintes condições forem atendidas:

  • O tipo de alteração que ocorreu é um tipo para o qual o cliente se registrou para notificação
  • Alterações em um destino marcado pelo cliente ocorreram ou em qualquer destino, se o cliente solicitou alterações para todos os destinos
  • O cliente solicitou uma notificação de alteração para o modo de exibição no qual essa alteração ocorreu

Se a alteração atender a todos os critérios acima, a alteração será armazenada em cache e o cliente será notificado.

A notificação não especifica quais são as alterações reais, apenas que elas ocorreram. O cliente deve recuperar as alterações chamando RtmGetChangedDests usando o identificador de notificação obtido de uma chamada anterior para RtmRegisterForChangeNotification.