

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Fazer portabilidade da Network Transport Interface
<a name="afr-porting-network-transport-interface"></a>

## Integração da biblioteca TLS
<a name="afr-porting-tls"></a>

Para autenticação Transport Layer Security (TLS), use a pilha TLS de sua preferência. Recomendamos usar o [Mbed TLS](https://tls.mbed.org/) porque ele é testado com bibliotecas FreeRTOS. Você pode encontrar um exemplo disso neste [GitHub](https://github.com/FreeRTOS/FreeRTOS)repositório.

Independentemente da implementação de TLS usada pelo seu dispositivo, você deve implementar os ganchos de transporte subjacentes para TLS pilha com pilha. TCP/IP Eles devem oferecer suporte aos [pacotes de criptografia TLS que são compatíveis com o AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/transport-security.html#tls-cipher-suite-support).

## Fazer portabilidade da biblioteca Network Transport Interface
<a name="network-intro"></a>

Você deve implementar uma interface de transporte de rede para usar [coreMQTT](https://www.freertos.org/mqtt/index.html) e [coreHTTP](https://www.freertos.org/http/index.html). A interface de transporte de rede contém ponteiros de função e dados de contexto necessários para enviar e receber dados em uma única conexão de rede. Consulte [Interface de transporte](https://www.freertos.org/network-interface.html) para obter mais detalhes. O FreeRTOS fornece um conjunto de testes integrados de interface de transporte de rede para validar essas implementações. A seção a seguir orienta você sobre como configurar seu projeto para executar esses testes. 

## Pré-requisitos
<a name="prereqs"></a>

Para fazer a portabilidade desse teste, é necessário:
+ Um projeto com um sistema de compilação que pode criar o FreeRTOS com uma porta validada do kernel do FreeRTOS.
+ Implementação funcional de drivers de rede.

## Portabilidade
<a name="porting-network-transport-interface"></a>
+ Adicione [ FreeRTOS-Libraries-Integration-Tests](https://github.com/FreeRTOS/FreeRTOS-Libraries-Integration-Tests)como um submódulo ao seu projeto. Não importa onde o submódulo será colocado no projeto, desde que ele possa ser compilado.
+ Copie `config_template/test_execution_config_template.h` e `config_template/test_param_config_template.h` para um local do projeto no caminho de compilação e renomeie-os para `test_execution_config.h` e `test_param_config.h`.
+ Inclua os arquivos relevantes no sistema de compilação. Se estiver usando `CMake`, `qualification_test.cmake` e `src/transport_interface_tests.cmake` são usados para incluir os arquivos relevantes.
+ Implemente as seguintes funções em um local apropriado do projeto:
+ 
  + R`network connect function`: a assinatura é definida por `NetworkConnectFunc` em `src/common/network_connection.h`. Essa função usa um ponteiro para o contexto da rede, um ponteiro para as informações do host e um ponteiro para as credenciais da rede. Ela estabelece uma conexão com o servidor especificado nas informações do host com as credenciais de rede fornecidas.
  + R`network disconnect function`: a assinatura é definida por `NetworkDisconnectFunc` em `src/common/network_connection.h`. Essa função usa um ponteiro para um contexto de rede. Ela desconecta uma conexão previamente estabelecida armazenada no contexto da rede.
  + `setupTransportInterfaceTestParam()`: esta API é definida em `src/transport_interface/transport_interface_tests.h`. A implementação deve ter exatamente o mesmo nome e assinatura definidos em `transport_interface_tests.h`. Essa função recebe um ponteiro para uma *TransportInterfaceTestParam*estrutura. Ele preencherá os campos na *TransportInterfaceTestParam*estrutura usada pelo teste da interface de transporte.
+ Implemente **UNITY\_OUTPUT\_CHAR** para que os logs de saída do teste não intercalem com os logs do dispositivo.
+ Chame `runQualificationTest()` da aplicação. O hardware do dispositivo deve ser inicializado corretamente e a rede deve estar conectada antes da chamada.

### Gerenciamento de credenciais (chave gerada no dispositivo)
<a name="cred-management-key"></a>

Quando **FORCE\_GENERATE\_NEW\_KEY\_PAIR** em `test_param_config.h` é definido como 1, a aplicação do dispositivo gera um novo par de chaves no dispositivo e gera a chave pública. A aplicação do dispositivo usa **ECHO\_SERVER\_ROOT\_CA** e **TRANSPORT\_CLIENT\_CERTIFICATE** como certificado da CA raiz do servidor echo e do cliente ao estabelecer uma conexão TLS com o servidor echo. O IDT define esses parâmetros durante a execução da qualificação. 

### Gerenciamento de credenciais (chave de importação)
<a name="cred-management-importing-key"></a>

A aplicação do dispositivo usa **ECHO\_SERVER\_ROOT\_CA**, **TRANSPORT\_CLIENT\_CERTIFICATE** e **TRANSPORT\_CLIENT\_PRIVATE\_KEY** em `test_param_config.h` como certificado da CA raiz do servidor echo, certificado de cliente e chave privada de cliente ao estabelecer uma conexão TLS com o servidor echo. O IDT define esses parâmetros durante a execução da qualificação.

## Teste
<a name="testing-transport-interface"></a>

Esta seção descreve como você pode testar localmente a interface de transporte com os testes de qualificação. Detalhes adicionais podem ser encontrados no README.md arquivo fornecido na seção [transport\_interface](https://github.com/FreeRTOS/FreeRTOS-Libraries-Integration-Tests/tree/main/src/transport_interface) do FreeRTOS-Libraries-Integration-Tests on. GitHub

Como alternativa, você também pode usar o IDT para automatizar a execução. Consulte o [AWS IoT Device Tester para o FreeRTOS](https://docs.aws.amazon.com/freertos/latest/userguide/device-tester-for-freertos-ug.html) no *Guia do usuário do FreeRTOS * para obter detalhes.

### Habilitação do teste
<a name="enabling-test"></a>

Abra `test_execution_config.h` e defina **TRANSPORT\_INTERFACE\_TEST\_ENABLED** como 1.

### Configuração do servidor echo para testes
<a name="configuring-echo-server-test"></a>

É necessário ter um servidor echo acessível a partir do dispositivo que executa os testes para fazer testes locais. O servidor echo deve oferecer suporte ao TLS se a implementação da interface de transporte oferecer suporte ao TLS. Se você ainda não tiver um, o [ FreeRTOS-Libraries-Integration-Tests](https://github.com/FreeRTOS/FreeRTOS-Libraries-Integration-Tests/tree/main/tools/echo_server) GitHub repositório tem uma implementação de servidor de eco.

### Configuração do projeto para teste
<a name="configure-project"></a>

Em `test_param_config.h`, atualize **ECHO\_SERVER\_ENDPOINT** e **ECHO\_SERVER\_PORT** para a configuração do endpoint e do servidor na etapa anterior.

### Credenciais de configuração (chave gerada no dispositivo)
<a name="setup-credentials-device-key"></a>
+ Defina **ECHO\_SERVER\_ROOT\_CA** como o certificado do servidor echo.
+ Defina **FORCE\_GENERATE\_NEW\_KEY\_PAIR** como 1 para gerar um par de chaves e obter a chave pública.
+ Defina **FORCE\_GENERATE\_NEW\_KEY\_PAIR** como 0 novamente após a geração da chave.
+ Use a chave pública e do servidor e o certificado para gerar o certificado do cliente.
+ Defina **TRANSPORT\_CLIENT\_CERTIFICATE** como o certificado de cliente gerado.

### Credenciais de configuração (chave de importação)
<a name="setup-credentials-import-key"></a>
+ Defina **ECHO\_SERVER\_ROOT\_CA** como o certificado do servidor echo.
+ Defina **TRANSPORT\_CLIENT\_CERTIFICATE** como o certificado de cliente pré-gerado.
+ Defina **TRANSPORT\_CLIENT\_PRIVATE\_KEY** como a chave privada pré-gerada do cliente.

### Compilação e instalação da aplicação
<a name="build-flash"></a>

Compile e instale a aplicação usando a cadeia de ferramentas de sua escolha. Quando `runQualificationTest()` for invocado, os testes da interface de transporte serão executados. Os resultados do teste são emitidos para a porta serial.

**nota**  
Para qualificar oficialmente um dispositivo para FreeRTOS, você deve validar o código-fonte portado do dispositivo em relação aos grupos de teste OTA PAL e OTA E2E com. AWS IoT Device Tester Siga as instruções em [Usando o FreeRTOS no Guia do Usuário do FreeRTOS AWS IoT Device Tester para](https://docs.aws.amazon.com/freertos/latest/userguide/device-tester-for-freertos-ug.html) *configurar a validação de portas*. AWS IoT Device Tester Para testar a porta de uma biblioteca específica, o grupo de teste correto deve estar habilitado no `device.json` arquivo na AWS IoT Device Tester `configs` pasta.