주소 할당
요약
소개:
인터페이스에는 많은 상호 종속 항목이 있고 기기 구성에 따라 서로 다른 TCP/IP 주소 및 경로 할당이 필요할 수 있으므로 IP 주소와 경로 할당을 제어하는 로직을 단일 모듈로 통합하는 것이 중요하다고 여겨졌습니다. WARM은 TCP/IP 주소 및 Weave 관련 IP 인터페이스가 활성<->비활성에서 전환될 때 올바르게 추가 및 제거하는 목적으로 사용됩니다.
WARM은 WearProjectConfig.h 및 WarmConfig.h를 통해 컴파일 시간에 구성되도록 고안되었습니다. HotProjectConfig.h는 WARM을 실행할 기기에서 지원되는 기능을 정확하게 반영해야 합니다.
WARM은 TCP/IP 스택 및 스레드 인터페이스가 구성되는 방식에 대한 종속성을 제한하는 이식 가능한 모듈입니다. 이를 위해 WARM은 플랫폼 통합자가 구현해야 하는 플랫폼 API 집합을 사용합니다. 또한 플랫폼 통합자는 플랫폼 코드베이스 내의 적절한 실행 지점에서 다양한 nl::Warm API 호출을 실행해야 합니다.
작동 이론:
플랫폼 코드베이스는 nl::Warm API를 호출하여 Wi-Fi 인터페이스나 스레드 인터페이스 같은 관련 기능의 상태 변경을 알립니다. 이러한 nl::Warm API를 호출하면 WARM에서 Platform::RequestInvokeActions()를 호출할 수 있습니다. Warm::InvokeActions()를 호출하는 필수 작업을 수행하려면 Platform::RequestInvokeActions()를 구현해야 합니다. 이 프로세스는 언뜻 보기에 불필요하게 간접적으로 표시될 수 있습니다. WARM에서 InvokeActions를 직접 호출하지 않는 이유는 무엇인가요? 이 질문에 대한 답변은 멀티태스킹 시스템의 모든 작업이 nl::Warm State Change API를 호출할 수 있도록 허용하고 특정 작업만 Platform:: API를 호출하도록 메커니즘을 제공하는 것입니다. 플랫폼 요구사항을 고려한 후 플랫폼 통합자는 Platform::RequestInvokeActions()를 구현하여 Warm::InvokeActions()를 호출하여 반응하는 적절한 작업에 이벤트를 게시하도록 선택할 수 있습니다. 특정 플랫폼에 이러한 멀티태스킹 문제가 없다고 판단되면 Platform::RequestInvokeActions()를 구현하여 Warm::InvokeActions()를 직접 호출할 수 있습니다.
Warm::InvokeActions()는 WARM 로직이 현재 시스템 상태를 검사하고 필요한 Platform:: API를 호출하여 주소 및 라우팅 상태를 시스템 및 구성 상태에 맞게 가져옵니다. 이러한 호출은 사전 정의된 순서대로 이루어지며, 이러한 API가 kPlatformResultInProgress를 반환하면 순서가 지정된 목록의 실행이 정지되고 종료됩니다. 또한, 이러한 API 중 하나가 kPlatformResultInProgress를 반환하면 작업이 비동기식으로 완료되고 WARM 로직은 작업이 완료될 때까지 기다려야 한다고 해석됩니다. 작업이 완료되면 플랫폼 코드는 Warm::ReportActionComplete()를 호출하여 kPlatformResultSuccess 또는 kPlatformResultFailure의 결과를 전달해야 합니다. 이 호출을 수신하면 WARM 로직은 정렬된 작업 목록의 실행을 다시 시작하기 위해 Platform::RequestInvokeActions()를 다시 호출합니다.
이렇게 하면 WARM이 자체 작업을 필요로 하지 않고 대신 다른 작업을 사용하여 적절히 따뜻하게 호출할 수 있습니다. 또한 모든 작업은 하나 이상의 System State change API를 호출할 수 있으므로 통합이 간소화됩니다.