Interface de Programação de Rede
Uma Interface de Programação de Rede, ou NPI, define a interface entre módulos de rede que podem ser anexados uns aos outros. Um módulo cliente registrado como um cliente de uma NPI específica só pode ser anexado a módulos de provedor registrados como provedores da mesma NPI. Da mesma forma, um módulo de provedor registrado como um provedor de uma NPI específica só pode ser anexado a módulos cliente registrados como clientes da mesma NPI.
Cada NPI define os seguintes itens:
Um identificador de NPI que identifica exclusivamente a NPI. Um módulo de rede especifica um identificador de NPI para indicar a NPI específica que ele dá suporte quando o módulo de rede se registra no NMR (Registrador de Módulos de Rede). Um módulo de rede pode dar suporte a vários NPIs registrando-se com a NMR várias vezes, uma vez para cada NPI compatível. O NMR iniciará a anexação de um módulo cliente a um módulo do provedor somente se ambos derem suporte à mesma NPI.
Uma estrutura opcional de características do cliente que especifica as características específicas de NPI de cada módulo cliente. Essas características específicas de NPI podem incluir itens como qual versão (ou versões) da NPI que um módulo cliente dá suporte ou quais endereços a família ou protocolo um módulo de cliente requer. Um módulo do provedor pode usar as informações contidas na estrutura de características do cliente de um módulo cliente para determinar se ele será anexado ao módulo cliente. Se uma NPI não definir nenhuma característica de cliente específica de NPI, essa estrutura não será necessária.
Uma estrutura de características do provedor opcional que especifica as características específicas de NPI de cada módulo do provedor. Essas características específicas de NPI podem incluir itens como qual versão (ou versões) da NPI que um módulo de provedor dá suporte ou que aborda famílias ou protocolos que um módulo de provedor dá suporte. Um módulo cliente pode usar as informações contidas na estrutura de características do cliente de um módulo de provedor para determinar se ele será anexado ao módulo do provedor. Se uma NPI não definir nenhuma característica de provedor específica de NPI, essa estrutura não será necessária.
Zero ou mais funções de retorno de chamada do módulo cliente. Depois que um módulo do provedor for anexado com êxito a um módulo cliente, o módulo do provedor poderá acessar a funcionalidade do módulo cliente chamando as funções de retorno de chamada do módulo cliente.
Uma ou mais funções de módulo do provedor. Depois que um módulo cliente for anexado com êxito a um módulo do provedor, o módulo cliente poderá acessar a funcionalidade do módulo do provedor chamando as funções do módulo do provedor.
Uma estrutura de tabela de expedição de cliente que contém ponteiros de função para cada uma das funções de retorno de chamada do módulo cliente. Se uma NPI não definir nenhuma função de retorno de chamada do módulo cliente, essa estrutura não será necessária.
Uma estrutura de tabela de expedição do provedor que contém ponteiros de função para cada uma das funções de módulo do provedor.
Um módulo cliente que dá suporte a uma NPI específica usa os itens definidos pela NPI para implementar o lado do cliente da interface. Da mesma forma, um módulo de provedor que dá suporte a uma NPI específica usa os itens definidos pela NPI para implementar o lado do provedor da interface.
Todos os itens definidos por uma NPI são opacos para o NMR, exceto para o identificador de NPI. O NMR usa o identificador NPI para determinar quais módulos de cliente devem ser anexados a quais módulos de provedor.